jump has still a bug, more bugs not know till know
but only tested till the first jump :P
inputdata:
;8 * 8 4
.fill 1, 0x382A3834
-;8 * X 1
-.fill 1, 0x382A5831
;1 X * 8
.fill 1, 0x31582A38
-;- X D +
-.fill 1, 0x2D58442B
;+ D X -
.fill 1, 0x2B44582D
;P \xF8 J D
.fill 1, 0x50F84A44
-;6 8 * +
-.fill 1, 0x36382A2B
;+ * 8 6
.fill 1, 0x2B2A3836
-;D I \020 \000
-.fill 1, 0x44492000
;\000 \020 I D
.fill 1, 0x00204944
-;\000 \000 < ~
-.fill 1, 0x00003C7E
;~ < \000 \000
.fill 1, 0x7E3C0000
;8 P \005 J
.text
main:
ldi r1, inputdata
+
+ ldw r0, 0(r2)
+
call+ vm
br+ main
vm:
+ ;r0 ... lut address (can be overwritten)
;r1 ... addr to input
;r2 ... pc
;r3 ... effective stack address
add r4, r1, r2
;load input
ldb r5, 0(r4)
+ ;we need to multiply input by 4 to get correct address offset
+ lls r0, r5, 2
+ ;calc position in jumptable
+ ldw r0, jumptable(r0)
;jump to instr
- brr r5
+ brr r0
vm_eof:
;load stack[sp-1]
.data
jumptable:
;0
-.fill 0, vm_eof
+.fill 1, vm_eof
.fill 40, vm_default
;42
.fill 1, vm_mul