;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
+ cmpi r6, 0x80
+ brlt- vm_possign
+ ldis r7, 0xFF00
+ add r6, r6, r7
+vm_possign:
;pc += data
add r2, r2, r6
br+ vm_loop