I found one issue regarding the address calculation for rel jumps, three lines like this in z80_compile.c have undefined behaviour:
*iRAM++ = value2 - (iRAM - RAM) - 1;
and shall be written as:
*iRAM = value2 - (iRAM - RAM) - 1; iRAM++;
The diff below fixes also the error when writing RST 38h instead of RST 38 or RST 8. The 1st format is the one used in the Zilog Z80 user manual, so it should be supported.
diff --git a/z80_compile.c b/z80_compile.c
index 2ebbacf..926af49 100755
--- a/z80_compile.c
+++ b/z80_compile.c
@@ -377,7 +377,8 @@ RecalcListP op1Recalc,op2Recalc;
op2Recalc->adr = iRAM - RAM;
op2Recalc = nil; // Term eingesetzt
}
- *iRAM++ = value2 - (iRAM - RAM) - 1;
+ // undefined behaviour: *iRAM++ = value2 - (iRAM - RAM) - 1;
+ *iRAM = value2 - (iRAM - RAM) - 1; iRAM++;
} else if((op1 == 0x281)&&!op2) { // JR Adr
*iRAM++ = Op0_16;
if(op1Recalc) { // Ausdruck undefiniert?
@@ -385,7 +386,8 @@ RecalcListP op1Recalc,op2Recalc;
op1Recalc->adr = iRAM - RAM;
op1Recalc = nil; // Term eingesetzt
}
- *iRAM++ = value1 - (iRAM - RAM) - 1;
+ // undefined behaviour: *iRAM++ = value1 - (iRAM - RAM) - 1;
+ *iRAM = value1 - (iRAM - RAM) - 1; iRAM++;
} else
Error("Bedingung nicht erlaubt!");
break;
@@ -439,22 +441,28 @@ RecalcListP op1Recalc,op2Recalc;
case 8: i = 0x08;
break;
case 2:
- case 10:i = 0x10;
+ case 10:
+ case 0x10:i = 0x10;
break;
case 3:
- case 18:i = 0x18;
+ case 18:
+ case 0x18:i = 0x18;
break;
case 4:
- case 20:i = 0x20;
+ case 20:
+ case 0x20:i = 0x20;
break;
case 5:
- case 28:i = 0x28;
+ case 28:
+ case 0x28:i = 0x28;
break;
case 6:
- case 30:i = 0x30;
+ case 30:
+ case 0x30:i = 0x30;
break;
case 7:
- case 38:i = 0x38;
+ case 38:
+ case 0x38:i = 0x38;
break;
default:
Error("Nur 00,08,10,18,20,28,30,38 ist erlaubt!");
@@ -471,7 +479,8 @@ RecalcListP op1Recalc,op2Recalc;
op1Recalc->adr = iRAM - RAM;
op1Recalc = nil; // Term eingesetzt
}
- *iRAM++ = value1 - (iRAM - RAM) - 1; // relozieren
+ // undefined behaviour: *iRAM++ = value1 - (iRAM - RAM) - 1;
+ *iRAM = value1 - (iRAM - RAM) - 1; iRAM++; // relozieren
break;
case 0x0C: // EX: (SP),dreg oder DE,HL oder AF,AF'
if((op1 == 0x311)&&(op2 == 0x312)) // EX DE,HL
A final check of all documented opcodes passed, I did it by using this assembler code below (based on opcodes.txt), also this page helped a lot in the past:
opcodes.asm
```
NNNN EQU 1234H ; a sixteen bit number
NN EQU 56H ; an eight bit number
MM EQU 78H ; another eight bit number
NOP ; 00
LD BC,NNNN ; 01 34 12
LD (BC),A ; 02
INC BC ; 03
INC B ; 04
DEC B ; 05
LD B,NN ; 06 56
RLCA ; 07
EX AF,AF' ; 08
ADD HL,BC ; 09
LD A,(BC) ; 0A
DEC BC ; 0B
INC C ; 0C
DEC C ; 0D
LD C,NN ; 0E 56
RRCA ; 0F
DJNZ $+2 ; 10 00
LD DE,NNNN ; 11 34 12
LD (DE),A ; 12
INC DE ; 13
INC D ; 14
DEC D ; 15
LD D,NN ; 16 56
RLA ; 17
JR $+2 ; 18 00
ADD HL,DE ; 19
LD A,(DE) ; 1A
DEC DE ; 1B
INC E ; 1C
DEC E ; 1D
LD E,NN ; 1E 56
RRA ; 1F
JR NZ,$+2 ; 20 00
LD HL,NNNN ; 21 34 12
LD (NNNN),HL ; 22 34 12
INC HL ; 23
INC H ; 24
DEC H ; 25
LD H,NN ; 26 56
DAA ; 27
JR Z,$+2 ; 28 00
ADD HL,HL ; 29
LD HL,(NNNN) ; 2A 34 12
DEC HL ; 2B
INC L ; 2C
DEC L ; 2D
LD L,NN ; 2E 56
CPL ; 2F
JR NC,$+2 ; 30 00
LD SP,NNNN ; 31 34 12
LD (NNNN),A ; 32 34 12
INC SP ; 33
INC (HL) ; 34
DEC (HL) ; 35
LD (HL),NN ; 36 56
SCF ; 37
JR C,$+2 ; 38 00
ADD HL,SP ; 39
LD A,(NNNN) ; 3A 34 12
DEC SP ; 3B
INC A ; 3C
DEC A ; 3D
LD A,NN ; 3E 56
CCF ; 3F
LD B,B ; 40
LD B,C ; 41
LD B,D ; 42
LD B,E ; 43
LD B,H ; 44
LD B,L ; 45
LD B,(HL) ; 46
LD B,A ; 47
LD C,B ; 48
LD C,C ; 49
LD C,D ; 4A
LD C,E ; 4B
LD C,H ; 4C
LD C,L ; 4D
LD C,(HL) ; 4E
LD C,A ; 4F
LD D,B ; 50
LD D,C ; 51
LD D,D ; 52
LD D,E ; 53
LD D,H ; 54
LD D,L ; 55
LD D,(HL) ; 56
LD D,A ; 57
LD E,B ; 58
LD E,C ; 59
LD E,D ; 5A
LD E,E ; 5B
LD E,H ; 5C
LD E,L ; 5D
LD E,(HL) ; 5E
LD E,A ; 5F
LD H,B ; 60
LD H,C ; 61
LD H,D ; 62
LD H,E ; 63
LD H,H ; 64
LD H,L ; 65
LD H,(HL) ; 66
LD H,A ; 67
LD L,B ; 68
LD L,C ; 69
LD L,D ; 6A
LD L,E ; 6B
LD L,H ; 6C
LD L,L ; 6D
LD L,(HL) ; 6E
LD L,A ; 6F
LD (HL),B ; 70
LD (HL),C ; 71
LD (HL),D ; 72
LD (HL),E ; 73
LD (HL),H ; 74
LD (HL),L ; 75
HALT ; 76
LD (HL),A ; 77
LD A,B ; 78
LD A,C ; 79
LD A,D ; 7A
LD A,E ; 7B
LD A,H ; 7C
LD A,L ; 7D
LD A,(HL) ; 7E
LD A,A ; 7F
ADD A,B ; 80
ADD A,C ; 81
ADD A,D ; 82
ADD A,E ; 83
ADD A,H ; 84
ADD A,L ; 85
ADD A,(HL) ; 86
ADD A,A ; 87
ADC A,B ; 88
ADC A,C ; 89
ADC A,D ; 8A
ADC A,E ; 8B
ADC A,H ; 8C
ADC A,L ; 8D
ADC A,(HL) ; 8E
ADC A,A ; 8F
SUB B ; 90
SUB C ; 91
SUB D ; 92
SUB E ; 93
SUB H ; 94
SUB L ; 95
SUB (HL) ; 96
SUB A ; 97
SBC B ; 98
SBC C ; 99
SBC D ; 9A
SBC E ; 9B
SBC H ; 9C
SBC L ; 9D
SBC (HL) ; 9E
SBC A ; 9F
AND B ; A0
AND C ; A1
AND D ; A2
AND E ; A3
AND H ; A4
AND L ; A5
AND (HL) ; A6
AND A ; A7
XOR B ; A8
XOR C ; A9
XOR D ; AA
XOR E ; AB
XOR H ; AC
XOR L ; AD
XOR (HL) ; AE
XOR A ; AF
OR B ; B0
OR C ; B1
OR D ; B2
OR E ; B3
OR H ; B4
OR L ; B5
OR (HL) ; B6
OR A ; B7
CP B ; B8
CP C ; B9
CP D ; BA
CP E ; BB
CP H ; BC
CP L ; BD
CP (HL) ; BE
CP A ; BF
RET NZ ; C0
POP BC ; C1
JP NZ,NNNN ; C2 34 12
JP NNNN ; C3 34 12
CALL NZ,NNNN ; C4 34 12
PUSH BC ; C5
ADD A,NN ; C6 56
RST 0 ; C7
RET Z ; C8
RET ; C9
JP Z,NNNN ; CA 34 12
RLC B ; CB 00
RLC C ; CB 01
RLC D ; CB 02
RLC E ; CB 03
RLC H ; CB 04
RLC L ; CB 05
RLC (HL) ; CB 06
RLC A ; CB 07
RRC B ; CB 08
RRC C ; CB 09
RRC D ; CB 0A
RRC E ; CB 0B
RRC H ; CB 0C
RRC L ; CB 0D
RRC (HL) ; CB 0E
RRC A ; CB 0F
RL B ; CB 10
RL C ; CB 11
RL D ; CB 12
RL E ; CB 13
RL H ; CB 14
RL L ; CB 15
RL (HL) ; CB 16
RL A ; CB 17
RR B ; CB 18
RR C ; CB 19
RR D ; CB 1A
RR E ; CB 1B
RR H ; CB 1C
RR L ; CB 1D
RR (HL) ; CB 1E
RR A ; CB 1F
SLA B ; CB 20
SLA C ; CB 21
SLA D ; CB 22
SLA E ; CB 23
SLA H ; CB 24
SLA L ; CB 25
SLA (HL) ; CB 26
SLA A ; CB 27
SRA B ; CB 28
SRA C ; CB 29
SRA D ; CB 2A
SRA E ; CB 2B
SRA H ; CB 2C
SRA L ; CB 2D
SRA (HL) ; CB 2E
SRA A ; CB 2F
SRL B ; CB 38
SRL C ; CB 39
SRL D ; CB 3A
SRL E ; CB 3B
SRL H ; CB 3C
SRL L ; CB 3D
SRL (HL) ; CB 3E
SRL A ; CB 3F
BIT 0,B ; CB 40
BIT 0,C ; CB 41
BIT 0,D ; CB 42
BIT 0,E ; CB 43
BIT 0,H ; CB 44
BIT 0,L ; CB 45
BIT 0,(HL) ; CB 46
BIT 0,A ; CB 47
BIT 1,B ; CB 48
BIT 1,C ; CB 49
BIT 1,D ; CB 4A
BIT 1,E ; CB 4B
BIT 1,H ; CB 4C
BIT 1,L ; CB 4D
BIT 1,(HL) ; CB 4E
BIT 1,A ; CB 4F
BIT 2,B ; CB 50
BIT 2,C ; CB 51
BIT 2,D ; CB 52
BIT 2,E ; CB 53
BIT 2,H ; CB 54
BIT 2,L ; CB 55
BIT 2,(HL) ; CB 56
BIT 2,A ; CB 57
BIT 3,B ; CB 58
BIT 3,C ; CB 59
BIT 3,D ; CB 5A
BIT 3,E ; CB 5B
BIT 3,H ; CB 5C
BIT 3,L ; CB 5D
BIT 3,(HL) ; CB 5E
BIT 3,A ; CB 5F
BIT 4,B ; CB 60
BIT 4,C ; CB 61
BIT 4,D ; CB 62
BIT 4,E ; CB 63
BIT 4,H ; CB 64
BIT 4,L ; CB 65
BIT 4,(HL) ; CB 66
BIT 4,A ; CB 67
BIT 5,B ; CB 68
BIT 5,C ; CB 69
BIT 5,D ; CB 6A
BIT 5,E ; CB 6B
BIT 5,H ; CB 6C
BIT 5,L ; CB 6D
BIT 5,(HL) ; CB 6E
BIT 5,A ; CB 6F
BIT 6,B ; CB 70
BIT 6,C ; CB 71
BIT 6,D ; CB 72
BIT 6,E ; CB 73
BIT 6,H ; CB 74
BIT 6,L ; CB 75
BIT 6,(HL) ; CB 76
BIT 6,A ; CB 77
BIT 7,B ; CB 78
BIT 7,C ; CB 79
BIT 7,D ; CB 7A
BIT 7,E ; CB 7B
BIT 7,H ; CB 7C
BIT 7,L ; CB 7D
BIT 7,(HL) ; CB 7E
BIT 7,A ; CB 7F
RES 0,B ; CB 80
RES 0,C ; CB 81
RES 0,D ; CB 82
RES 0,E ; CB 83
RES 0,H ; CB 84
RES 0,L ; CB 85
RES 0,(HL) ; CB 86
RES 0,A ; CB 87
RES 1,B ; CB 88
RES 1,C ; CB 89
RES 1,D ; CB 8A
RES 1,E ; CB 8B
RES 1,H ; CB 8C
RES 1,L ; CB 8D
RES 1,(HL) ; CB 8E
RES 1,A ; CB 8F
RES 2,B ; CB 90
RES 2,C ; CB 91
RES 2,D ; CB 92
RES 2,E ; CB 93
RES 2,H ; CB 94
RES 2,L ; CB 95
RES 2,(HL) ; CB 96
RES 2,A ; CB 97
RES 3,B ; CB 98
RES 3,C ; CB 99
RES 3,D ; CB 9A
RES 3,E ; CB 9B
RES 3,H ; CB 9C
RES 3,L ; CB 9D
RES 3,(HL) ; CB 9E
RES 3,A ; CB 9F
RES 4,B ; CB A0
RES 4,C ; CB A1
RES 4,D ; CB A2
RES 4,E ; CB A3
RES 4,H ; CB A4
RES 4,L ; CB A5
RES 4,(HL) ; CB A6
RES 4,A ; CB A7
RES 5,B ; CB A8
RES 5,C ; CB A9
RES 5,D ; CB AA
RES 5,E ; CB AB
RES 5,H ; CB AC
RES 5,L ; CB AD
RES 5,(HL) ; CB AE
RES 5,A ; CB AF
RES 6,B ; CB B0
RES 6,C ; CB B1
RES 6,D ; CB B2
RES 6,E ; CB B3
RES 6,H ; CB B4
RES 6,L ; CB B5
RES 6,(HL) ; CB B6
RES 6,A ; CB B7
RES 7,B ; CB B8
RES 7,C ; CB B9
RES 7,D ; CB BA
RES 7,E ; CB BB
RES 7,H ; CB BC
RES 7,L ; CB BD
RES 7,(HL) ; CB BE
RES 7,A ; CB BF
SET 0,B ; CB C0
SET 0,C ; CB C1
SET 0,D ; CB C2
SET 0,E ; CB C3
SET 0,H ; CB C4
SET 0,L ; CB C5
SET 0,(HL) ; CB C6
SET 0,A ; CB C7
SET 1,B ; CB C8
SET 1,C ; CB C9
SET 1,D ; CB CA
SET 1,E ; CB CB
SET 1,H ; CB CC
SET 1,L ; CB CD
SET 1,(HL) ; CB CE
SET 1,A ; CB CF
SET 2,B ; CB D0
SET 2,C ; CB D1
SET 2,D ; CB D2
SET 2,E ; CB D3
SET 2,H ; CB D4
SET 2,L ; CB D5
SET 2,(HL) ; CB D6
SET 2,A ; CB D7
SET 3,B ; CB D8
SET 3,C ; CB D9
SET 3,D ; CB DA
SET 3,E ; CB DB
SET 3,H ; CB DC
SET 3,L ; CB DD
SET 3,(HL) ; CB DE
SET 3,A ; CB DF
SET 4,B ; CB E0
SET 4,C ; CB E1
SET 4,D ; CB E2
SET 4,E ; CB E3
SET 4,H ; CB E4
SET 4,L ; CB E5
SET 4,(HL) ; CB E6
SET 4,A ; CB E7
SET 5,B ; CB E8
SET 5,C ; CB E9
SET 5,D ; CB EA
SET 5,E ; CB EB
SET 5,H ; CB EC
SET 5,L ; CB ED
SET 5,(HL) ; CB EE
SET 5,A ; CB EF
SET 6,B ; CB F0
SET 6,C ; CB F1
SET 6,D ; CB F2
SET 6,E ; CB F3
SET 6,H ; CB F4
SET 6,L ; CB F5
SET 6,(HL) ; CB F6
SET 6,A ; CB F7
SET 7,B ; CB F8
SET 7,C ; CB F9
SET 7,D ; CB FA
SET 7,E ; CB FB
SET 7,H ; CB FC
SET 7,L ; CB FD
SET 7,(HL) ; CB FE
SET 7,A ; CB FF
CALL Z,NNNN ; CC 34 12
CALL NNNN ; CD 34 12
ADC A,NN ; CE 56
RST 8H ; CF
RET NC ; D0
POP DE ; D1
JP NC,NNNN ; D2 34 12
OUT (NN),A ; D3 56
CALL NC,NNNN ; D4 34 12
CALL NC,NNNN ; D4 34 12
PUSH DE ; D5
SUB NN ; D6 56
RST 10H ; D7
RET C ; D8
EXX ; D9
JP C,NNNN ; DA 34 12
IN A,(NN) ; DB 56
CALL C,NNNN ; DC 34 12
ADD IX,BC ; DD 09
ADD IX,DE ; DD 19
LD IX,NNNN ; DD 21 34 12
LD (NNNN),IX ; DD 22 34 12
INC IX ; DD 23
ADD IX,IX ; DD 29
LD IX,(NNNN) ; DD 2A 34 12
DEC IX ; DD 2B
INC (IX+NN) ; DD 34 56
DEC (IX+NN) ; DD 35 56
LD (IX+NN),MM ; DD 36 56 78
ADD IX,SP ; DD 39
LD B,(IX+NN) ; DD 46 56
LD C,(IX+NN) ; DD 4E 56
LD D,(IX+NN) ; DD 56 56
LD E,(IX+NN) ; DD 5E 56
LD H,(IX+NN) ; DD 66 56
LD L,(IX+NN) ; DD 6E 56
LD (IX+NN),B ; DD 70 56
LD (IX+NN),C ; DD 71 56
LD (IX+NN),D ; DD 72 56
LD (IX+NN),E ; DD 73 56
LD (IX+NN),H ; DD 74 56
LD (IX+NN),L ; DD 75 56
LD (IX+NN),A ; DD 77 56
LD A,(IX+NN) ; DD 7E 56
ADD A,(IX+NN) ; DD 86 56
ADC A,(IX+NN) ; DD 8E 56
SUB (IX+NN) ; DD 96 56
SBC A,(IX+NN) ; DD 9E 56
AND (IX+NN) ; DD A6 56
XOR (IX+NN) ; DD AE 56
OR (IX+NN) ; DD B6 56
CP (IX+NN) ; DD BE 56
RLC (IX+NN) ; DD CB 56 06
RRC (IX+NN) ; DD CB 56 0E
RL (IX+NN) ; DD CB 56 16
RR (IX+NN) ; DD CB 56 1E
SLA (IX+NN) ; DD CB 56 26
SRA (IX+NN) ; DD CB 56 2E
BIT 0,(IX+NN) ; DD CB 56 46
BIT 1,(IX+NN) ; DD CB 56 4E
BIT 2,(IX+NN) ; DD CB 56 56
BIT 3,(IX+NN) ; DD CB 56 5E
BIT 4,(IX+NN) ; DD CB 56 66
BIT 5,(IX+NN) ; DD CB 56 6E
BIT 6,(IX+NN) ; DD CB 56 76
BIT 7,(IX+NN) ; DD CB 56 7E
RES 0,(IX+NN) ; DD CB 56 86
RES 1,(IX+NN) ; DD CB 56 8E
RES 2,(IX+NN) ; DD CB 56 96
RES 3,(IX+NN) ; DD CB 56 9E
RES 4,(IX+NN) ; DD CB 56 A6
RES 5,(IX+NN) ; DD CB 56 AE
RES 6,(IX+NN) ; DD CB 56 B6
RES 7,(IX+NN) ; DD CB 56 BE
SET 0,(IX+NN) ; DD CB 56 C6
SET 1,(IX+NN) ; DD CB 56 CE
SET 2,(IX+NN) ; DD CB 56 D6
SET 3,(IX+NN) ; DD CB 56 DE
SET 4,(IX+NN) ; DD CB 56 E6
SET 5,(IX+NN) ; DD CB 56 EE
SET 6,(IX+NN) ; DD CB 56 F6
SET 7,(IX+NN) ; DD CB 56 FE
POP IX ; DD E1
EX (SP),IX ; DD E3
PUSH IX ; DD E5
JP (IX) ; DD E9
LD SP,IX ; DD F9
SBC A,NN ; DE 56
RST 18H ; DF
RET PO ; E0
POP HL ; E1
JP PO,NNNN ; E2 34 12
EX (SP),HL ; E3
CALL PO,NNNN ; E4 34 12
PUSH HL ; E5
AND NN ; E6 56
RST 20H ; E7
RET PE ; E8
JP (HL) ; E9
JP PE,NNNN ; EA 34 12
EX DE,HL ; EB
CALL PE,NNNN ; EC 34 12
IN B,(C) ; ED 40
OUT (C),B ; ED 41
SBC HL,BC ; ED 42
LD (NNNN),BC ; ED 43 34 12
NEG ; ED 44
RETN ; ED 45
IM 0 ; ED 46
LD I,A ; ED 47
IN C,(C) ; ED 48
OUT (C),C ; ED 49
ADC HL,BC ; ED 4A
LD BC,(NNNN) ; ED 4B 34 12
RETI ; ED 4D
LD R,A ; ED 4F
IN D,(C) ; ED 50
OUT (C),D ; ED 51
SBC HL,DE ; ED 52
LD (NNNN),DE ; ED 53 34 12
IM 1 ; ED 56
LD A,I ; ED 57
IN E,(C) ; ED 58
OUT (C),E ; ED 59
ADC HL,DE ; ED 5A
LD DE,(NNNN) ; ED 5B 34 12
IM 2 ; ED 5E
LD A,R ; ED 5F
IN H,(C) ; ED 60
OUT (C),H ; ED 61
SBC HL,HL ; ED 62
RRD ; ED 67
IN L,(C) ; ED 68
OUT (C),L ; ED 69
ADC HL,HL ; ED 6A
RLD ; ED 6F
SBC HL,SP ; ED 72
LD (NNNN),SP ; ED 73 34 12
IN A,(C) ; ED 78
OUT (C),A ; ED 79
ADC HL,SP ; ED 7A
LD SP,(NNNN) ; ED 7B 34 12
LDI ; ED A0
CPI ; ED A1
INI ; ED A2
OUTI ; ED A3
LDD ; ED A8
CPD ; ED A9
IND ; ED AA
OUTD ; ED AB
LDIR ; ED B0
CPIR ; ED B1
INIR ; ED B2
OTIR ; ED B3
LDDR ; ED B8
CPDR ; ED B9
INDR ; ED BA
OTDR ; ED BB
XOR NN ; EE 56
RST 28H ; EF
RET P ; F0
POP AF ; F1
JP P,NNNN ; F2 34 12
DI ; F3
CALL P,NNNN ; F4 34 12
PUSH AF ; F5
OR NN ; F6 56
RST 30H ; F7
RET M ; F8
LD SP,HL ; F9
JP M,NNNN ; FA 34 12
EI ; FB
CALL M,NNNN ; FC 34 12
ADD IY,BC ; FD 09
ADD IY,DE ; FD 19
LD IY,NNNN ; FD 21 34 12
LD (NNNN),IY ; FD 22 34 12
INC IY ; FD 23
ADD IY,IY ; FD 29
LD IY,(NNNN) ; FD 2A 34 12
DEC IY ; FD 2B
INC (IY+NN) ; FD 34 56
DEC (IY+NN) ; FD 35 56
LD (IY+NN),MM ; FD 36 56 78
ADD IY,SP ; FD 39
LD B,(IY+NN) ; FD 46 56
LD C,(IY+NN) ; FD 4E 56
LD D,(IY+NN) ; FD 56 56
LD E,(IY+NN) ; FD 5E 56
LD H,(IY+NN) ; FD 66 56
LD L,(IY+NN) ; FD 6E 56
LD (IY+NN),B ; FD 70 56
LD (IY+NN),C ; FD 71 56
LD (IY+NN),D ; FD 72 56
LD (IY+NN),E ; FD 73 56
LD (IY+NN),H ; FD 74 56
LD (IY+NN),L ; FD 75 56
LD (IY+NN),A ; FD 77 56
LD A,(IY+NN) ; FD 7E 56
ADD A,(IY+NN) ; FD 86 56
ADC A,(IY+NN) ; FD 8E 56
SUB (IY+NN) ; FD 96 56
SBC A,(IY+NN) ; FD 9E 56
AND (IY+NN) ; FD A6 56
XOR (IY+NN) ; FD AE 56
OR (IY+NN) ; FD B6 56
CP (IY+NN) ; FD BE 56
RLC (IY+NN) ; FD CB 56 06
RRC (IY+NN) ; FD CB 56 0E
RL (IY+NN) ; FD CB 56 16
RR (IY+NN) ; FD CB 56 1E
SLA (IY+NN) ; FD CB 56 26
SRA (IY+NN) ; FD CB 56 2E
BIT 0,(IY+NN) ; FD CB 56 46
BIT 1,(IY+NN) ; FD CB 56 4E
BIT 2,(IY+NN) ; FD CB 56 56
BIT 3,(IY+NN) ; FD CB 56 5E
BIT 4,(IY+NN) ; FD CB 56 66
BIT 5,(IY+NN) ; FD CB 56 6E
BIT 6,(IY+NN) ; FD CB 56 76
BIT 7,(IY+NN) ; FD CB 56 7E
RES 0,(IY+NN) ; FD CB 56 86
RES 1,(IY+NN) ; FD CB 56 8E
RES 2,(IY+NN) ; FD CB 56 96
RES 3,(IY+NN) ; FD CB 56 9E
RES 4,(IY+NN) ; FD CB 56 A6
RES 5,(IY+NN) ; FD CB 56 AE
RES 6,(IY+NN) ; FD CB 56 B6
RES 7,(IY+NN) ; FD CB 56 BE
SET 0,(IY+NN) ; FD CB 56 C6
SET 1,(IY+NN) ; FD CB 56 CE
SET 2,(IY+NN) ; FD CB 56 D6
SET 3,(IY+NN) ; FD CB 56 DE
SET 4,(IY+NN) ; FD CB 56 E6
SET 5,(IY+NN) ; FD CB 56 EE
SET 6,(IY+NN) ; FD CB 56 F6
SET 7,(IY+NN) ; FD CB 56 FE
POP IY ; FD E1
EX (SP),IY ; FD E3
PUSH IY ; FD E5
JP (IY) ; FD E9
LD SP,IY ; FD F9
CP NN ; FE 56
RST 38H ; FF
```
I found one issue regarding the address calculation for rel jumps, three lines like this in
z80_compile.c
have undefined behaviour:*iRAM++ = value2 - (iRAM - RAM) - 1;
and shall be written as:*iRAM = value2 - (iRAM - RAM) - 1; iRAM++;
The diff below fixes also the error when writing
RST 38h
instead ofRST 38
orRST 8
. The 1st format is the one used in the Zilog Z80 user manual, so it should be supported.A final check of all documented opcodes passed, I did it by using this assembler code below (based on opcodes.txt), also this page helped a lot in the past:
opcodes.asm
``` NNNN EQU 1234H ; a sixteen bit number NN EQU 56H ; an eight bit number MM EQU 78H ; another eight bit number NOP ; 00 LD BC,NNNN ; 01 34 12 LD (BC),A ; 02 INC BC ; 03 INC B ; 04 DEC B ; 05 LD B,NN ; 06 56 RLCA ; 07 EX AF,AF' ; 08 ADD HL,BC ; 09 LD A,(BC) ; 0A DEC BC ; 0B INC C ; 0C DEC C ; 0D LD C,NN ; 0E 56 RRCA ; 0F DJNZ $+2 ; 10 00 LD DE,NNNN ; 11 34 12 LD (DE),A ; 12 INC DE ; 13 INC D ; 14 DEC D ; 15 LD D,NN ; 16 56 RLA ; 17 JR $+2 ; 18 00 ADD HL,DE ; 19 LD A,(DE) ; 1A DEC DE ; 1B INC E ; 1C DEC E ; 1D LD E,NN ; 1E 56 RRA ; 1F JR NZ,$+2 ; 20 00 LD HL,NNNN ; 21 34 12 LD (NNNN),HL ; 22 34 12 INC HL ; 23 INC H ; 24 DEC H ; 25 LD H,NN ; 26 56 DAA ; 27 JR Z,$+2 ; 28 00 ADD HL,HL ; 29 LD HL,(NNNN) ; 2A 34 12 DEC HL ; 2B INC L ; 2C DEC L ; 2D LD L,NN ; 2E 56 CPL ; 2F JR NC,$+2 ; 30 00 LD SP,NNNN ; 31 34 12 LD (NNNN),A ; 32 34 12 INC SP ; 33 INC (HL) ; 34 DEC (HL) ; 35 LD (HL),NN ; 36 56 SCF ; 37 JR C,$+2 ; 38 00 ADD HL,SP ; 39 LD A,(NNNN) ; 3A 34 12 DEC SP ; 3B INC A ; 3C DEC A ; 3D LD A,NN ; 3E 56 CCF ; 3F LD B,B ; 40 LD B,C ; 41 LD B,D ; 42 LD B,E ; 43 LD B,H ; 44 LD B,L ; 45 LD B,(HL) ; 46 LD B,A ; 47 LD C,B ; 48 LD C,C ; 49 LD C,D ; 4A LD C,E ; 4B LD C,H ; 4C LD C,L ; 4D LD C,(HL) ; 4E LD C,A ; 4F LD D,B ; 50 LD D,C ; 51 LD D,D ; 52 LD D,E ; 53 LD D,H ; 54 LD D,L ; 55 LD D,(HL) ; 56 LD D,A ; 57 LD E,B ; 58 LD E,C ; 59 LD E,D ; 5A LD E,E ; 5B LD E,H ; 5C LD E,L ; 5D LD E,(HL) ; 5E LD E,A ; 5F LD H,B ; 60 LD H,C ; 61 LD H,D ; 62 LD H,E ; 63 LD H,H ; 64 LD H,L ; 65 LD H,(HL) ; 66 LD H,A ; 67 LD L,B ; 68 LD L,C ; 69 LD L,D ; 6A LD L,E ; 6B LD L,H ; 6C LD L,L ; 6D LD L,(HL) ; 6E LD L,A ; 6F LD (HL),B ; 70 LD (HL),C ; 71 LD (HL),D ; 72 LD (HL),E ; 73 LD (HL),H ; 74 LD (HL),L ; 75 HALT ; 76 LD (HL),A ; 77 LD A,B ; 78 LD A,C ; 79 LD A,D ; 7A LD A,E ; 7B LD A,H ; 7C LD A,L ; 7D LD A,(HL) ; 7E LD A,A ; 7F ADD A,B ; 80 ADD A,C ; 81 ADD A,D ; 82 ADD A,E ; 83 ADD A,H ; 84 ADD A,L ; 85 ADD A,(HL) ; 86 ADD A,A ; 87 ADC A,B ; 88 ADC A,C ; 89 ADC A,D ; 8A ADC A,E ; 8B ADC A,H ; 8C ADC A,L ; 8D ADC A,(HL) ; 8E ADC A,A ; 8F SUB B ; 90 SUB C ; 91 SUB D ; 92 SUB E ; 93 SUB H ; 94 SUB L ; 95 SUB (HL) ; 96 SUB A ; 97 SBC B ; 98 SBC C ; 99 SBC D ; 9A SBC E ; 9B SBC H ; 9C SBC L ; 9D SBC (HL) ; 9E SBC A ; 9F AND B ; A0 AND C ; A1 AND D ; A2 AND E ; A3 AND H ; A4 AND L ; A5 AND (HL) ; A6 AND A ; A7 XOR B ; A8 XOR C ; A9 XOR D ; AA XOR E ; AB XOR H ; AC XOR L ; AD XOR (HL) ; AE XOR A ; AF OR B ; B0 OR C ; B1 OR D ; B2 OR E ; B3 OR H ; B4 OR L ; B5 OR (HL) ; B6 OR A ; B7 CP B ; B8 CP C ; B9 CP D ; BA CP E ; BB CP H ; BC CP L ; BD CP (HL) ; BE CP A ; BF RET NZ ; C0 POP BC ; C1 JP NZ,NNNN ; C2 34 12 JP NNNN ; C3 34 12 CALL NZ,NNNN ; C4 34 12 PUSH BC ; C5 ADD A,NN ; C6 56 RST 0 ; C7 RET Z ; C8 RET ; C9 JP Z,NNNN ; CA 34 12 RLC B ; CB 00 RLC C ; CB 01 RLC D ; CB 02 RLC E ; CB 03 RLC H ; CB 04 RLC L ; CB 05 RLC (HL) ; CB 06 RLC A ; CB 07 RRC B ; CB 08 RRC C ; CB 09 RRC D ; CB 0A RRC E ; CB 0B RRC H ; CB 0C RRC L ; CB 0D RRC (HL) ; CB 0E RRC A ; CB 0F RL B ; CB 10 RL C ; CB 11 RL D ; CB 12 RL E ; CB 13 RL H ; CB 14 RL L ; CB 15 RL (HL) ; CB 16 RL A ; CB 17 RR B ; CB 18 RR C ; CB 19 RR D ; CB 1A RR E ; CB 1B RR H ; CB 1C RR L ; CB 1D RR (HL) ; CB 1E RR A ; CB 1F SLA B ; CB 20 SLA C ; CB 21 SLA D ; CB 22 SLA E ; CB 23 SLA H ; CB 24 SLA L ; CB 25 SLA (HL) ; CB 26 SLA A ; CB 27 SRA B ; CB 28 SRA C ; CB 29 SRA D ; CB 2A SRA E ; CB 2B SRA H ; CB 2C SRA L ; CB 2D SRA (HL) ; CB 2E SRA A ; CB 2F SRL B ; CB 38 SRL C ; CB 39 SRL D ; CB 3A SRL E ; CB 3B SRL H ; CB 3C SRL L ; CB 3D SRL (HL) ; CB 3E SRL A ; CB 3F BIT 0,B ; CB 40 BIT 0,C ; CB 41 BIT 0,D ; CB 42 BIT 0,E ; CB 43 BIT 0,H ; CB 44 BIT 0,L ; CB 45 BIT 0,(HL) ; CB 46 BIT 0,A ; CB 47 BIT 1,B ; CB 48 BIT 1,C ; CB 49 BIT 1,D ; CB 4A BIT 1,E ; CB 4B BIT 1,H ; CB 4C BIT 1,L ; CB 4D BIT 1,(HL) ; CB 4E BIT 1,A ; CB 4F BIT 2,B ; CB 50 BIT 2,C ; CB 51 BIT 2,D ; CB 52 BIT 2,E ; CB 53 BIT 2,H ; CB 54 BIT 2,L ; CB 55 BIT 2,(HL) ; CB 56 BIT 2,A ; CB 57 BIT 3,B ; CB 58 BIT 3,C ; CB 59 BIT 3,D ; CB 5A BIT 3,E ; CB 5B BIT 3,H ; CB 5C BIT 3,L ; CB 5D BIT 3,(HL) ; CB 5E BIT 3,A ; CB 5F BIT 4,B ; CB 60 BIT 4,C ; CB 61 BIT 4,D ; CB 62 BIT 4,E ; CB 63 BIT 4,H ; CB 64 BIT 4,L ; CB 65 BIT 4,(HL) ; CB 66 BIT 4,A ; CB 67 BIT 5,B ; CB 68 BIT 5,C ; CB 69 BIT 5,D ; CB 6A BIT 5,E ; CB 6B BIT 5,H ; CB 6C BIT 5,L ; CB 6D BIT 5,(HL) ; CB 6E BIT 5,A ; CB 6F BIT 6,B ; CB 70 BIT 6,C ; CB 71 BIT 6,D ; CB 72 BIT 6,E ; CB 73 BIT 6,H ; CB 74 BIT 6,L ; CB 75 BIT 6,(HL) ; CB 76 BIT 6,A ; CB 77 BIT 7,B ; CB 78 BIT 7,C ; CB 79 BIT 7,D ; CB 7A BIT 7,E ; CB 7B BIT 7,H ; CB 7C BIT 7,L ; CB 7D BIT 7,(HL) ; CB 7E BIT 7,A ; CB 7F RES 0,B ; CB 80 RES 0,C ; CB 81 RES 0,D ; CB 82 RES 0,E ; CB 83 RES 0,H ; CB 84 RES 0,L ; CB 85 RES 0,(HL) ; CB 86 RES 0,A ; CB 87 RES 1,B ; CB 88 RES 1,C ; CB 89 RES 1,D ; CB 8A RES 1,E ; CB 8B RES 1,H ; CB 8C RES 1,L ; CB 8D RES 1,(HL) ; CB 8E RES 1,A ; CB 8F RES 2,B ; CB 90 RES 2,C ; CB 91 RES 2,D ; CB 92 RES 2,E ; CB 93 RES 2,H ; CB 94 RES 2,L ; CB 95 RES 2,(HL) ; CB 96 RES 2,A ; CB 97 RES 3,B ; CB 98 RES 3,C ; CB 99 RES 3,D ; CB 9A RES 3,E ; CB 9B RES 3,H ; CB 9C RES 3,L ; CB 9D RES 3,(HL) ; CB 9E RES 3,A ; CB 9F RES 4,B ; CB A0 RES 4,C ; CB A1 RES 4,D ; CB A2 RES 4,E ; CB A3 RES 4,H ; CB A4 RES 4,L ; CB A5 RES 4,(HL) ; CB A6 RES 4,A ; CB A7 RES 5,B ; CB A8 RES 5,C ; CB A9 RES 5,D ; CB AA RES 5,E ; CB AB RES 5,H ; CB AC RES 5,L ; CB AD RES 5,(HL) ; CB AE RES 5,A ; CB AF RES 6,B ; CB B0 RES 6,C ; CB B1 RES 6,D ; CB B2 RES 6,E ; CB B3 RES 6,H ; CB B4 RES 6,L ; CB B5 RES 6,(HL) ; CB B6 RES 6,A ; CB B7 RES 7,B ; CB B8 RES 7,C ; CB B9 RES 7,D ; CB BA RES 7,E ; CB BB RES 7,H ; CB BC RES 7,L ; CB BD RES 7,(HL) ; CB BE RES 7,A ; CB BF SET 0,B ; CB C0 SET 0,C ; CB C1 SET 0,D ; CB C2 SET 0,E ; CB C3 SET 0,H ; CB C4 SET 0,L ; CB C5 SET 0,(HL) ; CB C6 SET 0,A ; CB C7 SET 1,B ; CB C8 SET 1,C ; CB C9 SET 1,D ; CB CA SET 1,E ; CB CB SET 1,H ; CB CC SET 1,L ; CB CD SET 1,(HL) ; CB CE SET 1,A ; CB CF SET 2,B ; CB D0 SET 2,C ; CB D1 SET 2,D ; CB D2 SET 2,E ; CB D3 SET 2,H ; CB D4 SET 2,L ; CB D5 SET 2,(HL) ; CB D6 SET 2,A ; CB D7 SET 3,B ; CB D8 SET 3,C ; CB D9 SET 3,D ; CB DA SET 3,E ; CB DB SET 3,H ; CB DC SET 3,L ; CB DD SET 3,(HL) ; CB DE SET 3,A ; CB DF SET 4,B ; CB E0 SET 4,C ; CB E1 SET 4,D ; CB E2 SET 4,E ; CB E3 SET 4,H ; CB E4 SET 4,L ; CB E5 SET 4,(HL) ; CB E6 SET 4,A ; CB E7 SET 5,B ; CB E8 SET 5,C ; CB E9 SET 5,D ; CB EA SET 5,E ; CB EB SET 5,H ; CB EC SET 5,L ; CB ED SET 5,(HL) ; CB EE SET 5,A ; CB EF SET 6,B ; CB F0 SET 6,C ; CB F1 SET 6,D ; CB F2 SET 6,E ; CB F3 SET 6,H ; CB F4 SET 6,L ; CB F5 SET 6,(HL) ; CB F6 SET 6,A ; CB F7 SET 7,B ; CB F8 SET 7,C ; CB F9 SET 7,D ; CB FA SET 7,E ; CB FB SET 7,H ; CB FC SET 7,L ; CB FD SET 7,(HL) ; CB FE SET 7,A ; CB FF CALL Z,NNNN ; CC 34 12 CALL NNNN ; CD 34 12 ADC A,NN ; CE 56 RST 8H ; CF RET NC ; D0 POP DE ; D1 JP NC,NNNN ; D2 34 12 OUT (NN),A ; D3 56 CALL NC,NNNN ; D4 34 12 CALL NC,NNNN ; D4 34 12 PUSH DE ; D5 SUB NN ; D6 56 RST 10H ; D7 RET C ; D8 EXX ; D9 JP C,NNNN ; DA 34 12 IN A,(NN) ; DB 56 CALL C,NNNN ; DC 34 12 ADD IX,BC ; DD 09 ADD IX,DE ; DD 19 LD IX,NNNN ; DD 21 34 12 LD (NNNN),IX ; DD 22 34 12 INC IX ; DD 23 ADD IX,IX ; DD 29 LD IX,(NNNN) ; DD 2A 34 12 DEC IX ; DD 2B INC (IX+NN) ; DD 34 56 DEC (IX+NN) ; DD 35 56 LD (IX+NN),MM ; DD 36 56 78 ADD IX,SP ; DD 39 LD B,(IX+NN) ; DD 46 56 LD C,(IX+NN) ; DD 4E 56 LD D,(IX+NN) ; DD 56 56 LD E,(IX+NN) ; DD 5E 56 LD H,(IX+NN) ; DD 66 56 LD L,(IX+NN) ; DD 6E 56 LD (IX+NN),B ; DD 70 56 LD (IX+NN),C ; DD 71 56 LD (IX+NN),D ; DD 72 56 LD (IX+NN),E ; DD 73 56 LD (IX+NN),H ; DD 74 56 LD (IX+NN),L ; DD 75 56 LD (IX+NN),A ; DD 77 56 LD A,(IX+NN) ; DD 7E 56 ADD A,(IX+NN) ; DD 86 56 ADC A,(IX+NN) ; DD 8E 56 SUB (IX+NN) ; DD 96 56 SBC A,(IX+NN) ; DD 9E 56 AND (IX+NN) ; DD A6 56 XOR (IX+NN) ; DD AE 56 OR (IX+NN) ; DD B6 56 CP (IX+NN) ; DD BE 56 RLC (IX+NN) ; DD CB 56 06 RRC (IX+NN) ; DD CB 56 0E RL (IX+NN) ; DD CB 56 16 RR (IX+NN) ; DD CB 56 1E SLA (IX+NN) ; DD CB 56 26 SRA (IX+NN) ; DD CB 56 2E BIT 0,(IX+NN) ; DD CB 56 46 BIT 1,(IX+NN) ; DD CB 56 4E BIT 2,(IX+NN) ; DD CB 56 56 BIT 3,(IX+NN) ; DD CB 56 5E BIT 4,(IX+NN) ; DD CB 56 66 BIT 5,(IX+NN) ; DD CB 56 6E BIT 6,(IX+NN) ; DD CB 56 76 BIT 7,(IX+NN) ; DD CB 56 7E RES 0,(IX+NN) ; DD CB 56 86 RES 1,(IX+NN) ; DD CB 56 8E RES 2,(IX+NN) ; DD CB 56 96 RES 3,(IX+NN) ; DD CB 56 9E RES 4,(IX+NN) ; DD CB 56 A6 RES 5,(IX+NN) ; DD CB 56 AE RES 6,(IX+NN) ; DD CB 56 B6 RES 7,(IX+NN) ; DD CB 56 BE SET 0,(IX+NN) ; DD CB 56 C6 SET 1,(IX+NN) ; DD CB 56 CE SET 2,(IX+NN) ; DD CB 56 D6 SET 3,(IX+NN) ; DD CB 56 DE SET 4,(IX+NN) ; DD CB 56 E6 SET 5,(IX+NN) ; DD CB 56 EE SET 6,(IX+NN) ; DD CB 56 F6 SET 7,(IX+NN) ; DD CB 56 FE POP IX ; DD E1 EX (SP),IX ; DD E3 PUSH IX ; DD E5 JP (IX) ; DD E9 LD SP,IX ; DD F9 SBC A,NN ; DE 56 RST 18H ; DF RET PO ; E0 POP HL ; E1 JP PO,NNNN ; E2 34 12 EX (SP),HL ; E3 CALL PO,NNNN ; E4 34 12 PUSH HL ; E5 AND NN ; E6 56 RST 20H ; E7 RET PE ; E8 JP (HL) ; E9 JP PE,NNNN ; EA 34 12 EX DE,HL ; EB CALL PE,NNNN ; EC 34 12 IN B,(C) ; ED 40 OUT (C),B ; ED 41 SBC HL,BC ; ED 42 LD (NNNN),BC ; ED 43 34 12 NEG ; ED 44 RETN ; ED 45 IM 0 ; ED 46 LD I,A ; ED 47 IN C,(C) ; ED 48 OUT (C),C ; ED 49 ADC HL,BC ; ED 4A LD BC,(NNNN) ; ED 4B 34 12 RETI ; ED 4D LD R,A ; ED 4F IN D,(C) ; ED 50 OUT (C),D ; ED 51 SBC HL,DE ; ED 52 LD (NNNN),DE ; ED 53 34 12 IM 1 ; ED 56 LD A,I ; ED 57 IN E,(C) ; ED 58 OUT (C),E ; ED 59 ADC HL,DE ; ED 5A LD DE,(NNNN) ; ED 5B 34 12 IM 2 ; ED 5E LD A,R ; ED 5F IN H,(C) ; ED 60 OUT (C),H ; ED 61 SBC HL,HL ; ED 62 RRD ; ED 67 IN L,(C) ; ED 68 OUT (C),L ; ED 69 ADC HL,HL ; ED 6A RLD ; ED 6F SBC HL,SP ; ED 72 LD (NNNN),SP ; ED 73 34 12 IN A,(C) ; ED 78 OUT (C),A ; ED 79 ADC HL,SP ; ED 7A LD SP,(NNNN) ; ED 7B 34 12 LDI ; ED A0 CPI ; ED A1 INI ; ED A2 OUTI ; ED A3 LDD ; ED A8 CPD ; ED A9 IND ; ED AA OUTD ; ED AB LDIR ; ED B0 CPIR ; ED B1 INIR ; ED B2 OTIR ; ED B3 LDDR ; ED B8 CPDR ; ED B9 INDR ; ED BA OTDR ; ED BB XOR NN ; EE 56 RST 28H ; EF RET P ; F0 POP AF ; F1 JP P,NNNN ; F2 34 12 DI ; F3 CALL P,NNNN ; F4 34 12 PUSH AF ; F5 OR NN ; F6 56 RST 30H ; F7 RET M ; F8 LD SP,HL ; F9 JP M,NNNN ; FA 34 12 EI ; FB CALL M,NNNN ; FC 34 12 ADD IY,BC ; FD 09 ADD IY,DE ; FD 19 LD IY,NNNN ; FD 21 34 12 LD (NNNN),IY ; FD 22 34 12 INC IY ; FD 23 ADD IY,IY ; FD 29 LD IY,(NNNN) ; FD 2A 34 12 DEC IY ; FD 2B INC (IY+NN) ; FD 34 56 DEC (IY+NN) ; FD 35 56 LD (IY+NN),MM ; FD 36 56 78 ADD IY,SP ; FD 39 LD B,(IY+NN) ; FD 46 56 LD C,(IY+NN) ; FD 4E 56 LD D,(IY+NN) ; FD 56 56 LD E,(IY+NN) ; FD 5E 56 LD H,(IY+NN) ; FD 66 56 LD L,(IY+NN) ; FD 6E 56 LD (IY+NN),B ; FD 70 56 LD (IY+NN),C ; FD 71 56 LD (IY+NN),D ; FD 72 56 LD (IY+NN),E ; FD 73 56 LD (IY+NN),H ; FD 74 56 LD (IY+NN),L ; FD 75 56 LD (IY+NN),A ; FD 77 56 LD A,(IY+NN) ; FD 7E 56 ADD A,(IY+NN) ; FD 86 56 ADC A,(IY+NN) ; FD 8E 56 SUB (IY+NN) ; FD 96 56 SBC A,(IY+NN) ; FD 9E 56 AND (IY+NN) ; FD A6 56 XOR (IY+NN) ; FD AE 56 OR (IY+NN) ; FD B6 56 CP (IY+NN) ; FD BE 56 RLC (IY+NN) ; FD CB 56 06 RRC (IY+NN) ; FD CB 56 0E RL (IY+NN) ; FD CB 56 16 RR (IY+NN) ; FD CB 56 1E SLA (IY+NN) ; FD CB 56 26 SRA (IY+NN) ; FD CB 56 2E BIT 0,(IY+NN) ; FD CB 56 46 BIT 1,(IY+NN) ; FD CB 56 4E BIT 2,(IY+NN) ; FD CB 56 56 BIT 3,(IY+NN) ; FD CB 56 5E BIT 4,(IY+NN) ; FD CB 56 66 BIT 5,(IY+NN) ; FD CB 56 6E BIT 6,(IY+NN) ; FD CB 56 76 BIT 7,(IY+NN) ; FD CB 56 7E RES 0,(IY+NN) ; FD CB 56 86 RES 1,(IY+NN) ; FD CB 56 8E RES 2,(IY+NN) ; FD CB 56 96 RES 3,(IY+NN) ; FD CB 56 9E RES 4,(IY+NN) ; FD CB 56 A6 RES 5,(IY+NN) ; FD CB 56 AE RES 6,(IY+NN) ; FD CB 56 B6 RES 7,(IY+NN) ; FD CB 56 BE SET 0,(IY+NN) ; FD CB 56 C6 SET 1,(IY+NN) ; FD CB 56 CE SET 2,(IY+NN) ; FD CB 56 D6 SET 3,(IY+NN) ; FD CB 56 DE SET 4,(IY+NN) ; FD CB 56 E6 SET 5,(IY+NN) ; FD CB 56 EE SET 6,(IY+NN) ; FD CB 56 F6 SET 7,(IY+NN) ; FD CB 56 FE POP IY ; FD E1 EX (SP),IY ; FD E3 PUSH IY ; FD E5 JP (IY) ; FD E9 LD SP,IY ; FD F9 CP NN ; FE 56 RST 38H ; FF ```