From bfdf3f88cf60aefe4fe7110c3a90d74f60b77d2a Mon Sep 17 00:00:00 2001 From: Lauchmelder Date: Sat, 23 Oct 2021 01:29:15 +0200 Subject: [PATCH] started adding illegal instructions --- NES Emulator/cpu.c | 3 + NES Emulator/cpu.h | 7 +- NES Emulator/opcodes.c | 336 ++++++++++++++++++++--------------------- 3 files changed, 176 insertions(+), 170 deletions(-) diff --git a/NES Emulator/cpu.c b/NES Emulator/cpu.c index 1202b3f..c3015e9 100644 --- a/NES Emulator/cpu.c +++ b/NES Emulator/cpu.c @@ -47,6 +47,9 @@ void destroyCPU(struct CPU* cpu) int tickCPU(struct CPU* cpu) { + if (cpu->remainingCycles == -1) // Jammed + return 1; + cpu->remainingCycles--; cpu->totalCycles += 1; diff --git a/NES Emulator/cpu.h b/NES Emulator/cpu.h index 4996b0c..1e1c8d0 100644 --- a/NES Emulator/cpu.h +++ b/NES Emulator/cpu.h @@ -14,7 +14,9 @@ enum Operation INC, INX, INY, JMP, JSR, LDA, LDX, LDY, LSR, NOP, ORA, PHA, PHP, PLA, PLP, ROL, ROR, RTI, RTS, SBC, SEC, SED, SEI, STA, - STX, STY, TAX, TAY, TSX, TXA, TXS, TYA + STX, STY, TAX, TAY, TSX, TXA, TXS, TYA, + + JAM, SLO, ANC }; enum AddrMode @@ -28,6 +30,7 @@ struct Opcode enum AddrMode addr; Byte cycles; Byte length; + Byte illegal; const char str[4]; }; @@ -68,7 +71,7 @@ struct CPU Word word; } pc; - Byte remainingCycles; + char remainingCycles; size_t totalCycles; Byte fetchedVal; diff --git a/NES Emulator/opcodes.c b/NES Emulator/opcodes.c index add6f2b..cb9246b 100644 --- a/NES Emulator/opcodes.c +++ b/NES Emulator/opcodes.c @@ -1,278 +1,278 @@ #include "cpu.h" -#define NEW_OPCODE(op, addr, cyc, len) {op, addr, cyc, len, #op} +#define NEW_OPCODE(op, addr, cyc, len, ill) {op, addr, cyc, len, ill, #op} const struct Opcode OPCODE_TABLE[256] = { - /* 00 */ NEW_OPCODE(BRK, IMP, 7, 1), - /* 01 */ NEW_OPCODE(ORA, INDX, 6, 2), - /* 02 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 03 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 04 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 05 */ NEW_OPCODE(ORA, ZPG, 3, 2), - /* 06 */ NEW_OPCODE(ASL, ZPG, 5, 2), - /* 07 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 08 */ NEW_OPCODE(PHP, IMP, 3, 1), - /* 09 */ NEW_OPCODE(ORA, IMM, 2, 2), - /* 0A */ NEW_OPCODE(ASL, ACC, 2, 1), - /* 0B */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 0C */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 0D */ NEW_OPCODE(ORA, ABS, 4, 3), - /* 0E */ NEW_OPCODE(ASL, ABS, 6, 3), - /* 0F */ NEW_OPCODE(XXX, IMP, 0, 1), + /* 00 */ NEW_OPCODE(BRK, IMP, 7, 1, 0), + /* 01 */ NEW_OPCODE(ORA, INDX, 6, 2, 0), + /* 02 */ NEW_OPCODE(JAM, IMP, -1, 1, 1), + /* 03 */ NEW_OPCODE(SLO, INDX, 8, 2, 1), + /* 04 */ NEW_OPCODE(NOP, ZPG, 3, 2, 1), + /* 05 */ NEW_OPCODE(ORA, ZPG, 3, 2, 0), + /* 06 */ NEW_OPCODE(ASL, ZPG, 5, 2, 0), + /* 07 */ NEW_OPCODE(SLO, ZPG, 5, 2, 1), + /* 08 */ NEW_OPCODE(PHP, IMP, 3, 1, 0), + /* 09 */ NEW_OPCODE(ORA, IMM, 2, 2, 0), + /* 0A */ NEW_OPCODE(ASL, ACC, 2, 1, 0), + /* 0B */ NEW_OPCODE(ANC, IMM, 2, 2, 1), + /* 0C */ NEW_OPCODE(NOP, ABS, 4, 3, 1), + /* 0D */ NEW_OPCODE(ORA, ABS, 4, 3, 0), + /* 0E */ NEW_OPCODE(ASL, ABS, 6, 3, 0), + /* 0F */ NEW_OPCODE(SLO, ABS, 6, 3, 1), - /* 10 */ NEW_OPCODE(BPL, REL, 2, 2), - /* 11 */ NEW_OPCODE(ORA, INDY, 5, 2), - /* 12 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 13 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 14 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 15 */ NEW_OPCODE(ORA, ZPX, 4, 2), - /* 16 */ NEW_OPCODE(ASL, ZPX, 6, 2), - /* 17 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 18 */ NEW_OPCODE(CLC, IMP, 2, 1), - /* 19 */ NEW_OPCODE(ORA, ABY, 4, 3), - /* 1A */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 1B */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 1C */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 1D */ NEW_OPCODE(ORA, ABX, 4, 3), - /* 1E */ NEW_OPCODE(ASL, ABX, 7, 3), - /* 1F */ NEW_OPCODE(XXX, IMP, 0, 1), + /* 10 */ NEW_OPCODE(BPL, REL, 2, 2, 0), + /* 11 */ NEW_OPCODE(ORA, INDY, 5, 2, 0), + /* 12 */ NEW_OPCODE(JAM, IMP, -1, 1, 1), + /* 13 */ NEW_OPCODE(SLO, INDY, 8, 2, 1), + /* 14 */ NEW_OPCODE(NOP, ZPX, 4, 2, 1), + /* 15 */ NEW_OPCODE(ORA, ZPX, 4, 2, 0), + /* 16 */ NEW_OPCODE(ASL, ZPX, 6, 2, 0), + /* 17 */ NEW_OPCODE(SLO, ZPX, 6, 2, 1), + /* 18 */ NEW_OPCODE(CLC, IMP, 2, 1, 0), + /* 19 */ NEW_OPCODE(ORA, ABY, 4, 3, 0), + /* 1A */ NEW_OPCODE(NOP, IMP, 2, 1, 1), + /* 1B */ NEW_OPCODE(SLO, ABY, 7, 3, 1), + /* 1C */ NEW_OPCODE(NOP, ABX, 4, 3, 1), + /* 1D */ NEW_OPCODE(ORA, ABX, 4, 3, 0), + /* 1E */ NEW_OPCODE(ASL, ABX, 7, 3, 0), + /* 1F */ NEW_OPCODE(SLO, ABX, 7, 3, 1), - /* 20 */ NEW_OPCODE(JSR, ABS, 6, 3), - /* 21 */ NEW_OPCODE(AND, INDX, 6, 2), + /* 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), - /* 25 */ NEW_OPCODE(AND, ZPG, 3, 2), - /* 26 */ NEW_OPCODE(ROL, ZPG, 5, 2), + /* 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), - /* 29 */ NEW_OPCODE(AND, IMM, 2, 2), - /* 2A */ NEW_OPCODE(ROL, ACC, 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(XXX, IMP, 0, 1), - /* 2C */ NEW_OPCODE(BIT, ABS, 4, 3), - /* 2D */ NEW_OPCODE(AND, ABS, 4, 3), - /* 2E */ NEW_OPCODE(ROL, ABS, 6, 3), + /* 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), - /* 30 */ NEW_OPCODE(BMI, REL, 2, 2), - /* 31 */ NEW_OPCODE(AND, INDY, 5, 2), + /* 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), - /* 36 */ NEW_OPCODE(ROL, ZPX, 6, 2), + /* 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), - /* 39 */ NEW_OPCODE(AND, ABY, 4, 3), + /* 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), - /* 3E */ NEW_OPCODE(ROL, ABX, 7, 3), - /* 3F */ 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), - /* 40 */ NEW_OPCODE(RTI, IMP, 6, 1), - /* 41 */ NEW_OPCODE(EOR, INDX, 6, 2), + /* 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), - /* 46 */ NEW_OPCODE(LSR, ZPG, 5, 2), + /* 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), - /* 49 */ NEW_OPCODE(EOR, IMM, 2, 2), - /* 4A */ NEW_OPCODE(LSR, ACC, 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(XXX, IMP, 0, 1), - /* 4C */ NEW_OPCODE(JMP, ABS, 3, 3), - /* 4D */ NEW_OPCODE(EOR, ABS, 4, 3), - /* 4E */ NEW_OPCODE(LSR, ABS, 6, 3), + /* 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), - /* 50 */ NEW_OPCODE(BVC, REL, 2, 2), - /* 51 */ NEW_OPCODE(EOR, INDY, 5, 2), + /* 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), - /* 56 */ NEW_OPCODE(LSR, ZPX, 6, 2), + /* 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), - /* 59 */ NEW_OPCODE(EOR, ABY, 4, 3), + /* 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), - /* 5E */ NEW_OPCODE(LSR, ABX, 7, 3), + /* 5D */ NEW_OPCODE(EOR, ABX, 4, 3, 0), + /* 5E */ NEW_OPCODE(LSR, ABX, 7, 3, 0), /* 5F */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 60 */ NEW_OPCODE(RTS, IMP, 6, 1), - /* 61 */ NEW_OPCODE(ADC, INDX, 6, 2), + /* 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), - /* 66 */ NEW_OPCODE(ROR, ZPG, 5, 2), + /* 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), - /* 69 */ NEW_OPCODE(ADC, IMM, 2, 2), - /* 6A */ NEW_OPCODE(ROR, ACC, 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(XXX, IMP, 0, 1), - /* 6C */ NEW_OPCODE(JMP, IND, 5, 3), - /* 6D */ NEW_OPCODE(ADC, ABS, 4, 3), - /* 6E */ NEW_OPCODE(ROR, ABS, 6, 3), + /* 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), - /* 70 */ NEW_OPCODE(BVS, REL, 2, 2), - /* 71 */ NEW_OPCODE(ADC, INDY, 5, 2), + /* 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), - /* 76 */ NEW_OPCODE(ROR, ZPX, 6, 2), + /* 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), - /* 79 */ NEW_OPCODE(ADC, ABY, 4, 3), + /* 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), - /* 7E */ NEW_OPCODE(ROR, ABX, 7, 3), + /* 7D */ NEW_OPCODE(ADC, ABX, 4, 3, 0), + /* 7E */ NEW_OPCODE(ROR, ABX, 7, 3, 0), /* 7F */ NEW_OPCODE(XXX, IMP, 0, 1), /* 80 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 81 */ NEW_OPCODE(STA, INDX, 6, 2), + /* 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), - /* 85 */ NEW_OPCODE(STA, ZPG, 3, 2), - /* 86 */ NEW_OPCODE(STX, ZPG, 3, 2), + /* 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), + /* 88 */ NEW_OPCODE(DEY, IMP, 2, 1, 0), /* 89 */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 8A */ NEW_OPCODE(TXA, IMP, 2, 1), + /* 8A */ NEW_OPCODE(TXA, IMP, 2, 1, 0), /* 8B */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 8C */ NEW_OPCODE(STY, ABS, 4, 3), - /* 8D */ NEW_OPCODE(STA, ABS, 4, 3), - /* 8E */ NEW_OPCODE(STX, ABS, 4, 3), + /* 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), - /* 90 */ NEW_OPCODE(BCC, REL, 2, 2), - /* 91 */ NEW_OPCODE(STA, INDY, 6, 2), + /* 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), - /* 95 */ NEW_OPCODE(STA, ZPX, 4, 2), - /* 96 */ NEW_OPCODE(STX, ZPY, 4, 2), + /* 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), - /* 99 */ NEW_OPCODE(STA, ABY, 5, 3), - /* 9A */ NEW_OPCODE(TXS, IMP, 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(XXX, IMP, 0, 1), /* 9C */ NEW_OPCODE(XXX, IMP, 0, 1), - /* 9D */ NEW_OPCODE(STA, ABX, 5, 3), + /* 9D */ NEW_OPCODE(STA, ABX, 5, 3, 0), /* 9E */ NEW_OPCODE(XXX, IMP, 0, 1), /* 9F */ NEW_OPCODE(XXX, IMP, 0, 1), - /* A0 */ NEW_OPCODE(LDY, IMM, 2, 2), - /* A1 */ NEW_OPCODE(LDA, INDX, 6, 2), - /* A2 */ NEW_OPCODE(LDX, IMM, 2, 2), + /* 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), - /* A5 */ NEW_OPCODE(LDA, ZPG, 3, 2), - /* A6 */ NEW_OPCODE(LDX, ZPG, 3, 2), + /* 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), - /* A9 */ NEW_OPCODE(LDA, IMM, 2, 2), - /* AA */ NEW_OPCODE(TAX, IMP, 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(XXX, IMP, 0, 1), - /* AC */ NEW_OPCODE(LDY, ABS, 4, 3), - /* AD */ NEW_OPCODE(LDA, ABS, 4, 3), - /* AE */ NEW_OPCODE(LDX, ABS, 4, 3), + /* 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), - /* B0 */ NEW_OPCODE(BCS, REL, 2, 2), - /* B1 */ NEW_OPCODE(LDA, INDY, 5, 2), + /* 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), - /* B5 */ NEW_OPCODE(LDA, ZPX, 4, 2), - /* B6 */ NEW_OPCODE(LDX, ZPY, 4, 2), + /* 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), - /* B9 */ NEW_OPCODE(LDA, ABY, 4, 3), - /* BA */ NEW_OPCODE(TSX, IMP, 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(XXX, IMP, 0, 1), - /* BC */ NEW_OPCODE(LDY, ABX, 4, 3), - /* BD */ NEW_OPCODE(LDA, ABX, 4, 3), - /* BE */ NEW_OPCODE(LDX, ABY, 4, 3), + /* 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), - /* C0 */ NEW_OPCODE(CPY, IMM, 2, 2), - /* C1 */ NEW_OPCODE(CMP, INDX, 6, 2), + /* 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), - /* C5 */ NEW_OPCODE(CMP, ZPG, 3, 2), - /* C6 */ NEW_OPCODE(DEC, ZPG, 5, 2), + /* 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), - /* C9 */ NEW_OPCODE(CMP, IMM, 2, 2), - /* CA */ NEW_OPCODE(DEX, IMP, 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(XXX, IMP, 0, 1), - /* CC */ NEW_OPCODE(CPY, ABS, 4, 3), - /* CD */ NEW_OPCODE(CMP, ABS, 4, 3), - /* CE */ NEW_OPCODE(DEC, ABS, 6, 3), + /* 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), - /* D0 */ NEW_OPCODE(BNE, REL, 2, 2), - /* D1 */ NEW_OPCODE(CMP, INDY, 5, 2), + /* 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), - /* D6 */ NEW_OPCODE(DEC, ZPX, 6, 2), + /* 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), - /* D9 */ NEW_OPCODE(CMP, ABY, 4, 3), + /* 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), - /* DE */ NEW_OPCODE(DEC, ABX, 7, 3), + /* DD */ NEW_OPCODE(CMP, ABX, 4, 3, 0), + /* DE */ NEW_OPCODE(DEC, ABX, 7, 3, 0), /* DF */ NEW_OPCODE(XXX, IMP, 0, 1), - /* E0 */ NEW_OPCODE(CPX, IMM, 2, 2), - /* E1 */ NEW_OPCODE(SBC, INDX, 6, 2), + /* 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), - /* E5 */ NEW_OPCODE(SBC, ZPG, 3, 2), - /* E6 */ NEW_OPCODE(INC, ZPG, 5, 2), + /* 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), - /* E9 */ NEW_OPCODE(SBC, IMM, 2, 2), - /* EA */ NEW_OPCODE(NOP, IMP, 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(XXX, IMP, 0, 1), - /* EC */ NEW_OPCODE(CPX, ABS, 4, 3), - /* ED */ NEW_OPCODE(SBC, ABS, 4, 3), - /* EE */ NEW_OPCODE(INC, ABS, 6, 3), + /* 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), - /* F0 */ NEW_OPCODE(BEQ, REL, 2, 2), - /* F1 */ NEW_OPCODE(SBC, INDY, 5, 2), + /* 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), - /* F6 */ NEW_OPCODE(INC, ZPX, 6, 2), + /* 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), - /* F9 */ NEW_OPCODE(SBC, ABY, 4, 3), + /* 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), - /* FE */ NEW_OPCODE(INC, ABX, 7, 3), + /* FD */ NEW_OPCODE(SBC, ABX, 4, 3, 0), + /* FE */ NEW_OPCODE(INC, ABX, 7, 3, 0), /* FF */ NEW_OPCODE(XXX, IMP, 0, 1) }; \ No newline at end of file