diff --git a/NES Emulator/cpu.h b/NES Emulator/cpu.h index 1e1c8d0..71a0fa8 100644 --- a/NES Emulator/cpu.h +++ b/NES Emulator/cpu.h @@ -16,7 +16,9 @@ enum Operation ROR, RTI, RTS, SBC, SEC, SED, SEI, STA, STX, STY, TAX, TAY, TSX, TXA, TXS, TYA, - JAM, SLO, ANC + ANC, ASR, ARR, DCP, ISC, ISX, JAM, LAS, + LAX, RLA, RRA, SAX, SBX, SLO, SHA, SHS, + SHX, SHY, SRE, XAA }; enum AddrMode diff --git a/NES Emulator/opcodes.c b/NES Emulator/opcodes.c index cb9246b..f9ab3e9 100644 --- a/NES Emulator/opcodes.c +++ b/NES Emulator/opcodes.c @@ -38,241 +38,241 @@ const struct Opcode OPCODE_TABLE[256] = /* 1E */ NEW_OPCODE(ASL, ABX, 7, 3, 0), /* 1F */ NEW_OPCODE(SLO, ABX, 7, 3, 1), - /* 20 */ NEW_OPCODE(JSR, ABS, 6, 3, 0), - /* 21 */ NEW_OPCODE(AND, INDX, 6, 2, 0), - /* 22 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 23 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 24 */ NEW_OPCODE(BIT, ZPG, 3, 2, 0), - /* 25 */ NEW_OPCODE(AND, ZPG, 3, 2, 0), - /* 26 */ NEW_OPCODE(ROL, ZPG, 5, 2, 0), - /* 27 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 28 */ NEW_OPCODE(PLP, IMP, 4, 1, 0), - /* 29 */ NEW_OPCODE(AND, IMM, 2, 2, 0), - /* 2A */ NEW_OPCODE(ROL, ACC, 2, 1, 0), - /* 2B */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 2C */ NEW_OPCODE(BIT, ABS, 4, 3, 0), - /* 2D */ NEW_OPCODE(AND, ABS, 4, 3, 0), - /* 2E */ NEW_OPCODE(ROL, ABS, 6, 3, 0), - /* 2F */ NEW_OPCODE(XXX, IMP, 0, 1), + /* 20 */ NEW_OPCODE(JSR, ABS, 6, 3, 0), + /* 21 */ NEW_OPCODE(AND, INDX, 6, 2, 0), + /* 22 */ NEW_OPCODE(JAM, IMP, -1, 1, 1), + /* 23 */ NEW_OPCODE(RLA, INDX, 8, 2, 1), + /* 24 */ NEW_OPCODE(BIT, ZPG, 3, 2, 0), + /* 25 */ NEW_OPCODE(AND, ZPG, 3, 2, 0), + /* 26 */ NEW_OPCODE(ROL, ZPG, 5, 2, 0), + /* 27 */ NEW_OPCODE(RLA, ZPG, 5, 2, 1), + /* 28 */ NEW_OPCODE(PLP, IMP, 4, 1, 0), + /* 29 */ NEW_OPCODE(AND, IMM, 2, 2, 0), + /* 2A */ NEW_OPCODE(ROL, ACC, 2, 1, 0), + /* 2B */ NEW_OPCODE(ANC, IMM, 2, 2, 1), + /* 2C */ NEW_OPCODE(BIT, ABS, 4, 3, 0), + /* 2D */ NEW_OPCODE(AND, ABS, 4, 3, 0), + /* 2E */ NEW_OPCODE(ROL, ABS, 6, 3, 0), + /* 2F */ NEW_OPCODE(RLA, ABS, 6, 3, 1), - /* 30 */ NEW_OPCODE(BMI, REL, 2, 2, 0), - /* 31 */ NEW_OPCODE(AND, INDY, 5, 2, 0), - /* 32 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 33 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 34 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 35 */ NEW_OPCODE(AND, ZPX, 4, 2, 0), - /* 36 */ NEW_OPCODE(ROL, ZPX, 6, 2, 0), - /* 37 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 38 */ NEW_OPCODE(SEC, IMP, 2, 1, 0), - /* 39 */ NEW_OPCODE(AND, ABY, 4, 3, 0), - /* 3A */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 3B */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 3C */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 3D */ NEW_OPCODE(AND, ABX, 4, 3, 0), - /* 3E */ NEW_OPCODE(ROL, ABX, 7, 3, 0), - /* 3F */ NEW_OPCODE(XXX, IMP, 0, 1, 0), + /* 30 */ NEW_OPCODE(BMI, REL, 2, 2, 0), + /* 31 */ NEW_OPCODE(AND, INDY, 5, 2, 0), + /* 32 */ NEW_OPCODE(JAM, IMP, -1, 1, 1), + /* 33 */ NEW_OPCODE(RLA, INDY, 8, 2, 1), + /* 34 */ NEW_OPCODE(NOP, ZPX, 4, 2, 1), + /* 35 */ NEW_OPCODE(AND, ZPX, 4, 2, 0), + /* 36 */ NEW_OPCODE(ROL, ZPX, 6, 2, 0), + /* 37 */ NEW_OPCODE(RLA, ZPX, 6, 2, 1), + /* 38 */ NEW_OPCODE(SEC, IMP, 2, 1, 0), + /* 39 */ NEW_OPCODE(AND, ABY, 4, 3, 0), + /* 3A */ NEW_OPCODE(NOP, IMP, 2, 1, 1), + /* 3B */ NEW_OPCODE(RLA, ABY, 7, 3, 1), + /* 3C */ NEW_OPCODE(NOP, ABX, 4, 3, 1), + /* 3D */ NEW_OPCODE(AND, ABX, 4, 3, 0), + /* 3E */ NEW_OPCODE(ROL, ABX, 7, 3, 0), + /* 3F */ NEW_OPCODE(RLA, ABX, 7, 3, 0), - /* 40 */ NEW_OPCODE(RTI, IMP, 6, 1, 0), - /* 41 */ NEW_OPCODE(EOR, INDX, 6, 2, 0), - /* 42 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 43 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 44 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 45 */ NEW_OPCODE(EOR, ZPG, 3, 2, 0), - /* 46 */ NEW_OPCODE(LSR, ZPG, 5, 2, 0), - /* 47 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 48 */ NEW_OPCODE(PHA, IMP, 3, 1, 0), - /* 49 */ NEW_OPCODE(EOR, IMM, 2, 2, 0), - /* 4A */ NEW_OPCODE(LSR, ACC, 2, 1, 0), - /* 4B */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 4C */ NEW_OPCODE(JMP, ABS, 3, 3, 0), - /* 4D */ NEW_OPCODE(EOR, ABS, 4, 3, 0), - /* 4E */ NEW_OPCODE(LSR, ABS, 6, 3, 0), - /* 4F */ NEW_OPCODE(XXX, IMP, 0, 1), + /* 40 */ NEW_OPCODE(RTI, IMP, 6, 1, 0), + /* 41 */ NEW_OPCODE(EOR, INDX, 6, 2, 0), + /* 42 */ NEW_OPCODE(JAM, IMP, -1, 1, 1), + /* 43 */ NEW_OPCODE(SRE, INDX, 8, 2, 1), + /* 44 */ NEW_OPCODE(NOP, ZPG, 3, 2, 1), + /* 45 */ NEW_OPCODE(EOR, ZPG, 3, 2, 0), + /* 46 */ NEW_OPCODE(LSR, ZPG, 5, 2, 0), + /* 47 */ NEW_OPCODE(SRE, ZPG, 5, 2, 1), + /* 48 */ NEW_OPCODE(PHA, IMP, 3, 1, 0), + /* 49 */ NEW_OPCODE(EOR, IMM, 2, 2, 0), + /* 4A */ NEW_OPCODE(LSR, ACC, 2, 1, 0), + /* 4B */ NEW_OPCODE(ASR, IMM, 2, 2, 1), + /* 4C */ NEW_OPCODE(JMP, ABS, 3, 3, 0), + /* 4D */ NEW_OPCODE(EOR, ABS, 4, 3, 0), + /* 4E */ NEW_OPCODE(LSR, ABS, 6, 3, 0), + /* 4F */ NEW_OPCODE(SRE, ABS, 6, 3, 1), - /* 50 */ NEW_OPCODE(BVC, REL, 2, 2, 0), - /* 51 */ NEW_OPCODE(EOR, INDY, 5, 2, 0), - /* 52 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 53 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 54 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 55 */ NEW_OPCODE(EOR, ZPX, 4, 2, 0), - /* 56 */ NEW_OPCODE(LSR, ZPX, 6, 2, 0), - /* 57 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 58 */ NEW_OPCODE(CLI, IMP, 2, 1, 0), - /* 59 */ NEW_OPCODE(EOR, ABY, 4, 3, 0), - /* 5A */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 5B */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 5C */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 5D */ NEW_OPCODE(EOR, ABX, 4, 3, 0), - /* 5E */ NEW_OPCODE(LSR, ABX, 7, 3, 0), - /* 5F */ NEW_OPCODE(XXX, IMP, 0, 1), + /* 50 */ NEW_OPCODE(BVC, REL, 2, 2, 0), + /* 51 */ NEW_OPCODE(EOR, INDY, 5, 2, 0), + /* 52 */ NEW_OPCODE(JAM, IMP, -1, 1, 1), + /* 53 */ NEW_OPCODE(SRE, INDY, 8, 2, 1), + /* 54 */ NEW_OPCODE(NOP, ZPX, 4, 2, 1), + /* 55 */ NEW_OPCODE(EOR, ZPX, 4, 2, 0), + /* 56 */ NEW_OPCODE(LSR, ZPX, 6, 2, 0), + /* 57 */ NEW_OPCODE(SRE, ZPX, 6, 2, 1), + /* 58 */ NEW_OPCODE(CLI, IMP, 2, 1, 0), + /* 59 */ NEW_OPCODE(EOR, ABY, 4, 3, 0), + /* 5A */ NEW_OPCODE(NOP, IMP, 2, 1, 1), + /* 5B */ NEW_OPCODE(SRE, ABY, 7, 3, 1), + /* 5C */ NEW_OPCODE(NOP, ABX, 4, 3, 1), + /* 5D */ NEW_OPCODE(EOR, ABX, 4, 3, 0), + /* 5E */ NEW_OPCODE(LSR, ABX, 7, 3, 0), + /* 5F */ NEW_OPCODE(SRE, ABX, 7, 3, 1), - /* 60 */ NEW_OPCODE(RTS, IMP, 6, 1, 0), - /* 61 */ NEW_OPCODE(ADC, INDX, 6, 2, 0), - /* 62 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 63 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 64 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 65 */ NEW_OPCODE(ADC, ZPG, 3, 2, 0), - /* 66 */ NEW_OPCODE(ROR, ZPG, 5, 2, 0), - /* 67 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 68 */ NEW_OPCODE(PLA, IMP, 4, 1, 0), - /* 69 */ NEW_OPCODE(ADC, IMM, 2, 2, 0), - /* 6A */ NEW_OPCODE(ROR, ACC, 2, 1, 0), - /* 6B */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 6C */ NEW_OPCODE(JMP, IND, 5, 3, 0), - /* 6D */ NEW_OPCODE(ADC, ABS, 4, 3, 0), - /* 6E */ NEW_OPCODE(ROR, ABS, 6, 3, 0), - /* 6F */ NEW_OPCODE(XXX, IMP, 0, 1), + /* 60 */ NEW_OPCODE(RTS, IMP, 6, 1, 0), + /* 61 */ NEW_OPCODE(ADC, INDX, 6, 2, 0), + /* 62 */ NEW_OPCODE(JAM, IMP, -1, 1, 1), + /* 63 */ NEW_OPCODE(RRA, INDX, 8, 2, 1), + /* 64 */ NEW_OPCODE(NOP, ZPG, 3, 2, 1), + /* 65 */ NEW_OPCODE(ADC, ZPG, 3, 2, 0), + /* 66 */ NEW_OPCODE(ROR, ZPG, 5, 2, 0), + /* 67 */ NEW_OPCODE(RRA, ZPG, 5, 2, 1), + /* 68 */ NEW_OPCODE(PLA, IMP, 4, 1, 0), + /* 69 */ NEW_OPCODE(ADC, IMM, 2, 2, 0), + /* 6A */ NEW_OPCODE(ROR, ACC, 2, 1, 0), + /* 6B */ NEW_OPCODE(ARR, IMM, 2, 2, 1), + /* 6C */ NEW_OPCODE(JMP, IND, 5, 3, 0), + /* 6D */ NEW_OPCODE(ADC, ABS, 4, 3, 0), + /* 6E */ NEW_OPCODE(ROR, ABS, 6, 3, 0), + /* 6F */ NEW_OPCODE(RRA, ABS, 6, 3, 1), - /* 70 */ NEW_OPCODE(BVS, REL, 2, 2, 0), - /* 71 */ NEW_OPCODE(ADC, INDY, 5, 2, 0), - /* 72 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 73 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 74 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 75 */ NEW_OPCODE(ADC, ZPX, 4, 2, 0), - /* 76 */ NEW_OPCODE(ROR, ZPX, 6, 2, 0), - /* 77 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 78 */ NEW_OPCODE(SEI, IMP, 2, 1, 0), - /* 79 */ NEW_OPCODE(ADC, ABY, 4, 3, 0), - /* 7A */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 7B */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 7C */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 7D */ NEW_OPCODE(ADC, ABX, 4, 3, 0), - /* 7E */ NEW_OPCODE(ROR, ABX, 7, 3, 0), - /* 7F */ NEW_OPCODE(XXX, IMP, 0, 1), + /* 70 */ NEW_OPCODE(BVS, REL, 2, 2, 0), + /* 71 */ NEW_OPCODE(ADC, INDY, 5, 2, 0), + /* 72 */ NEW_OPCODE(JAM, IMP, -1, 1, 1), + /* 73 */ NEW_OPCODE(RRA, INDY, 8, 2, 1), + /* 74 */ NEW_OPCODE(NOP, ZPX, 4, 2, 1), + /* 75 */ NEW_OPCODE(ADC, ZPX, 4, 2, 0), + /* 76 */ NEW_OPCODE(ROR, ZPX, 6, 2, 0), + /* 77 */ NEW_OPCODE(RRA, ZPX, 6, 2, 1), + /* 78 */ NEW_OPCODE(SEI, IMP, 2, 1, 0), + /* 79 */ NEW_OPCODE(ADC, ABY, 4, 3, 0), + /* 7A */ NEW_OPCODE(NOP, IMP, 2, 1, 1), + /* 7B */ NEW_OPCODE(RRA, ABY, 7, 3, 1), + /* 7C */ NEW_OPCODE(NOP, ABX, 4, 3, 1), + /* 7D */ NEW_OPCODE(ADC, ABX, 4, 3, 0), + /* 7E */ NEW_OPCODE(ROR, ABX, 7, 3, 0), + /* 7F */ NEW_OPCODE(RRA, ABX, 7, 3, 1), - /* 80 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 81 */ NEW_OPCODE(STA, INDX, 6, 2, 0), - /* 82 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 83 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 84 */ NEW_OPCODE(STY, ZPG, 3, 2, 0), - /* 85 */ NEW_OPCODE(STA, ZPG, 3, 2, 0), - /* 86 */ NEW_OPCODE(STX, ZPG, 3, 2, 0), - /* 87 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 88 */ NEW_OPCODE(DEY, IMP, 2, 1, 0), - /* 89 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 8A */ NEW_OPCODE(TXA, IMP, 2, 1, 0), - /* 8B */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 8C */ NEW_OPCODE(STY, ABS, 4, 3, 0), - /* 8D */ NEW_OPCODE(STA, ABS, 4, 3, 0), - /* 8E */ NEW_OPCODE(STX, ABS, 4, 3, 0), - /* 8F */ NEW_OPCODE(XXX, IMP, 0, 1), + /* 80 */ NEW_OPCODE(NOP, IMM, 2, 3, 1), + /* 81 */ NEW_OPCODE(STA, INDX, 6, 2, 0), + /* 82 */ NEW_OPCODE(NOP, IMM, 2, 3, 1), + /* 83 */ NEW_OPCODE(SAX, INDX, 6, 2, 1), + /* 84 */ NEW_OPCODE(STY, ZPG, 3, 2, 0), + /* 85 */ NEW_OPCODE(STA, ZPG, 3, 2, 0), + /* 86 */ NEW_OPCODE(STX, ZPG, 3, 2, 0), + /* 87 */ NEW_OPCODE(SAX, ZPG, 3, 2, 1), + /* 88 */ NEW_OPCODE(DEY, IMP, 2, 1, 0), + /* 89 */ NEW_OPCODE(NOP, IMM, 2, 3, 1), + /* 8A */ NEW_OPCODE(TXA, IMP, 2, 1, 0), + /* 8B */ NEW_OPCODE(XAA, IMM, 2, 2, 1), + /* 8C */ NEW_OPCODE(STY, ABS, 4, 3, 0), + /* 8D */ NEW_OPCODE(STA, ABS, 4, 3, 0), + /* 8E */ NEW_OPCODE(STX, ABS, 4, 3, 0), + /* 8F */ NEW_OPCODE(SAX, ABS, 4, 3, 1), - /* 90 */ NEW_OPCODE(BCC, REL, 2, 2, 0), - /* 91 */ NEW_OPCODE(STA, INDY, 6, 2, 0), - /* 92 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 93 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 94 */ NEW_OPCODE(STY, ZPX, 4, 2, 0), - /* 95 */ NEW_OPCODE(STA, ZPX, 4, 2, 0), - /* 96 */ NEW_OPCODE(STX, ZPY, 4, 2, 0), - /* 97 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 98 */ NEW_OPCODE(TYA, IMP, 2, 1, 0), - /* 99 */ NEW_OPCODE(STA, ABY, 5, 3, 0), - /* 9A */ NEW_OPCODE(TXS, IMP, 2, 1, 0), - /* 9B */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 9C */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 9D */ NEW_OPCODE(STA, ABX, 5, 3, 0), - /* 9E */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 9F */ NEW_OPCODE(XXX, IMP, 0, 1), + /* 90 */ NEW_OPCODE(BCC, REL, 2, 2, 0), + /* 91 */ NEW_OPCODE(STA, INDY, 6, 2, 0), + /* 92 */ NEW_OPCODE(JAM, IMP, -1, 1, 1), + /* 93 */ NEW_OPCODE(SHA, INDY, 6, 2, 1), + /* 94 */ NEW_OPCODE(STY, ZPX, 4, 2, 0), + /* 95 */ NEW_OPCODE(STA, ZPX, 4, 2, 0), + /* 96 */ NEW_OPCODE(STX, ZPY, 4, 2, 0), + /* 97 */ NEW_OPCODE(SAX, ZPY, 4, 2, 1), + /* 98 */ NEW_OPCODE(TYA, IMP, 2, 1, 0), + /* 99 */ NEW_OPCODE(STA, ABY, 5, 3, 0), + /* 9A */ NEW_OPCODE(TXS, IMP, 2, 1, 0), + /* 9B */ NEW_OPCODE(SHS, ABY, 5, 3, 1), + /* 9C */ NEW_OPCODE(SHY, ABX, 5, 3, 1), + /* 9D */ NEW_OPCODE(STA, ABX, 5, 3, 0), + /* 9E */ NEW_OPCODE(SHX, ABY, 5, 3, 1), + /* 9F */ NEW_OPCODE(SHA, ABY, 5, 3, 1), - /* A0 */ NEW_OPCODE(LDY, IMM, 2, 2, 0), - /* A1 */ NEW_OPCODE(LDA, INDX, 6, 2, 0), - /* A2 */ NEW_OPCODE(LDX, IMM, 2, 2, 0), - /* A3 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* A4 */ NEW_OPCODE(LDY, ZPG, 3, 2, 0), - /* A5 */ NEW_OPCODE(LDA, ZPG, 3, 2, 0), - /* A6 */ NEW_OPCODE(LDX, ZPG, 3, 2, 0), - /* A7 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* A8 */ NEW_OPCODE(TAY, IMP, 2, 1, 0), - /* A9 */ NEW_OPCODE(LDA, IMM, 2, 2, 0), - /* AA */ NEW_OPCODE(TAX, IMP, 2, 1, 0), - /* AB */ NEW_OPCODE(XXX, IMP, 0, 1), - /* AC */ NEW_OPCODE(LDY, ABS, 4, 3, 0), - /* AD */ NEW_OPCODE(LDA, ABS, 4, 3, 0), - /* AE */ NEW_OPCODE(LDX, ABS, 4, 3, 0), - /* AF */ NEW_OPCODE(XXX, IMP, 0, 1), + /* A0 */ NEW_OPCODE(LDY, IMM, 2, 2, 0), + /* A1 */ NEW_OPCODE(LDA, INDX, 6, 2, 0), + /* A2 */ NEW_OPCODE(LDX, IMM, 2, 2, 0), + /* A3 */ NEW_OPCODE(LAX, INDX, 0, 1, 1), + /* A4 */ NEW_OPCODE(LDY, ZPG, 3, 2, 0), + /* A5 */ NEW_OPCODE(LDA, ZPG, 3, 2, 0), + /* A6 */ NEW_OPCODE(LDX, ZPG, 3, 2, 0), + /* A7 */ NEW_OPCODE(LAX, ZPG, 3, 2, 1), + /* A8 */ NEW_OPCODE(TAY, IMP, 2, 1, 0), + /* A9 */ NEW_OPCODE(LDA, IMM, 2, 2, 0), + /* AA */ NEW_OPCODE(TAX, IMP, 2, 1, 0), + /* AB */ NEW_OPCODE(LAX, IMM, 2, 2, 1), + /* AC */ NEW_OPCODE(LDY, ABS, 4, 3, 0), + /* AD */ NEW_OPCODE(LDA, ABS, 4, 3, 0), + /* AE */ NEW_OPCODE(LDX, ABS, 4, 3, 0), + /* AF */ NEW_OPCODE(LAX, ABS, 4, 3, 1), - /* B0 */ NEW_OPCODE(BCS, REL, 2, 2, 0), - /* B1 */ NEW_OPCODE(LDA, INDY, 5, 2, 0), - /* B2 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* B3 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* B4 */ NEW_OPCODE(LDY, ZPX, 4, 2, 0), - /* B5 */ NEW_OPCODE(LDA, ZPX, 4, 2, 0), - /* B6 */ NEW_OPCODE(LDX, ZPY, 4, 2, 0), - /* B7 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* B8 */ NEW_OPCODE(CLV, IMP, 2, 1, 0), - /* B9 */ NEW_OPCODE(LDA, ABY, 4, 3, 0), - /* BA */ NEW_OPCODE(TSX, IMP, 2, 1, 0), - /* BB */ NEW_OPCODE(XXX, IMP, 0, 1), - /* BC */ NEW_OPCODE(LDY, ABX, 4, 3, 0), - /* BD */ NEW_OPCODE(LDA, ABX, 4, 3, 0), - /* BE */ NEW_OPCODE(LDX, ABY, 4, 3, 0), - /* BF */ NEW_OPCODE(XXX, IMP, 0, 1), + /* B0 */ NEW_OPCODE(BCS, REL, 2, 2, 0), + /* B1 */ NEW_OPCODE(LDA, INDY, 5, 2, 0), + /* B2 */ NEW_OPCODE(JAM, IMP, -1, 1, 1), + /* B3 */ NEW_OPCODE(LAX, INDY, 5, 2, 1), + /* B4 */ NEW_OPCODE(LDY, ZPX, 4, 2, 0), + /* B5 */ NEW_OPCODE(LDA, ZPX, 4, 2, 0), + /* B6 */ NEW_OPCODE(LDX, ZPY, 4, 2, 0), + /* B7 */ NEW_OPCODE(LAX, ZPY, 4, 2, 1), + /* B8 */ NEW_OPCODE(CLV, IMP, 2, 1, 0), + /* B9 */ NEW_OPCODE(LDA, ABY, 4, 3, 0), + /* BA */ NEW_OPCODE(TSX, IMP, 2, 1, 0), + /* BB */ NEW_OPCODE(LAS, ABY, 4, 3, 1), + /* BC */ NEW_OPCODE(LDY, ABX, 4, 3, 0), + /* BD */ NEW_OPCODE(LDA, ABX, 4, 3, 0), + /* BE */ NEW_OPCODE(LDX, ABY, 4, 3, 0), + /* BF */ NEW_OPCODE(LAX, ABY, 4, 3, 1), - /* C0 */ NEW_OPCODE(CPY, IMM, 2, 2, 0), - /* C1 */ NEW_OPCODE(CMP, INDX, 6, 2, 0), - /* C2 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* C3 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* C4 */ NEW_OPCODE(CPY, ZPG, 3, 2, 0), - /* C5 */ NEW_OPCODE(CMP, ZPG, 3, 2, 0), - /* C6 */ NEW_OPCODE(DEC, ZPG, 5, 2, 0), - /* C7 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* C8 */ NEW_OPCODE(INY, IMP, 2, 1, 0), - /* C9 */ NEW_OPCODE(CMP, IMM, 2, 2, 0), - /* CA */ NEW_OPCODE(DEX, IMP, 2, 1, 0), - /* CB */ NEW_OPCODE(XXX, IMP, 0, 1), - /* CC */ NEW_OPCODE(CPY, ABS, 4, 3, 0), - /* CD */ NEW_OPCODE(CMP, ABS, 4, 3, 0), - /* CE */ NEW_OPCODE(DEC, ABS, 6, 3, 0), - /* CF */ NEW_OPCODE(XXX, IMP, 0, 1), + /* C0 */ NEW_OPCODE(CPY, IMM, 2, 2, 0), + /* C1 */ NEW_OPCODE(CMP, INDX, 6, 2, 0), + /* C2 */ NEW_OPCODE(NOP, IMM, 2, 2, 1), + /* C3 */ NEW_OPCODE(DCP, INDX, 8, 2, 1), + /* C4 */ NEW_OPCODE(CPY, ZPG, 3, 2, 0), + /* C5 */ NEW_OPCODE(CMP, ZPG, 3, 2, 0), + /* C6 */ NEW_OPCODE(DEC, ZPG, 5, 2, 0), + /* C7 */ NEW_OPCODE(DCP, ZPG, 5, 2, 1), + /* C8 */ NEW_OPCODE(INY, IMP, 2, 1, 0), + /* C9 */ NEW_OPCODE(CMP, IMM, 2, 2, 0), + /* CA */ NEW_OPCODE(DEX, IMP, 2, 1, 0), + /* CB */ NEW_OPCODE(SBX, IMM, 2, 2, 1), + /* CC */ NEW_OPCODE(CPY, ABS, 4, 3, 0), + /* CD */ NEW_OPCODE(CMP, ABS, 4, 3, 0), + /* CE */ NEW_OPCODE(DEC, ABS, 6, 3, 0), + /* CF */ NEW_OPCODE(DCP, ABS, 6, 3, 1), - /* D0 */ NEW_OPCODE(BNE, REL, 2, 2, 0), - /* D1 */ NEW_OPCODE(CMP, INDY, 5, 2, 0), - /* D2 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* D3 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* D4 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* D5 */ NEW_OPCODE(CMP, ZPX, 4, 2, 0), - /* D6 */ NEW_OPCODE(DEC, ZPX, 6, 2, 0), - /* D7 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* D8 */ NEW_OPCODE(CLD, IMP, 2, 1, 0), - /* D9 */ NEW_OPCODE(CMP, ABY, 4, 3, 0), - /* DA */ NEW_OPCODE(XXX, IMP, 0, 1), - /* DB */ NEW_OPCODE(XXX, IMP, 0, 1), - /* DC */ NEW_OPCODE(XXX, IMP, 0, 1), - /* DD */ NEW_OPCODE(CMP, ABX, 4, 3, 0), - /* DE */ NEW_OPCODE(DEC, ABX, 7, 3, 0), - /* DF */ NEW_OPCODE(XXX, IMP, 0, 1), + /* D0 */ NEW_OPCODE(BNE, REL, 2, 2, 0), + /* D1 */ NEW_OPCODE(CMP, INDY, 5, 2, 0), + /* D2 */ NEW_OPCODE(JAM, IMP, -1, 1, 1), + /* D3 */ NEW_OPCODE(DCP, INDY, 8, 2, 1), + /* D4 */ NEW_OPCODE(NOP, ZPX, 4, 2, 1), + /* D5 */ NEW_OPCODE(CMP, ZPX, 4, 2, 0), + /* D6 */ NEW_OPCODE(DEC, ZPX, 6, 2, 0), + /* D7 */ NEW_OPCODE(DCP, ZPX, 6, 2, 1), + /* D8 */ NEW_OPCODE(CLD, IMP, 2, 1, 0), + /* D9 */ NEW_OPCODE(CMP, ABY, 4, 3, 0), + /* DA */ NEW_OPCODE(NOP, IMP, 2, 1, 1), + /* DB */ NEW_OPCODE(DCP, ABY, 7, 3, 1), + /* DC */ NEW_OPCODE(NOP, ABX, 4, 3, 1), + /* DD */ NEW_OPCODE(CMP, ABX, 4, 3, 0), + /* DE */ NEW_OPCODE(DEC, ABX, 7, 3, 0), + /* DF */ NEW_OPCODE(DCP, ABX, 7, 3, 1), - /* E0 */ NEW_OPCODE(CPX, IMM, 2, 2, 0), - /* E1 */ NEW_OPCODE(SBC, INDX, 6, 2, 0), - /* E2 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* E3 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* E4 */ NEW_OPCODE(CPX, ZPG, 3, 2, 0), - /* E5 */ NEW_OPCODE(SBC, ZPG, 3, 2, 0), - /* E6 */ NEW_OPCODE(INC, ZPG, 5, 2, 0), - /* E7 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* E8 */ NEW_OPCODE(INX, IMP, 2, 1, 0), - /* E9 */ NEW_OPCODE(SBC, IMM, 2, 2, 0), - /* EA */ NEW_OPCODE(NOP, IMP, 2, 1, 0), - /* EB */ NEW_OPCODE(XXX, IMP, 0, 1), - /* EC */ NEW_OPCODE(CPX, ABS, 4, 3, 0), - /* ED */ NEW_OPCODE(SBC, ABS, 4, 3, 0), - /* EE */ NEW_OPCODE(INC, ABS, 6, 3, 0), - /* EF */ NEW_OPCODE(XXX, IMP, 0, 1), + /* E0 */ NEW_OPCODE(CPX, IMM, 2, 2, 0), + /* E1 */ NEW_OPCODE(SBC, INDX, 6, 2, 0), + /* E2 */ NEW_OPCODE(NOP, IMM, 2, 2, 1), + /* E3 */ NEW_OPCODE(ISX, INDX, 8, 2, 1), + /* E4 */ NEW_OPCODE(CPX, ZPG, 3, 2, 0), + /* E5 */ NEW_OPCODE(SBC, ZPG, 3, 2, 0), + /* E6 */ NEW_OPCODE(INC, ZPG, 5, 2, 0), + /* E7 */ NEW_OPCODE(ISC, ZPG, 5, 2, 1), + /* E8 */ NEW_OPCODE(INX, IMP, 2, 1, 0), + /* E9 */ NEW_OPCODE(SBC, IMM, 2, 2, 0), + /* EA */ NEW_OPCODE(NOP, IMP, 2, 1, 0), + /* EB */ NEW_OPCODE(SBC, IMM, 2, 2, 1), + /* EC */ NEW_OPCODE(CPX, ABS, 4, 3, 0), + /* ED */ NEW_OPCODE(SBC, ABS, 4, 3, 0), + /* EE */ NEW_OPCODE(INC, ABS, 6, 3, 0), + /* EF */ NEW_OPCODE(ISC, ABS, 6, 3, 1), - /* F0 */ NEW_OPCODE(BEQ, REL, 2, 2, 0), - /* F1 */ NEW_OPCODE(SBC, INDY, 5, 2, 0), - /* F2 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* F3 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* F4 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* F5 */ NEW_OPCODE(SBC, ZPX, 4, 2, 0), - /* F6 */ NEW_OPCODE(INC, ZPX, 6, 2, 0), - /* F7 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* F8 */ NEW_OPCODE(SED, IMP, 2, 1, 0), - /* F9 */ NEW_OPCODE(SBC, ABY, 4, 3, 0), - /* FA */ NEW_OPCODE(XXX, IMP, 0, 1), - /* FB */ NEW_OPCODE(XXX, IMP, 0, 1), - /* FC */ NEW_OPCODE(XXX, IMP, 0, 1), - /* FD */ NEW_OPCODE(SBC, ABX, 4, 3, 0), - /* FE */ NEW_OPCODE(INC, ABX, 7, 3, 0), - /* FF */ NEW_OPCODE(XXX, IMP, 0, 1) + /* F0 */ NEW_OPCODE(BEQ, REL, 2, 2, 0), + /* F1 */ NEW_OPCODE(SBC, INDY, 5, 2, 0), + /* F2 */ NEW_OPCODE(JAM, IMP, -1, 1, 1), + /* F3 */ NEW_OPCODE(ISC, INDY, 8, 2, 1), + /* F4 */ NEW_OPCODE(NOP, ZPX, 4, 2, 1), + /* F5 */ NEW_OPCODE(SBC, ZPX, 4, 2, 0), + /* F6 */ NEW_OPCODE(INC, ZPX, 6, 2, 0), + /* F7 */ NEW_OPCODE(ISC, ZPX, 6, 2, 1), + /* F8 */ NEW_OPCODE(SED, IMP, 2, 1, 0), + /* F9 */ NEW_OPCODE(SBC, ABY, 4, 3, 0), + /* FA */ NEW_OPCODE(SBC, ABY, 4, 3, 1), + /* FB */ NEW_OPCODE(NOP, IMP, 2, 1, 1), + /* FC */ NEW_OPCODE(ISC, ABY, 7, 3, 1), + /* FD */ NEW_OPCODE(SBC, ABX, 4, 3, 0), + /* FE */ NEW_OPCODE(INC, ABX, 7, 3, 0), + /* FF */ NEW_OPCODE(ISC, ABX, 7, 3, 1) }; \ No newline at end of file