/***************************************************************************** This file is part of x2600, the Atari 2600 Emulator =================================================== Copyright 1996 Alex Hornby. For contributions see the file CREDITS. This software is distributed under the terms of the GNU General Public License. This is free software with ABSOLUTELY NO WARRANTY. See the file COPYING for Details. $Id: table.c,v 1.4 1996/08/26 15:04:20 ahornby Exp $ ******************************************************************************/ /* * $Id: table.c,v 1.4 1996/08/26 15:04:20 ahornby Exp $ * * This was part of the x64 Commodore 64 emulator. * See README for copyright notice * * This file contains lookup-table which is used to translate * MOS6502 machine instructions. Machine code is used as index * to array called lookup. Pointer to function is then fetched * from array and function is called. * Timing of the undocumented opcodes is based on information * in an article in C=Lehti by Kai Lindfors and Topi Maurola. * * * Written by * Vesa-Matti Puro (vmp@lut.fi) * Jarkko Sonninen (sonninen@lut.fi) * Jouko Valta (jopi@stekt.oulu.fi) * */ //This file was modified from its original version for use in PocketVCS // by Stuart Russell #include "cpu.h" #include "mnemonic.h" /* * The "mnemonic.h" file contains #defines for BRK, ORA, NOOP... which * are character strings, i.e. #define BRK "BRK" * #define ORA "ORA" . . . Used mainly to reduce typing... * * There are #defines for addressing modes i.e. IMPLIED, INDIRECT_X, * ZERO_PAGE in "cpu.h"... These can be used to make a diassembler. */ #define PROGMEM PROGMEM int clength[] = {1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 0}; PROGMEM struct lookup_tag lookup[] = { /**** Positive ****/ /* 00 */ {BRK, IMPLIED, M_NONE, M_PC, 7, 0}, /* Pseudo Absolute */ /* 01 */ {ORA, INDIRECT_X, M_INDX, M_AC, 6, 0}, /* (Indirect,X) */ /* 02 */ {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */ /* 03 */ {SLO, INDIRECT_X, M_INDX, M_INDX, 8, 0}, /* 04 */ {NOOP, ZERO_PAGE, M_NONE, M_NONE, 3, 0}, /* 05 */ {ORA, ZERO_PAGE, M_ZERO, M_AC, 3, 0}, /* Zeropage */ /* 06 */ {ASL, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* Zeropage */ /* 07 */ {SLO, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* 08 */ {PHP, IMPLIED, M_SR, M_NONE, 3, 0}, /* 09 */ {ORA, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* Immediate */ /* 0a */ {ASL, ACCUMULATOR, M_AC, M_AC, 2, 0}, /* Accumulator */ /* 0b */ {ANC, IMMEDIATE, M_ACIM, M_ACNC, 2, 0}, /* 0c */ {NOOP, ABSOLUTE, M_NONE, M_NONE, 4, 0}, /* 0d */ {ORA, ABSOLUTE, M_ABS, M_AC, 4, 0}, /* Absolute */ /* 0e */ {ASL, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* Absolute */ /* 0f */ {SLO, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* 10 */ {BPL, RELATIVE, M_REL, M_NONE, 2, 0}, /* 11 */ {ORA, INDIRECT_Y, M_INDY, M_AC, 5, 1}, /* (Indirect),Y */ /* 12 */ {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */ /* 13 */ {SLO, INDIRECT_Y, M_INDY, M_INDY, 8, 0}, /* 14 */ {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0}, /* 15 */ {ORA, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0}, /* Zeropage,X */ /* 16 */ {ASL, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* Zeropage,X */ /* 17 */ {SLO, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* 18 */ {CLC, IMPLIED, M_NONE, M_FC, 2, 0}, /* 19 */ {ORA, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1}, /* Absolute,Y */ /* 1a */ {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0}, /* 1b */ {SLO, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0}, /* 1c */ {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1}, /* 1d */ {ORA, ABSOLUTE_X, M_ABSX, M_AC, 4, 1}, /* Absolute,X */ /* 1e */ {ASL, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* Absolute,X */ /* 1f */ {SLO, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* 20 */ {JSR, ABSOLUTE, M_ADDR, M_PC, 6, 0}, /* 21 */ {AND, INDIRECT_X, M_INDX, M_AC, 6, 0}, /* (Indirect ,X) */ /* 22 */ {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */ /* 23 */ {RLA, INDIRECT_X, M_INDX, M_INDX, 8, 0}, /* 24 */ {BIT, ZERO_PAGE, M_ZERO, M_NONE, 3, 0}, /* Zeropage */ /* 25 */ {AND, ZERO_PAGE, M_ZERO, M_AC, 3, 0}, /* Zeropage */ /* 26 */ {ROL, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* Zeropage */ /* 27 */ {RLA, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* 28 */ {PLP, IMPLIED, M_NONE, M_SR, 4, 0}, /* 29 */ {AND, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* Immediate */ /* 2a */ {ROL, ACCUMULATOR, M_AC, M_AC, 2, 0}, /* Accumulator */ /* 2b */ {ANC, IMMEDIATE, M_ACIM, M_ACNC, 2, 0}, /* 2c */ {BIT, ABSOLUTE, M_ABS, M_NONE, 4, 0}, /* Absolute */ /* 2d */ {AND, ABSOLUTE, M_ABS, M_AC, 4, 0}, /* Absolute */ /* 2e */ {ROL, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* Absolute */ /* 2f */ {RLA, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* 30 */ {BMI, RELATIVE, M_REL, M_NONE, 2, 0}, /* 31 */ {AND, INDIRECT_Y, M_INDY, M_AC, 5, 1}, /* (Indirect),Y */ /* 32 */ {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */ /* 33 */ {RLA, INDIRECT_Y, M_INDY, M_INDY, 8, 0}, /* 34 */ {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0}, /* 35 */ {AND, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0}, /* Zeropage,X */ /* 36 */ {ROL, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* Zeropage,X */ /* 37 */ {RLA, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* 38 */ {SEC, IMPLIED, M_NONE, M_FC, 2, 0}, /* 39 */ {AND, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1}, /* Absolute,Y */ /* 3a */ {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0}, /* 3b */ {RLA, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0}, /* 3c */ {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1}, /* 3d */ {AND, ABSOLUTE_X, M_ABSX, M_AC, 4, 1}, /* Absolute,X */ /* 3e */ {ROL, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* Absolute,X */ /* 3f */ {RLA, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* 40 */ {RTI, IMPLIED, M_NONE, M_PC, 6, 0}, /* 41 */ {EOR, INDIRECT_X, M_INDX, M_AC, 6, 0}, /* (Indirect,X) */ /* 42 */ {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */ /* 43 */ {SRE, INDIRECT_X, M_INDX, M_INDX, 8, 0}, /* 44 */ {NOOP, ZERO_PAGE, M_NONE, M_NONE, 3, 0}, /* 45 */ {EOR, ZERO_PAGE, M_ZERO, M_AC, 3, 0}, /* Zeropage */ /* 46 */ {LSR, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* Zeropage */ /* 47 */ {SRE, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* 48 */ {PHA, IMPLIED, M_AC, M_NONE, 3, 0}, /* 49 */ {EOR, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* Immediate */ /* 4a */ {LSR, ACCUMULATOR, M_AC, M_AC, 2, 0}, /* Accumulator */ /* 4b */ {ASR, IMMEDIATE, M_ACIM, M_AC, 2, 0}, /* (AC & IMM) >>1 */ /* 4c */ {JMP, ABSOLUTE, M_ADDR, M_PC, 3, 0}, /* Absolute */ /* 4d */ {EOR, ABSOLUTE, M_ABS, M_AC, 4, 0}, /* Absolute */ /* 4e */ {LSR, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* Absolute */ /* 4f */ {SRE, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* 50 */ {BVC, RELATIVE, M_REL, M_NONE, 2, 0}, /* 51 */ {EOR, INDIRECT_Y, M_INDY, M_AC, 5, 1}, /* (Indirect),Y */ /* 52 */ {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */ /* 53 */ {SRE, INDIRECT_Y, M_INDY, M_INDY, 8, 0}, /* 54 */ {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0}, /* 55 */ {EOR, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0}, /* Zeropage,X */ /* 56 */ {LSR, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* Zeropage,X */ /* 57 */ {SRE, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* 58 */ {CLI, IMPLIED, M_NONE, M_FI, 2, 0}, /* 59 */ {EOR, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1}, /* Absolute,Y */ /* 5a */ {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0}, /* 5b */ {SRE, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0}, /* 5c */ {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1}, /* 5d */ {EOR, ABSOLUTE_X, M_ABSX, M_AC, 4, 1}, /* Absolute,X */ /* 5e */ {LSR, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* Absolute,X */ /* 5f */ {SRE, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* 60 */ {RTS, IMPLIED, M_NONE, M_PC, 6, 0}, /* 61 */ {ADC, INDIRECT_X, M_INDX, M_AC, 6, 0}, /* (Indirect,X) */ /* 62 */ {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */ /* 63 */ {RRA, INDIRECT_X, M_INDX, M_INDX, 8, 0}, /* 64 */ {NOOP, ZERO_PAGE, M_NONE, M_NONE, 3, 0}, /* 65 */ {ADC, ZERO_PAGE, M_ZERO, M_AC, 3, 0}, /* Zeropage */ /* 66 */ {ROR, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* Zeropage */ /* 67 */ {RRA, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* 68 */ {PLA, IMPLIED, M_NONE, M_AC, 4, 0}, /* 69 */ {ADC, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* Immediate */ /* 6a */ {ROR, ACCUMULATOR, M_AC, M_AC, 2, 0}, /* Accumulator */ /* 6b */ {ARR, IMMEDIATE, M_ACIM, M_AC, 2, 0}, /* ARR isn't typo */ /* 6c */ {JMP, ABS_INDIRECT, M_AIND, M_PC, 5, 0}, /* Indirect */ /* 6d */ {ADC, ABSOLUTE, M_ABS, M_AC, 4, 0}, /* Absolute */ /* 6e */ {ROR, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* Absolute */ /* 6f */ {RRA, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* 70 */ {BVS, RELATIVE, M_REL, M_NONE, 2, 0}, /* 71 */ {ADC, INDIRECT_Y, M_INDY, M_AC, 5, 1}, /* (Indirect),Y */ /* 72 */ {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT relative? */ /* 73 */ {RRA, INDIRECT_Y, M_INDY, M_INDY, 8, 0}, /* 74 */ {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0}, /* 75 */ {ADC, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0}, /* Zeropage,X */ /* 76 */ {ROR, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* Zeropage,X */ /* 77 */ {RRA, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* 78 */ {SEI, IMPLIED, M_NONE, M_FI, 2, 0}, /* 79 */ {ADC, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1}, /* Absolute,Y */ /* 7a */ {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0}, /* 7b */ {RRA, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0}, /* 7c */ {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1}, /* 7d */ {ADC, ABSOLUTE_X, M_ABSX, M_AC, 4, 1}, /* Absolute,X */ /* 7e */ {ROR, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* Absolute,X */ /* 7f */ {RRA, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /**** Negative ****/ /* 80 */ {NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0}, /* 81 */ {STA, INDIRECT_X, M_AC, M_INDX, 6, 0}, /* (Indirect,X) */ /* 82 */ {NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0}, /* 83 */ {SAX, INDIRECT_X, M_ANXR, M_INDX, 6, 0}, /* 84 */ {STY, ZERO_PAGE, M_YR, M_ZERO, 3, 0}, /* Zeropage */ /* 85 */ {STA, ZERO_PAGE, M_AC, M_ZERO, 3, 0}, /* Zeropage */ /* 86 */ {STX, ZERO_PAGE, M_XR, M_ZERO, 3, 0}, /* Zeropage */ /* 87 */ {SAX, ZERO_PAGE, M_ANXR, M_ZERO, 3, 0}, /* 88 */ {DEY, IMPLIED, M_YR, M_YR, 2, 0}, /* 89 */ {NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0}, /* 8a */ {TXA, IMPLIED, M_XR, M_AC, 2, 0}, /**** very abnormal: usually AC = AC | #$EE & XR & #$oper ****/ /* 8b */ {ANE, IMMEDIATE, M_AXIM, M_AC, 2, 0}, /* 8c */ {STY, ABSOLUTE, M_YR, M_ABS, 4, 0}, /* Absolute */ /* 8d */ {STA, ABSOLUTE, M_AC, M_ABS, 4, 0}, /* Absolute */ /* 8e */ {STX, ABSOLUTE, M_XR, M_ABS, 4, 0}, /* Absolute */ /* 8f */ {SAX, ABSOLUTE, M_ANXR, M_ABS, 4, 0}, /* 90 */ {BCC, RELATIVE, M_REL, M_NONE, 2, 0}, /* 91 */ {STA, INDIRECT_Y, M_AC, M_INDY, 6, 0}, /* (Indirect),Y */ /* 92 */ {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT relative? */ /* 93 */ {SHA, INDIRECT_Y, M_ANXR, M_STH0, 6, 0}, /* 94 */ {STY, ZERO_PAGE_X, M_YR, M_ZERX, 4, 0}, /* Zeropage,X */ /* 95 */ {STA, ZERO_PAGE_X, M_AC, M_ZERX, 4, 0}, /* Zeropage,X */ /* 96 */ {STX, ZERO_PAGE_Y, M_XR, M_ZERY, 4, 0}, /* Zeropage,Y */ /* 97 */ {SAX, ZERO_PAGE_Y, M_ANXR, M_ZERY, 4, 0}, /* 98 */ {TYA, IMPLIED, M_YR, M_AC, 2, 0}, /* 99 */ {STA, ABSOLUTE_Y, M_AC, M_ABSY, 5, 0}, /* Absolute,Y */ /* 9a */ {TXS, IMPLIED, M_XR, M_SP, 2, 0}, /*** This is very mysterious command ... */ /* 9b */ {SHS, ABSOLUTE_Y, M_ANXR, M_STH3, 5, 0}, /* 9c */ {SHY, ABSOLUTE_X, M_YR, M_STH2, 5, 0}, /* 9d */ {STA, ABSOLUTE_X, M_AC, M_ABSX, 5, 0}, /* Absolute,X */ /* 9e */ {SHX, ABSOLUTE_Y, M_XR, M_STH1, 5, 0}, /* 9f */ {SHA, ABSOLUTE_Y, M_ANXR, M_STH1, 5, 0}, /* a0 */ {LDY, IMMEDIATE, M_IMM, M_YR, 2, 0}, /* Immediate */ /* a1 */ {LDA, INDIRECT_X, M_INDX, M_AC, 6, 0}, /* (indirect,X) */ /* a2 */ {LDX, IMMEDIATE, M_IMM, M_XR, 2, 0}, /* Immediate */ /* a3 */ {LAX, INDIRECT_X, M_INDX, M_ACXR, 6, 0}, /* (indirect,X) */ /* a4 */ {LDY, ZERO_PAGE, M_ZERO, M_YR, 3, 0}, /* Zeropage */ /* a5 */ {LDA, ZERO_PAGE, M_ZERO, M_AC, 3, 0}, /* Zeropage */ /* a6 */ {LDX, ZERO_PAGE, M_ZERO, M_XR, 3, 0}, /* Zeropage */ /* a7 */ {LAX, ZERO_PAGE, M_ZERO, M_ACXR, 3, 0}, /* a8 */ {TAY, IMPLIED, M_AC, M_YR, 2, 0}, /* a9 */ {LDA, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* Immediate */ /* aa */ {TAX, IMPLIED, M_AC, M_XR, 2, 0}, /* ab */ {LXA, IMMEDIATE, M_ACIM, M_ACXR, 2, 0}, /* LXA isn't a typo */ /* ac */ {LDY, ABSOLUTE, M_ABS, M_YR, 4, 0}, /* Absolute */ /* ad */ {LDA, ABSOLUTE, M_ABS, M_AC, 4, 0}, /* Absolute */ /* ae */ {LDX, ABSOLUTE, M_ABS, M_XR, 4, 0}, /* Absolute */ /* af */ {LAX, ABSOLUTE, M_ABS, M_ACXR, 4, 0}, /* b0 */ {BCS, RELATIVE, M_REL, M_NONE, 2, 0}, /* b1 */ {LDA, INDIRECT_Y, M_INDY, M_AC, 5, 1}, /* (indirect),Y */ /* b2 */ {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */ /* b3 */ {LAX, INDIRECT_Y, M_INDY, M_ACXR, 5, 1}, /* b4 */ {LDY, ZERO_PAGE_X, M_ZERX, M_YR, 4, 0}, /* Zeropage,X */ /* b5 */ {LDA, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0}, /* Zeropage,X */ /* b6 */ {LDX, ZERO_PAGE_Y, M_ZERY, M_XR, 4, 0}, /* Zeropage,Y */ /* b7 */ {LAX, ZERO_PAGE_Y, M_ZERY, M_ACXR, 4, 0}, /* b8 */ {CLV, IMPLIED, M_NONE, M_FV, 2, 0}, /* b9 */ {LDA, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1}, /* Absolute,Y */ /* ba */ {TSX, IMPLIED, M_SP, M_XR, 2, 0}, /* bb */ {LAS, ABSOLUTE_Y, M_SABY, M_ACXS, 4, 1}, /* bc */ {LDY, ABSOLUTE_X, M_ABSX, M_YR, 4, 1}, /* Absolute,X */ /* bd */ {LDA, ABSOLUTE_X, M_ABSX, M_AC, 4, 1}, /* Absolute,X */ /* be */ {LDX, ABSOLUTE_Y, M_ABSY, M_XR, 4, 1}, /* Absolute,Y */ /* bf */ {LAX, ABSOLUTE_Y, M_ABSY, M_ACXR, 4, 1}, /* c0 */ {CPY, IMMEDIATE, M_IMM, M_NONE, 2, 0}, /* Immediate */ /* c1 */ {CMP, INDIRECT_X, M_INDX, M_NONE, 6, 0}, /* (Indirect,X) */ /* c2 */ {NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0}, /* occasional TILT */ /* c3 */ {DCP, INDIRECT_X, M_INDX, M_INDX, 8, 0}, /* c4 */ {CPY, ZERO_PAGE, M_ZERO, M_NONE, 3, 0}, /* Zeropage */ /* c5 */ {CMP, ZERO_PAGE, M_ZERO, M_NONE, 3, 0}, /* Zeropage */ /* c6 */ {DEC, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* Zeropage */ /* c7 */ {DCP, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* c8 */ {INY, IMPLIED, M_YR, M_YR, 2, 0}, /* c9 */ {CMP, IMMEDIATE, M_IMM, M_NONE, 2, 0}, /* Immediate */ /* ca */ {DEX, IMPLIED, M_XR, M_XR, 2, 0}, /* cb */ {SBX, IMMEDIATE, M_IMM, M_XR, 2, 0}, /* cc */ {CPY, ABSOLUTE, M_ABS, M_NONE, 4, 0}, /* Absolute */ /* cd */ {CMP, ABSOLUTE, M_ABS, M_NONE, 4, 0}, /* Absolute */ /* ce */ {DEC, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* Absolute */ /* cf */ {DCP, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* d0 */ {BNE, RELATIVE, M_REL, M_NONE, 2, 0}, /* d1 */ {CMP, INDIRECT_Y, M_INDY, M_NONE, 5, 1}, /* (Indirect),Y */ /* d2 */ {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */ /* d3 */ {DCP, INDIRECT_Y, M_INDY, M_INDY, 8, 0}, /* d4 */ {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0}, /* d5 */ {CMP, ZERO_PAGE_X, M_ZERX, M_NONE, 4, 0}, /* Zeropage,X */ /* d6 */ {DEC, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* Zeropage,X */ /* d7 */ {DCP, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* d8 */ {CLD, IMPLIED, M_NONE, M_FD, 2, 0}, /* d9 */ {CMP, ABSOLUTE_Y, M_ABSY, M_NONE, 4, 1}, /* Absolute,Y */ /* da */ {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0}, /* db */ {DCP, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0}, /* dc */ {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1}, /* dd */ {CMP, ABSOLUTE_X, M_ABSX, M_NONE, 4, 1}, /* Absolute,X */ /* de */ {DEC, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* Absolute,X */ /* df */ {DCP, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* e0 */ {CPX, IMMEDIATE, M_IMM, M_NONE, 2, 0}, /* Immediate */ /* e1 */ {SBC, INDIRECT_X, M_INDX, M_AC, 6, 0}, /* (Indirect,X) */ /* e2 */ {NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0}, /* e3 */ {ISB, INDIRECT_X, M_INDX, M_INDX, 8, 0}, /* e4 */ {CPX, ZERO_PAGE, M_ZERO, M_NONE, 3, 0}, /* Zeropage */ /* e5 */ {SBC, ZERO_PAGE, M_ZERO, M_AC, 3, 0}, /* Zeropage */ /* e6 */ {INC, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* Zeropage */ /* e7 */ {ISB, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* e8 */ {INX, IMPLIED, M_XR, M_XR, 2, 0}, /* e9 */ {SBC, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* Immediate */ /* ea */ {NOP, IMPLIED, M_NONE, M_NONE, 2, 0}, /* eb */ {USBC, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* same as e9 */ /* ec */ {CPX, ABSOLUTE, M_ABS, M_NONE, 4, 0}, /* Absolute */ /* ed */ {SBC, ABSOLUTE, M_ABS, M_AC, 4, 0}, /* Absolute */ /* ee */ {INC, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* Absolute */ /* ef */ {ISB, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* f0 */ {BEQ, RELATIVE, M_REL, M_NONE, 2, 0}, /* f1 */ {SBC, INDIRECT_Y, M_INDY, M_AC, 5, 1}, /* (Indirect),Y */ /* f2 */ {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */ /* f3 */ {ISB, INDIRECT_Y, M_INDY, M_INDY, 8, 0}, /* f4 */ {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0}, /* f5 */ {SBC, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0}, /* Zeropage,X */ /* f6 */ {INC, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* Zeropage,X */ /* f7 */ {ISB, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* f8 */ {SED, IMPLIED, M_NONE, M_FD, 2, 0}, /* f9 */ {SBC, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1}, /* Absolute,Y */ /* fa */ {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0}, /* fb */ {ISB, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0}, /* fc */ {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1}, /* fd */ {SBC, ABSOLUTE_X, M_ABSX, M_AC, 4, 1}, /* Absolute,X */ /* fe */ {INC, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* Absolute,X */ /* ff */ {ISB, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0} };