| ## |
| ## This file is part of the libsigrokdecode project. |
| ## |
| ## Copyright (C) 2014 Daniel Elstner <daniel.kitta@gmail.com> |
| ## |
| ## This program is free software; you can redistribute it and/or modify |
| ## it under the terms of the GNU General Public License as published by |
| ## the Free Software Foundation; either version 3 of the License, or |
| ## (at your option) any later version. |
| ## |
| ## This program is distributed in the hope that it will be useful, |
| ## but WITHOUT ANY WARRANTY; without even the implied warranty of |
| ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| ## GNU General Public License for more details. |
| ## |
| ## You should have received a copy of the GNU General Public License |
| ## along with this program; if not, see <http://www.gnu.org/licenses/>. |
| ## |
| |
| ''' |
| Instruction tuple: (d, i, ro, wo, rep, format string) |
| |
| The placeholders d and i are the number of bytes in the instruction |
| used for the displacement and the immediate operand, respectively. An |
| operand consisting of more than one byte is assembled in little endian |
| order. |
| The placeholders ro and wo are the number of bytes the instruction |
| is expected to read or write, respectively. These counts are used |
| for both memory and I/O access, but not for immediate operands. |
| A negative value indicates that the operand byte order is big endian |
| rather than the usual little endian. |
| The placeholder rep is a boolean used to mark repeating instructions. |
| The format string should refer to the {d} and {i} operands by name. |
| Displacements are interpreted as signed integers, whereas immediate |
| operands are always read as unsigned. The tables for instructions |
| operating on the IX/IY index registers additionally use {r} in the |
| format string as a placeholder for the register name. |
| Relative jump instructions may specify {j} instead of {d} to output |
| the displacement relative to the start of the instruction. |
| ''' |
| |
| # Instructions without a prefix |
| main_instructions = { |
| 0x00: (0, 0, 0, 0, False, 'NOP'), |
| 0x01: (0, 2, 0, 0, False, 'LD BC,{i:04H}h'), |
| 0x02: (0, 0, 0, 1, False, 'LD (BC),A'), |
| 0x03: (0, 0, 0, 0, False, 'INC BC'), |
| 0x04: (0, 0, 0, 0, False, 'INC B'), |
| 0x05: (0, 0, 0, 0, False, 'DEC B'), |
| 0x06: (0, 1, 0, 0, False, 'LD B,{i:02H}h'), |
| 0x07: (0, 0, 0, 0, False, 'RLCA'), |
| 0x08: (0, 0, 0, 0, False, 'EX AF,AF\''), |
| 0x09: (0, 0, 0, 0, False, 'ADD HL,BC'), |
| 0x0A: (0, 0, 1, 0, False, 'LD A,(BC)'), |
| 0x0B: (0, 0, 0, 0, False, 'DEC BC'), |
| 0x0C: (0, 0, 0, 0, False, 'INC C'), |
| 0x0D: (0, 0, 0, 0, False, 'DEC C'), |
| 0x0E: (0, 1, 0, 0, False, 'LD C,{i:02H}h'), |
| 0x0F: (0, 0, 0, 0, False, 'RRCA'), |
| |
| 0x10: (1, 0, 0, 0, False, 'DJNZ ${j:+d}'), |
| 0x11: (0, 2, 0, 0, False, 'LD DE,{i:04H}h'), |
| 0x12: (0, 0, 0, 1, False, 'LD (DE),A'), |
| 0x13: (0, 0, 0, 0, False, 'INC DE'), |
| 0x14: (0, 0, 0, 0, False, 'INC D'), |
| 0x15: (0, 0, 0, 0, False, 'DEC D'), |
| 0x16: (0, 1, 0, 0, False, 'LD D,{i:02H}h'), |
| 0x17: (0, 0, 0, 0, False, 'RLA'), |
| 0x18: (1, 0, 0, 0, False, 'JR ${j:+d}'), |
| 0x19: (0, 0, 0, 0, False, 'ADD HL,DE'), |
| 0x1A: (0, 0, 1, 0, False, 'LD A,(DE)'), |
| 0x1B: (0, 0, 0, 0, False, 'DEC DE'), |
| 0x1C: (0, 0, 0, 0, False, 'INC E'), |
| 0x1D: (0, 0, 0, 0, False, 'DEC E'), |
| 0x1E: (0, 1, 0, 0, False, 'LD E,{i:02H}h'), |
| 0x1F: (0, 0, 0, 0, False, 'RRA'), |
| |
| 0x20: (1, 0, 0, 0, False, 'JR NZ,${j:+d}'), |
| 0x21: (0, 2, 0, 0, False, 'LD HL,{i:04H}h'), |
| 0x22: (0, 2, 0, 2, False, 'LD ({i:04H}h),HL'), |
| 0x23: (0, 0, 0, 0, False, 'INC HL'), |
| 0x24: (0, 0, 0, 0, False, 'INC H'), |
| 0x25: (0, 0, 0, 0, False, 'DEC H'), |
| 0x26: (0, 1, 0, 0, False, 'LD H,{i:02H}h'), |
| 0x27: (0, 0, 0, 0, False, 'DAA'), |
| 0x28: (1, 0, 0, 0, False, 'JR Z,${j:+d}'), |
| 0x29: (0, 0, 0, 0, False, 'ADD HL,HL'), |
| 0x2A: (0, 2, 2, 0, False, 'LD HL,({i:04H}h)'), |
| 0x2B: (0, 0, 0, 0, False, 'DEC HL'), |
| 0x2C: (0, 0, 0, 0, False, 'INC L'), |
| 0x2D: (0, 0, 0, 0, False, 'DEC L'), |
| 0x2E: (0, 1, 0, 0, False, 'LD L,{i:02H}h'), |
| 0x2F: (0, 0, 0, 0, False, 'CPL'), |
| |
| 0x30: (1, 0, 0, 0, False, 'JR NC,${j:+d}'), |
| 0x31: (0, 2, 0, 0, False, 'LD SP,{i:04H}h'), |
| 0x32: (0, 2, 0, 1, False, 'LD ({i:04H}h),A'), |
| 0x33: (0, 0, 0, 0, False, 'INC SP'), |
| 0x34: (0, 0, 1, 1, False, 'INC (HL)'), |
| 0x35: (0, 0, 1, 1, False, 'DEC (HL)'), |
| 0x36: (0, 1, 0, 1, False, 'LD (HL),{i:02H}h'), |
| 0x37: (0, 0, 0, 0, False, 'SCF'), |
| 0x38: (1, 0, 0, 0, False, 'JR C,${j:+d}'), |
| 0x39: (0, 0, 0, 0, False, 'ADD HL,SP'), |
| 0x3A: (0, 2, 1, 0, False, 'LD A,({i:04H}h)'), |
| 0x3B: (0, 0, 0, 0, False, 'DEC SP'), |
| 0x3C: (0, 0, 0, 0, False, 'INC A'), |
| 0x3D: (0, 0, 0, 0, False, 'DEC A'), |
| 0x3E: (0, 1, 0, 0, False, 'LD A,{i:02H}h'), |
| 0x3F: (0, 0, 0, 0, False, 'CCF'), |
| |
| 0x40: (0, 0, 0, 0, False, 'LD B,B'), |
| 0x41: (0, 0, 0, 0, False, 'LD B,C'), |
| 0x42: (0, 0, 0, 0, False, 'LD B,D'), |
| 0x43: (0, 0, 0, 0, False, 'LD B,E'), |
| 0x44: (0, 0, 0, 0, False, 'LD B,H'), |
| 0x45: (0, 0, 0, 0, False, 'LD B,L'), |
| 0x46: (0, 0, 1, 0, False, 'LD B,(HL)'), |
| 0x47: (0, 0, 0, 0, False, 'LD B,A'), |
| 0x48: (0, 0, 0, 0, False, 'LD C,B'), |
| 0x49: (0, 0, 0, 0, False, 'LD C,C'), |
| 0x4A: (0, 0, 0, 0, False, 'LD C,D'), |
| 0x4B: (0, 0, 0, 0, False, 'LD C,E'), |
| 0x4C: (0, 0, 0, 0, False, 'LD C,H'), |
| 0x4D: (0, 0, 0, 0, False, 'LD C,L'), |
| 0x4E: (0, 0, 1, 0, False, 'LD C,(HL)'), |
| 0x4F: (0, 0, 0, 0, False, 'LD C,A'), |
| |
| 0x50: (0, 0, 0, 0, False, 'LD D,B'), |
| 0x51: (0, 0, 0, 0, False, 'LD D,C'), |
| 0x52: (0, 0, 0, 0, False, 'LD D,D'), |
| 0x53: (0, 0, 0, 0, False, 'LD D,E'), |
| 0x54: (0, 0, 0, 0, False, 'LD D,H'), |
| 0x55: (0, 0, 0, 0, False, 'LD D,L'), |
| 0x56: (0, 0, 1, 0, False, 'LD D,(HL)'), |
| 0x57: (0, 0, 0, 0, False, 'LD D,A'), |
| 0x58: (0, 0, 0, 0, False, 'LD E,B'), |
| 0x59: (0, 0, 0, 0, False, 'LD E,C'), |
| 0x5A: (0, 0, 0, 0, False, 'LD E,D'), |
| 0x5B: (0, 0, 0, 0, False, 'LD E,E'), |
| 0x5C: (0, 0, 0, 0, False, 'LD E,H'), |
| 0x5D: (0, 0, 0, 0, False, 'LD E,L'), |
| 0x5E: (0, 0, 1, 0, False, 'LD E,(HL)'), |
| 0x5F: (0, 0, 0, 0, False, 'LD E,A'), |
| |
| 0x60: (0, 0, 0, 0, False, 'LD H,B'), |
| 0x61: (0, 0, 0, 0, False, 'LD H,C'), |
| 0x62: (0, 0, 0, 0, False, 'LD H,D'), |
| 0x63: (0, 0, 0, 0, False, 'LD H,E'), |
| 0x64: (0, 0, 0, 0, False, 'LD H,H'), |
| 0x65: (0, 0, 0, 0, False, 'LD H,L'), |
| 0x66: (0, 0, 1, 0, False, 'LD H,(HL)'), |
| 0x67: (0, 0, 0, 0, False, 'LD H,A'), |
| 0x68: (0, 0, 0, 0, False, 'LD L,B'), |
| 0x69: (0, 0, 0, 0, False, 'LD L,C'), |
| 0x6A: (0, 0, 0, 0, False, 'LD L,D'), |
| 0x6B: (0, 0, 0, 0, False, 'LD L,E'), |
| 0x6C: (0, 0, 0, 0, False, 'LD L,H'), |
| 0x6D: (0, 0, 0, 0, False, 'LD L,L'), |
| 0x6E: (0, 0, 1, 0, False, 'LD L,(HL)'), |
| 0x6F: (0, 0, 0, 0, False, 'LD L,A'), |
| |
| 0x70: (0, 0, 0, 1, False, 'LD (HL),B'), |
| 0x71: (0, 0, 0, 1, False, 'LD (HL),C'), |
| 0x72: (0, 0, 0, 1, False, 'LD (HL),D'), |
| 0x73: (0, 0, 0, 1, False, 'LD (HL),E'), |
| 0x74: (0, 0, 0, 1, False, 'LD (HL),H'), |
| 0x75: (0, 0, 0, 1, False, 'LD (HL),L'), |
| 0x76: (0, 0, 0, 0, False, 'HALT'), |
| 0x77: (0, 0, 0, 1, False, 'LD (HL),A'), |
| 0x78: (0, 0, 0, 0, False, 'LD A,B'), |
| 0x79: (0, 0, 0, 0, False, 'LD A,C'), |
| 0x7A: (0, 0, 0, 0, False, 'LD A,D'), |
| 0x7B: (0, 0, 0, 0, False, 'LD A,E'), |
| 0x7C: (0, 0, 0, 0, False, 'LD A,H'), |
| 0x7D: (0, 0, 0, 0, False, 'LD A,L'), |
| 0x7E: (0, 0, 1, 0, False, 'LD A,(HL)'), |
| 0x7F: (0, 0, 0, 0, False, 'LD A,A'), |
| |
| 0x80: (0, 0, 0, 0, False, 'ADD A,B'), |
| 0x81: (0, 0, 0, 0, False, 'ADD A,C'), |
| 0x82: (0, 0, 0, 0, False, 'ADD A,D'), |
| 0x83: (0, 0, 0, 0, False, 'ADD A,E'), |
| 0x84: (0, 0, 0, 0, False, 'ADD A,H'), |
| 0x85: (0, 0, 0, 0, False, 'ADD A,L'), |
| 0x86: (0, 0, 1, 0, False, 'ADD A,(HL)'), |
| 0x87: (0, 0, 0, 0, False, 'ADD A,A'), |
| 0x88: (0, 0, 0, 0, False, 'ADC A,B'), |
| 0x89: (0, 0, 0, 0, False, 'ADC A,C'), |
| 0x8A: (0, 0, 0, 0, False, 'ADC A,D'), |
| 0x8B: (0, 0, 0, 0, False, 'ADC A,E'), |
| 0x8C: (0, 0, 0, 0, False, 'ADC A,H'), |
| 0x8D: (0, 0, 0, 0, False, 'ADC A,L'), |
| 0x8E: (0, 0, 1, 0, False, 'ADC A,(HL)'), |
| 0x8F: (0, 0, 0, 0, False, 'ADC A,A'), |
| |
| 0x90: (0, 0, 0, 0, False, 'SUB B'), |
| 0x91: (0, 0, 0, 0, False, 'SUB C'), |
| 0x92: (0, 0, 0, 0, False, 'SUB D'), |
| 0x93: (0, 0, 0, 0, False, 'SUB E'), |
| 0x94: (0, 0, 0, 0, False, 'SUB H'), |
| 0x95: (0, 0, 0, 0, False, 'SUB L'), |
| 0x96: (0, 0, 1, 0, False, 'SUB (HL)'), |
| 0x97: (0, 0, 0, 0, False, 'SUB A'), |
| 0x98: (0, 0, 0, 0, False, 'SBC A,B'), |
| 0x99: (0, 0, 0, 0, False, 'SBC A,C'), |
| 0x9A: (0, 0, 0, 0, False, 'SBC A,D'), |
| 0x9B: (0, 0, 0, 0, False, 'SBC A,E'), |
| 0x9C: (0, 0, 0, 0, False, 'SBC A,H'), |
| 0x9D: (0, 0, 0, 0, False, 'SBC A,L'), |
| 0x9E: (0, 0, 1, 0, False, 'SBC A,(HL)'), |
| 0x9F: (0, 0, 0, 0, False, 'SBC A,A'), |
| |
| 0xA0: (0, 0, 0, 0, False, 'AND B'), |
| 0xA1: (0, 0, 0, 0, False, 'AND C'), |
| 0xA2: (0, 0, 0, 0, False, 'AND D'), |
| 0xA3: (0, 0, 0, 0, False, 'AND E'), |
| 0xA4: (0, 0, 0, 0, False, 'AND H'), |
| 0xA5: (0, 0, 0, 0, False, 'AND L'), |
| 0xA6: (0, 0, 1, 0, False, 'AND (HL)'), |
| 0xA7: (0, 0, 0, 0, False, 'AND A'), |
| 0xA8: (0, 0, 0, 0, False, 'XOR B'), |
| 0xA9: (0, 0, 0, 0, False, 'XOR C'), |
| 0xAA: (0, 0, 0, 0, False, 'XOR D'), |
| 0xAB: (0, 0, 0, 0, False, 'XOR E'), |
| 0xAC: (0, 0, 0, 0, False, 'XOR H'), |
| 0xAD: (0, 0, 0, 0, False, 'XOR L'), |
| 0xAE: (0, 0, 1, 0, False, 'XOR (HL)'), |
| 0xAF: (0, 0, 0, 0, False, 'XOR A'), |
| |
| 0xB0: (0, 0, 0, 0, False, 'OR B'), |
| 0xB1: (0, 0, 0, 0, False, 'OR C'), |
| 0xB2: (0, 0, 0, 0, False, 'OR D'), |
| 0xB3: (0, 0, 0, 0, False, 'OR E'), |
| 0xB4: (0, 0, 0, 0, False, 'OR H'), |
| 0xB5: (0, 0, 0, 0, False, 'OR L'), |
| 0xB6: (0, 0, 1, 0, False, 'OR (HL)'), |
| 0xB7: (0, 0, 0, 0, False, 'OR A'), |
| 0xB8: (0, 0, 0, 0, False, 'CP B'), |
| 0xB9: (0, 0, 0, 0, False, 'CP C'), |
| 0xBA: (0, 0, 0, 0, False, 'CP D'), |
| 0xBB: (0, 0, 0, 0, False, 'CP E'), |
| 0xBC: (0, 0, 0, 0, False, 'CP H'), |
| 0xBD: (0, 0, 0, 0, False, 'CP L'), |
| 0xBE: (0, 0, 1, 0, False, 'CP (HL)'), |
| 0xBF: (0, 0, 0, 0, False, 'CP A'), |
| |
| 0xC0: (0, 0, 2, 0, False, 'RET NZ'), |
| 0xC1: (0, 0, 2, 0, False, 'POP BC'), |
| 0xC2: (0, 2, 0, 0, False, 'JP NZ,{i:04H}h'), |
| 0xC3: (0, 2, 0, 0, False, 'JP {i:04H}h'), |
| 0xC4: (0, 2, 0,-2, False, 'CALL NZ,{i:04H}h'), |
| 0xC5: (0, 0, 0,-2, False, 'PUSH BC'), |
| 0xC6: (0, 1, 0, 0, False, 'ADD A,{i:02H}h'), |
| 0xC7: (0, 0, 0,-2, False, 'RST 00h'), |
| 0xC8: (0, 0, 2, 0, False, 'RET Z'), |
| 0xC9: (0, 0, 2, 0, False, 'RET'), |
| 0xCA: (0, 2, 0, 0, False, 'JP Z,{i:04H}h'), |
| |
| 0xCC: (0, 2, 0,-2, False, 'CALL Z,{i:04H}h'), |
| 0xCD: (0, 2, 0,-2, False, 'CALL {i:04H}h'), |
| 0xCE: (0, 1, 0, 0, False, 'ADC A,{i:02H}h'), |
| 0xCF: (0, 0, 0,-2, False, 'RST 08h'), |
| |
| 0xD0: (0, 0, 2, 0, False, 'RET NC'), |
| 0xD1: (0, 0, 2, 0, False, 'POP DE'), |
| 0xD2: (0, 2, 0, 0, False, 'JP NC,{i:04H}h'), |
| 0xD3: (0, 1, 0, 1, False, 'OUT ({i:02H}h),A'), |
| 0xD4: (0, 2, 0,-2, False, 'CALL NC,{i:04H}h'), |
| 0xD5: (0, 0, 0,-2, False, 'PUSH DE'), |
| 0xD6: (0, 1, 0, 0, False, 'SUB {i:02H}h'), |
| 0xD7: (0, 0, 0,-2, False, 'RST 10h'), |
| 0xD8: (0, 0, 2, 0, False, 'RET C'), |
| 0xD9: (0, 0, 0, 0, False, 'EXX'), |
| 0xDA: (0, 2, 0, 0, False, 'JP C,{i:04H}h'), |
| 0xDB: (0, 1, 1, 0, False, 'IN A,({i:02H}h)'), |
| 0xDC: (0, 2, 0,-2, False, 'CALL C,{i:04H}h'), |
| |
| 0xDE: (0, 1, 0, 0, False, 'SBC A,{i:02H}h'), |
| 0xDF: (0, 0, 0,-2, False, 'RST 18h'), |
| |
| 0xE0: (0, 0, 2, 0, False, 'RET PO'), |
| 0xE1: (0, 0, 2, 0, False, 'POP HL'), |
| 0xE2: (0, 2, 0, 0, False, 'JP PO,{i:04H}h'), |
| 0xE3: (0, 0, 2, 2, False, 'EX (SP),HL'), |
| 0xE4: (0, 2, 0,-2, False, 'CALL PO,{i:04H}h'), |
| 0xE5: (0, 0, 0,-2, False, 'PUSH HL'), |
| 0xE6: (0, 1, 0, 0, False, 'AND {i:02H}h'), |
| 0xE7: (0, 0, 0,-2, False, 'RST 20h'), |
| 0xE8: (0, 0, 2, 0, False, 'RET PE'), |
| 0xE9: (0, 0, 0, 0, False, 'JP (HL)'), |
| 0xEA: (0, 2, 0, 0, False, 'JP PE,{i:04H}h'), |
| 0xEB: (0, 0, 0, 0, False, 'EX DE,HL'), |
| 0xEC: (0, 2, 0,-2, False, 'CALL PE,{i:04H}h'), |
| |
| 0xEE: (0, 1, 0, 0, False, 'XOR {i:02H}h'), |
| 0xEF: (0, 0, 0,-2, False, 'RST 28h'), |
| |
| 0xF0: (0, 0, 2, 0, False, 'RET P'), |
| 0xF1: (0, 0, 2, 0, False, 'POP AF'), |
| 0xF2: (0, 2, 0, 0, False, 'JP P,{i:04H}h'), |
| 0xF3: (0, 0, 0, 0, False, 'DI'), |
| 0xF4: (0, 2, 0,-2, False, 'CALL P,{i:04H}h'), |
| 0xF5: (0, 0, 0,-2, False, 'PUSH AF'), |
| 0xF6: (0, 1, 0, 0, False, 'OR {i:02H}h'), |
| 0xF7: (0, 0, 0,-2, False, 'RST 30h'), |
| 0xF8: (0, 0, 2, 0, False, 'RET M'), |
| 0xF9: (0, 0, 0, 0, False, 'LD SP,HL'), |
| 0xFA: (0, 2, 0, 0, False, 'JP M,{i:04H}h'), |
| 0xFB: (0, 0, 0, 0, False, 'EI'), |
| 0xFC: (0, 2, 0,-2, False, 'CALL M,{i:04H}h'), |
| |
| 0xFE: (0, 1, 0, 0, False, 'CP {i:02H}h'), |
| 0xFF: (0, 0, 0,-2, False, 'RST 38h') |
| } |
| |
| # Instructions with ED prefix |
| extended_instructions = { |
| 0x40: (0, 0, 1, 0, False, 'IN B,(C)'), |
| 0x41: (0, 0, 0, 1, False, 'OUT (C),B'), |
| 0x42: (0, 0, 0, 0, False, 'SBC HL,BC'), |
| 0x43: (0, 2, 0, 2, False, 'LD ({i:04H}h),BC'), |
| 0x44: (0, 0, 0, 0, False, 'NEG'), |
| 0x45: (0, 0, 2, 0, False, 'RETN'), |
| 0x46: (0, 0, 0, 0, False, 'IM 0'), |
| 0x47: (0, 0, 0, 0, False, 'LD I,A'), |
| 0x48: (0, 0, 1, 0, False, 'IN C,(C)'), |
| 0x49: (0, 0, 0, 1, False, 'OUT (C),C'), |
| 0x4A: (0, 0, 0, 0, False, 'ADC HL,BC'), |
| 0x4B: (0, 2, 2, 0, False, 'LD BC,({i:04H}h)'), |
| 0x4C: (0, 0, 0, 0, False, 'NEG'), |
| 0x4D: (0, 0, 2, 0, False, 'RETI'), |
| 0x4E: (0, 0, 0, 0, False, 'IM 0/1'), |
| 0x4F: (0, 0, 0, 0, False, 'LD R,A'), |
| |
| 0x50: (0, 0, 1, 0, False, 'IN D,(C)'), |
| 0x51: (0, 0, 0, 1, False, 'OUT (C),D'), |
| 0x52: (0, 0, 0, 0, False, 'SBC HL,DE'), |
| 0x53: (0, 2, 0, 2, False, 'LD ({i:04H}h),DE'), |
| 0x54: (0, 0, 0, 0, False, 'NEG'), |
| 0x55: (0, 0, 2, 0, False, 'RETN'), |
| 0x56: (0, 0, 0, 0, False, 'IM 1'), |
| 0x57: (0, 0, 0, 0, False, 'LD A,I'), |
| 0x58: (0, 0, 1, 0, False, 'IN E,(C)'), |
| 0x59: (0, 0, 0, 1, False, 'OUT (C),E'), |
| 0x5A: (0, 0, 0, 0, False, 'ADC HL,DE'), |
| 0x5B: (0, 2, 2, 0, False, 'LD DE,({i:04H}h)'), |
| 0x5C: (0, 0, 0, 0, False, 'NEG'), |
| 0x5D: (0, 0, 2, 0, False, 'RETN'), |
| 0x5E: (0, 0, 0, 0, False, 'IM 2'), |
| 0x5F: (0, 0, 0, 0, False, 'LD A,R'), |
| |
| 0x60: (0, 0, 1, 0, False, 'IN H,(C)'), |
| 0x61: (0, 0, 0, 1, False, 'OUT (C),H'), |
| 0x62: (0, 0, 0, 0, False, 'SBC HL,HL'), |
| 0x63: (0, 2, 0, 2, False, 'LD ({i:04H}h),HL'), |
| 0x64: (0, 0, 0, 0, False, 'NEG'), |
| 0x65: (0, 0, 2, 0, False, 'RETN'), |
| 0x66: (0, 0, 0, 0, False, 'IM 0'), |
| 0x67: (0, 0, 1, 1, False, 'RRD'), |
| 0x68: (0, 0, 1, 0, False, 'IN L,(C)'), |
| 0x69: (0, 0, 0, 1, False, 'OUT (C),L'), |
| 0x6A: (0, 0, 0, 0, False, 'ADC HL,HL'), |
| 0x6B: (0, 2, 2, 0, False, 'LD HL,({i:04H}h)'), |
| 0x6C: (0, 0, 0, 0, False, 'NEG'), |
| 0x6D: (0, 0, 2, 0, False, 'RETN'), |
| 0x6E: (0, 0, 0, 0, False, 'IM 0/1'), |
| 0x6F: (0, 0, 1, 1, False, 'RLD'), |
| |
| 0x70: (0, 0, 1, 0, False, 'IN (C)'), |
| 0x71: (0, 0, 0, 1, False, 'OUT (C),0'), |
| 0x72: (0, 0, 0, 0, False, 'SBC HL,SP'), |
| 0x73: (0, 2, 0, 2, False, 'LD ({i:04H}h),SP'), |
| 0x74: (0, 0, 0, 0, False, 'NEG'), |
| 0x75: (0, 0, 2, 0, False, 'RETN'), |
| 0x76: (0, 0, 0, 0, False, 'IM 1'), |
| |
| 0x78: (0, 0, 1, 0, False, 'IN A,(C)'), |
| 0x79: (0, 0, 0, 1, False, 'OUT (C),A'), |
| 0x7A: (0, 0, 0, 0, False, 'ADC HL,SP'), |
| 0x7B: (0, 2, 2, 0, False, 'LD SP,({i:04H}h)'), |
| 0x7C: (0, 0, 0, 0, False, 'NEG'), |
| 0x7D: (0, 0, 2, 0, False, 'RETN'), |
| 0x7E: (0, 0, 0, 0, False, 'IM 2'), |
| |
| 0xA0: (0, 0, 1, 1, False, 'LDI'), |
| 0xA1: (0, 0, 1, 0, False, 'CPI'), |
| 0xA2: (0, 0, 1, 1, False, 'INI'), |
| 0xA3: (0, 0, 1, 1, False, 'OUTI'), |
| |
| 0xA8: (0, 0, 1, 1, False, 'LDD'), |
| 0xA9: (0, 0, 1, 0, False, 'CPD'), |
| 0xAA: (0, 0, 1, 1, False, 'IND'), |
| 0xAB: (0, 0, 1, 1, False, 'OUTD'), |
| |
| 0xB0: (0, 0, 1, 1, True, 'LDIR'), |
| 0xB1: (0, 0, 1, 0, True, 'CPIR'), |
| 0xB2: (0, 0, 1, 1, True, 'INIR'), |
| 0xB3: (0, 0, 1, 1, True, 'OTIR'), |
| |
| 0xB8: (0, 0, 1, 1, True, 'LDDR'), |
| 0xB9: (0, 0, 1, 0, True, 'CPDR'), |
| 0xBA: (0, 0, 1, 1, True, 'INDR'), |
| 0xBB: (0, 0, 1, 1, True, 'OTDR') |
| } |
| |
| # Instructions with CB prefix |
| bit_instructions = { |
| 0x00: (0, 0, 0, 0, False, 'RLC B'), |
| 0x01: (0, 0, 0, 0, False, 'RLC C'), |
| 0x02: (0, 0, 0, 0, False, 'RLC D'), |
| 0x03: (0, 0, 0, 0, False, 'RLC E'), |
| 0x04: (0, 0, 0, 0, False, 'RLC H'), |
| 0x05: (0, 0, 0, 0, False, 'RLC L'), |
| 0x06: (0, 0, 1, 1, False, 'RLC (HL)'), |
| 0x07: (0, 0, 0, 0, False, 'RLC A'), |
| 0x08: (0, 0, 0, 0, False, 'RRC B'), |
| 0x09: (0, 0, 0, 0, False, 'RRC C'), |
| 0x0A: (0, 0, 0, 0, False, 'RRC D'), |
| 0x0B: (0, 0, 0, 0, False, 'RRC E'), |
| 0x0C: (0, 0, 0, 0, False, 'RRC H'), |
| 0x0D: (0, 0, 0, 0, False, 'RRC L'), |
| 0x0E: (0, 0, 1, 1, False, 'RRC (HL)'), |
| 0x0F: (0, 0, 0, 0, False, 'RRC A'), |
| |
| 0x10: (0, 0, 0, 0, False, 'RL B'), |
| 0x11: (0, 0, 0, 0, False, 'RL C'), |
| 0x12: (0, 0, 0, 0, False, 'RL D'), |
| 0x13: (0, 0, 0, 0, False, 'RL E'), |
| 0x14: (0, 0, 0, 0, False, 'RL H'), |
| 0x15: (0, 0, 0, 0, False, 'RL L'), |
| 0x16: (0, 0, 1, 1, False, 'RL (HL)'), |
| 0x17: (0, 0, 0, 0, False, 'RL A'), |
| 0x18: (0, 0, 0, 0, False, 'RR B'), |
| 0x19: (0, 0, 0, 0, False, 'RR C'), |
| 0x1A: (0, 0, 0, 0, False, 'RR D'), |
| 0x1B: (0, 0, 0, 0, False, 'RR E'), |
| 0x1C: (0, 0, 0, 0, False, 'RR H'), |
| 0x1D: (0, 0, 0, 0, False, 'RR L'), |
| 0x1E: (0, 0, 1, 1, False, 'RR (HL)'), |
| 0x1F: (0, 0, 0, 0, False, 'RR A'), |
| |
| 0x20: (0, 0, 0, 0, False, 'SLA B'), |
| 0x21: (0, 0, 0, 0, False, 'SLA C'), |
| 0x22: (0, 0, 0, 0, False, 'SLA D'), |
| 0x23: (0, 0, 0, 0, False, 'SLA E'), |
| 0x24: (0, 0, 0, 0, False, 'SLA H'), |
| 0x25: (0, 0, 0, 0, False, 'SLA L'), |
| 0x26: (0, 0, 1, 1, False, 'SLA (HL)'), |
| 0x27: (0, 0, 0, 0, False, 'SLA A'), |
| 0x28: (0, 0, 0, 0, False, 'SRA B'), |
| 0x29: (0, 0, 0, 0, False, 'SRA C'), |
| 0x2A: (0, 0, 0, 0, False, 'SRA D'), |
| 0x2B: (0, 0, 0, 0, False, 'SRA E'), |
| 0x2C: (0, 0, 0, 0, False, 'SRA H'), |
| 0x2D: (0, 0, 0, 0, False, 'SRA L'), |
| 0x2E: (0, 0, 1, 1, False, 'SRA (HL)'), |
| 0x2F: (0, 0, 0, 0, False, 'SRA A'), |
| |
| 0x30: (0, 0, 0, 0, False, 'SLL B'), |
| 0x31: (0, 0, 0, 0, False, 'SLL C'), |
| 0x32: (0, 0, 0, 0, False, 'SLL D'), |
| 0x33: (0, 0, 0, 0, False, 'SLL E'), |
| 0x34: (0, 0, 0, 0, False, 'SLL H'), |
| 0x35: (0, 0, 0, 0, False, 'SLL L'), |
| 0x36: (0, 0, 1, 1, False, 'SLL (HL)'), |
| 0x37: (0, 0, 0, 0, False, 'SLL A'), |
| 0x38: (0, 0, 0, 0, False, 'SRL B'), |
| 0x39: (0, 0, 0, 0, False, 'SRL C'), |
| 0x3A: (0, 0, 0, 0, False, 'SRL D'), |
| 0x3B: (0, 0, 0, 0, False, 'SRL E'), |
| 0x3C: (0, 0, 0, 0, False, 'SRL H'), |
| 0x3D: (0, 0, 0, 0, False, 'SRL L'), |
| 0x3E: (0, 0, 1, 1, False, 'SRL (HL)'), |
| 0x3F: (0, 0, 0, 0, False, 'SRL A'), |
| |
| 0x40: (0, 0, 0, 0, False, 'BIT 0,B'), |
| 0x41: (0, 0, 0, 0, False, 'BIT 0,C'), |
| 0x42: (0, 0, 0, 0, False, 'BIT 0,D'), |
| 0x43: (0, 0, 0, 0, False, 'BIT 0,E'), |
| 0x44: (0, 0, 0, 0, False, 'BIT 0,H'), |
| 0x45: (0, 0, 0, 0, False, 'BIT 0,L'), |
| 0x46: (0, 0, 1, 0, False, 'BIT 0,(HL)'), |
| 0x47: (0, 0, 0, 0, False, 'BIT 0,A'), |
| 0x48: (0, 0, 0, 0, False, 'BIT 1,B'), |
| 0x49: (0, 0, 0, 0, False, 'BIT 1,C'), |
| 0x4A: (0, 0, 0, 0, False, 'BIT 1,D'), |
| 0x4B: (0, 0, 0, 0, False, 'BIT 1,E'), |
| 0x4C: (0, 0, 0, 0, False, 'BIT 1,H'), |
| 0x4D: (0, 0, 0, 0, False, 'BIT 1,L'), |
| 0x4E: (0, 0, 1, 0, False, 'BIT 1,(HL)'), |
| 0x4F: (0, 0, 0, 0, False, 'BIT 1,A'), |
| |
| 0x50: (0, 0, 0, 0, False, 'BIT 2,B'), |
| 0x51: (0, 0, 0, 0, False, 'BIT 2,C'), |
| 0x52: (0, 0, 0, 0, False, 'BIT 2,D'), |
| 0x53: (0, 0, 0, 0, False, 'BIT 2,E'), |
| 0x54: (0, 0, 0, 0, False, 'BIT 2,H'), |
| 0x55: (0, 0, 0, 0, False, 'BIT 2,L'), |
| 0x56: (0, 0, 1, 0, False, 'BIT 2,(HL)'), |
| 0x57: (0, 0, 0, 0, False, 'BIT 2,A'), |
| 0x58: (0, 0, 0, 0, False, 'BIT 3,B'), |
| 0x59: (0, 0, 0, 0, False, 'BIT 3,C'), |
| 0x5A: (0, 0, 0, 0, False, 'BIT 3,D'), |
| 0x5B: (0, 0, 0, 0, False, 'BIT 3,E'), |
| 0x5C: (0, 0, 0, 0, False, 'BIT 3,H'), |
| 0x5D: (0, 0, 0, 0, False, 'BIT 3,L'), |
| 0x5E: (0, 0, 1, 0, False, 'BIT 3,(HL)'), |
| 0x5F: (0, 0, 0, 0, False, 'BIT 3,A'), |
| |
| 0x60: (0, 0, 0, 0, False, 'BIT 4,B'), |
| 0x61: (0, 0, 0, 0, False, 'BIT 4,C'), |
| 0x62: (0, 0, 0, 0, False, 'BIT 4,D'), |
| 0x63: (0, 0, 0, 0, False, 'BIT 4,E'), |
| 0x64: (0, 0, 0, 0, False, 'BIT 4,H'), |
| 0x65: (0, 0, 0, 0, False, 'BIT 4,L'), |
| 0x66: (0, 0, 1, 0, False, 'BIT 4,(HL)'), |
| 0x67: (0, 0, 0, 0, False, 'BIT 4,A'), |
| 0x68: (0, 0, 0, 0, False, 'BIT 5,B'), |
| 0x69: (0, 0, 0, 0, False, 'BIT 5,C'), |
| 0x6A: (0, 0, 0, 0, False, 'BIT 5,D'), |
| 0x6B: (0, 0, 0, 0, False, 'BIT 5,E'), |
| 0x6C: (0, 0, 0, 0, False, 'BIT 5,H'), |
| 0x6D: (0, 0, 0, 0, False, 'BIT 5,L'), |
| 0x6E: (0, 0, 1, 0, False, 'BIT 5,(HL)'), |
| 0x6F: (0, 0, 0, 0, False, 'BIT 5,A'), |
| |
| 0x70: (0, 0, 0, 0, False, 'BIT 6,B'), |
| 0x71: (0, 0, 0, 0, False, 'BIT 6,C'), |
| 0x72: (0, 0, 0, 0, False, 'BIT 6,D'), |
| 0x73: (0, 0, 0, 0, False, 'BIT 6,E'), |
| 0x74: (0, 0, 0, 0, False, 'BIT 6,H'), |
| 0x75: (0, 0, 0, 0, False, 'BIT 6,L'), |
| 0x76: (0, 0, 1, 0, False, 'BIT 6,(HL)'), |
| 0x77: (0, 0, 0, 0, False, 'BIT 6,A'), |
| 0x78: (0, 0, 0, 0, False, 'BIT 7,B'), |
| 0x79: (0, 0, 0, 0, False, 'BIT 7,C'), |
| 0x7A: (0, 0, 0, 0, False, 'BIT 7,D'), |
| 0x7B: (0, 0, 0, 0, False, 'BIT 7,E'), |
| 0x7C: (0, 0, 0, 0, False, 'BIT 7,H'), |
| 0x7D: (0, 0, 0, 0, False, 'BIT 7,L'), |
| 0x7E: (0, 0, 1, 0, False, 'BIT 7,(HL)'), |
| 0x7F: (0, 0, 0, 0, False, 'BIT 7,A'), |
| |
| 0x80: (0, 0, 0, 0, False, 'RES 0,B'), |
| 0x81: (0, 0, 0, 0, False, 'RES 0,C'), |
| 0x82: (0, 0, 0, 0, False, 'RES 0,D'), |
| 0x83: (0, 0, 0, 0, False, 'RES 0,E'), |
| 0x84: (0, 0, 0, 0, False, 'RES 0,H'), |
| 0x85: (0, 0, 0, 0, False, 'RES 0,L'), |
| 0x86: (0, 0, 1, 1, False, 'RES 0,(HL)'), |
| 0x87: (0, 0, 0, 0, False, 'RES 0,A'), |
| 0x88: (0, 0, 0, 0, False, 'RES 1,B'), |
| 0x89: (0, 0, 0, 0, False, 'RES 1,C'), |
| 0x8A: (0, 0, 0, 0, False, 'RES 1,D'), |
| 0x8B: (0, 0, 0, 0, False, 'RES 1,E'), |
| 0x8C: (0, 0, 0, 0, False, 'RES 1,H'), |
| 0x8D: (0, 0, 0, 0, False, 'RES 1,L'), |
| 0x8E: (0, 0, 1, 1, False, 'RES 1,(HL)'), |
| 0x8F: (0, 0, 0, 0, False, 'RES 1,A'), |
| |
| 0x90: (0, 0, 0, 0, False, 'RES 2,B'), |
| 0x91: (0, 0, 0, 0, False, 'RES 2,C'), |
| 0x92: (0, 0, 0, 0, False, 'RES 2,D'), |
| 0x93: (0, 0, 0, 0, False, 'RES 2,E'), |
| 0x94: (0, 0, 0, 0, False, 'RES 2,H'), |
| 0x95: (0, 0, 0, 0, False, 'RES 2,L'), |
| 0x96: (0, 0, 1, 1, False, 'RES 2,(HL)'), |
| 0x97: (0, 0, 0, 0, False, 'RES 2,A'), |
| 0x98: (0, 0, 0, 0, False, 'RES 3,B'), |
| 0x99: (0, 0, 0, 0, False, 'RES 3,C'), |
| 0x9A: (0, 0, 0, 0, False, 'RES 3,D'), |
| 0x9B: (0, 0, 0, 0, False, 'RES 3,E'), |
| 0x9C: (0, 0, 0, 0, False, 'RES 3,H'), |
| 0x9D: (0, 0, 0, 0, False, 'RES 3,L'), |
| 0x9E: (0, 0, 1, 1, False, 'RES 3,(HL)'), |
| 0x9F: (0, 0, 0, 0, False, 'RES 3,A'), |
| |
| 0xA0: (0, 0, 0, 0, False, 'RES 4,B'), |
| 0xA1: (0, 0, 0, 0, False, 'RES 4,C'), |
| 0xA2: (0, 0, 0, 0, False, 'RES 4,D'), |
| 0xA3: (0, 0, 0, 0, False, 'RES 4,E'), |
| 0xA4: (0, 0, 0, 0, False, 'RES 4,H'), |
| 0xA5: (0, 0, 0, 0, False, 'RES 4,L'), |
| 0xA6: (0, 0, 1, 1, False, 'RES 4,(HL)'), |
| 0xA7: (0, 0, 0, 0, False, 'RES 4,A'), |
| 0xA8: (0, 0, 0, 0, False, 'RES 5,B'), |
| 0xA9: (0, 0, 0, 0, False, 'RES 5,C'), |
| 0xAA: (0, 0, 0, 0, False, 'RES 5,D'), |
| 0xAB: (0, 0, 0, 0, False, 'RES 5,E'), |
| 0xAC: (0, 0, 0, 0, False, 'RES 5,H'), |
| 0xAD: (0, 0, 0, 0, False, 'RES 5,L'), |
| 0xAE: (0, 0, 1, 1, False, 'RES 5,(HL)'), |
| 0xAF: (0, 0, 0, 0, False, 'RES 5,A'), |
| |
| 0xB0: (0, 0, 0, 0, False, 'RES 6,B'), |
| 0xB1: (0, 0, 0, 0, False, 'RES 6,C'), |
| 0xB2: (0, 0, 0, 0, False, 'RES 6,D'), |
| 0xB3: (0, 0, 0, 0, False, 'RES 6,E'), |
| 0xB4: (0, 0, 0, 0, False, 'RES 6,H'), |
| 0xB5: (0, 0, 0, 0, False, 'RES 6,L'), |
| 0xB6: (0, 0, 1, 1, False, 'RES 6,(HL)'), |
| 0xB7: (0, 0, 0, 0, False, 'RES 6,A'), |
| 0xB8: (0, 0, 0, 0, False, 'RES 7,B'), |
| 0xB9: (0, 0, 0, 0, False, 'RES 7,C'), |
| 0xBA: (0, 0, 0, 0, False, 'RES 7,D'), |
| 0xBB: (0, 0, 0, 0, False, 'RES 7,E'), |
| 0xBC: (0, 0, 0, 0, False, 'RES 7,H'), |
| 0xBD: (0, 0, 0, 0, False, 'RES 7,L'), |
| 0xBE: (0, 0, 1, 1, False, 'RES 7,(HL)'), |
| 0xBF: (0, 0, 0, 0, False, 'RES 7,A'), |
| |
| 0xC0: (0, 0, 0, 0, False, 'SET 0,B'), |
| 0xC1: (0, 0, 0, 0, False, 'SET 0,C'), |
| 0xC2: (0, 0, 0, 0, False, 'SET 0,D'), |
| 0xC3: (0, 0, 0, 0, False, 'SET 0,E'), |
| 0xC4: (0, 0, 0, 0, False, 'SET 0,H'), |
| 0xC5: (0, 0, 0, 0, False, 'SET 0,L'), |
| 0xC6: (0, 0, 1, 1, False, 'SET 0,(HL)'), |
| 0xC7: (0, 0, 0, 0, False, 'SET 0,A'), |
| 0xC8: (0, 0, 0, 0, False, 'SET 1,B'), |
| 0xC9: (0, 0, 0, 0, False, 'SET 1,C'), |
| 0xCA: (0, 0, 0, 0, False, 'SET 1,D'), |
| 0xCB: (0, 0, 0, 0, False, 'SET 1,E'), |
| 0xCC: (0, 0, 0, 0, False, 'SET 1,H'), |
| 0xCD: (0, 0, 0, 0, False, 'SET 1,L'), |
| 0xCE: (0, 0, 1, 1, False, 'SET 1,(HL)'), |
| 0xCF: (0, 0, 0, 0, False, 'SET 1,A'), |
| |
| 0xD0: (0, 0, 0, 0, False, 'SET 2,B'), |
| 0xD1: (0, 0, 0, 0, False, 'SET 2,C'), |
| 0xD2: (0, 0, 0, 0, False, 'SET 2,D'), |
| 0xD3: (0, 0, 0, 0, False, 'SET 2,E'), |
| 0xD4: (0, 0, 0, 0, False, 'SET 2,H'), |
| 0xD5: (0, 0, 0, 0, False, 'SET 2,L'), |
| 0xD6: (0, 0, 1, 1, False, 'SET 2,(HL)'), |
| 0xD7: (0, 0, 0, 0, False, 'SET 2,A'), |
| 0xD8: (0, 0, 0, 0, False, 'SET 3,B'), |
| 0xD9: (0, 0, 0, 0, False, 'SET 3,C'), |
| 0xDA: (0, 0, 0, 0, False, 'SET 3,D'), |
| 0xDB: (0, 0, 0, 0, False, 'SET 3,E'), |
| 0xDC: (0, 0, 0, 0, False, 'SET 3,H'), |
| 0xDD: (0, 0, 0, 0, False, 'SET 3,L'), |
| 0xDE: (0, 0, 1, 1, False, 'SET 3,(HL)'), |
| 0xDF: (0, 0, 0, 0, False, 'SET 3,A'), |
| |
| 0xE0: (0, 0, 0, 0, False, 'SET 4,B'), |
| 0xE1: (0, 0, 0, 0, False, 'SET 4,C'), |
| 0xE2: (0, 0, 0, 0, False, 'SET 4,D'), |
| 0xE3: (0, 0, 0, 0, False, 'SET 4,E'), |
| 0xE4: (0, 0, 0, 0, False, 'SET 4,H'), |
| 0xE5: (0, 0, 0, 0, False, 'SET 4,L'), |
| 0xE6: (0, 0, 1, 1, False, 'SET 4,(HL)'), |
| 0xE7: (0, 0, 0, 0, False, 'SET 4,A'), |
| 0xE8: (0, 0, 0, 0, False, 'SET 5,B'), |
| 0xE9: (0, 0, 0, 0, False, 'SET 5,C'), |
| 0xEA: (0, 0, 0, 0, False, 'SET 5,D'), |
| 0xEB: (0, 0, 0, 0, False, 'SET 5,E'), |
| 0xEC: (0, 0, 0, 0, False, 'SET 5,H'), |
| 0xED: (0, 0, 0, 0, False, 'SET 5,L'), |
| 0xEE: (0, 0, 1, 1, False, 'SET 5,(HL)'), |
| 0xEF: (0, 0, 0, 0, False, 'SET 5,A'), |
| |
| 0xF0: (0, 0, 0, 0, False, 'SET 6,B'), |
| 0xF1: (0, 0, 0, 0, False, 'SET 6,C'), |
| 0xF2: (0, 0, 0, 0, False, 'SET 6,D'), |
| 0xF3: (0, 0, 0, 0, False, 'SET 6,E'), |
| 0xF4: (0, 0, 0, 0, False, 'SET 6,H'), |
| 0xF5: (0, 0, 0, 0, False, 'SET 6,L'), |
| 0xF6: (0, 0, 1, 1, False, 'SET 6,(HL)'), |
| 0xF7: (0, 0, 0, 0, False, 'SET 6,A'), |
| 0xF8: (0, 0, 0, 0, False, 'SET 7,B'), |
| 0xF9: (0, 0, 0, 0, False, 'SET 7,C'), |
| 0xFA: (0, 0, 0, 0, False, 'SET 7,D'), |
| 0xFB: (0, 0, 0, 0, False, 'SET 7,E'), |
| 0xFC: (0, 0, 0, 0, False, 'SET 7,H'), |
| 0xFD: (0, 0, 0, 0, False, 'SET 7,L'), |
| 0xFE: (0, 0, 1, 1, False, 'SET 7,(HL)'), |
| 0xFF: (0, 0, 0, 0, False, 'SET 7,A') |
| } |
| |
| # Instructions with DD or FD prefix |
| index_instructions = { |
| 0x09: (0, 0, 0, 0, False, 'ADD {r},BC'), |
| |
| 0x19: (0, 0, 0, 0, False, 'ADD {r},DE'), |
| |
| 0x21: (0, 2, 0, 0, False, 'LD {r},{i:04H}h'), |
| 0x22: (0, 2, 0, 2, False, 'LD ({i:04H}h),{r}'), |
| 0x23: (0, 0, 0, 0, False, 'INC {r}'), |
| 0x24: (0, 0, 0, 0, False, 'INC {r}h'), |
| 0x25: (0, 0, 0, 0, False, 'DEC {r}h'), |
| 0x26: (0, 1, 0, 0, False, 'LD {r}h,{i:02H}h'), |
| |
| 0x29: (0, 0, 0, 0, False, 'ADD {r},{r}'), |
| 0x2A: (0, 2, 2, 0, False, 'LD {r},({i:04H}h)'), |
| 0x2B: (0, 0, 0, 0, False, 'DEC {r}'), |
| 0x2C: (0, 0, 0, 0, False, 'INC {r}l'), |
| 0x2D: (0, 0, 0, 0, False, 'DEC {r}l'), |
| 0x2E: (0, 1, 0, 0, False, 'LD {r}l,{i:02H}h'), |
| |
| 0x34: (1, 0, 1, 1, False, 'INC ({r}{d:+d})'), |
| 0x35: (1, 0, 1, 1, False, 'DEC ({r}{d:+d})'), |
| 0x36: (1, 1, 0, 1, False, 'LD ({r}{d:+d}),{i:02H}h'), |
| |
| 0x39: (0, 0, 0, 0, False, 'ADD {r},SP'), |
| |
| 0x44: (0, 0, 0, 0, False, 'LD B,{r}h'), |
| 0x45: (0, 0, 0, 0, False, 'LD B,{r}l'), |
| 0x46: (1, 0, 1, 0, False, 'LD B,({r}{d:+d})'), |
| |
| 0x4C: (0, 0, 0, 0, False, 'LD C,{r}h'), |
| 0x4D: (0, 0, 0, 0, False, 'LD C,{r}l'), |
| 0x4E: (1, 0, 1, 0, False, 'LD C,({r}{d:+d})'), |
| |
| 0x54: (0, 0, 0, 0, False, 'LD D,{r}h'), |
| 0x55: (0, 0, 0, 0, False, 'LD D,{r}l'), |
| 0x56: (1, 0, 1, 0, False, 'LD D,({r}{d:+d})'), |
| |
| 0x5C: (0, 0, 0, 0, False, 'LD E,{r}h'), |
| 0x5D: (0, 0, 0, 0, False, 'LD E,{r}l'), |
| 0x5E: (1, 0, 1, 0, False, 'LD E,({r}{d:+d})'), |
| |
| 0x60: (0, 0, 0, 0, False, 'LD {r}h,B'), |
| 0x61: (0, 0, 0, 0, False, 'LD {r}h,C'), |
| 0x62: (0, 0, 0, 0, False, 'LD {r}h,D'), |
| 0x63: (0, 0, 0, 0, False, 'LD {r}h,E'), |
| 0x64: (0, 0, 0, 0, False, 'LD {r}h,{r}h'), |
| 0x65: (0, 0, 0, 0, False, 'LD {r}h,{r}l'), |
| 0x66: (1, 0, 1, 0, False, 'LD H,({r}{d:+d})'), |
| 0x67: (0, 0, 0, 0, False, 'LD {r}h,A'), |
| 0x68: (0, 0, 0, 0, False, 'LD {r}l,B'), |
| 0x69: (0, 0, 0, 0, False, 'LD {r}l,C'), |
| 0x6A: (0, 0, 0, 0, False, 'LD {r}l,D'), |
| 0x6B: (0, 0, 0, 0, False, 'LD {r}l,E'), |
| 0x6C: (0, 0, 0, 0, False, 'LD {r}l,{r}h'), |
| 0x6D: (0, 0, 0, 0, False, 'LD {r}l,{r}l'), |
| 0x6E: (1, 0, 1, 0, False, 'LD L,({r}{d:+d})'), |
| 0x6F: (0, 0, 0, 0, False, 'LD {r}l,A'), |
| |
| 0x70: (1, 0, 0, 1, False, 'LD ({r}{d:+d}),B'), |
| 0x71: (1, 0, 0, 1, False, 'LD ({r}{d:+d}),C'), |
| 0x72: (1, 0, 0, 1, False, 'LD ({r}{d:+d}),D'), |
| 0x73: (1, 0, 0, 1, False, 'LD ({r}{d:+d}),E'), |
| 0x74: (1, 0, 0, 1, False, 'LD ({r}{d:+d}),H'), |
| 0x75: (1, 0, 0, 1, False, 'LD ({r}{d:+d}),L'), |
| |
| 0x77: (1, 0, 0, 1, False, 'LD ({r}{d:+d}),A'), |
| |
| 0x7C: (0, 0, 0, 0, False, 'LD A,{r}h'), |
| 0x7D: (0, 0, 0, 0, False, 'LD A,{r}l'), |
| 0x7E: (1, 0, 1, 0, False, 'LD A,({r}{d:+d})'), |
| |
| 0x84: (0, 0, 0, 0, False, 'ADD A,{r}h'), |
| 0x85: (0, 0, 0, 0, False, 'ADD A,{r}l'), |
| 0x86: (1, 0, 1, 0, False, 'ADD A,({r}{d:+d})'), |
| |
| 0x8C: (0, 0, 0, 0, False, 'ADC A,{r}h'), |
| 0x8D: (0, 0, 0, 0, False, 'ADC A,{r}l'), |
| 0x8E: (1, 0, 1, 0, False, 'ADC A,({r}{d:+d})'), |
| |
| 0x94: (0, 0, 0, 0, False, 'SUB {r}h'), |
| 0x95: (0, 0, 0, 0, False, 'SUB {r}l'), |
| 0x96: (1, 0, 1, 0, False, 'SUB ({r}{d:+d})'), |
| |
| 0x9C: (0, 0, 0, 0, False, 'SBC A,{r}h'), |
| 0x9D: (0, 0, 0, 0, False, 'SBC A,{r}l'), |
| 0x9E: (1, 0, 1, 0, False, 'SBC A,({r}{d:+d})'), |
| |
| 0xA4: (0, 0, 0, 0, False, 'AND {r}h'), |
| 0xA5: (0, 0, 0, 0, False, 'AND {r}l'), |
| 0xA6: (1, 0, 1, 0, False, 'AND ({r}{d:+d})'), |
| |
| 0xAC: (0, 0, 0, 0, False, 'XOR {r}h'), |
| 0xAD: (0, 0, 0, 0, False, 'XOR {r}l'), |
| 0xAE: (1, 0, 1, 0, False, 'XOR ({r}{d:+d})'), |
| |
| 0xB4: (0, 0, 0, 0, False, 'OR {r}h'), |
| 0xB5: (0, 0, 0, 0, False, 'OR {r}l'), |
| 0xB6: (1, 0, 1, 0, False, 'OR ({r}{d:+d})'), |
| |
| 0xBC: (0, 0, 0, 0, False, 'CP {r}h'), |
| 0xBD: (0, 0, 0, 0, False, 'CP {r}l'), |
| 0xBE: (1, 0, 1, 0, False, 'CP ({r}{d:+d})'), |
| |
| 0xE1: (0, 0, 2, 0, False, 'POP {r}'), |
| |
| 0xE3: (0, 0, 2, 2, False, 'EX (SP),{r}'), |
| |
| 0xE5: (0, 0, 0,-2, False, 'PUSH {r}'), |
| |
| 0xE9: (0, 0, 0, 0, False, 'JP ({r})'), |
| |
| 0xF9: (0, 0, 0, 0, False, 'LD SP,{r}') |
| } |
| |
| # Instructions with DD CB or FD CB prefix. |
| # For these instructions, the displacement precedes the opcode byte. |
| # This is handled as a special case in the code, and thus the entries |
| # in this table specify 0 for the displacement length. |
| index_bit_instructions = { |
| 0x00: (0, 0, 1, 1, False, 'RLC ({r}{d:+d}),B'), |
| 0x01: (0, 0, 1, 1, False, 'RLC ({r}{d:+d}),C'), |
| 0x02: (0, 0, 1, 1, False, 'RLC ({r}{d:+d}),D'), |
| 0x03: (0, 0, 1, 1, False, 'RLC ({r}{d:+d}),E'), |
| 0x04: (0, 0, 1, 1, False, 'RLC ({r}{d:+d}),H'), |
| 0x05: (0, 0, 1, 1, False, 'RLC ({r}{d:+d}),L'), |
| 0x06: (0, 0, 1, 1, False, 'RLC ({r}{d:+d})'), |
| 0x07: (0, 0, 1, 1, False, 'RLC ({r}{d:+d}),A'), |
| 0x08: (0, 0, 1, 1, False, 'RRC ({r}{d:+d}),B'), |
| 0x09: (0, 0, 1, 1, False, 'RRC ({r}{d:+d}),C'), |
| 0x0A: (0, 0, 1, 1, False, 'RRC ({r}{d:+d}),D'), |
| 0x0B: (0, 0, 1, 1, False, 'RRC ({r}{d:+d}),E'), |
| 0x0C: (0, 0, 1, 1, False, 'RRC ({r}{d:+d}),H'), |
| 0x0D: (0, 0, 1, 1, False, 'RRC ({r}{d:+d}),L'), |
| 0x0E: (0, 0, 1, 1, False, 'RRC ({r}{d:+d})'), |
| 0x0F: (0, 0, 1, 1, False, 'RRC ({r}{d:+d}),A'), |
| |
| 0x10: (0, 0, 1, 1, False, 'RL ({r}{d:+d}),B'), |
| 0x11: (0, 0, 1, 1, False, 'RL ({r}{d:+d}),C'), |
| 0x12: (0, 0, 1, 1, False, 'RL ({r}{d:+d}),D'), |
| 0x13: (0, 0, 1, 1, False, 'RL ({r}{d:+d}),E'), |
| 0x14: (0, 0, 1, 1, False, 'RL ({r}{d:+d}),H'), |
| 0x15: (0, 0, 1, 1, False, 'RL ({r}{d:+d}),L'), |
| 0x16: (0, 0, 1, 1, False, 'RL ({r}{d:+d})'), |
| 0x17: (0, 0, 1, 1, False, 'RL ({r}{d:+d}),A'), |
| 0x18: (0, 0, 1, 1, False, 'RR ({r}{d:+d}),B'), |
| 0x19: (0, 0, 1, 1, False, 'RR ({r}{d:+d}),C'), |
| 0x1A: (0, 0, 1, 1, False, 'RR ({r}{d:+d}),D'), |
| 0x1B: (0, 0, 1, 1, False, 'RR ({r}{d:+d}),E'), |
| 0x1C: (0, 0, 1, 1, False, 'RR ({r}{d:+d}),H'), |
| 0x1D: (0, 0, 1, 1, False, 'RR ({r}{d:+d}),L'), |
| 0x1E: (0, 0, 1, 1, False, 'RR ({r}{d:+d})'), |
| 0x1F: (0, 0, 1, 1, False, 'RR ({r}{d:+d}),A'), |
| |
| 0x20: (0, 0, 1, 1, False, 'SLA ({r}{d:+d}),B'), |
| 0x21: (0, 0, 1, 1, False, 'SLA ({r}{d:+d}),C'), |
| 0x22: (0, 0, 1, 1, False, 'SLA ({r}{d:+d}),D'), |
| 0x23: (0, 0, 1, 1, False, 'SLA ({r}{d:+d}),E'), |
| 0x24: (0, 0, 1, 1, False, 'SLA ({r}{d:+d}),H'), |
| 0x25: (0, 0, 1, 1, False, 'SLA ({r}{d:+d}),L'), |
| 0x26: (0, 0, 1, 1, False, 'SLA ({r}{d:+d})'), |
| 0x27: (0, 0, 1, 1, False, 'SLA ({r}{d:+d}),A'), |
| 0x28: (0, 0, 1, 1, False, 'SRA ({r}{d:+d}),B'), |
| 0x29: (0, 0, 1, 1, False, 'SRA ({r}{d:+d}),C'), |
| 0x2A: (0, 0, 1, 1, False, 'SRA ({r}{d:+d}),D'), |
| 0x2B: (0, 0, 1, 1, False, 'SRA ({r}{d:+d}),E'), |
| 0x2C: (0, 0, 1, 1, False, 'SRA ({r}{d:+d}),H'), |
| 0x2D: (0, 0, 1, 1, False, 'SRA ({r}{d:+d}),L'), |
| 0x2E: (0, 0, 1, 1, False, 'SRA ({r}{d:+d})'), |
| 0x2F: (0, 0, 1, 1, False, 'SRA ({r}{d:+d}),A'), |
| |
| 0x30: (0, 0, 1, 1, False, 'SLL ({r}{d:+d}),B'), |
| 0x31: (0, 0, 1, 1, False, 'SLL ({r}{d:+d}),C'), |
| 0x32: (0, 0, 1, 1, False, 'SLL ({r}{d:+d}),D'), |
| 0x33: (0, 0, 1, 1, False, 'SLL ({r}{d:+d}),E'), |
| 0x34: (0, 0, 1, 1, False, 'SLL ({r}{d:+d}),H'), |
| 0x35: (0, 0, 1, 1, False, 'SLL ({r}{d:+d}),L'), |
| 0x36: (0, 0, 1, 1, False, 'SLL ({r}{d:+d})'), |
| 0x37: (0, 0, 1, 1, False, 'SLL ({r}{d:+d}),A'), |
| 0x38: (0, 0, 1, 1, False, 'SRL ({r}{d:+d}),B'), |
| 0x39: (0, 0, 1, 1, False, 'SRL ({r}{d:+d}),C'), |
| 0x3A: (0, 0, 1, 1, False, 'SRL ({r}{d:+d}),D'), |
| 0x3B: (0, 0, 1, 1, False, 'SRL ({r}{d:+d}),E'), |
| 0x3C: (0, 0, 1, 1, False, 'SRL ({r}{d:+d}),H'), |
| 0x3D: (0, 0, 1, 1, False, 'SRL ({r}{d:+d}),L'), |
| 0x3E: (0, 0, 1, 1, False, 'SRL ({r}{d:+d})'), |
| 0x3F: (0, 0, 1, 1, False, 'SRL ({r}{d:+d}),A'), |
| |
| 0x40: (0, 0, 1, 0, False, 'BIT 0,({r}{d:+d})'), |
| 0x41: (0, 0, 1, 0, False, 'BIT 0,({r}{d:+d})'), |
| 0x42: (0, 0, 1, 0, False, 'BIT 0,({r}{d:+d})'), |
| 0x43: (0, 0, 1, 0, False, 'BIT 0,({r}{d:+d})'), |
| 0x44: (0, 0, 1, 0, False, 'BIT 0,({r}{d:+d})'), |
| 0x45: (0, 0, 1, 0, False, 'BIT 0,({r}{d:+d})'), |
| 0x46: (0, 0, 1, 0, False, 'BIT 0,({r}{d:+d})'), |
| 0x47: (0, 0, 1, 0, False, 'BIT 0,({r}{d:+d})'), |
| 0x48: (0, 0, 1, 0, False, 'BIT 1,({r}{d:+d})'), |
| 0x49: (0, 0, 1, 0, False, 'BIT 1,({r}{d:+d})'), |
| 0x4A: (0, 0, 1, 0, False, 'BIT 1,({r}{d:+d})'), |
| 0x4B: (0, 0, 1, 0, False, 'BIT 1,({r}{d:+d})'), |
| 0x4C: (0, 0, 1, 0, False, 'BIT 1,({r}{d:+d})'), |
| 0x4D: (0, 0, 1, 0, False, 'BIT 1,({r}{d:+d})'), |
| 0x4E: (0, 0, 1, 0, False, 'BIT 1,({r}{d:+d})'), |
| 0x4F: (0, 0, 1, 0, False, 'BIT 1,({r}{d:+d})'), |
| |
| 0x50: (0, 0, 1, 0, False, 'BIT 2,({r}{d:+d})'), |
| 0x51: (0, 0, 1, 0, False, 'BIT 2,({r}{d:+d})'), |
| 0x52: (0, 0, 1, 0, False, 'BIT 2,({r}{d:+d})'), |
| 0x53: (0, 0, 1, 0, False, 'BIT 2,({r}{d:+d})'), |
| 0x54: (0, 0, 1, 0, False, 'BIT 2,({r}{d:+d})'), |
| 0x55: (0, 0, 1, 0, False, 'BIT 2,({r}{d:+d})'), |
| 0x56: (0, 0, 1, 0, False, 'BIT 2,({r}{d:+d})'), |
| 0x57: (0, 0, 1, 0, False, 'BIT 2,({r}{d:+d})'), |
| 0x58: (0, 0, 1, 0, False, 'BIT 3,({r}{d:+d})'), |
| 0x59: (0, 0, 1, 0, False, 'BIT 3,({r}{d:+d})'), |
| 0x5A: (0, 0, 1, 0, False, 'BIT 3,({r}{d:+d})'), |
| 0x5B: (0, 0, 1, 0, False, 'BIT 3,({r}{d:+d})'), |
| 0x5C: (0, 0, 1, 0, False, 'BIT 3,({r}{d:+d})'), |
| 0x5D: (0, 0, 1, 0, False, 'BIT 3,({r}{d:+d})'), |
| 0x5E: (0, 0, 1, 0, False, 'BIT 3,({r}{d:+d})'), |
| 0x5F: (0, 0, 1, 0, False, 'BIT 3,({r}{d:+d})'), |
| |
| 0x60: (0, 0, 1, 0, False, 'BIT 4,({r}{d:+d})'), |
| 0x61: (0, 0, 1, 0, False, 'BIT 4,({r}{d:+d})'), |
| 0x62: (0, 0, 1, 0, False, 'BIT 4,({r}{d:+d})'), |
| 0x63: (0, 0, 1, 0, False, 'BIT 4,({r}{d:+d})'), |
| 0x64: (0, 0, 1, 0, False, 'BIT 4,({r}{d:+d})'), |
| 0x65: (0, 0, 1, 0, False, 'BIT 4,({r}{d:+d})'), |
| 0x66: (0, 0, 1, 0, False, 'BIT 4,({r}{d:+d})'), |
| 0x67: (0, 0, 1, 0, False, 'BIT 4,({r}{d:+d})'), |
| 0x68: (0, 0, 1, 0, False, 'BIT 5,({r}{d:+d})'), |
| 0x69: (0, 0, 1, 0, False, 'BIT 5,({r}{d:+d})'), |
| 0x6A: (0, 0, 1, 0, False, 'BIT 5,({r}{d:+d})'), |
| 0x6B: (0, 0, 1, 0, False, 'BIT 5,({r}{d:+d})'), |
| 0x6C: (0, 0, 1, 0, False, 'BIT 5,({r}{d:+d})'), |
| 0x6D: (0, 0, 1, 0, False, 'BIT 5,({r}{d:+d})'), |
| 0x6E: (0, 0, 1, 0, False, 'BIT 5,({r}{d:+d})'), |
| 0x6F: (0, 0, 1, 0, False, 'BIT 5,({r}{d:+d})'), |
| |
| 0x70: (0, 0, 1, 0, False, 'BIT 6,({r}{d:+d})'), |
| 0x71: (0, 0, 1, 0, False, 'BIT 6,({r}{d:+d})'), |
| 0x72: (0, 0, 1, 0, False, 'BIT 6,({r}{d:+d})'), |
| 0x73: (0, 0, 1, 0, False, 'BIT 6,({r}{d:+d})'), |
| 0x74: (0, 0, 1, 0, False, 'BIT 6,({r}{d:+d})'), |
| 0x75: (0, 0, 1, 0, False, 'BIT 6,({r}{d:+d})'), |
| 0x76: (0, 0, 1, 0, False, 'BIT 6,({r}{d:+d})'), |
| 0x77: (0, 0, 1, 0, False, 'BIT 6,({r}{d:+d})'), |
| 0x78: (0, 0, 1, 0, False, 'BIT 7,({r}{d:+d})'), |
| 0x79: (0, 0, 1, 0, False, 'BIT 7,({r}{d:+d})'), |
| 0x7A: (0, 0, 1, 0, False, 'BIT 7,({r}{d:+d})'), |
| 0x7B: (0, 0, 1, 0, False, 'BIT 7,({r}{d:+d})'), |
| 0x7C: (0, 0, 1, 0, False, 'BIT 7,({r}{d:+d})'), |
| 0x7D: (0, 0, 1, 0, False, 'BIT 7,({r}{d:+d})'), |
| 0x7E: (0, 0, 1, 0, False, 'BIT 7,({r}{d:+d})'), |
| 0x7F: (0, 0, 1, 0, False, 'BIT 7,({r}{d:+d})'), |
| |
| 0x80: (0, 0, 1, 1, False, 'RES 0,({r}{d:+d}),B'), |
| 0x81: (0, 0, 1, 1, False, 'RES 0,({r}{d:+d}),C'), |
| 0x82: (0, 0, 1, 1, False, 'RES 0,({r}{d:+d}),D'), |
| 0x83: (0, 0, 1, 1, False, 'RES 0,({r}{d:+d}),E'), |
| 0x84: (0, 0, 1, 1, False, 'RES 0,({r}{d:+d}),H'), |
| 0x85: (0, 0, 1, 1, False, 'RES 0,({r}{d:+d}),L'), |
| 0x86: (0, 0, 1, 1, False, 'RES 0,({r}{d:+d})'), |
| 0x87: (0, 0, 1, 1, False, 'RES 0,({r}{d:+d}),A'), |
| 0x88: (0, 0, 1, 1, False, 'RES 1,({r}{d:+d}),B'), |
| 0x89: (0, 0, 1, 1, False, 'RES 1,({r}{d:+d}),C'), |
| 0x8A: (0, 0, 1, 1, False, 'RES 1,({r}{d:+d}),D'), |
| 0x8B: (0, 0, 1, 1, False, 'RES 1,({r}{d:+d}),E'), |
| 0x8C: (0, 0, 1, 1, False, 'RES 1,({r}{d:+d}),H'), |
| 0x8D: (0, 0, 1, 1, False, 'RES 1,({r}{d:+d}),L'), |
| 0x8E: (0, 0, 1, 1, False, 'RES 1,({r}{d:+d})'), |
| 0x8F: (0, 0, 1, 1, False, 'RES 1,({r}{d:+d}),A'), |
| |
| 0x90: (0, 0, 1, 1, False, 'RES 2,({r}{d:+d}),B'), |
| 0x91: (0, 0, 1, 1, False, 'RES 2,({r}{d:+d}),C'), |
| 0x92: (0, 0, 1, 1, False, 'RES 2,({r}{d:+d}),D'), |
| 0x93: (0, 0, 1, 1, False, 'RES 2,({r}{d:+d}),E'), |
| 0x94: (0, 0, 1, 1, False, 'RES 2,({r}{d:+d}),H'), |
| 0x95: (0, 0, 1, 1, False, 'RES 2,({r}{d:+d}),L'), |
| 0x96: (0, 0, 1, 1, False, 'RES 2,({r}{d:+d})'), |
| 0x97: (0, 0, 1, 1, False, 'RES 2,({r}{d:+d}),A'), |
| 0x98: (0, 0, 1, 1, False, 'RES 3,({r}{d:+d}),B'), |
| 0x99: (0, 0, 1, 1, False, 'RES 3,({r}{d:+d}),C'), |
| 0x9A: (0, 0, 1, 1, False, 'RES 3,({r}{d:+d}),D'), |
| 0x9B: (0, 0, 1, 1, False, 'RES 3,({r}{d:+d}),E'), |
| 0x9C: (0, 0, 1, 1, False, 'RES 3,({r}{d:+d}),H'), |
| 0x9D: (0, 0, 1, 1, False, 'RES 3,({r}{d:+d}),L'), |
| 0x9E: (0, 0, 1, 1, False, 'RES 3,({r}{d:+d})'), |
| 0x9F: (0, 0, 1, 1, False, 'RES 3,({r}{d:+d}),A'), |
| |
| 0xA0: (0, 0, 1, 1, False, 'RES 4,({r}{d:+d}),B'), |
| 0xA1: (0, 0, 1, 1, False, 'RES 4,({r}{d:+d}),C'), |
| 0xA2: (0, 0, 1, 1, False, 'RES 4,({r}{d:+d}),D'), |
| 0xA3: (0, 0, 1, 1, False, 'RES 4,({r}{d:+d}),E'), |
| 0xA4: (0, 0, 1, 1, False, 'RES 4,({r}{d:+d}),H'), |
| 0xA5: (0, 0, 1, 1, False, 'RES 4,({r}{d:+d}),L'), |
| 0xA6: (0, 0, 1, 1, False, 'RES 4,({r}{d:+d})'), |
| 0xA7: (0, 0, 1, 1, False, 'RES 4,({r}{d:+d}),A'), |
| 0xA8: (0, 0, 1, 1, False, 'RES 5,({r}{d:+d}),B'), |
| 0xA9: (0, 0, 1, 1, False, 'RES 5,({r}{d:+d}),C'), |
| 0xAA: (0, 0, 1, 1, False, 'RES 5,({r}{d:+d}),D'), |
| 0xAB: (0, 0, 1, 1, False, 'RES 5,({r}{d:+d}),E'), |
| 0xAC: (0, 0, 1, 1, False, 'RES 5,({r}{d:+d}),H'), |
| 0xAD: (0, 0, 1, 1, False, 'RES 5,({r}{d:+d}),L'), |
| 0xAE: (0, 0, 1, 1, False, 'RES 5,({r}{d:+d})'), |
| 0xAF: (0, 0, 1, 1, False, 'RES 5,({r}{d:+d}),A'), |
| |
| 0xB0: (0, 0, 1, 1, False, 'RES 6,({r}{d:+d}),B'), |
| 0xB1: (0, 0, 1, 1, False, 'RES 6,({r}{d:+d}),C'), |
| 0xB2: (0, 0, 1, 1, False, 'RES 6,({r}{d:+d}),D'), |
| 0xB3: (0, 0, 1, 1, False, 'RES 6,({r}{d:+d}),E'), |
| 0xB4: (0, 0, 1, 1, False, 'RES 6,({r}{d:+d}),H'), |
| 0xB5: (0, 0, 1, 1, False, 'RES 6,({r}{d:+d}),L'), |
| 0xB6: (0, 0, 1, 1, False, 'RES 6,({r}{d:+d})'), |
| 0xB7: (0, 0, 1, 1, False, 'RES 6,({r}{d:+d}),A'), |
| 0xB8: (0, 0, 1, 1, False, 'RES 7,({r}{d:+d}),B'), |
| 0xB9: (0, 0, 1, 1, False, 'RES 7,({r}{d:+d}),C'), |
| 0xBA: (0, 0, 1, 1, False, 'RES 7,({r}{d:+d}),D'), |
| 0xBB: (0, 0, 1, 1, False, 'RES 7,({r}{d:+d}),E'), |
| 0xBC: (0, 0, 1, 1, False, 'RES 7,({r}{d:+d}),H'), |
| 0xBD: (0, 0, 1, 1, False, 'RES 7,({r}{d:+d}),L'), |
| 0xBE: (0, 0, 1, 1, False, 'RES 7,({r}{d:+d})'), |
| 0xBF: (0, 0, 1, 1, False, 'RES 7,({r}{d:+d}),A'), |
| |
| 0xC0: (0, 0, 1, 1, False, 'SET 0,({r}{d:+d}),B'), |
| 0xC1: (0, 0, 1, 1, False, 'SET 0,({r}{d:+d}),C'), |
| 0xC2: (0, 0, 1, 1, False, 'SET 0,({r}{d:+d}),D'), |
| 0xC3: (0, 0, 1, 1, False, 'SET 0,({r}{d:+d}),E'), |
| 0xC4: (0, 0, 1, 1, False, 'SET 0,({r}{d:+d}),H'), |
| 0xC5: (0, 0, 1, 1, False, 'SET 0,({r}{d:+d}),L'), |
| 0xC6: (0, 0, 1, 1, False, 'SET 0,({r}{d:+d})'), |
| 0xC7: (0, 0, 1, 1, False, 'SET 0,({r}{d:+d}),A'), |
| 0xC8: (0, 0, 1, 1, False, 'SET 1,({r}{d:+d}),B'), |
| 0xC9: (0, 0, 1, 1, False, 'SET 1,({r}{d:+d}),C'), |
| 0xCA: (0, 0, 1, 1, False, 'SET 1,({r}{d:+d}),D'), |
| 0xCB: (0, 0, 1, 1, False, 'SET 1,({r}{d:+d}),E'), |
| 0xCC: (0, 0, 1, 1, False, 'SET 1,({r}{d:+d}),H'), |
| 0xCD: (0, 0, 1, 1, False, 'SET 1,({r}{d:+d}),L'), |
| 0xCE: (0, 0, 1, 1, False, 'SET 1,({r}{d:+d})'), |
| 0xCF: (0, 0, 1, 1, False, 'SET 1,({r}{d:+d}),A'), |
| |
| 0xD0: (0, 0, 1, 1, False, 'SET 2,({r}{d:+d}),B'), |
| 0xD1: (0, 0, 1, 1, False, 'SET 2,({r}{d:+d}),C'), |
| 0xD2: (0, 0, 1, 1, False, 'SET 2,({r}{d:+d}),D'), |
| 0xD3: (0, 0, 1, 1, False, 'SET 2,({r}{d:+d}),E'), |
| 0xD4: (0, 0, 1, 1, False, 'SET 2,({r}{d:+d}),H'), |
| 0xD5: (0, 0, 1, 1, False, 'SET 2,({r}{d:+d}),L'), |
| 0xD6: (0, 0, 1, 1, False, 'SET 2,({r}{d:+d})'), |
| 0xD7: (0, 0, 1, 1, False, 'SET 2,({r}{d:+d}),A'), |
| 0xD8: (0, 0, 1, 1, False, 'SET 3,({r}{d:+d}),B'), |
| 0xD9: (0, 0, 1, 1, False, 'SET 3,({r}{d:+d}),C'), |
| 0xDA: (0, 0, 1, 1, False, 'SET 3,({r}{d:+d}),D'), |
| 0xDB: (0, 0, 1, 1, False, 'SET 3,({r}{d:+d}),E'), |
| 0xDC: (0, 0, 1, 1, False, 'SET 3,({r}{d:+d}),H'), |
| 0xDD: (0, 0, 1, 1, False, 'SET 3,({r}{d:+d}),L'), |
| 0xDE: (0, 0, 1, 1, False, 'SET 3,({r}{d:+d})'), |
| 0xDF: (0, 0, 1, 1, False, 'SET 3,({r}{d:+d}),A'), |
| |
| 0xE0: (0, 0, 1, 1, False, 'SET 4,({r}{d:+d}),B'), |
| 0xE1: (0, 0, 1, 1, False, 'SET 4,({r}{d:+d}),C'), |
| 0xE2: (0, 0, 1, 1, False, 'SET 4,({r}{d:+d}),D'), |
| 0xE3: (0, 0, 1, 1, False, 'SET 4,({r}{d:+d}),E'), |
| 0xE4: (0, 0, 1, 1, False, 'SET 4,({r}{d:+d}),H'), |
| 0xE5: (0, 0, 1, 1, False, 'SET 4,({r}{d:+d}),L'), |
| 0xE6: (0, 0, 1, 1, False, 'SET 4,({r}{d:+d})'), |
| 0xE7: (0, 0, 1, 1, False, 'SET 4,({r}{d:+d}),A'), |
| 0xE8: (0, 0, 1, 1, False, 'SET 5,({r}{d:+d}),B'), |
| 0xE9: (0, 0, 1, 1, False, 'SET 5,({r}{d:+d}),C'), |
| 0xEA: (0, 0, 1, 1, False, 'SET 5,({r}{d:+d}),D'), |
| 0xEB: (0, 0, 1, 1, False, 'SET 5,({r}{d:+d}),E'), |
| 0xEC: (0, 0, 1, 1, False, 'SET 5,({r}{d:+d}),H'), |
| 0xED: (0, 0, 1, 1, False, 'SET 5,({r}{d:+d}),L'), |
| 0xEE: (0, 0, 1, 1, False, 'SET 5,({r}{d:+d})'), |
| 0xEF: (0, 0, 1, 1, False, 'SET 5,({r}{d:+d}),A'), |
| |
| 0xF0: (0, 0, 1, 1, False, 'SET 6,({r}{d:+d}),B'), |
| 0xF1: (0, 0, 1, 1, False, 'SET 6,({r}{d:+d}),C'), |
| 0xF2: (0, 0, 1, 1, False, 'SET 6,({r}{d:+d}),D'), |
| 0xF3: (0, 0, 1, 1, False, 'SET 6,({r}{d:+d}),E'), |
| 0xF4: (0, 0, 1, 1, False, 'SET 6,({r}{d:+d}),H'), |
| 0xF5: (0, 0, 1, 1, False, 'SET 6,({r}{d:+d}),L'), |
| 0xF6: (0, 0, 1, 1, False, 'SET 6,({r}{d:+d})'), |
| 0xF7: (0, 0, 1, 1, False, 'SET 6,({r}{d:+d}),A'), |
| 0xF8: (0, 0, 1, 1, False, 'SET 7,({r}{d:+d}),B'), |
| 0xF9: (0, 0, 1, 1, False, 'SET 7,({r}{d:+d}),C'), |
| 0xFA: (0, 0, 1, 1, False, 'SET 7,({r}{d:+d}),D'), |
| 0xFB: (0, 0, 1, 1, False, 'SET 7,({r}{d:+d}),E'), |
| 0xFC: (0, 0, 1, 1, False, 'SET 7,({r}{d:+d}),H'), |
| 0xFD: (0, 0, 1, 1, False, 'SET 7,({r}{d:+d}),L'), |
| 0xFE: (0, 0, 1, 1, False, 'SET 7,({r}{d:+d})'), |
| 0xFF: (0, 0, 1, 1, False, 'SET 7,({r}{d:+d}),A') |
| } |
| |
| instr_table_by_prefix = { |
| 0: (main_instructions, ''), |
| 0xED: (extended_instructions, ''), |
| 0xCB: (bit_instructions, ''), |
| 0xDD: (index_instructions, 'IX'), |
| 0xFD: (index_instructions, 'IY'), |
| 0xDDCB: (index_bit_instructions, 'IX'), |
| 0xFDCB: (index_bit_instructions, 'IY') |
| } |