aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-06-15 13:48:33 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-06-15 13:48:33 +0200
commit735a5d97ca8fd1153f9c16e154ca591caf29d691 (patch)
treed1262a118044a134b3562aae0fbaf67bddc89692
parentbb6de50b5f0a80c2ad5d2ae1eea976dd63cd143a (diff)
Test Reset
-rw-r--r--eval.go32
-rw-r--r--eval_test.go8
2 files changed, 22 insertions, 18 deletions
diff --git a/eval.go b/eval.go
index c7277be..d9c0e6c 100644
--- a/eval.go
+++ b/eval.go
@@ -27,15 +27,6 @@ func (vm *J1) Reset() {
vm.rsp = 0
}
-func (vm *J1) String() string {
- var rstack [32]uint16
- for i, v := range vm.rstack {
- rstack[i] = v << 1
- }
- return fmt.Sprintf("PC=%0.4X ST=%0.4X D=%0.4X R=%0.4X",
- vm.pc<<1, vm.st0, vm.dstack[:vm.dsp+1], rstack[:vm.rsp+1])
-}
-
// LoadBytes into memory
func (vm *J1) LoadBytes(data []byte) error {
size := len(data) >> 1
@@ -61,18 +52,23 @@ func (vm *J1) Eval() {
for range ticker.C {
ins := Decode(vm.memory[vm.pc])
if ins == Jump(0) {
- break
+ return
}
vm.eval(ins)
- var rstack [32]uint16
- for i, v := range vm.rstack {
- rstack[i] = v << 1
- }
- fmt.Printf("%v\n", ins)
- fmt.Printf("\tPC=%0.4X ST=%0.4X\n", vm.pc<<1, vm.st0)
- fmt.Printf("\tD=%0.4X\n", vm.dstack[:vm.dsp+1])
- fmt.Printf("\tR=%0.4X\n", rstack[:vm.rsp+1])
+ fmt.Println(ins)
+ fmt.Println(vm)
+ }
+}
+
+func (vm *J1) String() string {
+ var rstack [32]uint16
+ for i, v := range vm.rstack {
+ rstack[i] = v << 1
}
+ s := fmt.Sprintf("\tPC=%0.4X ST=%0.4X\n", vm.pc<<1, vm.st0)
+ s += fmt.Sprintf("\tD=%0.4X\n", vm.dstack[:vm.dsp+1])
+ s += fmt.Sprintf("\tR=%0.4X\n", rstack[:vm.rsp+1])
+ return s
}
func (vm *J1) eval(ins Instruction) {
diff --git a/eval_test.go b/eval_test.go
index 98742fd..0982d80 100644
--- a/eval_test.go
+++ b/eval_test.go
@@ -151,3 +151,11 @@ func TestLoadBytes(t *testing.T) {
t.Errorf("got %v, want %v", j1.memory[:2], expect)
}
}
+
+func TestRest(t *testing.T) {
+ vm := &J1{pc: 100, dsp: 2, rsp: 3, st0: 5}
+ vm.Reset()
+ if vm.pc != 0 || vm.dsp != 0 || vm.rsp != 0 || vm.st0 != 0 {
+ t.Errorf("got %v", vm)
+ }
+}