sarnau / Z80DisAssembler

I created this small disassembler for a Z80 cpu in one afternoon. It is a commandline tool.
17 stars 5 forks source link

Undefined behaviour in address calculation for JR, JR <CONDITION> and DJNZ #5

Closed Ho-Ro closed 2 weeks ago

Ho-Ro commented 4 weeks ago

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 ```
sarnau commented 2 weeks ago

Fixed this one as well