aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-06-05 12:17:00 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-06-05 12:17:00 +0200
commit4d6d0c7ffc28733b3466f03d1ef10bf36fd4075b (patch)
tree4442893fcdfb99a8d7ccd9cef6282aeed8ab2179
parentf713dc900328db88e32ade374d932748153da328 (diff)
...
-rw-r--r--eval.go21
1 files changed, 12 insertions, 9 deletions
diff --git a/eval.go b/eval.go
index 3c2efda..0caeaa0 100644
--- a/eval.go
+++ b/eval.go
@@ -47,6 +47,8 @@ func (vm *J1) Eval() {
break
}
vm.eval(ins)
+ fmt.Println(ins)
+ fmt.Println(vm)
}
}
@@ -70,25 +72,25 @@ func (vm *J1) eval(ins Instruction) {
vm.rsp += 1
next = uint16(v)
case ALU:
- vm.dsp = uint16(int8(vm.dsp) + v.Ddir)
- vm.rsp = uint16(int8(vm.rsp) + v.Rdir)
+ if v.RtoPC {
+ next = vm.rstack[vm.rsp]
+ }
if v.NtoAtT {
vm.memory[vm.st0] = vm.dstack[vm.dsp]
}
+
+ vm.st0 = vm.newST0(v)
+
+ vm.dsp = uint16(int8(vm.dsp) + v.Ddir)
+ vm.rsp = uint16(int8(vm.rsp) + v.Rdir)
if v.TtoR {
vm.rstack[vm.rsp] = vm.st0
}
if v.TtoN {
vm.dstack[vm.dsp] = vm.st0
}
- if v.RtoPC {
- next = vm.rstack[vm.rsp]
- }
- vm.st0 = vm.newST0(v)
}
vm.pc = next
- fmt.Println(ins)
- fmt.Println(vm)
}
func (vm *J1) newST0(v ALU) uint16 {
@@ -135,6 +137,7 @@ func (vm *J1) newST0(v ALU) uint16 {
return 1
}
return 0
+ default:
+ panic("invalid instruction")
}
- return 0
}