From bf8ecb19bbc6526428767a4f6ba06d2d8ce93573 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Mon, 13 Jan 2025 18:42:12 +0100 Subject: [PATCH] - CPU completada --- sm83.cpp | 1269 ++++-------------------------------------------------- sm83.h | 8 +- 2 files changed, 88 insertions(+), 1189 deletions(-) diff --git a/sm83.cpp b/sm83.cpp index 93f7b9c..57d8fbc 100644 --- a/sm83.cpp +++ b/sm83.cpp @@ -545,6 +545,11 @@ namespace sm83 } } + void STOP() + { + HALT(); + } + void interrupt(uint8_t type) { exit_from_halt = true; @@ -608,12 +613,12 @@ namespace sm83 return res; } - static inline const uint8_t SLL(const uint8_t v) + static inline const uint8_t SWAP(const uint8_t v) { - const uint8_t res = (v<<1) | 1; + const uint8_t res = (v<<4) | (v>>4); rF=0; if (res==0) SET_FLAGS(fZ); - if (v&0x80) SET_FLAGS(fC); + //if (v&0x80) SET_FLAGS(fC); // [TODO] fC reset o calculat? return res; } @@ -723,7 +728,7 @@ namespace sm83 case 0x05: DEC8(_rB); break; case 0x06: rB = READ_MEM_8(); break; case 0x07: RLCA(); break; - case 0x08: EX(rAF, rAF2); break; + case 0x08: WRITE_MEM_16(READ_MEM_16(), rSP);break; case 0x09: ADD16(_rHL, rBC); break; case 0x0A: rA = READ_MEM_8(rBC); break; case 0x0B: DEC16(_rBC); break; @@ -732,7 +737,7 @@ namespace sm83 case 0x0E: rC = READ_MEM_8(); break; case 0x0F: RRCA(); break; - case 0x10: DJNZ(); break; + case 0x10: STOP(); break; case 0x11: rDE = READ_MEM_16(); break; case 0x12: WRITE_MEM_8(rDE, rA); break; case 0x13: INC16(_rDE); break; @@ -751,7 +756,7 @@ namespace sm83 case 0x20: JR(cNZ); break; case 0x21: rHL = READ_MEM_16(); break; - case 0x22: WRITE_MEM_16(READ_MEM_16(), rHL);break; + case 0x22: LDI_HL_A(); break; case 0x23: INC16(_rHL); break; case 0x24: INC8(_rH); break; case 0x25: DEC8(_rH); break; @@ -759,7 +764,7 @@ namespace sm83 case 0x27: DAA(); break; case 0x28: JR(cZ); break; case 0x29: ADD16(_rHL, rHL); break; - case 0x2A: rHL = READ_MEM_16(READ_MEM_16());break; + case 0x2A: LDI_A_HL(); break; case 0x2B: DEC16(_rHL); break; case 0x2C: INC8(_rL); break; case 0x2D: DEC8(_rL); break; @@ -768,7 +773,7 @@ namespace sm83 case 0x30: JR(cNC); break; case 0x31: rSP = READ_MEM_16(); break; - case 0x32: WRITE_MEM_8(READ_MEM_16(), rA); break; + case 0x32: LDD_HL_A(); break; case 0x33: INC16(_rSP); break; case 0x34: INCMEM8(rHL); break; case 0x35: DECMEM8(rHL); break; @@ -776,7 +781,7 @@ namespace sm83 case 0x37: SCF(); break; case 0x38: JR(cC); break; case 0x39: ADD16(_rHL, rSP); break; - case 0x3A: rA = READ_MEM_8(READ_MEM_16()); break; + case 0x3A: LDD_A_HL(); break; case 0x3B: DEC16(_rSP); break; case 0x3C: INC8(_rA); break; case 0x3D: DEC8(_rA); break; @@ -922,68 +927,68 @@ namespace sm83 case 0xC0: RET(cNZ); break; case 0xC1: POP(_rBC); break; case 0xC2: JP(cNZ, READ_MEM_16()); break; - case 0xC3: JP(cNO, READ_MEM_16()); break; + case 0xC3: JP(cUnconditional, READ_MEM_16());break; case 0xC4: CALL(cNZ, READ_MEM_16()); break; case 0xC5: PUSH(rBC); break; case 0xC6: ADD8(READ_MEM_8()); break; case 0xC7: RST(0x00); break; case 0xC8: RET(cZ); break; - case 0xC9: RET(cNO); break; + case 0xC9: RET(cUnconditional); break; case 0xCA: JP(cZ, READ_MEM_16()); break; case 0xCB: BIT_INSTRUCTIONS(); break; case 0xCC: CALL(cZ, READ_MEM_16()); break; - case 0xCD: CALL(cNO, READ_MEM_16()); break; + case 0xCD: CALL(cUnconditional, READ_MEM_16());break; case 0xCE: ADC8(READ_MEM_8()); break; case 0xCF: RST(0x08); break; case 0xD0: RET(cNC); break; case 0xD1: POP(_rDE); break; case 0xD2: JP(cNC, READ_MEM_16()); break; - case 0xD3: OUT(rA, READ_MEM_8()); break; + case 0xD3: IgnoreOpcode(); break; case 0xD4: CALL(cNC, READ_MEM_16()); break; case 0xD5: PUSH(rDE); break; case 0xD6: SUB8(READ_MEM_8()); break; case 0xD7: RST(0x10); break; case 0xD8: RET(cC); break; - case 0xD9: EX(rBC, rBC2);EX(rDE, rDE2);EX(rHL, rHL2); break; + case 0xD9: RETI(); break; case 0xDA: JP(cC, READ_MEM_16()); break; - case 0xDB: rA = IN(READ_MEM_8()); break; + case 0xDB: IgnoreOpcode(); break; case 0xDC: CALL(cC, READ_MEM_16()); break; - case 0xDD: IX_INSTRUCTIONS(); break; + case 0xDD: IgnoreOpcode(); break; case 0xDE: SBC8(READ_MEM_8()); break; case 0xDF: RST(0x18); break; - case 0xE0: RET(cPO); break; + case 0xE0: WRITE_MEM_8(READ_MEM_8()|0x00ff, rA);break; case 0xE1: POP(_rHL); break; - case 0xE2: JP(cPO, READ_MEM_16()); break; - case 0xE3: EX_MEM(_rHL, rSP); break; - case 0xE4: CALL(cPO, READ_MEM_16()); break; + case 0xE2: WRITE_MEM_8(rC|0x00ff, rA); break; + case 0xE3: IgnoreOpcode(); break; + case 0xE4: IgnoreOpcode(); break; case 0xE5: PUSH(rHL); break; case 0xE6: AND(READ_MEM_8()); break; case 0xE7: RST(0x20); break; - case 0xE8: RET(cPE); break; - case 0xE9: JP(cNO, rHL, true); break; - case 0xEA: JP(cPE, READ_MEM_16()); break; - case 0xEB: EX(rDE, rHL); break; - case 0xEC: CALL(cPE, READ_MEM_16()); break; - case 0xED: MISC_INSTRUCTIONS(); break; + case 0xE8: ADD16(_rSP, READ_MEM_8()); break; /*[TODO] es correcte? ha de ser signed*/ + case 0xE9: JP(cUnconditional, rHL, true); break; + case 0xEA: WRITE_MEM_8(READ_MEM_16(), rA); break; + case 0xEB: IgnoreOpcode(); break; + case 0xEC: IgnoreOpcode(); break; + case 0xED: IgnoreOpcode(); break; case 0xEE: XOR(READ_MEM_8()); break; case 0xEF: RST(0x28); break; - case 0xF0: RET(cP); break; + case 0xF0: rA = READ_MEM_8(READ_MEM_8()|0x00ff);break; case 0xF1: POP(_rAF); break; - case 0xF2: JP(cP, READ_MEM_16()); break; + case 0xF2: rA = READ_MEM_8(rC|0x00ff); break; case 0xF3: DI(); break; - case 0xF4: CALL(cP, READ_MEM_16()); break; + case 0xF4: IgnoreOpcode(); break; case 0xF5: PUSH(rAF); break; case 0xF6: OR(READ_MEM_8()); break; case 0xF7: RST(0x30); break; - case 0xF8: RET(cM); break; + case 0xF8: rHL = rSP + READ_MEM_8(); break; /*[TODO] es correcte? ha de ser signed*/ case 0xF9: rSP = rHL; t+=2; break; - case 0xFA: JP(cM, READ_MEM_16()); break; + case 0xFA: rA = READ_MEM_8(READ_MEM_16()); break; case 0xFB: EI(); break; - case 0xFC: CALL(cM, READ_MEM_16()); break; - case 0xFD: IY_INSTRUCTIONS(); break; + case 0xFC: IgnoreOpcode(); break; + case 0xFD: IgnoreOpcode(); break; case 0xFE: CP(READ_MEM_8()); break; case 0xFF: RST(0x38); break; } @@ -993,8 +998,8 @@ namespace sm83 if (pending_ei==2) { pending_ei=0; actualEI(); } if (pending_ei==1) pending_ei=2; - z80debug::setcursor(rPC); - z80debug::history::store(); + /*z80debug::setcursor(rPC); + z80debug::history::store();*/ return t; } @@ -1002,7 +1007,7 @@ namespace sm83 { const uint8_t opcode = READ_M1(); - z80debug::useOpcode(opcode, 2); + //z80debug::useOpcode(opcode, 2); switch (opcode) { @@ -1012,7 +1017,7 @@ namespace sm83 case 0x03: rE = RLC(rE); break; case 0x04: rH = RLC(rH); break; case 0x05: rL = RLC(rL); break; - case 0x06: WRITE_MEM_8(rHL, RLC(READ_MEM_8(rHL)));t++;break; + case 0x06: WRITE_MEM_8(rHL, RLC(READ_MEM_8(rHL))); break; case 0x07: rA = RLC(rA); break; case 0x08: rB = RRC(rB); break; case 0x09: rC = RRC(rC); break; @@ -1020,7 +1025,7 @@ namespace sm83 case 0x0B: rE = RRC(rE); break; case 0x0C: rH = RRC(rH); break; case 0x0D: rL = RRC(rL); break; - case 0x0E: WRITE_MEM_8(rHL, RRC(READ_MEM_8(rHL)));t++;break; + case 0x0E: WRITE_MEM_8(rHL, RRC(READ_MEM_8(rHL))); break; case 0x0F: rA = RRC(rA); break; case 0x10: rB = RL(rB); break; @@ -1029,7 +1034,7 @@ namespace sm83 case 0x13: rE = RL(rE); break; case 0x14: rH = RL(rH); break; case 0x15: rL = RL(rL); break; - case 0x16: WRITE_MEM_8(rHL, RL(READ_MEM_8(rHL)));t++;break; + case 0x16: WRITE_MEM_8(rHL, RL(READ_MEM_8(rHL))); break; case 0x17: rA = RL(rA); break; case 0x18: rB = RR(rB); break; case 0x19: rC = RR(rC); break; @@ -1037,7 +1042,7 @@ namespace sm83 case 0x1B: rE = RR(rE); break; case 0x1C: rH = RR(rH); break; case 0x1D: rL = RR(rL); break; - case 0x1E: WRITE_MEM_8(rHL, RR(READ_MEM_8(rHL)));t++;break; + case 0x1E: WRITE_MEM_8(rHL, RR(READ_MEM_8(rHL))); break; case 0x1F: rA = RR(rA); break; case 0x20: rB = SLA(rB); break; @@ -1046,7 +1051,7 @@ namespace sm83 case 0x23: rE = SLA(rE); break; case 0x24: rH = SLA(rH); break; case 0x25: rL = SLA(rL); break; - case 0x26: WRITE_MEM_8(rHL, SLA(READ_MEM_8(rHL)));t++;break; + case 0x26: WRITE_MEM_8(rHL, SLA(READ_MEM_8(rHL))); break; case 0x27: rA = SLA(rA); break; case 0x28: rB = SRA(rB); break; case 0x29: rC = SRA(rC); break; @@ -1054,24 +1059,24 @@ namespace sm83 case 0x2B: rE = SRA(rE); break; case 0x2C: rH = SRA(rH); break; case 0x2D: rL = SRA(rL); break; - case 0x2E: WRITE_MEM_8(rHL, SRA(READ_MEM_8(rHL)));t++;break; + case 0x2E: WRITE_MEM_8(rHL, SRA(READ_MEM_8(rHL))); break; case 0x2F: rA = SRA(rA); break; - case 0x30: rB = SLL(rB); break; - case 0x31: rC = SLL(rC); break; - case 0x32: rD = SLL(rD); break; - case 0x33: rE = SLL(rE); break; - case 0x34: rH = SLL(rH); break; - case 0x35: rL = SLL(rL); break; - case 0x36: WRITE_MEM_8(rHL, SLL(READ_MEM_8(rHL)));t++;break; - case 0x37: rA = SLL(rA); break; + case 0x30: rB = SWAP(rB); break; + case 0x31: rC = SWAP(rC); break; + case 0x32: rD = SWAP(rD); break; + case 0x33: rE = SWAP(rE); break; + case 0x34: rH = SWAP(rH); break; + case 0x35: rL = SWAP(rL); break; + case 0x36: WRITE_MEM_8(rHL, SWAP(READ_MEM_8(rHL))); break; + case 0x37: rA = SWAP(rA); break; case 0x38: rB = SRL(rB); break; case 0x39: rC = SRL(rC); break; case 0x3A: rD = SRL(rD); break; case 0x3B: rE = SRL(rE); break; case 0x3C: rH = SRL(rH); break; case 0x3D: rL = SRL(rL); break; - case 0x3E: WRITE_MEM_8(rHL, SRL(READ_MEM_8(rHL)));t++;break; + case 0x3E: WRITE_MEM_8(rHL, SRL(READ_MEM_8(rHL))); break; case 0x3F: rA = SRL(rA); break; case 0x40: BIT(0, rB); break; @@ -1080,7 +1085,7 @@ namespace sm83 case 0x43: BIT(0, rE); break; case 0x44: BIT(0, rH); break; case 0x45: BIT(0, rL); break; - case 0x46: BIT(0, READ_MEM_8(rHL)); t++; break; + case 0x46: BIT(0, READ_MEM_8(rHL)); break; case 0x47: BIT(0, rA); break; case 0x48: BIT(1, rB); break; case 0x49: BIT(1, rC); break; @@ -1088,7 +1093,7 @@ namespace sm83 case 0x4B: BIT(1, rE); break; case 0x4C: BIT(1, rH); break; case 0x4D: BIT(1, rL); break; - case 0x4E: BIT(1, READ_MEM_8(rHL)); t++; break; + case 0x4E: BIT(1, READ_MEM_8(rHL)); break; case 0x4F: BIT(1, rA); break; case 0x50: BIT(2, rB); break; @@ -1097,7 +1102,7 @@ namespace sm83 case 0x53: BIT(2, rE); break; case 0x54: BIT(2, rH); break; case 0x55: BIT(2, rL); break; - case 0x56: BIT(2, READ_MEM_8(rHL)); t++; break; + case 0x56: BIT(2, READ_MEM_8(rHL)); break; case 0x57: BIT(2, rA); break; case 0x58: BIT(3, rB); break; case 0x59: BIT(3, rC); break; @@ -1105,7 +1110,7 @@ namespace sm83 case 0x5B: BIT(3, rE); break; case 0x5C: BIT(3, rH); break; case 0x5D: BIT(3, rL); break; - case 0x5E: BIT(3, READ_MEM_8(rHL)); t++; break; + case 0x5E: BIT(3, READ_MEM_8(rHL)); break; case 0x5F: BIT(3, rA); break; case 0x60: BIT(4, rB); break; @@ -1114,7 +1119,7 @@ namespace sm83 case 0x63: BIT(4, rE); break; case 0x64: BIT(4, rH); break; case 0x65: BIT(4, rL); break; - case 0x66: BIT(4, READ_MEM_8(rHL)); t++; break; + case 0x66: BIT(4, READ_MEM_8(rHL)); break; case 0x67: BIT(4, rA); break; case 0x68: BIT(5, rB); break; case 0x69: BIT(5, rC); break; @@ -1122,7 +1127,7 @@ namespace sm83 case 0x6B: BIT(5, rE); break; case 0x6C: BIT(5, rH); break; case 0x6D: BIT(5, rL); break; - case 0x6E: BIT(5, READ_MEM_8(rHL)); t++; break; + case 0x6E: BIT(5, READ_MEM_8(rHL)); break; case 0x6F: BIT(5, rA); break; case 0x70: BIT(6, rB); break; @@ -1131,7 +1136,7 @@ namespace sm83 case 0x73: BIT(6, rE); break; case 0x74: BIT(6, rH); break; case 0x75: BIT(6, rL); break; - case 0x76: BIT(6, READ_MEM_8(rHL)); t++; break; + case 0x76: BIT(6, READ_MEM_8(rHL)); break; case 0x77: BIT(6, rA); break; case 0x78: BIT(7, rB); break; case 0x79: BIT(7, rC); break; @@ -1139,7 +1144,7 @@ namespace sm83 case 0x7B: BIT(7, rE); break; case 0x7C: BIT(7, rH); break; case 0x7D: BIT(7, rL); break; - case 0x7E: BIT(7, READ_MEM_8(rHL)); t++; break; + case 0x7E: BIT(7, READ_MEM_8(rHL)); break; case 0x7F: BIT(7, rA); break; case 0x80: rB = RES(0, rB); break; @@ -1148,7 +1153,7 @@ namespace sm83 case 0x83: rE = RES(0, rE); break; case 0x84: rH = RES(0, rH); break; case 0x85: rL = RES(0, rL); break; - case 0x86: WRITE_MEM_8(rHL, RES(0, READ_MEM_8(rHL)));t++;break; + case 0x86: WRITE_MEM_8(rHL, RES(0, READ_MEM_8(rHL)));break; case 0x87: rA = RES(0, rA); break; case 0x88: rB = RES(1, rB); break; case 0x89: rC = RES(1, rC); break; @@ -1156,7 +1161,7 @@ namespace sm83 case 0x8B: rE = RES(1, rE); break; case 0x8C: rH = RES(1, rH); break; case 0x8D: rL = RES(1, rL); break; - case 0x8E: WRITE_MEM_8(rHL, RES(1, READ_MEM_8(rHL)));t++;break; + case 0x8E: WRITE_MEM_8(rHL, RES(1, READ_MEM_8(rHL)));break; case 0x8F: rA = RES(1, rA); break; case 0x90: rB = RES(2, rB); break; @@ -1165,7 +1170,7 @@ namespace sm83 case 0x93: rE = RES(2, rE); break; case 0x94: rH = RES(2, rH); break; case 0x95: rL = RES(2, rL); break; - case 0x96: WRITE_MEM_8(rHL, RES(2, READ_MEM_8(rHL)));t++;break; + case 0x96: WRITE_MEM_8(rHL, RES(2, READ_MEM_8(rHL)));break; case 0x97: rA = RES(2, rA); break; case 0x98: rB = RES(3, rB); break; case 0x99: rC = RES(3, rC); break; @@ -1173,7 +1178,7 @@ namespace sm83 case 0x9B: rE = RES(3, rE); break; case 0x9C: rH = RES(3, rH); break; case 0x9D: rL = RES(3, rL); break; - case 0x9E: WRITE_MEM_8(rHL, RES(3, READ_MEM_8(rHL)));t++;break; + case 0x9E: WRITE_MEM_8(rHL, RES(3, READ_MEM_8(rHL)));break; case 0x9F: rA = RES(3, rA); break; case 0xA0: rB = RES(4, rB); break; @@ -1182,7 +1187,7 @@ namespace sm83 case 0xA3: rE = RES(4, rE); break; case 0xA4: rH = RES(4, rH); break; case 0xA5: rL = RES(4, rL); break; - case 0xA6: WRITE_MEM_8(rHL, RES(4, READ_MEM_8(rHL)));t++;break; + case 0xA6: WRITE_MEM_8(rHL, RES(4, READ_MEM_8(rHL)));break; case 0xA7: rA = RES(4, rA); break; case 0xA8: rB = RES(5, rB); break; case 0xA9: rC = RES(5, rC); break; @@ -1190,7 +1195,7 @@ namespace sm83 case 0xAB: rE = RES(5, rE); break; case 0xAC: rH = RES(5, rH); break; case 0xAD: rL = RES(5, rL); break; - case 0xAE: WRITE_MEM_8(rHL, RES(5, READ_MEM_8(rHL)));t++;break; + case 0xAE: WRITE_MEM_8(rHL, RES(5, READ_MEM_8(rHL)));break; case 0xAF: rA = RES(5, rA); break; case 0xB0: rB = RES(6, rB); break; @@ -1199,7 +1204,7 @@ namespace sm83 case 0xB3: rE = RES(6, rE); break; case 0xB4: rH = RES(6, rH); break; case 0xB5: rL = RES(6, rL); break; - case 0xB6: WRITE_MEM_8(rHL, RES(6, READ_MEM_8(rHL)));t++;break; + case 0xB6: WRITE_MEM_8(rHL, RES(6, READ_MEM_8(rHL)));break; case 0xB7: rA = RES(6, rA); break; case 0xB8: rB = RES(7, rB); break; case 0xB9: rC = RES(7, rC); break; @@ -1207,7 +1212,7 @@ namespace sm83 case 0xBB: rE = RES(7, rE); break; case 0xBC: rH = RES(7, rH); break; case 0xBD: rL = RES(7, rL); break; - case 0xBE: WRITE_MEM_8(rHL, RES(7, READ_MEM_8(rHL)));t++;break; + case 0xBE: WRITE_MEM_8(rHL, RES(7, READ_MEM_8(rHL)));break; case 0xBF: rA = RES(7, rA); break; case 0xC0: rB = SET(0, rB); break; @@ -1216,7 +1221,7 @@ namespace sm83 case 0xC3: rE = SET(0, rE); break; case 0xC4: rH = SET(0, rH); break; case 0xC5: rL = SET(0, rL); break; - case 0xC6: WRITE_MEM_8(rHL, SET(0, READ_MEM_8(rHL)));t++;break; + case 0xC6: WRITE_MEM_8(rHL, SET(0, READ_MEM_8(rHL)));break; case 0xC7: rA = SET(0, rA); break; case 0xC8: rB = SET(1, rB); break; case 0xC9: rC = SET(1, rC); break; @@ -1224,7 +1229,7 @@ namespace sm83 case 0xCB: rE = SET(1, rE); break; case 0xCC: rH = SET(1, rH); break; case 0xCD: rL = SET(1, rL); break; - case 0xCE: WRITE_MEM_8(rHL, SET(1, READ_MEM_8(rHL)));t++;break; + case 0xCE: WRITE_MEM_8(rHL, SET(1, READ_MEM_8(rHL)));break; case 0xCF: rA = SET(1, rA); break; case 0xD0: rB = SET(2, rB); break; @@ -1233,7 +1238,7 @@ namespace sm83 case 0xD3: rE = SET(2, rE); break; case 0xD4: rH = SET(2, rH); break; case 0xD5: rL = SET(2, rL); break; - case 0xD6: WRITE_MEM_8(rHL, SET(2, READ_MEM_8(rHL)));t++;break; + case 0xD6: WRITE_MEM_8(rHL, SET(2, READ_MEM_8(rHL)));break; case 0xD7: rA = SET(2, rA); break; case 0xD8: rB = SET(3, rB); break; case 0xD9: rC = SET(3, rC); break; @@ -1241,7 +1246,7 @@ namespace sm83 case 0xDB: rE = SET(3, rE); break; case 0xDC: rH = SET(3, rH); break; case 0xDD: rL = SET(3, rL); break; - case 0xDE: WRITE_MEM_8(rHL, SET(3, READ_MEM_8(rHL)));t++;break; + case 0xDE: WRITE_MEM_8(rHL, SET(3, READ_MEM_8(rHL)));break; case 0xDF: rA = SET(3, rA); break; case 0xE0: rB = SET(4, rB); break; @@ -1250,7 +1255,7 @@ namespace sm83 case 0xE3: rE = SET(4, rE); break; case 0xE4: rH = SET(4, rH); break; case 0xE5: rL = SET(4, rL); break; - case 0xE6: WRITE_MEM_8(rHL, SET(4, READ_MEM_8(rHL)));t++;break; + case 0xE6: WRITE_MEM_8(rHL, SET(4, READ_MEM_8(rHL)));break; case 0xE7: rA = SET(4, rA); break; case 0xE8: rB = SET(5, rB); break; case 0xE9: rC = SET(5, rC); break; @@ -1258,7 +1263,7 @@ namespace sm83 case 0xEB: rE = SET(5, rE); break; case 0xEC: rH = SET(5, rH); break; case 0xED: rL = SET(5, rL); break; - case 0xEE: WRITE_MEM_8(rHL, SET(5, READ_MEM_8(rHL)));t++;break; + case 0xEE: WRITE_MEM_8(rHL, SET(5, READ_MEM_8(rHL)));break; case 0xEF: rA = SET(5, rA); break; case 0xF0: rB = SET(6, rB); break; @@ -1267,7 +1272,7 @@ namespace sm83 case 0xF3: rE = SET(6, rE); break; case 0xF4: rH = SET(6, rH); break; case 0xF5: rL = SET(6, rL); break; - case 0xF6: WRITE_MEM_8(rHL, SET(6, READ_MEM_8(rHL)));t++;break; + case 0xF6: WRITE_MEM_8(rHL, SET(6, READ_MEM_8(rHL)));break; case 0xF7: rA = SET(6, rA); break; case 0xF8: rB = SET(7, rB); break; case 0xF9: rC = SET(7, rC); break; @@ -1275,7 +1280,7 @@ namespace sm83 case 0xFB: rE = SET(7, rE); break; case 0xFC: rH = SET(7, rH); break; case 0xFD: rL = SET(7, rL); break; - case 0xFE: WRITE_MEM_8(rHL, SET(7, READ_MEM_8(rHL)));t++;break; + case 0xFE: WRITE_MEM_8(rHL, SET(7, READ_MEM_8(rHL)));break; case 0xFF: rA = SET(7, rA); break; } } @@ -1287,1119 +1292,18 @@ namespace sm83 opcode_ignored=true; } - void IX_INSTRUCTIONS() - { - const uint8_t opcode = READ_M1(); - int8_t d; - - if (opcode!=0xCB) z80debug::useOpcode(opcode, 3); - - switch (opcode) - { - case 0x00: IgnoreOpcode(); break; - case 0x01: IgnoreOpcode(); break; - case 0x02: IgnoreOpcode(); break; - case 0x03: IgnoreOpcode(); break; - case 0x04: INC8(_rB); break; - case 0x05: DEC8(_rB); break; - case 0x06: rB = READ_MEM_8(); break; - case 0x07: IgnoreOpcode(); break; - case 0x08: IgnoreOpcode(); break; - case 0x09: ADD16(_rIX, rBC); break; - case 0x0A: IgnoreOpcode(); break; - case 0x0B: IgnoreOpcode(); break; - case 0x0C: INC8(_rC); break; - case 0x0D: DEC8(_rC); break; - case 0x0E: rC = READ_MEM_8(); break; - case 0x0F: IgnoreOpcode(); break; - - case 0x10: IgnoreOpcode(); break; - case 0x11: IgnoreOpcode(); break; - case 0x12: IgnoreOpcode(); break; - case 0x13: IgnoreOpcode(); break; - case 0x14: INC8(_rD); break; - case 0x15: DEC8(_rD); break; - case 0x16: rD = READ_MEM_8(); break; - case 0x17: IgnoreOpcode(); break; - case 0x18: IgnoreOpcode(); break; - case 0x19: ADD16(_rIX, rDE); break; - case 0x1A: IgnoreOpcode(); break; - case 0x1B: IgnoreOpcode(); break; - case 0x1C: INC8(_rE); break; - case 0x1D: DEC8(_rE); break; - case 0x1E: rE = READ_MEM_8(); break; - case 0x1F: IgnoreOpcode(); break; - - case 0x20: IgnoreOpcode(); break; - case 0x21: rIX = READ_MEM_16(); break; - case 0x22: WRITE_MEM_16(READ_MEM_16(),rIX); break; - case 0x23: INC16(_rIX); break; - case 0x24: INC8(_rIXH); break; - case 0x25: DEC8(_rIXH); break; - case 0x26: rIXH = READ_MEM_8(); break; - case 0x27: IgnoreOpcode(); break; - case 0x28: IgnoreOpcode(); break; - case 0x29: ADD16(_rIX, rIX); break; - case 0x2A: rIX = READ_MEM_16(READ_MEM_16());break; - case 0x2B: DEC16(_rIX); break; - case 0x2C: INC8(_rIXL); break; - case 0x2D: DEC8(_rIXL); break; - case 0x2E: rIXL = READ_MEM_8(); break; - case 0x2F: IgnoreOpcode(); break; - - case 0x30: IgnoreOpcode(); break; - case 0x31: IgnoreOpcode(); break; - case 0x32: IgnoreOpcode(); break; - case 0x33: IgnoreOpcode(); break; - case 0x34: d=READ_MEM_8(); INCMEM8(rIX+d);t+=2; break; - case 0x35: d=READ_MEM_8(); DECMEM8(rIX+d);t+=2; break; - case 0x36: d=READ_MEM_8(); WRITE_MEM_8(rIX+d, READ_MEM_8()); t+=2; break; - case 0x37: IgnoreOpcode(); break; - case 0x38: IgnoreOpcode(); break; - case 0x39: ADD16(_rIX, rSP); break; - case 0x3A: IgnoreOpcode(); break; - case 0x3B: IgnoreOpcode(); break; - case 0x3C: INC8(_rA); break; - case 0x3D: DEC8(_rA); break; - case 0x3E: rA = READ_MEM_8(); break; - case 0x3F: IgnoreOpcode(); break; - - case 0x40: rB = rB; break; - case 0x41: rB = rC; break; - case 0x42: rB = rD; break; - case 0x43: rB = rE; break; - case 0x44: rB = rIXH; break; - case 0x45: rB = rIXL; break; - case 0x46: d=READ_MEM_8(); rB = READ_MEM_8(rIX+d);t+=5;break; - case 0x47: rB = rA; break; - case 0x48: rC = rB; break; - case 0x49: rC = rC; break; - case 0x4A: rC = rD; break; - case 0x4B: rC = rE; break; - case 0x4C: rC = rIXH; break; - case 0x4D: rC = rIXL; break; - case 0x4E: d=READ_MEM_8(); rC = READ_MEM_8(rIX+d);t+=5;break; - case 0x4F: rC = rA; break; - - case 0x50: rD = rB; break; - case 0x51: rD = rC; break; - case 0x52: rD = rD; break; - case 0x53: rD = rE; break; - case 0x54: rD = rIXH; break; - case 0x55: rD = rIXL; break; - case 0x56: d=READ_MEM_8(); rD = READ_MEM_8(rIX+d);t+=5;break; - case 0x57: rD = rA; break; - case 0x58: rE = rB; break; - case 0x59: rE = rC; break; - case 0x5A: rE = rD; break; - case 0x5B: rE = rE; break; - case 0x5C: rE = rIXH; break; - case 0x5D: rE = rIXL; break; - case 0x5E: d=READ_MEM_8(); rE = READ_MEM_8(rIX+d);t+=5;break; - case 0x5F: rE = rA; break; - - case 0x60: rIXH = rB; break; - case 0x61: rIXH = rC; break; - case 0x62: rIXH = rD; break; - case 0x63: rIXH = rE; break; - case 0x64: rIXH = rIXH; break; - case 0x65: rIXH = rIXL; break; - case 0x66: d=READ_MEM_8(); rH = READ_MEM_8(rIX+d);t+=5;break; - case 0x67: rIXH = rA; break; - case 0x68: rIXL = rB; break; - case 0x69: rIXL = rC; break; - case 0x6A: rIXL = rD; break; - case 0x6B: rIXL = rE; break; - case 0x6C: rIXL = rIXH; break; - case 0x6D: rIXL = rIXL; break; - case 0x6E: d=READ_MEM_8(); rL = READ_MEM_8(rIX+d);t+=5;break; - case 0x6F: rIXL = rA; break; - - case 0x70: d=READ_MEM_8(); WRITE_MEM_8(rIX+d, rB);t+=5;break; - case 0x71: d=READ_MEM_8(); WRITE_MEM_8(rIX+d, rC);t+=5;break; - case 0x72: d=READ_MEM_8(); WRITE_MEM_8(rIX+d, rD);t+=5;break; - case 0x73: d=READ_MEM_8(); WRITE_MEM_8(rIX+d, rE);t+=5;break; - case 0x74: d=READ_MEM_8(); WRITE_MEM_8(rIX+d, rH);t+=5;break; - case 0x75: d=READ_MEM_8(); WRITE_MEM_8(rIX+d, rL);t+=5;break; - case 0x76: IgnoreOpcode(); break; - case 0x77: d=READ_MEM_8(); WRITE_MEM_8(rIX+d, rA);t+=5;break; - case 0x78: rA = rB; break; - case 0x79: rA = rC; break; - case 0x7A: rA = rD; break; - case 0x7B: rA = rE; break; - case 0x7C: rA = rIXH; break; - case 0x7D: rA = rIXL; break; - case 0x7E: d=READ_MEM_8(); rA = READ_MEM_8(rIX+d);t+=5;break; - case 0x7F: rA = rA; break; - - case 0x80: ADD8(rB); break; - case 0x81: ADD8(rC); break; - case 0x82: ADD8(rD); break; - case 0x83: ADD8(rE); break; - case 0x84: ADD8(rIXH); break; - case 0x85: ADD8(rIXL); break; - case 0x86: d=READ_MEM_8(); ADD8(READ_MEM_8(rIX+d));t+=5; break; - case 0x87: ADD8(rA); break; - case 0x88: ADC8(rB); break; - case 0x89: ADC8(rC); break; - case 0x8A: ADC8(rD); break; - case 0x8B: ADC8(rE); break; - case 0x8C: ADC8(rIXH); break; - case 0x8D: ADC8(rIXL); break; - case 0x8E: d=READ_MEM_8(); ADC8(READ_MEM_8(rIX+d));t+=5; break; - case 0x8F: ADC8(rA); break; - - case 0x90: SUB8(rB); break; - case 0x91: SUB8(rC); break; - case 0x92: SUB8(rD); break; - case 0x93: SUB8(rE); break; - case 0x94: SUB8(rIXH); break; - case 0x95: SUB8(rIXL); break; - case 0x96: d=READ_MEM_8(); SUB8(READ_MEM_8(rIX+d));t+=5; break; - case 0x97: SUB8(rA); break; - case 0x98: SBC8(rB); break; - case 0x99: SBC8(rC); break; - case 0x9A: SBC8(rD); break; - case 0x9B: SBC8(rE); break; - case 0x9C: SBC8(rIXH); break; - case 0x9D: SBC8(rIXL); break; - case 0x9E: d=READ_MEM_8(); SBC8(READ_MEM_8(rIX+d));t+=5; break; - case 0x9F: SBC8(rA); break; - - case 0xA0: AND(rB); break; - case 0xA1: AND(rC); break; - case 0xA2: AND(rD); break; - case 0xA3: AND(rE); break; - case 0xA4: AND(rIXH); break; - case 0xA5: AND(rIXL); break; - case 0xA6: d=READ_MEM_8(); AND(READ_MEM_8(rIX+d));t+=5; break; - case 0xA7: AND(rA); break; - case 0xA8: XOR(rB); break; - case 0xA9: XOR(rC); break; - case 0xAA: XOR(rD); break; - case 0xAB: XOR(rE); break; - case 0xAC: XOR(rIXH); break; - case 0xAD: XOR(rIXL); break; - case 0xAE: d=READ_MEM_8(); XOR(READ_MEM_8(rIX+d));t+=5; break; - case 0xAF: XOR(rA); break; - - case 0xB0: OR(rB); break; - case 0xB1: OR(rC); break; - case 0xB2: OR(rD); break; - case 0xB3: OR(rE); break; - case 0xB4: OR(rIXH); break; - case 0xB5: OR(rIXL); break; - case 0xB6: d=READ_MEM_8(); OR(READ_MEM_8(rIX+d));t+=5; break; - case 0xB7: OR(rA); break; - case 0xB8: CP(rB); break; - case 0xB9: CP(rC); break; - case 0xBA: CP(rD); break; - case 0xBB: CP(rE); break; - case 0xBC: CP(rIXH); break; - case 0xBD: CP(rIXL); break; - case 0xBE: d=READ_MEM_8(); CP(READ_MEM_8(rIX+d));t+=5; break; - case 0xBF: CP(rA); break; - - case 0xCB: IX_BIT_INSTRUCTIONS(); break; - case 0xE1: POP(_rIX); break; - case 0xE3: EX_MEM(_rIX, rSP); break; - case 0xE5: PUSH(rIX); break; - case 0xE9: JP(cNO, rIX); break; - case 0xF9: rSP = rIX; t+=2; break; - default: IgnoreOpcode(); break; - } - } - - void IX_BIT_INSTRUCTIONS() - { - const int8_t d = READ_MEM_8(); - const uint8_t opcode = READ_MEM_8(); - t+=3; - - z80debug::useOpcode(opcode, 4); - - switch (opcode) - { - case 0x00: rB = WRITE_MEM_8(rIX+d, RLC(READ_MEM_8(rIX+d))); break; - case 0x01: rC = WRITE_MEM_8(rIX+d, RLC(READ_MEM_8(rIX+d))); break; - case 0x02: rD = WRITE_MEM_8(rIX+d, RLC(READ_MEM_8(rIX+d))); break; - case 0x03: rE = WRITE_MEM_8(rIX+d, RLC(READ_MEM_8(rIX+d))); break; - case 0x04: rH = WRITE_MEM_8(rIX+d, RLC(READ_MEM_8(rIX+d))); break; - case 0x05: rL = WRITE_MEM_8(rIX+d, RLC(READ_MEM_8(rIX+d))); break; - case 0x06: WRITE_MEM_8(rIX+d, RLC(READ_MEM_8(rIX+d))); break; - case 0x07: rA = WRITE_MEM_8(rIX+d, RLC(READ_MEM_8(rIX+d))); break; - case 0x08: rB = WRITE_MEM_8(rIX+d, RRC(READ_MEM_8(rIX+d))); break; - case 0x09: rC = WRITE_MEM_8(rIX+d, RRC(READ_MEM_8(rIX+d))); break; - case 0x0A: rD = WRITE_MEM_8(rIX+d, RRC(READ_MEM_8(rIX+d))); break; - case 0x0B: rE = WRITE_MEM_8(rIX+d, RRC(READ_MEM_8(rIX+d))); break; - case 0x0C: rH = WRITE_MEM_8(rIX+d, RRC(READ_MEM_8(rIX+d))); break; - case 0x0D: rL = WRITE_MEM_8(rIX+d, RRC(READ_MEM_8(rIX+d))); break; - case 0x0E: WRITE_MEM_8(rIX+d, RRC(READ_MEM_8(rIX+d))); break; - case 0x0F: rA = WRITE_MEM_8(rIX+d, RRC(READ_MEM_8(rIX+d))); break; - - case 0x10: rB = WRITE_MEM_8(rIX+d, RL(READ_MEM_8(rIX+d))); break; - case 0x11: rC = WRITE_MEM_8(rIX+d, RL(READ_MEM_8(rIX+d))); break; - case 0x12: rD = WRITE_MEM_8(rIX+d, RL(READ_MEM_8(rIX+d))); break; - case 0x13: rE = WRITE_MEM_8(rIX+d, RL(READ_MEM_8(rIX+d))); break; - case 0x14: rH = WRITE_MEM_8(rIX+d, RL(READ_MEM_8(rIX+d))); break; - case 0x15: rL = WRITE_MEM_8(rIX+d, RL(READ_MEM_8(rIX+d))); break; - case 0x16: WRITE_MEM_8(rIX+d, RL(READ_MEM_8(rIX+d))); break; - case 0x17: rA = WRITE_MEM_8(rIX+d, RL(READ_MEM_8(rIX+d))); break; - case 0x18: rB = WRITE_MEM_8(rIX+d, RR(READ_MEM_8(rIX+d))); break; - case 0x19: rC = WRITE_MEM_8(rIX+d, RR(READ_MEM_8(rIX+d))); break; - case 0x1A: rD = WRITE_MEM_8(rIX+d, RR(READ_MEM_8(rIX+d))); break; - case 0x1B: rE = WRITE_MEM_8(rIX+d, RR(READ_MEM_8(rIX+d))); break; - case 0x1C: rH = WRITE_MEM_8(rIX+d, RR(READ_MEM_8(rIX+d))); break; - case 0x1D: rL = WRITE_MEM_8(rIX+d, RR(READ_MEM_8(rIX+d))); break; - case 0x1E: WRITE_MEM_8(rIX+d, RR(READ_MEM_8(rIX+d))); break; - case 0x1F: rA = WRITE_MEM_8(rIX+d, RR(READ_MEM_8(rIX+d))); break; - - case 0x20: rB = WRITE_MEM_8(rIX+d, SLA(READ_MEM_8(rIX+d))); break; - case 0x21: rC = WRITE_MEM_8(rIX+d, SLA(READ_MEM_8(rIX+d))); break; - case 0x22: rD = WRITE_MEM_8(rIX+d, SLA(READ_MEM_8(rIX+d))); break; - case 0x23: rE = WRITE_MEM_8(rIX+d, SLA(READ_MEM_8(rIX+d))); break; - case 0x24: rH = WRITE_MEM_8(rIX+d, SLA(READ_MEM_8(rIX+d))); break; - case 0x25: rL = WRITE_MEM_8(rIX+d, SLA(READ_MEM_8(rIX+d))); break; - case 0x26: WRITE_MEM_8(rIX+d, SLA(READ_MEM_8(rIX+d))); break; - case 0x27: rA = WRITE_MEM_8(rIX+d, SLA(READ_MEM_8(rIX+d))); break; - case 0x28: rB = WRITE_MEM_8(rIX+d, SRA(READ_MEM_8(rIX+d))); break; - case 0x29: rC = WRITE_MEM_8(rIX+d, SRA(READ_MEM_8(rIX+d))); break; - case 0x2A: rD = WRITE_MEM_8(rIX+d, SRA(READ_MEM_8(rIX+d))); break; - case 0x2B: rE = WRITE_MEM_8(rIX+d, SRA(READ_MEM_8(rIX+d))); break; - case 0x2C: rH = WRITE_MEM_8(rIX+d, SRA(READ_MEM_8(rIX+d))); break; - case 0x2D: rL = WRITE_MEM_8(rIX+d, SRA(READ_MEM_8(rIX+d))); break; - case 0x2E: WRITE_MEM_8(rIX+d, SRA(READ_MEM_8(rIX+d))); break; - case 0x2F: rA = WRITE_MEM_8(rIX+d, SRA(READ_MEM_8(rIX+d))); break; - - case 0x30: rB = WRITE_MEM_8(rIX+d, SLL(READ_MEM_8(rIX+d))); break; - case 0x31: rC = WRITE_MEM_8(rIX+d, SLL(READ_MEM_8(rIX+d))); break; - case 0x32: rD = WRITE_MEM_8(rIX+d, SLL(READ_MEM_8(rIX+d))); break; - case 0x33: rE = WRITE_MEM_8(rIX+d, SLL(READ_MEM_8(rIX+d))); break; - case 0x34: rH = WRITE_MEM_8(rIX+d, SLL(READ_MEM_8(rIX+d))); break; - case 0x35: rL = WRITE_MEM_8(rIX+d, SLL(READ_MEM_8(rIX+d))); break; - case 0x36: WRITE_MEM_8(rIX+d, SLL(READ_MEM_8(rIX+d))); break; - case 0x37: rA = WRITE_MEM_8(rIX+d, SLL(READ_MEM_8(rIX+d))); break; - case 0x38: rB = WRITE_MEM_8(rIX+d, SRL(READ_MEM_8(rIX+d))); break; - case 0x39: rC = WRITE_MEM_8(rIX+d, SRL(READ_MEM_8(rIX+d))); break; - case 0x3A: rD = WRITE_MEM_8(rIX+d, SRL(READ_MEM_8(rIX+d))); break; - case 0x3B: rE = WRITE_MEM_8(rIX+d, SRL(READ_MEM_8(rIX+d))); break; - case 0x3C: rH = WRITE_MEM_8(rIX+d, SRL(READ_MEM_8(rIX+d))); break; - case 0x3D: rL = WRITE_MEM_8(rIX+d, SRL(READ_MEM_8(rIX+d))); break; - case 0x3E: WRITE_MEM_8(rIX+d, SRL(READ_MEM_8(rIX+d))); break; - case 0x3F: rA = WRITE_MEM_8(rIX+d, SRL(READ_MEM_8(rIX+d))); break; - - case 0x40: BIT(0, READ_MEM_8(rIX+d)); break; - case 0x41: BIT(0, READ_MEM_8(rIX+d)); break; - case 0x42: BIT(0, READ_MEM_8(rIX+d)); break; - case 0x43: BIT(0, READ_MEM_8(rIX+d)); break; - case 0x44: BIT(0, READ_MEM_8(rIX+d)); break; - case 0x45: BIT(0, READ_MEM_8(rIX+d)); break; - case 0x46: BIT(0, READ_MEM_8(rIX+d)); break; - case 0x47: BIT(0, READ_MEM_8(rIX+d)); break; - case 0x48: BIT(1, READ_MEM_8(rIX+d)); break; - case 0x49: BIT(1, READ_MEM_8(rIX+d)); break; - case 0x4A: BIT(1, READ_MEM_8(rIX+d)); break; - case 0x4B: BIT(1, READ_MEM_8(rIX+d)); break; - case 0x4C: BIT(1, READ_MEM_8(rIX+d)); break; - case 0x4D: BIT(1, READ_MEM_8(rIX+d)); break; - case 0x4E: BIT(1, READ_MEM_8(rIX+d)); break; - case 0x4F: BIT(1, READ_MEM_8(rIX+d)); break; - - case 0x50: BIT(2, READ_MEM_8(rIX+d)); break; - case 0x51: BIT(2, READ_MEM_8(rIX+d)); break; - case 0x52: BIT(2, READ_MEM_8(rIX+d)); break; - case 0x53: BIT(2, READ_MEM_8(rIX+d)); break; - case 0x54: BIT(2, READ_MEM_8(rIX+d)); break; - case 0x55: BIT(2, READ_MEM_8(rIX+d)); break; - case 0x56: BIT(2, READ_MEM_8(rIX+d)); break; - case 0x57: BIT(2, READ_MEM_8(rIX+d)); break; - case 0x58: BIT(3, READ_MEM_8(rIX+d)); break; - case 0x59: BIT(3, READ_MEM_8(rIX+d)); break; - case 0x5A: BIT(3, READ_MEM_8(rIX+d)); break; - case 0x5B: BIT(3, READ_MEM_8(rIX+d)); break; - case 0x5C: BIT(3, READ_MEM_8(rIX+d)); break; - case 0x5D: BIT(3, READ_MEM_8(rIX+d)); break; - case 0x5E: BIT(3, READ_MEM_8(rIX+d)); break; - case 0x5F: BIT(3, READ_MEM_8(rIX+d)); break; - - case 0x60: BIT(4, READ_MEM_8(rIX+d)); break; - case 0x61: BIT(4, READ_MEM_8(rIX+d)); break; - case 0x62: BIT(4, READ_MEM_8(rIX+d)); break; - case 0x63: BIT(4, READ_MEM_8(rIX+d)); break; - case 0x64: BIT(4, READ_MEM_8(rIX+d)); break; - case 0x65: BIT(4, READ_MEM_8(rIX+d)); break; - case 0x66: BIT(4, READ_MEM_8(rIX+d)); break; - case 0x67: BIT(4, READ_MEM_8(rIX+d)); break; - case 0x68: BIT(5, READ_MEM_8(rIX+d)); break; - case 0x69: BIT(5, READ_MEM_8(rIX+d)); break; - case 0x6A: BIT(5, READ_MEM_8(rIX+d)); break; - case 0x6B: BIT(5, READ_MEM_8(rIX+d)); break; - case 0x6C: BIT(5, READ_MEM_8(rIX+d)); break; - case 0x6D: BIT(5, READ_MEM_8(rIX+d)); break; - case 0x6E: BIT(5, READ_MEM_8(rIX+d)); break; - case 0x6F: BIT(5, READ_MEM_8(rIX+d)); break; - - case 0x70: BIT(6, READ_MEM_8(rIX+d)); break; - case 0x71: BIT(6, READ_MEM_8(rIX+d)); break; - case 0x72: BIT(6, READ_MEM_8(rIX+d)); break; - case 0x73: BIT(6, READ_MEM_8(rIX+d)); break; - case 0x74: BIT(6, READ_MEM_8(rIX+d)); break; - case 0x75: BIT(6, READ_MEM_8(rIX+d)); break; - case 0x76: BIT(6, READ_MEM_8(rIX+d)); break; - case 0x77: BIT(6, READ_MEM_8(rIX+d)); break; - case 0x78: BIT(7, READ_MEM_8(rIX+d)); break; - case 0x79: BIT(7, READ_MEM_8(rIX+d)); break; - case 0x7A: BIT(7, READ_MEM_8(rIX+d)); break; - case 0x7B: BIT(7, READ_MEM_8(rIX+d)); break; - case 0x7C: BIT(7, READ_MEM_8(rIX+d)); break; - case 0x7D: BIT(7, READ_MEM_8(rIX+d)); break; - case 0x7E: BIT(7, READ_MEM_8(rIX+d)); break; - case 0x7F: BIT(7, READ_MEM_8(rIX+d)); break; - - case 0x80: rB = WRITE_MEM_8(rIX+d, RES(0, READ_MEM_8(rIX+d))); break; - case 0x81: rC = WRITE_MEM_8(rIX+d, RES(0, READ_MEM_8(rIX+d))); break; - case 0x82: rD = WRITE_MEM_8(rIX+d, RES(0, READ_MEM_8(rIX+d))); break; - case 0x83: rE = WRITE_MEM_8(rIX+d, RES(0, READ_MEM_8(rIX+d))); break; - case 0x84: rH = WRITE_MEM_8(rIX+d, RES(0, READ_MEM_8(rIX+d))); break; - case 0x85: rL = WRITE_MEM_8(rIX+d, RES(0, READ_MEM_8(rIX+d))); break; - case 0x86: WRITE_MEM_8(rIX+d, RES(0, READ_MEM_8(rIX+d))); break; - case 0x87: rA = WRITE_MEM_8(rIX+d, RES(0, READ_MEM_8(rIX+d))); break; - case 0x88: rB = WRITE_MEM_8(rIX+d, RES(1, READ_MEM_8(rIX+d))); break; - case 0x89: rC = WRITE_MEM_8(rIX+d, RES(1, READ_MEM_8(rIX+d))); break; - case 0x8A: rD = WRITE_MEM_8(rIX+d, RES(1, READ_MEM_8(rIX+d))); break; - case 0x8B: rE = WRITE_MEM_8(rIX+d, RES(1, READ_MEM_8(rIX+d))); break; - case 0x8C: rH = WRITE_MEM_8(rIX+d, RES(1, READ_MEM_8(rIX+d))); break; - case 0x8D: rL = WRITE_MEM_8(rIX+d, RES(1, READ_MEM_8(rIX+d))); break; - case 0x8E: WRITE_MEM_8(rIX+d, RES(1, READ_MEM_8(rIX+d))); break; - case 0x8F: rA = WRITE_MEM_8(rIX+d, RES(1, READ_MEM_8(rIX+d))); break; - - case 0x90: rB = WRITE_MEM_8(rIX+d, RES(2, READ_MEM_8(rIX+d))); break; - case 0x91: rC = WRITE_MEM_8(rIX+d, RES(2, READ_MEM_8(rIX+d))); break; - case 0x92: rD = WRITE_MEM_8(rIX+d, RES(2, READ_MEM_8(rIX+d))); break; - case 0x93: rE = WRITE_MEM_8(rIX+d, RES(2, READ_MEM_8(rIX+d))); break; - case 0x94: rH = WRITE_MEM_8(rIX+d, RES(2, READ_MEM_8(rIX+d))); break; - case 0x95: rL = WRITE_MEM_8(rIX+d, RES(2, READ_MEM_8(rIX+d))); break; - case 0x96: WRITE_MEM_8(rIX+d, RES(2, READ_MEM_8(rIX+d))); break; - case 0x97: rA = WRITE_MEM_8(rIX+d, RES(2, READ_MEM_8(rIX+d))); break; - case 0x98: rB = WRITE_MEM_8(rIX+d, RES(3, READ_MEM_8(rIX+d))); break; - case 0x99: rC = WRITE_MEM_8(rIX+d, RES(3, READ_MEM_8(rIX+d))); break; - case 0x9A: rD = WRITE_MEM_8(rIX+d, RES(3, READ_MEM_8(rIX+d))); break; - case 0x9B: rE = WRITE_MEM_8(rIX+d, RES(3, READ_MEM_8(rIX+d))); break; - case 0x9C: rH = WRITE_MEM_8(rIX+d, RES(3, READ_MEM_8(rIX+d))); break; - case 0x9D: rL = WRITE_MEM_8(rIX+d, RES(3, READ_MEM_8(rIX+d))); break; - case 0x9E: WRITE_MEM_8(rIX+d, RES(3, READ_MEM_8(rIX+d))); break; - case 0x9F: rA = WRITE_MEM_8(rIX+d, RES(3, READ_MEM_8(rIX+d))); break; - - case 0xA0: rB = WRITE_MEM_8(rIX+d, RES(4, READ_MEM_8(rIX+d))); break; - case 0xA1: rC = WRITE_MEM_8(rIX+d, RES(4, READ_MEM_8(rIX+d))); break; - case 0xA2: rD = WRITE_MEM_8(rIX+d, RES(4, READ_MEM_8(rIX+d))); break; - case 0xA3: rE = WRITE_MEM_8(rIX+d, RES(4, READ_MEM_8(rIX+d))); break; - case 0xA4: rH = WRITE_MEM_8(rIX+d, RES(4, READ_MEM_8(rIX+d))); break; - case 0xA5: rL = WRITE_MEM_8(rIX+d, RES(4, READ_MEM_8(rIX+d))); break; - case 0xA6: WRITE_MEM_8(rIX+d, RES(4, READ_MEM_8(rIX+d))); break; - case 0xA7: rA = WRITE_MEM_8(rIX+d, RES(4, READ_MEM_8(rIX+d))); break; - case 0xA8: rB = WRITE_MEM_8(rIX+d, RES(5, READ_MEM_8(rIX+d))); break; - case 0xA9: rC = WRITE_MEM_8(rIX+d, RES(5, READ_MEM_8(rIX+d))); break; - case 0xAA: rD = WRITE_MEM_8(rIX+d, RES(5, READ_MEM_8(rIX+d))); break; - case 0xAB: rE = WRITE_MEM_8(rIX+d, RES(5, READ_MEM_8(rIX+d))); break; - case 0xAC: rH = WRITE_MEM_8(rIX+d, RES(5, READ_MEM_8(rIX+d))); break; - case 0xAD: rL = WRITE_MEM_8(rIX+d, RES(5, READ_MEM_8(rIX+d))); break; - case 0xAE: WRITE_MEM_8(rIX+d, RES(5, READ_MEM_8(rIX+d))); break; - case 0xAF: rA = WRITE_MEM_8(rIX+d, RES(5, READ_MEM_8(rIX+d))); break; - - case 0xB0: rB = WRITE_MEM_8(rIX+d, RES(6, READ_MEM_8(rIX+d))); break; - case 0xB1: rC = WRITE_MEM_8(rIX+d, RES(6, READ_MEM_8(rIX+d))); break; - case 0xB2: rD = WRITE_MEM_8(rIX+d, RES(6, READ_MEM_8(rIX+d))); break; - case 0xB3: rE = WRITE_MEM_8(rIX+d, RES(6, READ_MEM_8(rIX+d))); break; - case 0xB4: rH = WRITE_MEM_8(rIX+d, RES(6, READ_MEM_8(rIX+d))); break; - case 0xB5: rL = WRITE_MEM_8(rIX+d, RES(6, READ_MEM_8(rIX+d))); break; - case 0xB6: WRITE_MEM_8(rIX+d, RES(6, READ_MEM_8(rIX+d))); break; - case 0xB7: rA = WRITE_MEM_8(rIX+d, RES(6, READ_MEM_8(rIX+d))); break; - case 0xB8: rB = WRITE_MEM_8(rIX+d, RES(7, READ_MEM_8(rIX+d))); break; - case 0xB9: rC = WRITE_MEM_8(rIX+d, RES(7, READ_MEM_8(rIX+d))); break; - case 0xBA: rD = WRITE_MEM_8(rIX+d, RES(7, READ_MEM_8(rIX+d))); break; - case 0xBB: rE = WRITE_MEM_8(rIX+d, RES(7, READ_MEM_8(rIX+d))); break; - case 0xBC: rH = WRITE_MEM_8(rIX+d, RES(7, READ_MEM_8(rIX+d))); break; - case 0xBD: rL = WRITE_MEM_8(rIX+d, RES(7, READ_MEM_8(rIX+d))); break; - case 0xBE: WRITE_MEM_8(rIX+d, RES(7, READ_MEM_8(rIX+d))); break; - case 0xBF: rA = WRITE_MEM_8(rIX+d, RES(7, READ_MEM_8(rIX+d))); break; - - case 0xC0: rB = WRITE_MEM_8(rIX+d, SET(0, READ_MEM_8(rIX+d))); break; - case 0xC1: rC = WRITE_MEM_8(rIX+d, SET(0, READ_MEM_8(rIX+d))); break; - case 0xC2: rD = WRITE_MEM_8(rIX+d, SET(0, READ_MEM_8(rIX+d))); break; - case 0xC3: rE = WRITE_MEM_8(rIX+d, SET(0, READ_MEM_8(rIX+d))); break; - case 0xC4: rH = WRITE_MEM_8(rIX+d, SET(0, READ_MEM_8(rIX+d))); break; - case 0xC5: rL = WRITE_MEM_8(rIX+d, SET(0, READ_MEM_8(rIX+d))); break; - case 0xC6: WRITE_MEM_8(rIX+d, SET(0, READ_MEM_8(rIX+d))); break; - case 0xC7: rA = WRITE_MEM_8(rIX+d, SET(0, READ_MEM_8(rIX+d))); break; - case 0xC8: rB = WRITE_MEM_8(rIX+d, SET(1, READ_MEM_8(rIX+d))); break; - case 0xC9: rC = WRITE_MEM_8(rIX+d, SET(1, READ_MEM_8(rIX+d))); break; - case 0xCA: rD = WRITE_MEM_8(rIX+d, SET(1, READ_MEM_8(rIX+d))); break; - case 0xCB: rE = WRITE_MEM_8(rIX+d, SET(1, READ_MEM_8(rIX+d))); break; - case 0xCC: rH = WRITE_MEM_8(rIX+d, SET(1, READ_MEM_8(rIX+d))); break; - case 0xCD: rL = WRITE_MEM_8(rIX+d, SET(1, READ_MEM_8(rIX+d))); break; - case 0xCE: WRITE_MEM_8(rIX+d, SET(1, READ_MEM_8(rIX+d))); break; - case 0xCF: rA = WRITE_MEM_8(rIX+d, SET(1, READ_MEM_8(rIX+d))); break; - - case 0xD0: rB = WRITE_MEM_8(rIX+d, SET(2, READ_MEM_8(rIX+d))); break; - case 0xD1: rC = WRITE_MEM_8(rIX+d, SET(2, READ_MEM_8(rIX+d))); break; - case 0xD2: rD = WRITE_MEM_8(rIX+d, SET(2, READ_MEM_8(rIX+d))); break; - case 0xD3: rE = WRITE_MEM_8(rIX+d, SET(2, READ_MEM_8(rIX+d))); break; - case 0xD4: rH = WRITE_MEM_8(rIX+d, SET(2, READ_MEM_8(rIX+d))); break; - case 0xD5: rL = WRITE_MEM_8(rIX+d, SET(2, READ_MEM_8(rIX+d))); break; - case 0xD6: WRITE_MEM_8(rIX+d, SET(2, READ_MEM_8(rIX+d))); break; - case 0xD7: rA = WRITE_MEM_8(rIX+d, SET(2, READ_MEM_8(rIX+d))); break; - case 0xD8: rB = WRITE_MEM_8(rIX+d, SET(3, READ_MEM_8(rIX+d))); break; - case 0xD9: rC = WRITE_MEM_8(rIX+d, SET(3, READ_MEM_8(rIX+d))); break; - case 0xDA: rD = WRITE_MEM_8(rIX+d, SET(3, READ_MEM_8(rIX+d))); break; - case 0xDB: rE = WRITE_MEM_8(rIX+d, SET(3, READ_MEM_8(rIX+d))); break; - case 0xDC: rH = WRITE_MEM_8(rIX+d, SET(3, READ_MEM_8(rIX+d))); break; - case 0xDD: rL = WRITE_MEM_8(rIX+d, SET(3, READ_MEM_8(rIX+d))); break; - case 0xDE: WRITE_MEM_8(rIX+d, SET(3, READ_MEM_8(rIX+d))); break; - case 0xDF: rA = WRITE_MEM_8(rIX+d, SET(3, READ_MEM_8(rIX+d))); break; - - case 0xE0: rB = WRITE_MEM_8(rIX+d, SET(4, READ_MEM_8(rIX+d))); break; - case 0xE1: rC = WRITE_MEM_8(rIX+d, SET(4, READ_MEM_8(rIX+d))); break; - case 0xE2: rD = WRITE_MEM_8(rIX+d, SET(4, READ_MEM_8(rIX+d))); break; - case 0xE3: rE = WRITE_MEM_8(rIX+d, SET(4, READ_MEM_8(rIX+d))); break; - case 0xE4: rH = WRITE_MEM_8(rIX+d, SET(4, READ_MEM_8(rIX+d))); break; - case 0xE5: rL = WRITE_MEM_8(rIX+d, SET(4, READ_MEM_8(rIX+d))); break; - case 0xE6: WRITE_MEM_8(rIX+d, SET(4, READ_MEM_8(rIX+d))); break; - case 0xE7: rA = WRITE_MEM_8(rIX+d, SET(4, READ_MEM_8(rIX+d))); break; - case 0xE8: rB = WRITE_MEM_8(rIX+d, SET(5, READ_MEM_8(rIX+d))); break; - case 0xE9: rC = WRITE_MEM_8(rIX+d, SET(5, READ_MEM_8(rIX+d))); break; - case 0xEA: rD = WRITE_MEM_8(rIX+d, SET(5, READ_MEM_8(rIX+d))); break; - case 0xEB: rE = WRITE_MEM_8(rIX+d, SET(5, READ_MEM_8(rIX+d))); break; - case 0xEC: rH = WRITE_MEM_8(rIX+d, SET(5, READ_MEM_8(rIX+d))); break; - case 0xED: rL = WRITE_MEM_8(rIX+d, SET(5, READ_MEM_8(rIX+d))); break; - case 0xEE: WRITE_MEM_8(rIX+d, SET(5, READ_MEM_8(rIX+d))); break; - case 0xEF: rA = WRITE_MEM_8(rIX+d, SET(5, READ_MEM_8(rIX+d))); break; - - case 0xF0: rB = WRITE_MEM_8(rIX+d, SET(6, READ_MEM_8(rIX+d))); break; - case 0xF1: rC = WRITE_MEM_8(rIX+d, SET(6, READ_MEM_8(rIX+d))); break; - case 0xF2: rD = WRITE_MEM_8(rIX+d, SET(6, READ_MEM_8(rIX+d))); break; - case 0xF3: rE = WRITE_MEM_8(rIX+d, SET(6, READ_MEM_8(rIX+d))); break; - case 0xF4: rH = WRITE_MEM_8(rIX+d, SET(6, READ_MEM_8(rIX+d))); break; - case 0xF5: rL = WRITE_MEM_8(rIX+d, SET(6, READ_MEM_8(rIX+d))); break; - case 0xF6: WRITE_MEM_8(rIX+d, SET(6, READ_MEM_8(rIX+d))); break; - case 0xF7: rA = WRITE_MEM_8(rIX+d, SET(6, READ_MEM_8(rIX+d))); break; - case 0xF8: rB = WRITE_MEM_8(rIX+d, SET(7, READ_MEM_8(rIX+d))); break; - case 0xF9: rC = WRITE_MEM_8(rIX+d, SET(7, READ_MEM_8(rIX+d))); break; - case 0xFA: rD = WRITE_MEM_8(rIX+d, SET(7, READ_MEM_8(rIX+d))); break; - case 0xFB: rE = WRITE_MEM_8(rIX+d, SET(7, READ_MEM_8(rIX+d))); break; - case 0xFC: rH = WRITE_MEM_8(rIX+d, SET(7, READ_MEM_8(rIX+d))); break; - case 0xFD: rL = WRITE_MEM_8(rIX+d, SET(7, READ_MEM_8(rIX+d))); break; - case 0xFE: WRITE_MEM_8(rIX+d, SET(7, READ_MEM_8(rIX+d))); break; - case 0xFF: rA = WRITE_MEM_8(rIX+d, SET(7, READ_MEM_8(rIX+d))); break; - } - } - - void MISC_INSTRUCTIONS() - { - const uint8_t opcode = READ_M1(); - - z80debug::useOpcode(opcode, 1); - - rR = (rR&0x80) + ((rR+1) & 0x7f); - uint16_t tmp; - - switch (opcode) - { - case 0x40: rB = IN(); break; - case 0x41: OUT(rB); break; - case 0x42: SBC16(_rHL, rBC); break; - case 0x43: WRITE_MEM_16(READ_MEM_16(), rBC);break; - case 0x44: NEG(); break; - case 0x45: RETN(); break; - case 0x46: IM(0); break; - case 0x47: rI = rA; t++; break; - case 0x48: rC = IN(); break; - case 0x49: OUT(rC); break; - case 0x4A: ADC16(_rHL, rBC); break; - case 0x4B: rBC = READ_MEM_16(READ_MEM_16());break; - case 0x4D: RETI(); break; - case 0x4F: rR = rA; t++; break; - - case 0x50: rD = IN(); break; - case 0x51: OUT(rD); break; - case 0x52: SBC16(_rHL, rDE); break; - case 0x53: WRITE_MEM_16(READ_MEM_16(), rDE);break; - case 0x56: IM(1); break; - case 0x57: LD_A_I(); break; - case 0x58: rE = IN(); break; - case 0x59: OUT(rE); break; - case 0x5A: ADC16(_rHL, rDE); break; - case 0x5B: rDE = READ_MEM_16(READ_MEM_16());break; - case 0x5E: IM(2); break; - case 0x5F: LD_A_R(); break; - - case 0x60: rH = IN(); break; - case 0x61: OUT(rH); break; - case 0x62: SBC16(_rHL, rHL); break; - case 0x63: WRITE_MEM_16(READ_MEM_16(), rHL);break; - case 0x67: RRD(); break; - case 0x68: rL = IN(); break; - case 0x69: OUT(rL); break; - case 0x6A: ADC16(_rHL, rHL); break; - case 0x6B: rHL = READ_MEM_16(READ_MEM_16());break; - case 0x6F: RLD(); break; - - case 0x70: IN(); break; - case 0x71: OUT(0); break; - case 0x72: SBC16(_rHL, rSP); break; - case 0x73: WRITE_MEM_16(READ_MEM_16(), rSP);break; - case 0x78: rA = IN(); break; - case 0x79: OUT(rA); break; - case 0x7A: ADC16(_rHL, rSP); break; - case 0x7B: rSP = READ_MEM_16(READ_MEM_16());break; - - case 0xA0: LDI(); break; - case 0xA1: CPI(); break; - case 0xA2: INI(); break; - case 0xA3: OUTI(); break; - case 0xA8: LDD(); break; - case 0xA9: CPD(); break; - case 0xAA: IND(); break; - case 0xAB: OUTD(); break; - - case 0xB0: LDIR(); break; - case 0xB1: CPIR(); break; - case 0xB2: INIR(); break; - case 0xB3: OUTIR(); break; - case 0xB8: LDDR(); break; - case 0xB9: CPDR(); break; - case 0xBA: INDR(); break; - case 0xBB: OUTDR(); break; - - default: INVALID(opcode); break; - } - - } - - void IY_INSTRUCTIONS() - { - const uint8_t opcode = READ_M1(); - int8_t d; - - if (opcode!=0xCB) z80debug::useOpcode(opcode, 5); - - switch (opcode) - { - case 0x00: IgnoreOpcode(); break; - case 0x01: IgnoreOpcode(); break; - case 0x02: IgnoreOpcode(); break; - case 0x03: IgnoreOpcode(); break; - case 0x04: INC8(_rB); break; - case 0x05: DEC8(_rB); break; - case 0x06: rB = READ_MEM_8(); break; - case 0x07: IgnoreOpcode(); break; - case 0x08: IgnoreOpcode(); break; - case 0x09: ADD16(_rIY, rBC); break; - case 0x0A: IgnoreOpcode(); break; - case 0x0B: IgnoreOpcode(); break; - case 0x0C: INC8(_rC); break; - case 0x0D: DEC8(_rC); break; - case 0x0E: rC = READ_MEM_8(); break; - case 0x0F: IgnoreOpcode(); break; - - case 0x10: IgnoreOpcode(); break; - case 0x11: IgnoreOpcode(); break; - case 0x12: IgnoreOpcode(); break; - case 0x13: IgnoreOpcode(); break; - case 0x14: INC8(_rD); break; - case 0x15: DEC8(_rD); break; - case 0x16: rD = READ_MEM_8(); break; - case 0x17: IgnoreOpcode(); break; - case 0x18: IgnoreOpcode(); break; - case 0x19: ADD16(_rIY, rDE); break; - case 0x1A: IgnoreOpcode(); break; - case 0x1B: IgnoreOpcode(); break; - case 0x1C: INC8(_rE); break; - case 0x1D: DEC8(_rE); break; - case 0x1E: rE = READ_MEM_8(); break; - case 0x1F: IgnoreOpcode(); break; - - case 0x20: IgnoreOpcode(); break; - case 0x21: rIY = READ_MEM_16(); break; - case 0x22: WRITE_MEM_16(READ_MEM_16(),rIY); break; - case 0x23: INC16(_rIY); break; - case 0x24: INC8(_rIYH); break; - case 0x25: DEC8(_rIYH); break; - case 0x26: rIYH = READ_MEM_8(); break; - case 0x27: IgnoreOpcode(); break; - case 0x28: IgnoreOpcode(); break; - case 0x29: ADD16(_rIY, rIY); break; - case 0x2A: rIY = READ_MEM_16(READ_MEM_16());break; - case 0x2B: DEC16(_rIY); break; - case 0x2C: INC8(_rIYL); break; - case 0x2D: DEC8(_rIYL); break; - case 0x2E: rIYL = READ_MEM_8(); break; - case 0x2F: IgnoreOpcode(); break; - - case 0x30: IgnoreOpcode(); break; - case 0x31: IgnoreOpcode(); break; - case 0x32: IgnoreOpcode(); break; - case 0x33: IgnoreOpcode(); break; - case 0x34: d=READ_MEM_8(); INCMEM8(rIY+d);t+=2; break; - case 0x35: d=READ_MEM_8(); DECMEM8(rIY+d);t+=2; break; - case 0x36: d=READ_MEM_8(); WRITE_MEM_8(rIY+d, READ_MEM_8()); t+=2; break; - case 0x37: IgnoreOpcode(); break; - case 0x38: IgnoreOpcode(); break; - case 0x39: ADD16(_rIY, rSP); break; - case 0x3A: IgnoreOpcode(); break; - case 0x3B: IgnoreOpcode(); break; - case 0x3C: INC8(_rA); break; - case 0x3D: DEC8(_rA); break; - case 0x3E: rA = READ_MEM_8(); break; - case 0x3F: IgnoreOpcode(); break; - - case 0x40: rB = rB; break; - case 0x41: rB = rC; break; - case 0x42: rB = rD; break; - case 0x43: rB = rE; break; - case 0x44: rB = rIYH; break; - case 0x45: rB = rIYL; break; - case 0x46: d=READ_MEM_8(); rB = READ_MEM_8(rIY+d);t+=5;break; - case 0x47: rB = rA; break; - case 0x48: rC = rB; break; - case 0x49: rC = rC; break; - case 0x4A: rC = rD; break; - case 0x4B: rC = rE; break; - case 0x4C: rC = rIYH; break; - case 0x4D: rC = rIYL; break; - case 0x4E: d=READ_MEM_8(); rC = READ_MEM_8(rIY+d);t+=5;break; - case 0x4F: rC = rA; break; - - case 0x50: rD = rB; break; - case 0x51: rD = rC; break; - case 0x52: rD = rD; break; - case 0x53: rD = rE; break; - case 0x54: rD = rIYH; break; - case 0x55: rD = rIYL; break; - case 0x56: d=READ_MEM_8(); rD = READ_MEM_8(rIY+d);t+=5;break; - case 0x57: rD = rA; break; - case 0x58: rE = rB; break; - case 0x59: rE = rC; break; - case 0x5A: rE = rD; break; - case 0x5B: rE = rE; break; - case 0x5C: rE = rIYH; break; - case 0x5D: rE = rIYL; break; - case 0x5E: d=READ_MEM_8(); rE = READ_MEM_8(rIY+d);t+=5;break; - case 0x5F: rE = rA; break; - - case 0x60: rIYH = rB; break; - case 0x61: rIYH = rC; break; - case 0x62: rIYH = rD; break; - case 0x63: rIYH = rE; break; - case 0x64: rIYH = rIYH; break; - case 0x65: rIYH = rIYL; break; - case 0x66: d=READ_MEM_8(); rH = READ_MEM_8(rIY+d);t+=5;break; - case 0x67: rIYH = rA; break; - case 0x68: rIYL = rB; break; - case 0x69: rIYL = rC; break; - case 0x6A: rIYL = rD; break; - case 0x6B: rIYL = rE; break; - case 0x6C: rIYL = rIYH; break; - case 0x6D: rIYL = rIYL; break; - case 0x6E: d=READ_MEM_8(); rL = READ_MEM_8(rIY+d);t+=5;break; - case 0x6F: rIYL = rA; break; - - case 0x70: d=READ_MEM_8(); WRITE_MEM_8(rIY+d, rB);t+=5;break; - case 0x71: d=READ_MEM_8(); WRITE_MEM_8(rIY+d, rC);t+=5;break; - case 0x72: d=READ_MEM_8(); WRITE_MEM_8(rIY+d, rD);t+=5;break; - case 0x73: d=READ_MEM_8(); WRITE_MEM_8(rIY+d, rE);t+=5;break; - case 0x74: d=READ_MEM_8(); WRITE_MEM_8(rIY+d, rH);t+=5;break; - case 0x75: d=READ_MEM_8(); WRITE_MEM_8(rIY+d, rL);t+=5;break; - case 0x76: IgnoreOpcode(); break; - case 0x77: d=READ_MEM_8(); WRITE_MEM_8(rIY+d, rA);t+=5;break; - case 0x78: rA = rB; break; - case 0x79: rA = rC; break; - case 0x7A: rA = rD; break; - case 0x7B: rA = rE; break; - case 0x7C: rA = rIYH; break; - case 0x7D: rA = rIYL; break; - case 0x7E: d=READ_MEM_8(); rA = READ_MEM_8(rIY+d);t+=5;break; - case 0x7F: rA = rA; break; - - case 0x80: ADD8(rB); break; - case 0x81: ADD8(rC); break; - case 0x82: ADD8(rD); break; - case 0x83: ADD8(rE); break; - case 0x84: ADD8(rIYH); break; - case 0x85: ADD8(rIYL); break; - case 0x86: d=READ_MEM_8(); ADD8(READ_MEM_8(rIY+d));t+=5; break; - case 0x87: ADD8(rA); break; - case 0x88: ADC8(rB); break; - case 0x89: ADC8(rC); break; - case 0x8A: ADC8(rD); break; - case 0x8B: ADC8(rE); break; - case 0x8C: ADC8(rIYH); break; - case 0x8D: ADC8(rIYL); break; - case 0x8E: d=READ_MEM_8(); ADC8(READ_MEM_8(rIY+d));t+=5; break; - case 0x8F: ADC8(rA); break; - - case 0x90: SUB8(rB); break; - case 0x91: SUB8(rC); break; - case 0x92: SUB8(rD); break; - case 0x93: SUB8(rE); break; - case 0x94: SUB8(rIYH); break; - case 0x95: SUB8(rIYL); break; - case 0x96: d=READ_MEM_8(); SUB8(READ_MEM_8(rIY+d));t+=5; break; - case 0x97: SUB8(rA); break; - case 0x98: SBC8(rB); break; - case 0x99: SBC8(rC); break; - case 0x9A: SBC8(rD); break; - case 0x9B: SBC8(rE); break; - case 0x9C: SBC8(rIYH); break; - case 0x9D: SBC8(rIYL); break; - case 0x9E: d=READ_MEM_8(); SBC8(READ_MEM_8(rIY+d));t+=5; break; - case 0x9F: SBC8(rA); break; - - case 0xA0: AND(rB); break; - case 0xA1: AND(rC); break; - case 0xA2: AND(rD); break; - case 0xA3: AND(rE); break; - case 0xA4: AND(rIYH); break; - case 0xA5: AND(rIYL); break; - case 0xA6: d=READ_MEM_8(); AND(READ_MEM_8(rIY+d));t+=5; break; - case 0xA7: AND(rA); break; - case 0xA8: XOR(rB); break; - case 0xA9: XOR(rC); break; - case 0xAA: XOR(rD); break; - case 0xAB: XOR(rE); break; - case 0xAC: XOR(rIYH); break; - case 0xAD: XOR(rIYL); break; - case 0xAE: d=READ_MEM_8(); XOR(READ_MEM_8(rIY+d));t+=5; break; - case 0xAF: XOR(rA); break; - - case 0xB0: OR(rB); break; - case 0xB1: OR(rC); break; - case 0xB2: OR(rD); break; - case 0xB3: OR(rE); break; - case 0xB4: OR(rIYH); break; - case 0xB5: OR(rIYL); break; - case 0xB6: d=READ_MEM_8(); OR(READ_MEM_8(rIY+d));t+=5; break; - case 0xB7: OR(rA); break; - case 0xB8: CP(rB); break; - case 0xB9: CP(rC); break; - case 0xBA: CP(rD); break; - case 0xBB: CP(rE); break; - case 0xBC: CP(rIYH); break; - case 0xBD: CP(rIYL); break; - case 0xBE: d=READ_MEM_8(); CP(READ_MEM_8(rIY+d));t+=5; break; - case 0xBF: CP(rA); break; - - case 0xCB: IY_BIT_INSTRUCTIONS(); break; - case 0xE1: POP(_rIY); break; - case 0xE3: EX_MEM(_rIY, rSP); break; - case 0xE5: PUSH(rIY); break; - case 0xE9: JP(cNO, rIY); break; - case 0xF9: rSP = rIY; t+=2; break; - default: IgnoreOpcode(); break; - } - } - - void IY_BIT_INSTRUCTIONS() - { - const int8_t d = READ_MEM_8(); - const uint8_t opcode = READ_MEM_8(); - t+=3; - - z80debug::useOpcode(opcode, 6); - - switch (opcode) - { - case 0x00: rB = WRITE_MEM_8(rIY+d, RLC(READ_MEM_8(rIY+d))); break; - case 0x01: rC = WRITE_MEM_8(rIY+d, RLC(READ_MEM_8(rIY+d))); break; - case 0x02: rD = WRITE_MEM_8(rIY+d, RLC(READ_MEM_8(rIY+d))); break; - case 0x03: rE = WRITE_MEM_8(rIY+d, RLC(READ_MEM_8(rIY+d))); break; - case 0x04: rH = WRITE_MEM_8(rIY+d, RLC(READ_MEM_8(rIY+d))); break; - case 0x05: rL = WRITE_MEM_8(rIY+d, RLC(READ_MEM_8(rIY+d))); break; - case 0x06: WRITE_MEM_8(rIY+d, RLC(READ_MEM_8(rIY+d))); break; - case 0x07: rA = WRITE_MEM_8(rIY+d, RLC(READ_MEM_8(rIY+d))); break; - case 0x08: rB = WRITE_MEM_8(rIY+d, RRC(READ_MEM_8(rIY+d))); break; - case 0x09: rC = WRITE_MEM_8(rIY+d, RRC(READ_MEM_8(rIY+d))); break; - case 0x0A: rD = WRITE_MEM_8(rIY+d, RRC(READ_MEM_8(rIY+d))); break; - case 0x0B: rE = WRITE_MEM_8(rIY+d, RRC(READ_MEM_8(rIY+d))); break; - case 0x0C: rH = WRITE_MEM_8(rIY+d, RRC(READ_MEM_8(rIY+d))); break; - case 0x0D: rL = WRITE_MEM_8(rIY+d, RRC(READ_MEM_8(rIY+d))); break; - case 0x0E: WRITE_MEM_8(rIY+d, RRC(READ_MEM_8(rIY+d))); break; - case 0x0F: rA = WRITE_MEM_8(rIY+d, RRC(READ_MEM_8(rIY+d))); break; - - case 0x10: rB = WRITE_MEM_8(rIY+d, RL(READ_MEM_8(rIY+d))); break; - case 0x11: rC = WRITE_MEM_8(rIY+d, RL(READ_MEM_8(rIY+d))); break; - case 0x12: rD = WRITE_MEM_8(rIY+d, RL(READ_MEM_8(rIY+d))); break; - case 0x13: rE = WRITE_MEM_8(rIY+d, RL(READ_MEM_8(rIY+d))); break; - case 0x14: rH = WRITE_MEM_8(rIY+d, RL(READ_MEM_8(rIY+d))); break; - case 0x15: rL = WRITE_MEM_8(rIY+d, RL(READ_MEM_8(rIY+d))); break; - case 0x16: WRITE_MEM_8(rIY+d, RL(READ_MEM_8(rIY+d))); break; - case 0x17: rA = WRITE_MEM_8(rIY+d, RL(READ_MEM_8(rIY+d))); break; - case 0x18: rB = WRITE_MEM_8(rIY+d, RR(READ_MEM_8(rIY+d))); break; - case 0x19: rC = WRITE_MEM_8(rIY+d, RR(READ_MEM_8(rIY+d))); break; - case 0x1A: rD = WRITE_MEM_8(rIY+d, RR(READ_MEM_8(rIY+d))); break; - case 0x1B: rE = WRITE_MEM_8(rIY+d, RR(READ_MEM_8(rIY+d))); break; - case 0x1C: rH = WRITE_MEM_8(rIY+d, RR(READ_MEM_8(rIY+d))); break; - case 0x1D: rL = WRITE_MEM_8(rIY+d, RR(READ_MEM_8(rIY+d))); break; - case 0x1E: WRITE_MEM_8(rIY+d, RR(READ_MEM_8(rIY+d))); break; - case 0x1F: rA = WRITE_MEM_8(rIY+d, RR(READ_MEM_8(rIY+d))); break; - - case 0x20: rB = WRITE_MEM_8(rIY+d, SLA(READ_MEM_8(rIY+d))); break; - case 0x21: rC = WRITE_MEM_8(rIY+d, SLA(READ_MEM_8(rIY+d))); break; - case 0x22: rD = WRITE_MEM_8(rIY+d, SLA(READ_MEM_8(rIY+d))); break; - case 0x23: rE = WRITE_MEM_8(rIY+d, SLA(READ_MEM_8(rIY+d))); break; - case 0x24: rH = WRITE_MEM_8(rIY+d, SLA(READ_MEM_8(rIY+d))); break; - case 0x25: rL = WRITE_MEM_8(rIY+d, SLA(READ_MEM_8(rIY+d))); break; - case 0x26: WRITE_MEM_8(rIY+d, SLA(READ_MEM_8(rIY+d))); break; - case 0x27: rA = WRITE_MEM_8(rIY+d, SLA(READ_MEM_8(rIY+d))); break; - case 0x28: rB = WRITE_MEM_8(rIY+d, SRA(READ_MEM_8(rIY+d))); break; - case 0x29: rC = WRITE_MEM_8(rIY+d, SRA(READ_MEM_8(rIY+d))); break; - case 0x2A: rD = WRITE_MEM_8(rIY+d, SRA(READ_MEM_8(rIY+d))); break; - case 0x2B: rE = WRITE_MEM_8(rIY+d, SRA(READ_MEM_8(rIY+d))); break; - case 0x2C: rH = WRITE_MEM_8(rIY+d, SRA(READ_MEM_8(rIY+d))); break; - case 0x2D: rL = WRITE_MEM_8(rIY+d, SRA(READ_MEM_8(rIY+d))); break; - case 0x2E: WRITE_MEM_8(rIY+d, SRA(READ_MEM_8(rIY+d))); break; - case 0x2F: rA = WRITE_MEM_8(rIY+d, SRA(READ_MEM_8(rIY+d))); break; - - case 0x30: rB = WRITE_MEM_8(rIY+d, SLL(READ_MEM_8(rIY+d))); break; - case 0x31: rC = WRITE_MEM_8(rIY+d, SLL(READ_MEM_8(rIY+d))); break; - case 0x32: rD = WRITE_MEM_8(rIY+d, SLL(READ_MEM_8(rIY+d))); break; - case 0x33: rE = WRITE_MEM_8(rIY+d, SLL(READ_MEM_8(rIY+d))); break; - case 0x34: rH = WRITE_MEM_8(rIY+d, SLL(READ_MEM_8(rIY+d))); break; - case 0x35: rL = WRITE_MEM_8(rIY+d, SLL(READ_MEM_8(rIY+d))); break; - case 0x36: WRITE_MEM_8(rIY+d, SLL(READ_MEM_8(rIY+d))); break; - case 0x37: rA = WRITE_MEM_8(rIY+d, SLL(READ_MEM_8(rIY+d))); break; - case 0x38: rB = WRITE_MEM_8(rIY+d, SRL(READ_MEM_8(rIY+d))); break; - case 0x39: rC = WRITE_MEM_8(rIY+d, SRL(READ_MEM_8(rIY+d))); break; - case 0x3A: rD = WRITE_MEM_8(rIY+d, SRL(READ_MEM_8(rIY+d))); break; - case 0x3B: rE = WRITE_MEM_8(rIY+d, SRL(READ_MEM_8(rIY+d))); break; - case 0x3C: rH = WRITE_MEM_8(rIY+d, SRL(READ_MEM_8(rIY+d))); break; - case 0x3D: rL = WRITE_MEM_8(rIY+d, SRL(READ_MEM_8(rIY+d))); break; - case 0x3E: WRITE_MEM_8(rIY+d, SRL(READ_MEM_8(rIY+d))); break; - case 0x3F: rA = WRITE_MEM_8(rIY+d, SRL(READ_MEM_8(rIY+d))); break; - - case 0x40: BIT(0, READ_MEM_8(rIY+d)); break; - case 0x41: BIT(0, READ_MEM_8(rIY+d)); break; - case 0x42: BIT(0, READ_MEM_8(rIY+d)); break; - case 0x43: BIT(0, READ_MEM_8(rIY+d)); break; - case 0x44: BIT(0, READ_MEM_8(rIY+d)); break; - case 0x45: BIT(0, READ_MEM_8(rIY+d)); break; - case 0x46: BIT(0, READ_MEM_8(rIY+d)); break; - case 0x47: BIT(0, READ_MEM_8(rIY+d)); break; - case 0x48: BIT(1, READ_MEM_8(rIY+d)); break; - case 0x49: BIT(1, READ_MEM_8(rIY+d)); break; - case 0x4A: BIT(1, READ_MEM_8(rIY+d)); break; - case 0x4B: BIT(1, READ_MEM_8(rIY+d)); break; - case 0x4C: BIT(1, READ_MEM_8(rIY+d)); break; - case 0x4D: BIT(1, READ_MEM_8(rIY+d)); break; - case 0x4E: BIT(1, READ_MEM_8(rIY+d)); break; - case 0x4F: BIT(1, READ_MEM_8(rIY+d)); break; - - case 0x50: BIT(2, READ_MEM_8(rIY+d)); break; - case 0x51: BIT(2, READ_MEM_8(rIY+d)); break; - case 0x52: BIT(2, READ_MEM_8(rIY+d)); break; - case 0x53: BIT(2, READ_MEM_8(rIY+d)); break; - case 0x54: BIT(2, READ_MEM_8(rIY+d)); break; - case 0x55: BIT(2, READ_MEM_8(rIY+d)); break; - case 0x56: BIT(2, READ_MEM_8(rIY+d)); break; - case 0x57: BIT(2, READ_MEM_8(rIY+d)); break; - case 0x58: BIT(3, READ_MEM_8(rIY+d)); break; - case 0x59: BIT(3, READ_MEM_8(rIY+d)); break; - case 0x5A: BIT(3, READ_MEM_8(rIY+d)); break; - case 0x5B: BIT(3, READ_MEM_8(rIY+d)); break; - case 0x5C: BIT(3, READ_MEM_8(rIY+d)); break; - case 0x5D: BIT(3, READ_MEM_8(rIY+d)); break; - case 0x5E: BIT(3, READ_MEM_8(rIY+d)); break; - case 0x5F: BIT(3, READ_MEM_8(rIY+d)); break; - - case 0x60: BIT(4, READ_MEM_8(rIY+d)); break; - case 0x61: BIT(4, READ_MEM_8(rIY+d)); break; - case 0x62: BIT(4, READ_MEM_8(rIY+d)); break; - case 0x63: BIT(4, READ_MEM_8(rIY+d)); break; - case 0x64: BIT(4, READ_MEM_8(rIY+d)); break; - case 0x65: BIT(4, READ_MEM_8(rIY+d)); break; - case 0x66: BIT(4, READ_MEM_8(rIY+d)); break; - case 0x67: BIT(4, READ_MEM_8(rIY+d)); break; - case 0x68: BIT(5, READ_MEM_8(rIY+d)); break; - case 0x69: BIT(5, READ_MEM_8(rIY+d)); break; - case 0x6A: BIT(5, READ_MEM_8(rIY+d)); break; - case 0x6B: BIT(5, READ_MEM_8(rIY+d)); break; - case 0x6C: BIT(5, READ_MEM_8(rIY+d)); break; - case 0x6D: BIT(5, READ_MEM_8(rIY+d)); break; - case 0x6E: BIT(5, READ_MEM_8(rIY+d)); break; - case 0x6F: BIT(5, READ_MEM_8(rIY+d)); break; - - case 0x70: BIT(6, READ_MEM_8(rIY+d)); break; - case 0x71: BIT(6, READ_MEM_8(rIY+d)); break; - case 0x72: BIT(6, READ_MEM_8(rIY+d)); break; - case 0x73: BIT(6, READ_MEM_8(rIY+d)); break; - case 0x74: BIT(6, READ_MEM_8(rIY+d)); break; - case 0x75: BIT(6, READ_MEM_8(rIY+d)); break; - case 0x76: BIT(6, READ_MEM_8(rIY+d)); break; - case 0x77: BIT(6, READ_MEM_8(rIY+d)); break; - case 0x78: BIT(7, READ_MEM_8(rIY+d)); break; - case 0x79: BIT(7, READ_MEM_8(rIY+d)); break; - case 0x7A: BIT(7, READ_MEM_8(rIY+d)); break; - case 0x7B: BIT(7, READ_MEM_8(rIY+d)); break; - case 0x7C: BIT(7, READ_MEM_8(rIY+d)); break; - case 0x7D: BIT(7, READ_MEM_8(rIY+d)); break; - case 0x7E: BIT(7, READ_MEM_8(rIY+d)); break; - case 0x7F: BIT(7, READ_MEM_8(rIY+d)); break; - - case 0x80: rB = WRITE_MEM_8(rIY+d, RES(0, READ_MEM_8(rIY+d))); break; - case 0x81: rC = WRITE_MEM_8(rIY+d, RES(0, READ_MEM_8(rIY+d))); break; - case 0x82: rD = WRITE_MEM_8(rIY+d, RES(0, READ_MEM_8(rIY+d))); break; - case 0x83: rE = WRITE_MEM_8(rIY+d, RES(0, READ_MEM_8(rIY+d))); break; - case 0x84: rH = WRITE_MEM_8(rIY+d, RES(0, READ_MEM_8(rIY+d))); break; - case 0x85: rL = WRITE_MEM_8(rIY+d, RES(0, READ_MEM_8(rIY+d))); break; - case 0x86: WRITE_MEM_8(rIY+d, RES(0, READ_MEM_8(rIY+d))); break; - case 0x87: rA = WRITE_MEM_8(rIY+d, RES(0, READ_MEM_8(rIY+d))); break; - case 0x88: rB = WRITE_MEM_8(rIY+d, RES(1, READ_MEM_8(rIY+d))); break; - case 0x89: rC = WRITE_MEM_8(rIY+d, RES(1, READ_MEM_8(rIY+d))); break; - case 0x8A: rD = WRITE_MEM_8(rIY+d, RES(1, READ_MEM_8(rIY+d))); break; - case 0x8B: rE = WRITE_MEM_8(rIY+d, RES(1, READ_MEM_8(rIY+d))); break; - case 0x8C: rH = WRITE_MEM_8(rIY+d, RES(1, READ_MEM_8(rIY+d))); break; - case 0x8D: rL = WRITE_MEM_8(rIY+d, RES(1, READ_MEM_8(rIY+d))); break; - case 0x8E: WRITE_MEM_8(rIY+d, RES(1, READ_MEM_8(rIY+d))); break; - case 0x8F: rA = WRITE_MEM_8(rIY+d, RES(1, READ_MEM_8(rIY+d))); break; - - case 0x90: rB = WRITE_MEM_8(rIY+d, RES(2, READ_MEM_8(rIY+d))); break; - case 0x91: rC = WRITE_MEM_8(rIY+d, RES(2, READ_MEM_8(rIY+d))); break; - case 0x92: rD = WRITE_MEM_8(rIY+d, RES(2, READ_MEM_8(rIY+d))); break; - case 0x93: rE = WRITE_MEM_8(rIY+d, RES(2, READ_MEM_8(rIY+d))); break; - case 0x94: rH = WRITE_MEM_8(rIY+d, RES(2, READ_MEM_8(rIY+d))); break; - case 0x95: rL = WRITE_MEM_8(rIY+d, RES(2, READ_MEM_8(rIY+d))); break; - case 0x96: WRITE_MEM_8(rIY+d, RES(2, READ_MEM_8(rIY+d))); break; - case 0x97: rA = WRITE_MEM_8(rIY+d, RES(2, READ_MEM_8(rIY+d))); break; - case 0x98: rB = WRITE_MEM_8(rIY+d, RES(3, READ_MEM_8(rIY+d))); break; - case 0x99: rC = WRITE_MEM_8(rIY+d, RES(3, READ_MEM_8(rIY+d))); break; - case 0x9A: rD = WRITE_MEM_8(rIY+d, RES(3, READ_MEM_8(rIY+d))); break; - case 0x9B: rE = WRITE_MEM_8(rIY+d, RES(3, READ_MEM_8(rIY+d))); break; - case 0x9C: rH = WRITE_MEM_8(rIY+d, RES(3, READ_MEM_8(rIY+d))); break; - case 0x9D: rL = WRITE_MEM_8(rIY+d, RES(3, READ_MEM_8(rIY+d))); break; - case 0x9E: WRITE_MEM_8(rIY+d, RES(3, READ_MEM_8(rIY+d))); break; - case 0x9F: rA = WRITE_MEM_8(rIY+d, RES(3, READ_MEM_8(rIY+d))); break; - - case 0xA0: rB = WRITE_MEM_8(rIY+d, RES(4, READ_MEM_8(rIY+d))); break; - case 0xA1: rC = WRITE_MEM_8(rIY+d, RES(4, READ_MEM_8(rIY+d))); break; - case 0xA2: rD = WRITE_MEM_8(rIY+d, RES(4, READ_MEM_8(rIY+d))); break; - case 0xA3: rE = WRITE_MEM_8(rIY+d, RES(4, READ_MEM_8(rIY+d))); break; - case 0xA4: rH = WRITE_MEM_8(rIY+d, RES(4, READ_MEM_8(rIY+d))); break; - case 0xA5: rL = WRITE_MEM_8(rIY+d, RES(4, READ_MEM_8(rIY+d))); break; - case 0xA6: WRITE_MEM_8(rIY+d, RES(4, READ_MEM_8(rIY+d))); break; - case 0xA7: rA = WRITE_MEM_8(rIY+d, RES(4, READ_MEM_8(rIY+d))); break; - case 0xA8: rB = WRITE_MEM_8(rIY+d, RES(5, READ_MEM_8(rIY+d))); break; - case 0xA9: rC = WRITE_MEM_8(rIY+d, RES(5, READ_MEM_8(rIY+d))); break; - case 0xAA: rD = WRITE_MEM_8(rIY+d, RES(5, READ_MEM_8(rIY+d))); break; - case 0xAB: rE = WRITE_MEM_8(rIY+d, RES(5, READ_MEM_8(rIY+d))); break; - case 0xAC: rH = WRITE_MEM_8(rIY+d, RES(5, READ_MEM_8(rIY+d))); break; - case 0xAD: rL = WRITE_MEM_8(rIY+d, RES(5, READ_MEM_8(rIY+d))); break; - case 0xAE: WRITE_MEM_8(rIY+d, RES(5, READ_MEM_8(rIY+d))); break; - case 0xAF: rA = WRITE_MEM_8(rIY+d, RES(5, READ_MEM_8(rIY+d))); break; - - case 0xB0: rB = WRITE_MEM_8(rIY+d, RES(6, READ_MEM_8(rIY+d))); break; - case 0xB1: rC = WRITE_MEM_8(rIY+d, RES(6, READ_MEM_8(rIY+d))); break; - case 0xB2: rD = WRITE_MEM_8(rIY+d, RES(6, READ_MEM_8(rIY+d))); break; - case 0xB3: rE = WRITE_MEM_8(rIY+d, RES(6, READ_MEM_8(rIY+d))); break; - case 0xB4: rH = WRITE_MEM_8(rIY+d, RES(6, READ_MEM_8(rIY+d))); break; - case 0xB5: rL = WRITE_MEM_8(rIY+d, RES(6, READ_MEM_8(rIY+d))); break; - case 0xB6: WRITE_MEM_8(rIY+d, RES(6, READ_MEM_8(rIY+d))); break; - case 0xB7: rA = WRITE_MEM_8(rIY+d, RES(6, READ_MEM_8(rIY+d))); break; - case 0xB8: rB = WRITE_MEM_8(rIY+d, RES(7, READ_MEM_8(rIY+d))); break; - case 0xB9: rC = WRITE_MEM_8(rIY+d, RES(7, READ_MEM_8(rIY+d))); break; - case 0xBA: rD = WRITE_MEM_8(rIY+d, RES(7, READ_MEM_8(rIY+d))); break; - case 0xBB: rE = WRITE_MEM_8(rIY+d, RES(7, READ_MEM_8(rIY+d))); break; - case 0xBC: rH = WRITE_MEM_8(rIY+d, RES(7, READ_MEM_8(rIY+d))); break; - case 0xBD: rL = WRITE_MEM_8(rIY+d, RES(7, READ_MEM_8(rIY+d))); break; - case 0xBE: WRITE_MEM_8(rIY+d, RES(7, READ_MEM_8(rIY+d))); break; - case 0xBF: rA = WRITE_MEM_8(rIY+d, RES(7, READ_MEM_8(rIY+d))); break; - - case 0xC0: rB = WRITE_MEM_8(rIY+d, SET(0, READ_MEM_8(rIY+d))); break; - case 0xC1: rC = WRITE_MEM_8(rIY+d, SET(0, READ_MEM_8(rIY+d))); break; - case 0xC2: rD = WRITE_MEM_8(rIY+d, SET(0, READ_MEM_8(rIY+d))); break; - case 0xC3: rE = WRITE_MEM_8(rIY+d, SET(0, READ_MEM_8(rIY+d))); break; - case 0xC4: rH = WRITE_MEM_8(rIY+d, SET(0, READ_MEM_8(rIY+d))); break; - case 0xC5: rL = WRITE_MEM_8(rIY+d, SET(0, READ_MEM_8(rIY+d))); break; - case 0xC6: WRITE_MEM_8(rIY+d, SET(0, READ_MEM_8(rIY+d))); break; - case 0xC7: rA = WRITE_MEM_8(rIY+d, SET(0, READ_MEM_8(rIY+d))); break; - case 0xC8: rB = WRITE_MEM_8(rIY+d, SET(1, READ_MEM_8(rIY+d))); break; - case 0xC9: rC = WRITE_MEM_8(rIY+d, SET(1, READ_MEM_8(rIY+d))); break; - case 0xCA: rD = WRITE_MEM_8(rIY+d, SET(1, READ_MEM_8(rIY+d))); break; - case 0xCB: rE = WRITE_MEM_8(rIY+d, SET(1, READ_MEM_8(rIY+d))); break; - case 0xCC: rH = WRITE_MEM_8(rIY+d, SET(1, READ_MEM_8(rIY+d))); break; - case 0xCD: rL = WRITE_MEM_8(rIY+d, SET(1, READ_MEM_8(rIY+d))); break; - case 0xCE: WRITE_MEM_8(rIY+d, SET(1, READ_MEM_8(rIY+d))); break; - case 0xCF: rA = WRITE_MEM_8(rIY+d, SET(1, READ_MEM_8(rIY+d))); break; - - case 0xD0: rB = WRITE_MEM_8(rIY+d, SET(2, READ_MEM_8(rIY+d))); break; - case 0xD1: rC = WRITE_MEM_8(rIY+d, SET(2, READ_MEM_8(rIY+d))); break; - case 0xD2: rD = WRITE_MEM_8(rIY+d, SET(2, READ_MEM_8(rIY+d))); break; - case 0xD3: rE = WRITE_MEM_8(rIY+d, SET(2, READ_MEM_8(rIY+d))); break; - case 0xD4: rH = WRITE_MEM_8(rIY+d, SET(2, READ_MEM_8(rIY+d))); break; - case 0xD5: rL = WRITE_MEM_8(rIY+d, SET(2, READ_MEM_8(rIY+d))); break; - case 0xD6: WRITE_MEM_8(rIY+d, SET(2, READ_MEM_8(rIY+d))); break; - case 0xD7: rA = WRITE_MEM_8(rIY+d, SET(2, READ_MEM_8(rIY+d))); break; - case 0xD8: rB = WRITE_MEM_8(rIY+d, SET(3, READ_MEM_8(rIY+d))); break; - case 0xD9: rC = WRITE_MEM_8(rIY+d, SET(3, READ_MEM_8(rIY+d))); break; - case 0xDA: rD = WRITE_MEM_8(rIY+d, SET(3, READ_MEM_8(rIY+d))); break; - case 0xDB: rE = WRITE_MEM_8(rIY+d, SET(3, READ_MEM_8(rIY+d))); break; - case 0xDC: rH = WRITE_MEM_8(rIY+d, SET(3, READ_MEM_8(rIY+d))); break; - case 0xDD: rL = WRITE_MEM_8(rIY+d, SET(3, READ_MEM_8(rIY+d))); break; - case 0xDE: WRITE_MEM_8(rIY+d, SET(3, READ_MEM_8(rIY+d))); break; - case 0xDF: rA = WRITE_MEM_8(rIY+d, SET(3, READ_MEM_8(rIY+d))); break; - - case 0xE0: rB = WRITE_MEM_8(rIY+d, SET(4, READ_MEM_8(rIY+d))); break; - case 0xE1: rC = WRITE_MEM_8(rIY+d, SET(4, READ_MEM_8(rIY+d))); break; - case 0xE2: rD = WRITE_MEM_8(rIY+d, SET(4, READ_MEM_8(rIY+d))); break; - case 0xE3: rE = WRITE_MEM_8(rIY+d, SET(4, READ_MEM_8(rIY+d))); break; - case 0xE4: rH = WRITE_MEM_8(rIY+d, SET(4, READ_MEM_8(rIY+d))); break; - case 0xE5: rL = WRITE_MEM_8(rIY+d, SET(4, READ_MEM_8(rIY+d))); break; - case 0xE6: WRITE_MEM_8(rIY+d, SET(4, READ_MEM_8(rIY+d))); break; - case 0xE7: rA = WRITE_MEM_8(rIY+d, SET(4, READ_MEM_8(rIY+d))); break; - case 0xE8: rB = WRITE_MEM_8(rIY+d, SET(5, READ_MEM_8(rIY+d))); break; - case 0xE9: rC = WRITE_MEM_8(rIY+d, SET(5, READ_MEM_8(rIY+d))); break; - case 0xEA: rD = WRITE_MEM_8(rIY+d, SET(5, READ_MEM_8(rIY+d))); break; - case 0xEB: rE = WRITE_MEM_8(rIY+d, SET(5, READ_MEM_8(rIY+d))); break; - case 0xEC: rH = WRITE_MEM_8(rIY+d, SET(5, READ_MEM_8(rIY+d))); break; - case 0xED: rL = WRITE_MEM_8(rIY+d, SET(5, READ_MEM_8(rIY+d))); break; - case 0xEE: WRITE_MEM_8(rIY+d, SET(5, READ_MEM_8(rIY+d))); break; - case 0xEF: rA = WRITE_MEM_8(rIY+d, SET(5, READ_MEM_8(rIY+d))); break; - - case 0xF0: rB = WRITE_MEM_8(rIY+d, SET(6, READ_MEM_8(rIY+d))); break; - case 0xF1: rC = WRITE_MEM_8(rIY+d, SET(6, READ_MEM_8(rIY+d))); break; - case 0xF2: rD = WRITE_MEM_8(rIY+d, SET(6, READ_MEM_8(rIY+d))); break; - case 0xF3: rE = WRITE_MEM_8(rIY+d, SET(6, READ_MEM_8(rIY+d))); break; - case 0xF4: rH = WRITE_MEM_8(rIY+d, SET(6, READ_MEM_8(rIY+d))); break; - case 0xF5: rL = WRITE_MEM_8(rIY+d, SET(6, READ_MEM_8(rIY+d))); break; - case 0xF6: WRITE_MEM_8(rIY+d, SET(6, READ_MEM_8(rIY+d))); break; - case 0xF7: rA = WRITE_MEM_8(rIY+d, SET(6, READ_MEM_8(rIY+d))); break; - case 0xF8: rB = WRITE_MEM_8(rIY+d, SET(7, READ_MEM_8(rIY+d))); break; - case 0xF9: rC = WRITE_MEM_8(rIY+d, SET(7, READ_MEM_8(rIY+d))); break; - case 0xFA: rD = WRITE_MEM_8(rIY+d, SET(7, READ_MEM_8(rIY+d))); break; - case 0xFB: rE = WRITE_MEM_8(rIY+d, SET(7, READ_MEM_8(rIY+d))); break; - case 0xFC: rH = WRITE_MEM_8(rIY+d, SET(7, READ_MEM_8(rIY+d))); break; - case 0xFD: rL = WRITE_MEM_8(rIY+d, SET(7, READ_MEM_8(rIY+d))); break; - case 0xFE: WRITE_MEM_8(rIY+d, SET(7, READ_MEM_8(rIY+d))); break; - case 0xFF: rA = WRITE_MEM_8(rIY+d, SET(7, READ_MEM_8(rIY+d))); break; - } - } - //uint8_t *getMem() { return memory; } uint8_t *getRegs() { return regs; } - uint16_t getAF(const bool alt) { return alt?rAF2:rAF; } - uint16_t getBC(const bool alt) { return alt?rBC2:rBC; } - uint16_t getDE(const bool alt) { return alt?rDE2:rDE; } - uint16_t getHL(const bool alt) { return alt?rHL2:rHL; } + uint16_t getAF() { return rAF; } + uint16_t getBC() { return rBC; } + uint16_t getDE() { return rDE; } + uint16_t getHL() { return rHL; } - uint16_t getIX() { return rIX; } - uint16_t getIY() { return rIY; } uint16_t getSP() { return rSP; } uint16_t getPC() { return rPC; } - uint8_t getI() { return rI; } - uint8_t getR() { return rR; } - void setPC(const uint16_t addr) { rPC = addr; } /* @@ -2443,9 +1347,4 @@ namespace sm83 { options[option] = !options[option]; } - - void resetStackedCalls() - { - calls_stacked=0; - } } \ No newline at end of file diff --git a/sm83.h b/sm83.h index e232670..0a3e3e1 100644 --- a/sm83.h +++ b/sm83.h @@ -26,10 +26,10 @@ namespace sm83 uint8_t *getRegs(); - uint16_t getAF(const bool alt=false); - uint16_t getBC(const bool alt=false); - uint16_t getDE(const bool alt=false); - uint16_t getHL(const bool alt=false); + uint16_t getAF(); + uint16_t getBC(); + uint16_t getDE(); + uint16_t getHL(); uint16_t getSP(); uint16_t getPC();