Absolute Jump instruction (JAB). It receives one parameter: either a target or a fixed number. Contrary to MOV SRC PC which effectively jumps to SRC+1, JAB SRC jumps exactly to SRC.
MOV is now able to operate on labels, treating them as PC indices corresponding to their location.
These two changes allow for simpler function implementations, see an example function that multiplies input arg by two:
Before this commit:
#DEFINE KEYPAD DOWN
#DEFINE STACK UP
BEGIN:
MOV KEYPAD ACC
SAV
MOV PC ACC
ADD 5
MOV ACC STACK
SWP
MOV ACC STACK
JMP MUL2
MOV STACK ACC
JMP BEGIN
MUL2:
MOV STACK ACC
MUL 2
SAV
MOV STACK ACC
SWP
MOV ACC STACK
SWP
SUB PC
JRO ACC
After:
#DEFINE KEYPAD DOWN
#DEFINE STACK UP
BEGIN:
MOV KEYPAD STACK
MOV MUL2_RET STACK
JMP MUL2
MUL2_RET:
MOV STACK ACC
JMP BEGIN
MUL2:
MOV STACK ACC
SAV
MOV STACK ACC
MUL 2
MOV ACC STACK
SWP
JAB ACC
This commit adds two changes:
These two changes allow for simpler function implementations, see an example function that multiplies input arg by two:
Before this commit:
After: