.text
main:
- ldi r1, inputdata
-
- ldw r0, 0(r2)
+ ;set address of input
+ ldil r1, inputdata@lo
+ ldih r1, inputdata@hi
call+ vm
br+ main
;r4 ... effective input addr
;r5 ... input
- ;set pc to -4
+ ;set pc to -1
ldis r2, 0xFFFF
;load base address of stack
- ldi r3, stack
+ ldil r3, stack@lo
+ ldih r3, stack@hi
vm_default:
vm_loop:
;73
vm_imm:
;load new high byte
- ldb r6, 4(r2)
+ ldb r6, 4(r4)
;shift high byte
lls r6, r6, 8
;load 2nd byte
- ldb r7, 3(r2)
+ ldb r7, 3(r4)
;add to high byte
add r6, r6, r7
;shift
lls r6, r6, 8
;load
- ldb r7, 2(r2)
+ ldb r7, 2(r4)
;add
add r6, r6, r7
;shift
lls r6, r6, 8
;load
- ldb r7, 1(r2)
+ ldb r7, 1(r4)
;add
add r6, r6, r7
;store result to stack
stw r6, 0(r3)
;pc+4
addi r2, r2, 4
+ ;increment sp
+ addi r3, r3, 4
br+ vm_loop
;case J
addideq r2, r2, 1
breq+ vm_loop
;if != 0
+ ;set r6 to 0 (to clear upper bytes)
+ ldis r6, 0
;load pc+1 input
ldb r6, 1(r4)
;compare input with neg. max of 8 bit