#include #include "op.h" const uint8_t opcode_addr[OP_MAX] = { /* 0- */ /* BRK */ OP_ADDR_IMPL, /* ORA */ OP_ADDR_IND | OP_ADDR_X, /* */ 0xFF, /* */ 0xFF, /* */ 0xFF, /* ORA */ 0xFF, /* ASL */ 0xFF, /* */ 0xFF, /* PHP */ OP_ADDR_IMPL, /* ORA */ OP_ADDR_IMM, /* ASL */ OP_ADDR_IMPL | OP_ADDR_A, /* */ 0xFF, /* */ 0xFF, /* ORA */ OP_ADDR_ABS, /* ASL */ OP_ADDR_ABS, /* */ 0xFF, /* 1- */ /* BPL */ OP_ADDR_REL, /* ORA */ OP_ADDR_IND | OP_ADDR_Y, /* */ 0xFF, /* */ 0xFF, /* */ 0xFF, /* ORA */ 0xFF, /* ASL */ 0xFF, /* */ 0xFF, /* CLC */ OP_ADDR_IMPL, /* ORA */ OP_ADDR_ABS | OP_ADDR_Y, /* */ 0xFF, /* */ 0xFF, /* */ 0xFF, /* ORA */ OP_ADDR_ABS | OP_ADDR_X, /* ASL */ OP_ADDR_ABS | OP_ADDR_X, /* */ 0xFF, /* 2- */ /* JSR */ OP_ADDR_ABS, /* AND */ OP_ADDR_IND | OP_ADDR_Y, /* */ 0xFF, /* */ 0xFF, /* BIT */ 0xFF, /* AND */ 0xFF, /* ROL */ 0xFF, /* */ 0xFF, /* PLP */ OP_ADDR_IMPL, /* AND */ OP_ADDR_IMM, /* ROL */ OP_ADDR_IMPL | OP_ADDR_A, /* */ 0xFF, /* BIT */ OP_ADDR_ABS, /* AND */ OP_ADDR_ABS, /* ROL */ OP_ADDR_ABS, /* */ 0xFF, /* 3- */ /* BMI */ OP_ADDR_REL, /* AND */ OP_ADDR_IND | OP_ADDR_Y, /* */ 0xFF, /* */ 0xFF, /* */ 0xFF, /* AND */ 0xFF, /* ROL */ 0xFF, /* */ 0xFF, /* SEC */ OP_ADDR_IMPL, /* AND */ OP_ADDR_ABS | OP_ADDR_Y, /* */ 0xFF, /* */ 0xFF, /* */ 0xFF, /* AND */ OP_ADDR_ABS | OP_ADDR_X, /* ROL */ OP_ADDR_ABS | OP_ADDR_X, /* */ 0xFF, /* 4- */ /* RTI */ OP_ADDR_IMPL, /* EOR */ OP_ADDR_IND | OP_ADDR_X, /* */ 0xFF, /* */ 0xFF, /* */ 0xFF, /* EOR */ 0xFF, /* LSR */ 0xFF, /* */ 0xFF, /* PHA */ OP_ADDR_IMPL, /* EOR */ OP_ADDR_IMM, /* LSR */ OP_ADDR_IMPL | OP_ADDR_A, /* */ 0xFF, /* JMP */ OP_ADDR_ABS, /* EOR */ OP_ADDR_ABS, /* LSR */ OP_ADDR_ABS, /* */ 0xFF, /* 5- */ /* BVC */ OP_ADDR_REL, /* EOR */ OP_ADDR_IND | OP_ADDR_Y, /* */ 0xFF, /* */ 0xFF, /* */ 0xFF, /* EOR */ 0xFF, /* LSR */ 0xFF, /* */ 0xFF, /* CLI */ OP_ADDR_IMPL, /* EOR */ OP_ADDR_ABS | OP_ADDR_Y, /* */ 0xFF, /* */ 0xFF, /* */ 0xFF, /* EOR */ OP_ADDR_ABS | OP_ADDR_X, /* LSR */ OP_ADDR_ABS | OP_ADDR_X, /* */ 0xFF, /* 6- */ /* RTS */ OP_ADDR_IMPL, /* ADC */ OP_ADDR_IND | OP_ADDR_X, /* PER */ OP_ADDR_IMPL, /* */ 0xFF, /* */ 0xFF, /* ADC */ 0xFF, /* ROR */ 0xFF, /* */ 0xFF, /* PLA */ OP_ADDR_IMPL, /* ADC */ OP_ADDR_IMM, /* ROR */ OP_ADDR_IMPL | OP_ADDR_A, /* */ 0xFF, /* JMP */ OP_ADDR_IND, /* ADC */ OP_ADDR_ABS, /* ROR */ OP_ADDR_ABS, /* */ 0xFF, /* 7- */ /* BVS */ OP_ADDR_REL, /* ADC */ OP_ADDR_IND | OP_ADDR_Y, /* */ 0xFF, /* */ 0xFF, /* */ 0xFF, /* ADC */ 0xFF, /* ROR */ 0xFF, /* */ 0xFF, /* SEI */ OP_ADDR_IMPL, /* ADC */ OP_ADDR_ABS | OP_ADDR_Y, /* */ 0xFF, /* */ 0xFF, /* */ 0xFF, /* ADC */ OP_ADDR_ABS | OP_ADDR_X, /* ROR */ OP_ADDR_ABS | OP_ADDR_X, /* */ 0xFF, /* 8- */ /* */ 0xFF, /* STA */ OP_ADDR_IND | OP_ADDR_X, /* */ 0xFF, /* */ 0xFF, /* STY */ 0xFF, /* STA */ 0xFF, /* STX */ 0xFF, /* */ 0xFF, /* DEY */ OP_ADDR_IMPL, /* */ 0xFF, /* TXA */ OP_ADDR_IMPL, /* */ 0xFF, /* STY */ OP_ADDR_ABS, /* STA */ OP_ADDR_ABS, /* STX */ OP_ADDR_ABS, /* */ 0xFF, /* 9- */ /* BCC */ OP_ADDR_REL, /* STA */ OP_ADDR_IND | OP_ADDR_Y, /* */ 0xFF, /* */ 0xFF, /* STY */ 0xFF, /* STA */ 0xFF, /* STX */ 0xFF, /* */ 0xFF, /* TYA */ OP_ADDR_IMPL, /* STA */ OP_ADDR_ABS | OP_ADDR_Y, /* TXS */ OP_ADDR_IMPL, /* */ 0xFF, /* */ 0xFF, /* STA */ OP_ADDR_ABS | OP_ADDR_X, /* */ 0xFF, /* */ 0xFF, /* A- */ /* LDY */ OP_ADDR_IMM, /* LDA */ OP_ADDR_IND | OP_ADDR_X, /* LDX */ OP_ADDR_IMM, /* */ 0xFF, /* LDY */ 0xFF, /* LDA */ 0xFF, /* LDX */ 0xFF, /* */ 0xFF, /* TAY */ OP_ADDR_IMPL, /* LDA */ OP_ADDR_IMM, /* TAX */ OP_ADDR_IMPL, /* */ 0xFF, /* LDY */ OP_ADDR_ABS, /* LDA */ OP_ADDR_ABS, /* LDX */ OP_ADDR_ABS, /* */ 0xFF, /* B- */ /* BCS */ OP_ADDR_REL, /* LDA */ OP_ADDR_IND | OP_ADDR_Y, /* */ 0xFF, /* */ 0xFF, /* LDY */ 0xFF, /* LDA */ 0xFF, /* LDX */ 0xFF, /* */ 0xFF, /* CLV */ OP_ADDR_IMPL, /* LDA */ OP_ADDR_ABS | OP_ADDR_Y, /* TSX */ OP_ADDR_IMPL, /* */ 0xFF, /* LDY */ OP_ADDR_ABS | OP_ADDR_X, /* LDA */ OP_ADDR_ABS | OP_ADDR_X, /* LDX */ OP_ADDR_ABS | OP_ADDR_Y, /* */ 0xFF, /* C- */ /* CPY */ OP_ADDR_IMM, /* CMP */ OP_ADDR_IND | OP_ADDR_X, /* */ 0xFF, /* */ 0xFF, /* CPY */ 0xFF, /* CMP */ 0xFF, /* DEC */ 0xFF, /* */ 0xFF, /* INY */ OP_ADDR_IMPL, /* CMP */ OP_ADDR_IMM, /* DEX */ OP_ADDR_IMPL, /* */ 0xFF, /* CPY */ OP_ADDR_ABS, /* CMP */ OP_ADDR_ABS, /* DEC */ OP_ADDR_ABS, /* */ 0xFF, /* D- */ /* BNE */ OP_ADDR_REL, /* CMP */ OP_ADDR_IND | OP_ADDR_Y, /* */ 0xFF, /* */ 0xFF, /* */ 0xFF, /* CMP */ 0xFF, /* DEC */ 0xFF, /* */ 0xFF, /* CLD */ OP_ADDR_IMPL, /* CMP */ OP_ADDR_ABS | OP_ADDR_Y, /* */ 0xFF, /* */ 0xFF, /* */ 0xFF, /* CMP */ OP_ADDR_ABS | OP_ADDR_X, /* DEC */ OP_ADDR_ABS | OP_ADDR_X, /* */ 0xFF, /* E- */ /* CPX */ OP_ADDR_IMM, /* SBC */ OP_ADDR_IND | OP_ADDR_X, /* */ 0xFF, /* */ 0xFF, /* CPX */ 0xFF, /* SBC */ 0xFF, /* INC */ 0xFF, /* */ 0xFF, /* INX */ OP_ADDR_IMPL, /* SBC */ OP_ADDR_IMM, /* NOP */ OP_ADDR_IMPL, /* */ 0xFF, /* CPX */ OP_ADDR_ABS, /* SBC */ OP_ADDR_ABS, /* INC */ OP_ADDR_ABS, /* */ 0xFF, /* F- */ /* BEQ */ OP_ADDR_REL, /* SBC */ OP_ADDR_IND | OP_ADDR_Y, /* */ 0xFF, /* */ 0xFF, /* */ 0xFF, /* SBC */ 0xFF, /* INC */ 0xFF, /* */ 0xFF, /* SED */ OP_ADDR_IMPL, /* SBC */ OP_ADDR_ABS | OP_ADDR_Y, /* */ 0xFF, /* */ 0xFF, /* */ 0xFF, /* SBC */ OP_ADDR_ABS | OP_ADDR_X, /* INC */ OP_ADDR_ABS | OP_ADDR_X, /* */ 0xFF }; const char *opcode_str[OP_MAX] = { "BRK", "ORA", NULL, NULL, NULL, "ORA", "ASL", NULL, "PHP", "ORA", "ASL", NULL, NULL, "ORA", "ASL", NULL, "BPL", "ORA", NULL, NULL, NULL, "ORA", "ASL", NULL, "CLC", "ORA", NULL, NULL, NULL, "ORA", "ASL", NULL, "JSR", "AND", NULL, NULL, "BIT", "AND", "ROL", NULL, "PLP", "AND", "ROL", NULL, "BIT", "AND", "ROL", NULL, "BMI", "AND", NULL, NULL, NULL, "AND", "ROL", NULL, "SEC", "AND", NULL, NULL, NULL, "AND", "ROL", NULL, "RTI", "EOR", NULL, NULL, NULL, "EOR", "LSR", NULL, "PHA", "EOR", "LSR", NULL, "JMP", "EOR", "LSR", NULL, "BVC", "EOR", NULL, NULL, NULL, "EOR", "LSR", NULL, "CLI", "EOR", NULL, NULL, NULL, "EOR", "LSR", NULL, "RTS", "ADC", "PER", NULL, NULL, "ADC", "ROR", NULL, "PLA", "ADC", "ROR", NULL, "JMP", "ADC", "ROR", NULL, "BVS", "ADC", NULL, NULL, NULL, "ADC", "ROR", NULL, "SEI", "ADC", NULL, NULL, NULL, "ADC", "ROR", NULL, NULL, "STA", NULL, NULL, "STY", "STA", "STX", NULL, "DEY", NULL, "TXA", NULL, "STY", "STA", "STX", NULL, "BCC", "STA", NULL, NULL, "STY", "STA", "STX", NULL, "TYA", "STA", "TXS", NULL, NULL, "STA", NULL, NULL, "LDY", "LDA", "LDX", NULL, "LDY", "LDA", "LDX", NULL, "TAY", "LDA", "TAX", NULL, "LDY", "LDA", "LDX", NULL, "BCS", "LDA", NULL, NULL, "LDY", "LDA", "LDX", NULL, "CLV", "LDA", "TSX", NULL, "LDY", "LDA", "LDX", NULL, "CPY", "CMP", NULL, NULL, "CPY", "CMP", "DEC", NULL, "INY", "CMP", "DEX", NULL, "CPY", "CMP", "DEC", NULL, "BNE", "CMP", NULL, NULL, NULL, "CMP", "DEC", NULL, "CLD", "CMP", NULL, NULL, NULL, "CMP", "DEC", NULL, "CPX", "SBC", NULL, NULL, "CPX", "SBC", "INC", NULL, "INX", "SBC", "NOP", NULL, "CPX", "SBC", "INC", NULL, "BEQ", "SBC", NULL, NULL, NULL, "SBC", "INC", NULL, "SED", "SBC", NULL, NULL, NULL, "SBC", "INC", NULL };