Hex | Mnemonic | Cycles | Condition |
---|---|---|---|
E4 ss | JCB #ss*1 | 8 | Carry=1 |
E5 ss | JNCB #ss*1 | 8 | Carry=0 |
E6 ss | JZB #ss*1 | 8 | Zero=1 |
E7 ss | JNZB #ss*1 | 8 | Zero=0 |
EC ss ss | JCW #ssss*1 | 12 | Carry=1 |
ED ss ss | JNCW #ssss*1 | 12 | Carry=0 |
EE ss ss | JZW #ssss*1 | 12 | Zero=1 |
EF ss ss | JNZW #ssss*1 | 12 | Zero=0 |
F1 ss | JMPB #ss*1 | 8 | None |
F3 ss ss | JMPW #ssss*1 | 12 | None |
F4 | JMP HL | 8 | None |
F5 ss | JDBNZ #ss | 16 | B <> 0x00, decrement B before check |
FD nn | JINT #nn | 8 | None |
CE E0 ss | JL #ss | 12 | (Overflow=1) != (Sign=1) |
CE E1 ss | JLE #ss | 12 | ((Overflow=0) != (Sign=0)) OR (Zero=1) |
CE E2 ss | JG #ss | 12 | ((Overflow=1) == (Sign=1)) AND (Zero=0) |
CE E3 ss | JGE #ss | 12 | (Overflow=0) == (Sign=0) |
CE E4 ss | JO #ss | 12 | Overflow=1 |
CE E5 ss | JNO #ss | 12 | Overflow=0 |
CE E6 ss | JNS #ss | 12 | Sign=0 |
CE E7 ss | JS #ss | 12 | Sign=1 |
CE E8 ss | JNX0 #ss | 12 | ?? |
CE E9 ss | JNX1 #ss | 12 | ?? |
CE EA ss | JNX2 #ss | 12 | ?? |
CE EB ss | JNX3 #ss | 12 | ?? |
CE EC ss | JX0 #ss | 12 | ?? |
CE ED ss | JX1 #ss | 12 | ?? |
CE EE ss | JX2 #ss | 12 | ?? |
CE EF ss | JX3 #ss | 12 | ?? |
*1: JMP, JC, JNC, JZ and JNZ can be used in the assembler to auto-detect the appropriate range.
#nn = Immediate unsigned 8-Bits
#ss = Immediate signed 8-Bits
#ssss = Immediate signed 16-Bits
B = Register B
U/V = Register U or V
HL = Register HL: (H shl 8) or L
SP = Register SP (Stack Pointer)
PC = Register PC (Program Counter)
[#nnnn] = Memory: (I shl 16) or #nnnn
; J*B #ss
IF (Condition) THEN
V = U
PC = PC + #ss - 1
ENDIF
; J*W #ssss
IF (Condition) THEN
V = U
PC = PC + #ssss - 1
ENDIF
; JMPB #ss
V = U
PC = PC + #ss - 1
; JMPW #ssss
V = U
PC = PC + #ssss - 1
; JMP HL
V = U
PC = HL
; JDBNZ #ss
B = B - 1
IF (B <> 0) THEN
V = U
PC = PC + #ss - 1
ENDIF
; JINT #nn (
not`` ``fully`` ``tested
)
V = U
PC = Memory16[#nn SHL 1]
Jump into a new position of the program.
NOTE: All non-branch instructions does "U = V" causing U to be restored, any branch that require banking needs "MOV U, A" or "MOV U, #nn" before JMP/J*...
'''0xF5 - JDBNZ #ss '''
Zero: Set when result is 0
Carry, Overflow and Sign remain unchanged
All others:
None
; A = 0x10
CMP`` ``A,`` ``0x10
; Compare A with 0x10
; F = (Zero=1):(Carry=0):(Overflow=0):(Sign=0)
JZ`` ``val_is_16
MOV`` ``A,`` ``0x00
val_is_16:
; A = 0x10
; Jump into a label located at a different bank
MOV`` ``U,`` ``$0F
JMP`` ``function_at_bank_15