emu_nes

An NES emulator for learning how the 6502 and similar computers of the era worked
Log | Files | Refs | README | LICENSE

opcodes.h (18367B)


      1 #include <stdbool.h>
      2 #include <stdint.h>
      3 
      4 #include "cpu.h"
      5 
      6 enum addressing_mode {
      7 	AM_NONE,
      8 	AM_ACC,
      9 	AM_IMM,
     10 	AM_REL,
     11 	AM_ZP,
     12 	AM_ZP_X,
     13 	AM_ZP_Y,
     14 	AM_ABS,
     15 	AM_ABS_X,
     16 	AM_ABS_Y,
     17 	AM_IND,
     18 	AM_IND_X,
     19 	AM_IND_Y,
     20 };
     21 
     22 /* index of below array is the code of the instruction */
     23 struct opcode {
     24 	const char name[4];
     25 	/* I know 16bit seems wasteful, but some ops use 16bit memory as arg */
     26 	void (*instr)(uint16_t arg);
     27 	uint8_t bytes;
     28 	uint8_t cycles;
     29 	bool memread;
     30 	bool memwrite;
     31 	bool page_cross;
     32 	bool unofficial;
     33 	enum addressing_mode mode;
     34 };
     35 
     36 struct opcode opcodes[0x100] = {
     37 	/* official opcodes: https://www.nesdev.org/obelisk-6502-guide/instructions.html */
     38 	[0x69] = { "ADC", ADC, 2, 2, false, false, false, false, AM_IMM },
     39 	[0x65] = { "ADC", ADC, 2, 3, true,  false, false, false, AM_ZP },
     40 	[0x75] = { "ADC", ADC, 2, 4, true,  false, false, false, AM_ZP_X },
     41 	[0x6D] = { "ADC", ADC, 3, 4, true,  false, false, false, AM_ABS },
     42 	[0x7D] = { "ADC", ADC, 3, 4, true,  false, true,  false, AM_ABS_X },
     43 	[0x79] = { "ADC", ADC, 3, 4, true,  false, true,  false, AM_ABS_Y },
     44 	[0x61] = { "ADC", ADC, 2, 6, true,  false, false, false, AM_IND_X },
     45 	[0x71] = { "ADC", ADC, 2, 5, true,  false, true,  false, AM_IND_Y },
     46 	[0x29] = { "AND", AND, 2, 2, false, false, false, false, AM_IMM },
     47 	[0x25] = { "AND", AND, 2, 3, true,  false, false, false, AM_ZP },
     48 	[0x35] = { "AND", AND, 2, 4, true,  false, false, false, AM_ZP_X },
     49 	[0x2D] = { "AND", AND, 3, 4, true,  false, false, false, AM_ABS },
     50 	[0x3D] = { "AND", AND, 3, 4, true,  false, true,  false, AM_ABS_X },
     51 	[0x39] = { "AND", AND, 3, 4, true,  false, true,  false, AM_ABS_Y },
     52 	[0x21] = { "AND", AND, 2, 6, true,  false, false, false, AM_IND_X },
     53 	[0x31] = { "AND", AND, 2, 5, true,  false, true,  false, AM_IND_Y },
     54 	[0x0A] = { "ASL", ASL_acc, 1, 2, false, false, false, false, AM_ACC },
     55 	[0x06] = { "ASL", ASL, 2, 5, false, true,  false, false, AM_ZP },
     56 	[0x16] = { "ASL", ASL, 2, 6, false, true,  false, false, AM_ZP_X },
     57 	[0x0E] = { "ASL", ASL, 3, 6, false, true,  false, false, AM_ABS },
     58 	[0x1E] = { "ASL", ASL, 3, 7, false, true,  false, false, AM_ABS_X },
     59 	[0x90] = { "BCC", BCC, 2, 2, false, false, true,  false, AM_REL },
     60 	[0xB0] = { "BCS", BCS, 2, 2, false, false, true,  false, AM_REL },
     61 	[0xF0] = { "BEQ", BEQ, 2, 2, false, false, true,  false, AM_REL },
     62 	[0x24] = { "BIT", BIT, 2, 3, true,  false, false, false, AM_ZP },
     63 	[0x2C] = { "BIT", BIT, 3, 4, true,  false, false, false, AM_ABS },
     64 	[0x30] = { "BMI", BMI, 2, 2, false, false, true,  false, AM_REL },
     65 	[0xD0] = { "BNE", BNE, 2, 2, false, false, true,  false, AM_REL },
     66 	[0x10] = { "BPL", BPL, 2, 2, false, false, true,  false, AM_REL },
     67 	[0x00] = { "BRK", BRK, 1, 7, false, false, false, false, AM_NONE },
     68 	[0x50] = { "BVC", BVC, 2, 2, false, false, true,  false, AM_REL },
     69 	[0x70] = { "BVS", BVS, 2, 2, false, false, true,  false, AM_REL },
     70 	[0x18] = { "CLC", CLC, 1, 2, false, false, false, false, AM_NONE },
     71 	[0xD8] = { "CLD", CLD, 1, 2, false, false, false, false, AM_NONE },
     72 	[0x58] = { "CLI", CLI, 1, 2, false, false, false, false, AM_NONE },
     73 	[0xB8] = { "CLV", CLV, 1, 2, false, false, false, false, AM_NONE },
     74 	[0xC9] = { "CMP", CMP, 2, 2, false, false, false, false, AM_IMM },
     75 	[0xC5] = { "CMP", CMP, 2, 3, true,  false, false, false, AM_ZP },
     76 	[0xD5] = { "CMP", CMP, 2, 4, true,  false, false, false, AM_ZP_X },
     77 	[0xCD] = { "CMP", CMP, 3, 4, true,  false, false, false, AM_ABS },
     78 	[0xDD] = { "CMP", CMP, 3, 4, true,  false, true,  false, AM_ABS_X },
     79 	[0xD9] = { "CMP", CMP, 3, 4, true,  false, true,  false, AM_ABS_Y },
     80 	[0xC1] = { "CMP", CMP, 2, 6, true,  false, false, false, AM_IND_X },
     81 	[0xD1] = { "CMP", CMP, 2, 5, true,  false, true,  false, AM_IND_Y },
     82 	[0xE0] = { "CPX", CPX, 2, 2, false, false, false, false, AM_IMM },
     83 	[0xE4] = { "CPX", CPX, 2, 3, true,  false, false, false, AM_ZP },
     84 	[0xEC] = { "CPX", CPX, 3, 4, true,  false, false, false, AM_ABS },
     85 	[0xC0] = { "CPY", CPY, 2, 2, false, false, false, false, AM_IMM },
     86 	[0xC4] = { "CPY", CPY, 2, 3, true,  false, false, false, AM_ZP },
     87 	[0xCC] = { "CPY", CPY, 3, 4, true,  false, false, false, AM_ABS },
     88 	[0xC6] = { "DEC", DEC, 2, 5, false, true,  false, false, AM_ZP },
     89 	[0xD6] = { "DEC", DEC, 2, 6, false, true,  false, false, AM_ZP_X },
     90 	[0xCE] = { "DEC", DEC, 3, 6, false, true,  false, false, AM_ABS },
     91 	[0xDE] = { "DEC", DEC, 3, 7, false, true,  false, false, AM_ABS_X },
     92 	[0xCA] = { "DEX", DEX, 1, 2, false, false, false, false, AM_NONE },
     93 	[0x88] = { "DEY", DEY, 1, 2, false, false, false, false, AM_NONE },
     94 	[0x49] = { "EOR", EOR, 2, 2, false, false, false, false, AM_IMM },
     95 	[0x45] = { "EOR", EOR, 2, 3, true,  false, false, false, AM_ZP },
     96 	[0x55] = { "EOR", EOR, 2, 4, true,  false, false, false, AM_ZP_X },
     97 	[0x4D] = { "EOR", EOR, 3, 4, true,  false, false, false, AM_ABS },
     98 	[0x5D] = { "EOR", EOR, 3, 4, true,  false, true,  false, AM_ABS_X },
     99 	[0x59] = { "EOR", EOR, 3, 4, true,  false, true,  false, AM_ABS_Y },
    100 	[0x41] = { "EOR", EOR, 2, 6, true,  false, false, false, AM_IND_X },
    101 	[0x51] = { "EOR", EOR, 2, 5, true,  false, true,  false, AM_IND_Y },
    102 	[0xE6] = { "INC", INC, 2, 5, false, true,  false, false, AM_ZP },
    103 	[0xF6] = { "INC", INC, 2, 6, false, true,  false, false, AM_ZP_X },
    104 	[0xEE] = { "INC", INC, 3, 6, false, true,  false, false, AM_ABS },
    105 	[0xFE] = { "INC", INC, 3, 7, false, true,  false, false, AM_ABS_X },
    106 	[0xE8] = { "INX", INX, 1, 2, false, false, false, false, AM_NONE },
    107 	[0xC8] = { "INY", INY, 1, 2, false, false, false, false, AM_NONE },
    108 	[0x4C] = { "JMP", JMP, 3, 3, false, false, false, false, AM_ABS },
    109 	[0x6C] = { "JMP", JMP, 3, 5, false, false, false, false, AM_IND },
    110 	[0x20] = { "JSR", JSR, 3, 6, false, false, false, false, AM_ABS },
    111 	[0xA9] = { "LDA", LDA, 2, 2, false, false, false, false, AM_IMM },
    112 	[0xA5] = { "LDA", LDA, 2, 3, true,  false, false, false, AM_ZP },
    113 	[0xB5] = { "LDA", LDA, 2, 4, true,  false, false, false, AM_ZP_X },
    114 	[0xAD] = { "LDA", LDA, 3, 4, true,  false, false, false, AM_ABS },
    115 	[0xBD] = { "LDA", LDA, 3, 4, true,  false, true,  false, AM_ABS_X },
    116 	[0xB9] = { "LDA", LDA, 3, 4, true,  false, true,  false, AM_ABS_Y },
    117 	[0xA1] = { "LDA", LDA, 2, 6, true,  false, false, false, AM_IND_X },
    118 	[0xB1] = { "LDA", LDA, 2, 5, true,  false, true,  false, AM_IND_Y },
    119 	[0xA2] = { "LDX", LDX, 2, 2, false, false, false, false, AM_IMM },
    120 	[0xA6] = { "LDX", LDX, 2, 3, true,  false, false, false, AM_ZP },
    121 	[0xB6] = { "LDX", LDX, 2, 4, true,  false, false, false, AM_ZP_Y },
    122 	[0xAE] = { "LDX", LDX, 3, 4, true,  false, false, false, AM_ABS },
    123 	[0xBE] = { "LDX", LDX, 3, 4, true,  false, true,  false, AM_ABS_Y },
    124 	[0xA0] = { "LDY", LDY, 2, 2, false, false, false, false, AM_IMM },
    125 	[0xA4] = { "LDY", LDY, 2, 3, true,  false, false, false, AM_ZP },
    126 	[0xB4] = { "LDY", LDY, 2, 4, true,  false, false, false, AM_ZP_X },
    127 	[0xAC] = { "LDY", LDY, 3, 4, true,  false, false, false, AM_ABS },
    128 	[0xBC] = { "LDY", LDY, 3, 4, true,  false, true,  false, AM_ABS_X },
    129 	[0x4A] = { "LSR", LSR_acc, 1, 2, false, false, false, false, AM_ACC },
    130 	[0x46] = { "LSR", LSR, 2, 5, false, true,  false, false, AM_ZP },
    131 	[0x56] = { "LSR", LSR, 2, 6, false, true,  false, false, AM_ZP_X },
    132 	[0x4E] = { "LSR", LSR, 3, 6, false, true,  false, false, AM_ABS },
    133 	[0x5E] = { "LSR", LSR, 3, 7, false, true,  false, false, AM_ABS_X },
    134 	[0xEA] = { "NOP", NOP, 1, 2, false, false, false, false, AM_NONE },
    135 	[0x09] = { "ORA", ORA, 2, 2, false, false, false, false, AM_IMM },
    136 	[0x05] = { "ORA", ORA, 2, 3, true,  false, false, false, AM_ZP },
    137 	[0x15] = { "ORA", ORA, 2, 4, true,  false, false, false, AM_ZP_X },
    138 	[0x0D] = { "ORA", ORA, 3, 4, true,  false, false, false, AM_ABS },
    139 	[0x1D] = { "ORA", ORA, 3, 4, true,  false, true,  false, AM_ABS_X },
    140 	[0x19] = { "ORA", ORA, 3, 4, true,  false, true,  false, AM_ABS_Y },
    141 	[0x01] = { "ORA", ORA, 2, 6, true,  false, false, false, AM_IND_X },
    142 	[0x11] = { "ORA", ORA, 2, 5, true,  false, true,  false, AM_IND_Y },
    143 	[0x48] = { "PHA", PHA, 1, 3, false, false, false, false, AM_NONE },
    144 	[0x08] = { "PHP", PHP, 1, 3, false, false, false, false, AM_NONE },
    145 	[0x68] = { "PLA", PLA, 1, 4, false, false, false, false, AM_NONE },
    146 	[0x28] = { "PLP", PLP, 1, 4, false, false, false, false, AM_NONE },
    147 	[0x2A] = { "ROL", ROL_acc, 1, 2, false, false, false, false, AM_ACC },
    148 	[0x26] = { "ROL", ROL, 2, 5, false, true,  false, false, AM_ZP },
    149 	[0x36] = { "ROL", ROL, 2, 6, false, true,  false, false, AM_ZP_X },
    150 	[0x2E] = { "ROL", ROL, 3, 6, false, true,  false, false, AM_ABS },
    151 	[0x3E] = { "ROL", ROL, 3, 7, false, true,  false, false, AM_ABS_X },
    152 	[0x6A] = { "ROR", ROR_acc, 1, 2, false, false, false, false, AM_ACC },
    153 	[0x66] = { "ROR", ROR, 2, 5, false, true,  false, false, AM_ZP },
    154 	[0x76] = { "ROR", ROR, 2, 6, false, true,  false, false, AM_ZP_X },
    155 	[0x6E] = { "ROR", ROR, 3, 6, false, true,  false, false, AM_ABS },
    156 	[0x7E] = { "ROR", ROR, 3, 7, false, true,  false, false, AM_ABS_X },
    157 	[0x40] = { "RTI", RTI, 1, 6, false, false, false, false, AM_NONE },
    158 	[0x60] = { "RTS", RTS, 1, 6, false, false, false, false, AM_NONE },
    159 	[0xE9] = { "SBC", SBC, 2, 2, false, false, false, false, AM_IMM },
    160 	[0xE5] = { "SBC", SBC, 2, 3, true,  false, false, false, AM_ZP },
    161 	[0xF5] = { "SBC", SBC, 2, 4, true,  false, false, false, AM_ZP_X },
    162 	[0xED] = { "SBC", SBC, 3, 4, true,  false, false, false, AM_ABS },
    163 	[0xFD] = { "SBC", SBC, 3, 4, true,  false, true,  false, AM_ABS_X },
    164 	[0xF9] = { "SBC", SBC, 3, 4, true,  false, true,  false, AM_ABS_Y },
    165 	[0xE1] = { "SBC", SBC, 2, 6, true,  false, false, false, AM_IND_X },
    166 	[0xF1] = { "SBC", SBC, 2, 5, true,  false, true,  false, AM_IND_Y },
    167 	[0x38] = { "SEC", SEC, 1, 2, false, false, false, false, AM_NONE },
    168 	[0xF8] = { "SED", SED, 1, 2, false, false, false, false, AM_NONE },
    169 	[0x78] = { "SEI", SEI, 1, 2, false, false, false, false, AM_NONE },
    170 	[0x85] = { "STA", STA, 2, 3, false, true,  false, false, AM_ZP },
    171 	[0x95] = { "STA", STA, 2, 4, false, true,  false, false, AM_ZP_X },
    172 	[0x8D] = { "STA", STA, 3, 4, false, true,  false, false, AM_ABS },
    173 	[0x9D] = { "STA", STA, 3, 5, false, true,  false, false, AM_ABS_X },
    174 	[0x99] = { "STA", STA, 3, 5, false, true,  false, false, AM_ABS_Y },
    175 	[0x81] = { "STA", STA, 2, 6, false, true,  false, false, AM_IND_X },
    176 	[0x91] = { "STA", STA, 2, 6, false, true,  false, false, AM_IND_Y },
    177 	[0x86] = { "STX", STX, 2, 3, false, true,  false, false, AM_ZP },
    178 	[0x96] = { "STX", STX, 2, 4, false, true,  false, false, AM_ZP_Y },
    179 	[0x8E] = { "STX", STX, 3, 4, false, true,  false, false, AM_ABS },
    180 	[0x84] = { "STY", STY, 2, 3, false, true,  false, false, AM_ZP },
    181 	[0x94] = { "STY", STY, 2, 4, false, true,  false, false, AM_ZP_X },
    182 	[0x8C] = { "STY", STY, 3, 4, false, true,  false, false, AM_ABS },
    183 	[0xAA] = { "TAX", TAX, 1, 2, false, false, false, false, AM_NONE },
    184 	[0xA8] = { "TAY", TAY, 1, 2, false, false, false, false, AM_NONE },
    185 	[0xBA] = { "TSX", TSX, 1, 2, false, false, false, false, AM_NONE },
    186 	[0x8A] = { "TXA", TXA, 1, 2, false, false, false, false, AM_NONE },
    187 	[0x9A] = { "TXS", TXS, 1, 2, false, false, false, false, AM_NONE },
    188 	[0x98] = { "TYA", TYA, 1, 2, false, false, false, false, AM_NONE },
    189 	/* unofficial opcodes: https://www.nesdev.org/undocumented_opcodes.txt */
    190 	[0x0B] = { "AAC", AAC, 2, 2, false, false, false, true,  AM_IMM },
    191 	[0x2B] = { "AAC", AAC, 2, 2, false, false, false, true,  AM_IMM },
    192 	[0x87] = { "SAX", SAX, 2, 3, false, true,  false, true,  AM_ZP },
    193 	[0x97] = { "SAX", SAX, 2, 4, false, true,  false, true,  AM_ZP_Y },
    194 	[0x83] = { "SAX", SAX, 2, 6, false, true,  false, true,  AM_IND_X },
    195 	[0x8F] = { "SAX", SAX, 3, 4, false, true,  false, true,  AM_ABS },
    196 	[0x6B] = { "ARR", ARR, 2, 2, false, false, false, true,  AM_IMM },
    197 	[0x4B] = { "ASR", ASR, 2, 2, false, false, false, true,  AM_IMM },
    198 	[0xAB] = { "ATX", ATX, 2, 2, false, false, false, true,  AM_IMM },
    199 	[0x9F] = { "AXA", AXA, 3, 5, false, true,  false, true,  AM_ABS_Y },
    200 	[0x93] = { "AXA", AXA, 2, 6, false, true,  false, true,  AM_IND_Y },
    201 	[0xCB] = { "AXS", AXS, 2, 2, false, false, false, true,  AM_IMM },
    202 	[0xC7] = { "DCP", DCP, 2, 5, false, true,  false, true,  AM_ZP },
    203 	[0xD7] = { "DCP", DCP, 2, 6, false, true,  false, true,  AM_ZP_X },
    204 	[0xCF] = { "DCP", DCP, 3, 6, false, true,  false, true,  AM_ABS },
    205 	[0xDF] = { "DCP", DCP, 3, 7, false, true,  false, true,  AM_ABS_X },
    206 	[0xDB] = { "DCP", DCP, 3, 7, false, true,  false, true,  AM_ABS_Y },
    207 	[0xC3] = { "DCP", DCP, 2, 8, false, true,  false, true,  AM_IND_X },
    208 	[0xD3] = { "DCP", DCP, 2, 8, false, true,  false, true,  AM_IND_Y },
    209 	[0x04] = { "NOP", NOP, 2, 3, true,  false, false, true,  AM_ZP },
    210 	[0x14] = { "NOP", NOP, 2, 4, true,  false, false, true,  AM_ZP_X },
    211 	[0x34] = { "NOP", NOP, 2, 4, true,  false, false, true,  AM_ZP_X },
    212 	[0x44] = { "NOP", NOP, 2, 3, true,  false, false, true,  AM_ZP },
    213 	[0x54] = { "NOP", NOP, 2, 4, true,  false, false, true,  AM_ZP_X },
    214 	[0x64] = { "NOP", NOP, 2, 3, true,  false, false, true,  AM_ZP },
    215 	[0x74] = { "NOP", NOP, 2, 4, true,  false, false, true,  AM_ZP_X },
    216 	[0x80] = { "NOP", NOP, 2, 2, false, false, false, true,  AM_IMM },
    217 	[0x82] = { "NOP", NOP, 2, 2, false, false, false, true,  AM_IMM },
    218 	[0x89] = { "NOP", NOP, 2, 2, false, false, false, true,  AM_IMM },
    219 	[0xC2] = { "NOP", NOP, 2, 2, false, false, false, true,  AM_IMM },
    220 	[0xD4] = { "NOP", NOP, 2, 4, true,  false, false, true,  AM_ZP_X },
    221 	[0xE2] = { "NOP", NOP, 2, 2, false, false, false, true,  AM_IMM },
    222 	[0xF4] = { "NOP", NOP, 2, 4, true,  false, false, true,  AM_ZP_X },
    223 	[0xE7] = { "ISB", ISB, 2, 5, false, true,  false, true,  AM_ZP },
    224 	[0xF7] = { "ISB", ISB, 2, 6, false, true,  false, true,  AM_ZP_X },
    225 	[0xEF] = { "ISB", ISB, 3, 6, false, true,  false, true,  AM_ABS },
    226 	[0xFF] = { "ISB", ISB, 3, 7, false, true,  false, true,  AM_ABS_X },
    227 	[0xFB] = { "ISB", ISB, 3, 7, false, true,  false, true,  AM_ABS_Y },
    228 	[0xE3] = { "ISB", ISB, 2, 8, false, true,  false, true,  AM_IND_X },
    229 	[0xF3] = { "ISB", ISB, 2, 8, false, true,  false, true,  AM_IND_Y },
    230 	[0x02] = { "KIL", KIL, 1, 0, false, false, false, true,  AM_NONE },
    231 	[0x12] = { "KIL", KIL, 1, 0, false, false, false, true,  AM_NONE },
    232 	[0x22] = { "KIL", KIL, 1, 0, false, false, false, true,  AM_NONE },
    233 	[0x32] = { "KIL", KIL, 1, 0, false, false, false, true,  AM_NONE },
    234 	[0x42] = { "KIL", KIL, 1, 0, false, false, false, true,  AM_NONE },
    235 	[0x52] = { "KIL", KIL, 1, 0, false, false, false, true,  AM_NONE },
    236 	[0x62] = { "KIL", KIL, 1, 0, false, false, false, true,  AM_NONE },
    237 	[0x72] = { "KIL", KIL, 1, 0, false, false, false, true,  AM_NONE },
    238 	[0x92] = { "KIL", KIL, 1, 0, false, false, false, true,  AM_NONE },
    239 	[0xB2] = { "KIL", KIL, 1, 0, false, false, false, true,  AM_NONE },
    240 	[0xD2] = { "KIL", KIL, 1, 0, false, false, false, true,  AM_NONE },
    241 	[0xF2] = { "KIL", KIL, 1, 0, false, false, false, true,  AM_NONE },
    242 	[0xBB] = { "LAR", LAR, 3, 4, true,  false, true,  true,  AM_ABS_Y },
    243 	[0xA7] = { "LAX", LAX, 2, 3, true,  false, false, true,  AM_ZP },
    244 	[0xB7] = { "LAX", LAX, 2, 4, true,  false, false, true,  AM_ZP_Y },
    245 	[0xAF] = { "LAX", LAX, 3, 4, true,  false, false, true,  AM_ABS },
    246 	[0xBF] = { "LAX", LAX, 3, 4, true,  false, true,  true,  AM_ABS_Y },
    247 	[0xA3] = { "LAX", LAX, 2, 6, true,  false, false, true,  AM_IND_X },
    248 	[0xB3] = { "LAX", LAX, 2, 5, true,  false, true,  true,  AM_IND_Y },
    249 	[0x1A] = { "NOP", NOP, 1, 2, false, false, false, true,  AM_NONE },
    250 	[0x3A] = { "NOP", NOP, 1, 2, false, false, false, true,  AM_NONE },
    251 	[0x5A] = { "NOP", NOP, 1, 2, false, false, false, true,  AM_NONE },
    252 	[0x7A] = { "NOP", NOP, 1, 2, false, false, false, true,  AM_NONE },
    253 	[0xDA] = { "NOP", NOP, 1, 2, false, false, false, true,  AM_NONE },
    254 	[0xFA] = { "NOP", NOP, 1, 2, false, false, false, true,  AM_NONE },
    255 	[0x27] = { "RLA", RLA, 2, 5, false, true,  false, true,  AM_ZP },
    256 	[0x37] = { "RLA", RLA, 2, 6, false, true,  false, true,  AM_ZP_X },
    257 	[0x2F] = { "RLA", RLA, 3, 6, false, true,  false, true,  AM_ABS },
    258 	[0x3F] = { "RLA", RLA, 3, 7, false, true,  false, true,  AM_ABS_X },
    259 	[0x3B] = { "RLA", RLA, 3, 7, false, true,  false, true,  AM_ABS_Y },
    260 	[0x23] = { "RLA", RLA, 2, 8, false, true,  false, true,  AM_IND_X },
    261 	[0x33] = { "RLA", RLA, 2, 8, false, true,  false, true,  AM_IND_Y },
    262 	[0x67] = { "RRA", RRA, 2, 5, false, true,  false, true,  AM_ZP },
    263 	[0x77] = { "RRA", RRA, 2, 6, false, true,  false, true,  AM_ZP_X },
    264 	[0x6F] = { "RRA", RRA, 3, 6, false, true,  false, true,  AM_ABS },
    265 	[0x7F] = { "RRA", RRA, 3, 7, false, true,  false, true,  AM_ABS_X },
    266 	[0x7B] = { "RRA", RRA, 3, 7, false, true,  false, true,  AM_ABS_Y },
    267 	[0x63] = { "RRA", RRA, 2, 8, false, true,  false, true,  AM_IND_X },
    268 	[0x73] = { "RRA", RRA, 2, 8, false, true,  false, true,  AM_IND_Y },
    269 	[0xEB] = { "SBC", SBC, 2, 2, false, false, false, true,  AM_IMM },
    270 	[0x07] = { "SLO", SLO, 2, 5, false, true,  false, true,  AM_ZP },
    271 	[0x17] = { "SLO", SLO, 2, 6, false, true,  false, true,  AM_ZP_X },
    272 	[0x0F] = { "SLO", SLO, 3, 6, false, true,  false, true,  AM_ABS },
    273 	[0x1F] = { "SLO", SLO, 3, 7, false, true,  false, true,  AM_ABS_X },
    274 	[0x1B] = { "SLO", SLO, 3, 7, false, true,  false, true,  AM_ABS_Y },
    275 	[0x03] = { "SLO", SLO, 2, 8, false, true,  false, true,  AM_IND_X },
    276 	[0x13] = { "SLO", SLO, 2, 8, false, true,  false, true,  AM_IND_Y },
    277 	[0x47] = { "SRE", SRE, 2, 5, false, true,  false, true,  AM_ZP },
    278 	[0x57] = { "SRE", SRE, 2, 6, false, true,  false, true,  AM_ZP_X },
    279 	[0x4F] = { "SRE", SRE, 3, 6, false, true,  false, true,  AM_ABS },
    280 	[0x5F] = { "SRE", SRE, 3, 7, false, true,  false, true,  AM_ABS_X },
    281 	[0x5B] = { "SRE", SRE, 3, 7, false, true,  false, true,  AM_ABS_Y },
    282 	[0x43] = { "SRE", SRE, 2, 8, false, true,  false, true,  AM_IND_X },
    283 	[0x53] = { "SRE", SRE, 2, 8, false, true,  false, true,  AM_IND_Y },
    284 	[0x9E] = { "SXA", SXA, 3, 5, false, true,  false, true,  AM_ABS_Y },
    285 	[0x9C] = { "SYA", SYA, 3, 5, false, true,  false, true,  AM_ABS_X },
    286 	[0x0C] = { "NOP", NOP, 3, 4, true,  false, false, true,  AM_ABS },
    287 	[0x1C] = { "NOP", NOP, 3, 4, true,  false, true,  true,  AM_ABS_X },
    288 	[0x3C] = { "NOP", NOP, 3, 4, true,  false, true,  true,  AM_ABS_X },
    289 	[0x5C] = { "NOP", NOP, 3, 4, true,  false, true,  true,  AM_ABS_X },
    290 	[0x7C] = { "NOP", NOP, 3, 4, true,  false, true,  true,  AM_ABS_X },
    291 	[0xDC] = { "NOP", NOP, 3, 4, true,  false, true,  true,  AM_ABS_X },
    292 	[0xFC] = { "NOP", NOP, 3, 4, true,  false, true,  true,  AM_ABS_X },
    293 	[0x8B] = { "XAA", XAA, 2, 2, false, false, false, true,  AM_IMM },
    294 	[0x9B] = { "XAS", XAS, 3, 5, false, true,  false, true,  AM_ABS_Y },
    295 };