print instructions while executing
This commit is contained in:
954
mos6502.c
954
mos6502.c
@@ -24,6 +24,8 @@ typedef struct MOS6502 {
|
||||
uint8_t P;
|
||||
} MOS6502;
|
||||
|
||||
void mos6502_disassemble_ins(MOS6502 *m);
|
||||
|
||||
MOS6502 mos6502_create(void) {
|
||||
MOS6502 m = {0};
|
||||
m.pc = 0x600;
|
||||
@@ -55,15 +57,19 @@ void mos6502_mem_write(MOS6502 *m, uint16_t addr, uint8_t v) {
|
||||
}
|
||||
|
||||
void mos6502_step(MOS6502 *m) {
|
||||
if (0) {
|
||||
printf("$%04X: ", m->pc);
|
||||
uint16_t old_pc = m->pc;
|
||||
mos6502_disassemble_ins(m);
|
||||
m->pc = old_pc;
|
||||
printf("\tA: %02X X: %02X Y: %02X\n", m->A, m->X, m->Y);
|
||||
}
|
||||
|
||||
uint8_t op = READ_U8();
|
||||
|
||||
// printf("$%04X: %02X A: %02X X: %02X Y: %02X\n", m->pc - 1, op, m->A,
|
||||
// m->X, m->Y);
|
||||
|
||||
switch (op) {
|
||||
case 0x00: {
|
||||
// TODO: its supposed to do some interrupt magic
|
||||
m->pc--;
|
||||
exit(0);
|
||||
} break;
|
||||
case 0x09: {
|
||||
m->A |= READ_U8();
|
||||
@@ -260,476 +266,480 @@ void mos6502_step(MOS6502 *m) {
|
||||
}
|
||||
}
|
||||
|
||||
void mos6502_disassemble_ins(MOS6502 *m) {
|
||||
uint8_t op = READ_U8();
|
||||
switch (op) {
|
||||
case 0x00: {
|
||||
printf("BRK\t");
|
||||
} break;
|
||||
case 0x01: {
|
||||
printf("ORA ($%02X,X)", READ_U8());
|
||||
} break;
|
||||
case 0x05: {
|
||||
printf("ORA $%02X", READ_U8());
|
||||
} break;
|
||||
case 0x06: {
|
||||
printf("ASL $%02X", READ_U8());
|
||||
} break;
|
||||
case 0x08: {
|
||||
printf("PHP\t");
|
||||
} break;
|
||||
case 0x09: {
|
||||
printf("ORA #$%02X\t", READ_U8());
|
||||
} break;
|
||||
case 0x0A: {
|
||||
printf("ASL A");
|
||||
} break;
|
||||
case 0x0D: {
|
||||
printf("ORA $%04X", READ_U16());
|
||||
} break;
|
||||
case 0x0E: {
|
||||
printf("ASL $%04X", READ_U16());
|
||||
} break;
|
||||
case 0x10: {
|
||||
int8_t offset = READ_U8();
|
||||
printf("BPL $%04X", m->pc + offset);
|
||||
} break;
|
||||
case 0x11: {
|
||||
printf("ORA ($%02X),Y", READ_U8());
|
||||
} break;
|
||||
case 0x15: {
|
||||
printf("ORA $%02X,X", READ_U8());
|
||||
} break;
|
||||
case 0x16: {
|
||||
printf("ASL $%02X,X", READ_U8());
|
||||
} break;
|
||||
case 0x18: {
|
||||
printf("CLC\t");
|
||||
} break;
|
||||
case 0x19: {
|
||||
printf("ORA $%04X,Y", READ_U16());
|
||||
} break;
|
||||
case 0x1D: {
|
||||
printf("ORA $%04X,X", READ_U16());
|
||||
} break;
|
||||
case 0x1E: {
|
||||
printf("ASL $%04X,X", READ_U16());
|
||||
} break;
|
||||
case 0x20: {
|
||||
printf("JSR $%04X", READ_U16());
|
||||
} break;
|
||||
case 0x21: {
|
||||
printf("AND ($%02X,X)", READ_U8());
|
||||
} break;
|
||||
case 0x24: {
|
||||
printf("BIT $%02X", READ_U8());
|
||||
} break;
|
||||
case 0x25: {
|
||||
printf("AND $%02X", READ_U8());
|
||||
} break;
|
||||
case 0x26: {
|
||||
printf("ROL $%02X", READ_U8());
|
||||
} break;
|
||||
case 0x28: {
|
||||
printf("PLP\t");
|
||||
} break;
|
||||
case 0x29: {
|
||||
printf("AND #$%02X\t", READ_U8());
|
||||
} break;
|
||||
case 0x2A: {
|
||||
printf("ROL A");
|
||||
} break;
|
||||
case 0x2C: {
|
||||
printf("BIT $%04X", READ_U16());
|
||||
} break;
|
||||
case 0x2D: {
|
||||
printf("AND $%04X", READ_U16());
|
||||
} break;
|
||||
case 0x2E: {
|
||||
printf("ROL $%04X", READ_U16());
|
||||
} break;
|
||||
case 0x30: {
|
||||
int8_t offset = READ_U8();
|
||||
printf("BMI $%04X", m->pc + offset);
|
||||
} break;
|
||||
case 0x31: {
|
||||
printf("AND ($%02X),Y", READ_U8());
|
||||
} break;
|
||||
case 0x35: {
|
||||
printf("AND $%02X,X", READ_U8());
|
||||
} break;
|
||||
case 0x36: {
|
||||
printf("ROL $%02X,X", READ_U8());
|
||||
} break;
|
||||
case 0x38: {
|
||||
printf("SEC\t");
|
||||
} break;
|
||||
case 0x39: {
|
||||
printf("AND $%04X,Y", READ_U16());
|
||||
} break;
|
||||
case 0x3D: {
|
||||
printf("AND $%04X,X", READ_U16());
|
||||
} break;
|
||||
case 0x3E: {
|
||||
printf("ROL $%04X,X", READ_U16());
|
||||
} break;
|
||||
case 0x40: {
|
||||
printf("RTI\t");
|
||||
} break;
|
||||
case 0x41: {
|
||||
printf("EOR ($%02X,X)", READ_U8());
|
||||
} break;
|
||||
case 0x45: {
|
||||
printf("EOR $%02X", READ_U8());
|
||||
} break;
|
||||
case 0x46: {
|
||||
printf("LSR $%02X", READ_U8());
|
||||
} break;
|
||||
case 0x48: {
|
||||
printf("PHA\t");
|
||||
} break;
|
||||
case 0x49: {
|
||||
printf("EOR #$%02X\t", READ_U8());
|
||||
} break;
|
||||
case 0x4A: {
|
||||
printf("LSR A\t");
|
||||
} break;
|
||||
case 0x4C: {
|
||||
printf("JMP $%04X", READ_U16());
|
||||
} break;
|
||||
case 0x4D: {
|
||||
printf("EOR $%04X", READ_U16());
|
||||
} break;
|
||||
case 0x4E: {
|
||||
printf("LSR $%04X", READ_U16());
|
||||
} break;
|
||||
case 0x50: {
|
||||
int8_t offset = READ_U8();
|
||||
printf("BVC $%04X", m->pc + offset);
|
||||
} break;
|
||||
case 0x51: {
|
||||
printf("EOR ($%02X),Y", READ_U8());
|
||||
} break;
|
||||
case 0x55: {
|
||||
printf("EOR $%02X,X", READ_U8());
|
||||
} break;
|
||||
case 0x56: {
|
||||
printf("LSR $%02X,X", READ_U8());
|
||||
} break;
|
||||
case 0x58: {
|
||||
printf("CLI\t");
|
||||
} break;
|
||||
case 0x59: {
|
||||
printf("EOR $%04X,Y", READ_U16());
|
||||
} break;
|
||||
case 0x5D: {
|
||||
printf("EOR $%04X,X", READ_U16());
|
||||
} break;
|
||||
case 0x5E: {
|
||||
printf("LSR $%04X,X", READ_U16());
|
||||
} break;
|
||||
case 0x60: {
|
||||
printf("RTS\t");
|
||||
} break;
|
||||
case 0x61: {
|
||||
printf("ADC ($%02X,X)", READ_U8());
|
||||
} break;
|
||||
case 0x65: {
|
||||
printf("ADC $%02X", READ_U8());
|
||||
} break;
|
||||
case 0x66: {
|
||||
printf("ROR $%02X", READ_U8());
|
||||
} break;
|
||||
case 0x68: {
|
||||
printf("PLA\t");
|
||||
} break;
|
||||
case 0x69: {
|
||||
printf("ADC #$%02X\t", READ_U8());
|
||||
} break;
|
||||
case 0x6A: {
|
||||
printf("ROR A");
|
||||
} break;
|
||||
case 0x6C: {
|
||||
printf("JMP ($%04X)", READ_U16());
|
||||
} break;
|
||||
case 0x6D: {
|
||||
printf("ADC $%04X", READ_U16());
|
||||
} break;
|
||||
case 0x6E: {
|
||||
printf("ROR $%04X", READ_U16());
|
||||
} break;
|
||||
case 0x70: {
|
||||
int8_t offset = READ_U8();
|
||||
printf("BVS $%04X", m->pc + offset);
|
||||
} break;
|
||||
case 0x71: {
|
||||
printf("ADC ($%02X),Y", READ_U8());
|
||||
} break;
|
||||
case 0x75: {
|
||||
printf("ADC $%02X,X", READ_U8());
|
||||
} break;
|
||||
case 0x76: {
|
||||
printf("ROR $%02X,X", READ_U8());
|
||||
} break;
|
||||
case 0x78: {
|
||||
printf("SEI\t");
|
||||
} break;
|
||||
case 0x79: {
|
||||
printf("ADC $%04X,Y", READ_U16());
|
||||
} break;
|
||||
case 0x7D: {
|
||||
printf("ADC $%04X,X", READ_U16());
|
||||
} break;
|
||||
case 0x7E: {
|
||||
printf("ROR $%04X,X", READ_U16());
|
||||
} break;
|
||||
case 0x81: {
|
||||
printf("STA ($%02X,X)", READ_U8());
|
||||
} break;
|
||||
case 0x84: {
|
||||
printf("STY $%02X", READ_U8());
|
||||
} break;
|
||||
case 0x85: {
|
||||
printf("STA $%02X", READ_U8());
|
||||
} break;
|
||||
case 0x86: {
|
||||
printf("STX $%02X", READ_U8());
|
||||
} break;
|
||||
case 0x88: {
|
||||
printf("DEY\t");
|
||||
} break;
|
||||
case 0x8A: {
|
||||
printf("TXA\t");
|
||||
} break;
|
||||
case 0x8C: {
|
||||
printf("STY $%04X", READ_U16());
|
||||
} break;
|
||||
case 0x8D: {
|
||||
printf("STA $%04X", READ_U16());
|
||||
} break;
|
||||
case 0x8E: {
|
||||
printf("STX $%04X", READ_U16());
|
||||
} break;
|
||||
case 0x90: {
|
||||
int8_t offset = READ_U8();
|
||||
printf("BCC $%04X", m->pc + offset);
|
||||
} break;
|
||||
case 0x91: {
|
||||
printf("STA ($%02X),Y", READ_U8());
|
||||
} break;
|
||||
case 0x94: {
|
||||
printf("STY $%02X,X", READ_U8());
|
||||
} break;
|
||||
case 0x95: {
|
||||
printf("STA $%02X,X", READ_U8());
|
||||
} break;
|
||||
case 0x96: {
|
||||
printf("STX $%02X,Y", READ_U8());
|
||||
} break;
|
||||
case 0x98: {
|
||||
printf("TYA\t");
|
||||
} break;
|
||||
case 0x99: {
|
||||
printf("STA $%04X,Y", READ_U16());
|
||||
} break;
|
||||
case 0x9A: {
|
||||
printf("TXS\t");
|
||||
} break;
|
||||
case 0x9D: {
|
||||
printf("STA $%04X,X", READ_U16());
|
||||
} break;
|
||||
case 0xA0: {
|
||||
printf("LDY #$%02X\t", READ_U8());
|
||||
} break;
|
||||
case 0xA1: {
|
||||
printf("LDA ($%02X,X)", READ_U8());
|
||||
} break;
|
||||
case 0xA2: {
|
||||
printf("LDX #$%02X\t", READ_U8());
|
||||
} break;
|
||||
case 0xA4: {
|
||||
printf("LDY $%02X", READ_U8());
|
||||
} break;
|
||||
case 0xA5: {
|
||||
printf("LDA $%02X", READ_U8());
|
||||
} break;
|
||||
case 0xA6: {
|
||||
printf("LDX $%02X", READ_U8());
|
||||
} break;
|
||||
case 0xA8: {
|
||||
printf("TAY\t");
|
||||
} break;
|
||||
case 0xA9: {
|
||||
printf("LDA #$%02X\t", READ_U8());
|
||||
} break;
|
||||
case 0xAA: {
|
||||
printf("TAX\t");
|
||||
} break;
|
||||
case 0xAC: {
|
||||
printf("LDY $%04X", READ_U16());
|
||||
} break;
|
||||
case 0xAD: {
|
||||
printf("LDA $%04X", READ_U16());
|
||||
} break;
|
||||
case 0xAE: {
|
||||
printf("LDX $%04X", READ_U16());
|
||||
} break;
|
||||
case 0xB0: {
|
||||
int8_t offset = READ_U8();
|
||||
printf("BCS $%04X", m->pc + offset);
|
||||
} break;
|
||||
case 0xB1: {
|
||||
printf("LDA ($%02X),Y", READ_U8());
|
||||
} break;
|
||||
case 0xB4: {
|
||||
printf("LDY $%02X,X", READ_U8());
|
||||
} break;
|
||||
case 0xB5: {
|
||||
printf("LDA $%02X,X", READ_U8());
|
||||
} break;
|
||||
case 0xB6: {
|
||||
printf("LDX $%02X,Y", READ_U8());
|
||||
} break;
|
||||
case 0xB8: {
|
||||
printf("CLV\t");
|
||||
} break;
|
||||
case 0xB9: {
|
||||
printf("LDA $%04X,Y", READ_U16());
|
||||
} break;
|
||||
case 0xBA: {
|
||||
printf("TSX\t");
|
||||
} break;
|
||||
case 0xBC: {
|
||||
printf("LDY $%04X,X", READ_U16());
|
||||
} break;
|
||||
case 0xBD: {
|
||||
printf("LDA $%04X,X", READ_U16());
|
||||
} break;
|
||||
case 0xBE: {
|
||||
printf("LDX $%04X,Y", READ_U16());
|
||||
} break;
|
||||
case 0xC0: {
|
||||
printf("CPY #$%02X", READ_U8());
|
||||
} break;
|
||||
case 0xC1: {
|
||||
printf("CMP ($%02X,X)", READ_U8());
|
||||
} break;
|
||||
case 0xC4: {
|
||||
printf("CPY $%02X", READ_U8());
|
||||
} break;
|
||||
case 0xC5: {
|
||||
printf("CMP $%02X", READ_U8());
|
||||
} break;
|
||||
case 0xC6: {
|
||||
printf("DEC $%02X", READ_U8());
|
||||
} break;
|
||||
case 0xC8: {
|
||||
printf("INY\t");
|
||||
} break;
|
||||
case 0xC9: {
|
||||
printf("CMP #$%02X\t", READ_U8());
|
||||
} break;
|
||||
case 0xCA: {
|
||||
printf("DEX\t");
|
||||
} break;
|
||||
case 0xCC: {
|
||||
printf("CPY $%04X", READ_U16());
|
||||
} break;
|
||||
case 0xCD: {
|
||||
printf("CMP $%04X", READ_U16());
|
||||
} break;
|
||||
case 0xCE: {
|
||||
printf("DEC $%04X", READ_U16());
|
||||
} break;
|
||||
case 0xD0: {
|
||||
int8_t offset = READ_U8();
|
||||
printf("BNE $%04X", m->pc + offset);
|
||||
} break;
|
||||
case 0xD1: {
|
||||
printf("CMP ($%02X),Y", READ_U8());
|
||||
} break;
|
||||
case 0xD5: {
|
||||
printf("CMP $%02X,X", READ_U8());
|
||||
} break;
|
||||
case 0xD6: {
|
||||
printf("DEC $%02X,X", READ_U8());
|
||||
} break;
|
||||
case 0xD8: {
|
||||
printf("CLD\t");
|
||||
} break;
|
||||
case 0xD9: {
|
||||
printf("CMP $%04X,Y", READ_U16());
|
||||
} break;
|
||||
case 0xDD: {
|
||||
printf("CMP $%04X,X", READ_U16());
|
||||
} break;
|
||||
case 0xDE: {
|
||||
printf("DEC $%04X,X", READ_U16());
|
||||
} break;
|
||||
case 0xE0: {
|
||||
printf("CPX #$%02X", READ_U8());
|
||||
} break;
|
||||
case 0xE1: {
|
||||
printf("SBC ($%02X,X)", READ_U8());
|
||||
} break;
|
||||
case 0xE4: {
|
||||
printf("CPX $%02X", READ_U8());
|
||||
} break;
|
||||
case 0xE5: {
|
||||
printf("SBC $%02X", READ_U8());
|
||||
} break;
|
||||
case 0xE6: {
|
||||
printf("INC $%02X", READ_U8());
|
||||
} break;
|
||||
case 0xE8: {
|
||||
printf("INX\t");
|
||||
} break;
|
||||
case 0xE9: {
|
||||
printf("SBC #$%02X\t", READ_U8());
|
||||
} break;
|
||||
case 0xEA: {
|
||||
printf("NOP\t");
|
||||
} break;
|
||||
case 0xEC: {
|
||||
printf("CPX $%04X", READ_U16());
|
||||
} break;
|
||||
case 0xED: {
|
||||
printf("SBC $%04X", READ_U16());
|
||||
} break;
|
||||
case 0xEE: {
|
||||
printf("INC $%04X", READ_U16());
|
||||
} break;
|
||||
case 0xF0: {
|
||||
int8_t offset = READ_U8();
|
||||
printf("BEQ $%04X", m->pc + offset);
|
||||
} break;
|
||||
case 0xF1: {
|
||||
printf("SBC ($%02X),Y", READ_U8());
|
||||
} break;
|
||||
case 0xF5: {
|
||||
printf("SBC $%02X,X", READ_U8());
|
||||
} break;
|
||||
case 0xF6: {
|
||||
printf("INC $%02X,X", READ_U8());
|
||||
} break;
|
||||
case 0xF8: {
|
||||
printf("SED\t");
|
||||
} break;
|
||||
case 0xF9: {
|
||||
printf("SBC $%04X,Y", READ_U16());
|
||||
} break;
|
||||
case 0xFD: {
|
||||
printf("SBC $%04X,X", READ_U16());
|
||||
} break;
|
||||
case 0xFE: {
|
||||
printf("INC $%04X,X", READ_U16());
|
||||
} break;
|
||||
default:
|
||||
printf("???\t");
|
||||
}
|
||||
}
|
||||
|
||||
void mos6502_disassemble(MOS6502 *m, size_t program_size) {
|
||||
while (m->pc < 0x600 + program_size) {
|
||||
printf("$%04X: ", m->pc);
|
||||
|
||||
uint8_t op = READ_U8();
|
||||
switch (op) {
|
||||
case 0x00: {
|
||||
printf("BRK\n");
|
||||
} break;
|
||||
case 0x01: {
|
||||
printf("ORA ($%02X,X)\n", READ_U8());
|
||||
} break;
|
||||
case 0x05: {
|
||||
printf("ORA $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0x06: {
|
||||
printf("ASL $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0x08: {
|
||||
printf("PHP\n");
|
||||
} break;
|
||||
case 0x09: {
|
||||
printf("ORA #$%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0x0A: {
|
||||
printf("ASL A\n");
|
||||
} break;
|
||||
case 0x0D: {
|
||||
printf("ORA $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0x0E: {
|
||||
printf("ASL $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0x10: {
|
||||
int8_t offset = READ_U8();
|
||||
printf("BPL $%04X\n", m->pc + offset);
|
||||
} break;
|
||||
case 0x11: {
|
||||
printf("ORA ($%02X),Y\n", READ_U8());
|
||||
} break;
|
||||
case 0x15: {
|
||||
printf("ORA $%02X,X\n", READ_U8());
|
||||
} break;
|
||||
case 0x16: {
|
||||
printf("ASL $%02X,X\n", READ_U8());
|
||||
} break;
|
||||
case 0x18: {
|
||||
printf("CLC\n");
|
||||
} break;
|
||||
case 0x19: {
|
||||
printf("ORA $%04X,Y\n", READ_U16());
|
||||
} break;
|
||||
case 0x1D: {
|
||||
printf("ORA $%04X,X\n", READ_U16());
|
||||
} break;
|
||||
case 0x1E: {
|
||||
printf("ASL $%04X,X\n", READ_U16());
|
||||
} break;
|
||||
case 0x20: {
|
||||
printf("JSR $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0x21: {
|
||||
printf("AND ($%02X,X)\n", READ_U8());
|
||||
} break;
|
||||
case 0x24: {
|
||||
printf("BIT $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0x25: {
|
||||
printf("AND $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0x26: {
|
||||
printf("ROL $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0x28: {
|
||||
printf("PLP\n");
|
||||
} break;
|
||||
case 0x29: {
|
||||
printf("AND #$%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0x2A: {
|
||||
printf("ROL A\n");
|
||||
} break;
|
||||
case 0x2C: {
|
||||
printf("BIT $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0x2D: {
|
||||
printf("AND $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0x2E: {
|
||||
printf("ROL $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0x30: {
|
||||
int8_t offset = READ_U8();
|
||||
printf("BMI $%04X\n", m->pc + offset);
|
||||
} break;
|
||||
case 0x31: {
|
||||
printf("AND ($%02X),Y\n", READ_U8());
|
||||
} break;
|
||||
case 0x35: {
|
||||
printf("AND $%02X,X\n", READ_U8());
|
||||
} break;
|
||||
case 0x36: {
|
||||
printf("ROL $%02X,X\n", READ_U8());
|
||||
} break;
|
||||
case 0x38: {
|
||||
printf("SEC\n");
|
||||
} break;
|
||||
case 0x39: {
|
||||
printf("AND $%04X,Y\n", READ_U16());
|
||||
} break;
|
||||
case 0x3D: {
|
||||
printf("AND $%04X,X\n", READ_U16());
|
||||
} break;
|
||||
case 0x3E: {
|
||||
printf("ROL $%04X,X\n", READ_U16());
|
||||
} break;
|
||||
case 0x40: {
|
||||
printf("RTI\n");
|
||||
} break;
|
||||
case 0x41: {
|
||||
printf("EOR ($%02X,X)\n", READ_U8());
|
||||
} break;
|
||||
case 0x45: {
|
||||
printf("EOR $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0x46: {
|
||||
printf("LSR $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0x48: {
|
||||
printf("PHA\n");
|
||||
} break;
|
||||
case 0x49: {
|
||||
printf("EOR #$%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0x4A: {
|
||||
printf("LSR A\n");
|
||||
} break;
|
||||
case 0x4C: {
|
||||
printf("JMP $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0x4D: {
|
||||
printf("EOR $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0x4E: {
|
||||
printf("LSR $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0x50: {
|
||||
int8_t offset = READ_U8();
|
||||
printf("BVC $%04X\n", m->pc + offset);
|
||||
} break;
|
||||
case 0x51: {
|
||||
printf("EOR ($%02X),Y\n", READ_U8());
|
||||
} break;
|
||||
case 0x55: {
|
||||
printf("EOR $%02X,X\n", READ_U8());
|
||||
} break;
|
||||
case 0x56: {
|
||||
printf("LSR $%02X,X\n", READ_U8());
|
||||
} break;
|
||||
case 0x58: {
|
||||
printf("CLI\n");
|
||||
} break;
|
||||
case 0x59: {
|
||||
printf("EOR $%04X,Y\n", READ_U16());
|
||||
} break;
|
||||
case 0x5D: {
|
||||
printf("EOR $%04X,X\n", READ_U16());
|
||||
} break;
|
||||
case 0x5E: {
|
||||
printf("LSR $%04X,X\n", READ_U16());
|
||||
} break;
|
||||
case 0x60: {
|
||||
printf("RTS\n");
|
||||
} break;
|
||||
case 0x61: {
|
||||
printf("ADC ($%02X,X)\n", READ_U8());
|
||||
} break;
|
||||
case 0x65: {
|
||||
printf("ADC $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0x66: {
|
||||
printf("ROR $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0x68: {
|
||||
printf("PLA\n");
|
||||
} break;
|
||||
case 0x69: {
|
||||
printf("ADC #$%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0x6A: {
|
||||
printf("ROR A\n");
|
||||
} break;
|
||||
case 0x6C: {
|
||||
printf("JMP ($%04X)\n", READ_U16());
|
||||
} break;
|
||||
case 0x6D: {
|
||||
printf("ADC $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0x6E: {
|
||||
printf("ROR $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0x70: {
|
||||
int8_t offset = READ_U8();
|
||||
printf("BVS $%04X\n", m->pc + offset);
|
||||
} break;
|
||||
case 0x71: {
|
||||
printf("ADC ($%02X),Y\n", READ_U8());
|
||||
} break;
|
||||
case 0x75: {
|
||||
printf("ADC $%02X,X\n", READ_U8());
|
||||
} break;
|
||||
case 0x76: {
|
||||
printf("ROR $%02X,X\n", READ_U8());
|
||||
} break;
|
||||
case 0x78: {
|
||||
printf("SEI\n");
|
||||
} break;
|
||||
case 0x79: {
|
||||
printf("ADC $%04X,Y\n", READ_U16());
|
||||
} break;
|
||||
case 0x7D: {
|
||||
printf("ADC $%04X,X\n", READ_U16());
|
||||
} break;
|
||||
case 0x7E: {
|
||||
printf("ROR $%04X,X\n", READ_U16());
|
||||
} break;
|
||||
case 0x81: {
|
||||
printf("STA ($%02X,X)\n", READ_U8());
|
||||
} break;
|
||||
case 0x84: {
|
||||
printf("STY $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0x85: {
|
||||
printf("STA $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0x86: {
|
||||
printf("STX $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0x88: {
|
||||
printf("DEY\n");
|
||||
} break;
|
||||
case 0x8A: {
|
||||
printf("TXA\n");
|
||||
} break;
|
||||
case 0x8C: {
|
||||
printf("STY $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0x8D: {
|
||||
printf("STA $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0x8E: {
|
||||
printf("STX $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0x90: {
|
||||
int8_t offset = READ_U8();
|
||||
printf("BCC $%04X\n", m->pc + offset);
|
||||
} break;
|
||||
case 0x91: {
|
||||
printf("STA ($%02X),Y\n", READ_U8());
|
||||
} break;
|
||||
case 0x94: {
|
||||
printf("STY $%02X,X\n", READ_U8());
|
||||
} break;
|
||||
case 0x95: {
|
||||
printf("STA $%02X,X\n", READ_U8());
|
||||
} break;
|
||||
case 0x96: {
|
||||
printf("STX $%02X,Y\n", READ_U8());
|
||||
} break;
|
||||
case 0x98: {
|
||||
printf("TYA\n");
|
||||
} break;
|
||||
case 0x99: {
|
||||
printf("STA $%04X,Y\n", READ_U16());
|
||||
} break;
|
||||
case 0x9A: {
|
||||
printf("TXS\n");
|
||||
} break;
|
||||
case 0x9D: {
|
||||
printf("STA $%04X,X\n", READ_U16());
|
||||
} break;
|
||||
case 0xA0: {
|
||||
printf("LDY #$%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0xA1: {
|
||||
printf("LDA ($%02X,X)\n", READ_U8());
|
||||
} break;
|
||||
case 0xA2: {
|
||||
printf("LDX #$%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0xA4: {
|
||||
printf("LDY $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0xA5: {
|
||||
printf("LDA $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0xA6: {
|
||||
printf("LDX $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0xA8: {
|
||||
printf("TAY\n");
|
||||
} break;
|
||||
case 0xA9: {
|
||||
printf("LDA #$%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0xAA: {
|
||||
printf("TAX\n");
|
||||
} break;
|
||||
case 0xAC: {
|
||||
printf("LDY $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0xAD: {
|
||||
printf("LDA $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0xAE: {
|
||||
printf("LDX $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0xB0: {
|
||||
int8_t offset = READ_U8();
|
||||
printf("BCS $%04X\n", m->pc + offset);
|
||||
} break;
|
||||
case 0xB1: {
|
||||
printf("LDA ($%02X),Y\n", READ_U8());
|
||||
} break;
|
||||
case 0xB4: {
|
||||
printf("LDY $%02X,X\n", READ_U8());
|
||||
} break;
|
||||
case 0xB5: {
|
||||
printf("LDA $%02X,X\n", READ_U8());
|
||||
} break;
|
||||
case 0xB6: {
|
||||
printf("LDX $%02X,Y\n", READ_U8());
|
||||
} break;
|
||||
case 0xB8: {
|
||||
printf("CLV\n");
|
||||
} break;
|
||||
case 0xB9: {
|
||||
printf("LDA $%04X,Y\n", READ_U16());
|
||||
} break;
|
||||
case 0xBA: {
|
||||
printf("TSX\n");
|
||||
} break;
|
||||
case 0xBC: {
|
||||
printf("LDY $%04X,X\n", READ_U16());
|
||||
} break;
|
||||
case 0xBD: {
|
||||
printf("LDA $%04X,X\n", READ_U16());
|
||||
} break;
|
||||
case 0xBE: {
|
||||
printf("LDX $%04X,Y\n", READ_U16());
|
||||
} break;
|
||||
case 0xC0: {
|
||||
printf("CPY #$%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0xC1: {
|
||||
printf("CMP ($%02X,X)\n", READ_U8());
|
||||
} break;
|
||||
case 0xC4: {
|
||||
printf("CPY $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0xC5: {
|
||||
printf("CMP $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0xC6: {
|
||||
printf("DEC $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0xC8: {
|
||||
printf("INY\n");
|
||||
} break;
|
||||
case 0xC9: {
|
||||
printf("CMP #$%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0xCA: {
|
||||
printf("DEX\n");
|
||||
} break;
|
||||
case 0xCC: {
|
||||
printf("CPY $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0xCD: {
|
||||
printf("CMP $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0xCE: {
|
||||
printf("DEC $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0xD0: {
|
||||
int8_t offset = READ_U8();
|
||||
printf("BNE $%04X\n", m->pc + offset);
|
||||
} break;
|
||||
case 0xD1: {
|
||||
printf("CMP ($%02X),Y\n", READ_U8());
|
||||
} break;
|
||||
case 0xD5: {
|
||||
printf("CMP $%02X,X\n", READ_U8());
|
||||
} break;
|
||||
case 0xD6: {
|
||||
printf("DEC $%02X,X\n", READ_U8());
|
||||
} break;
|
||||
case 0xD8: {
|
||||
printf("CLD\n");
|
||||
} break;
|
||||
case 0xD9: {
|
||||
printf("CMP $%04X,Y\n", READ_U16());
|
||||
} break;
|
||||
case 0xDD: {
|
||||
printf("CMP $%04X,X\n", READ_U16());
|
||||
} break;
|
||||
case 0xDE: {
|
||||
printf("DEC $%04X,X\n", READ_U16());
|
||||
} break;
|
||||
case 0xE0: {
|
||||
printf("CPX #$%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0xE1: {
|
||||
printf("SBC ($%02X,X)\n", READ_U8());
|
||||
} break;
|
||||
case 0xE4: {
|
||||
printf("CPX $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0xE5: {
|
||||
printf("SBC $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0xE6: {
|
||||
printf("INC $%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0xE8: {
|
||||
printf("INX\n");
|
||||
} break;
|
||||
case 0xE9: {
|
||||
printf("SBC #$%02X\n", READ_U8());
|
||||
} break;
|
||||
case 0xEA: {
|
||||
printf("NOP\n");
|
||||
} break;
|
||||
case 0xEC: {
|
||||
printf("CPX $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0xED: {
|
||||
printf("SBC $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0xEE: {
|
||||
printf("INC $%04X\n", READ_U16());
|
||||
} break;
|
||||
case 0xF0: {
|
||||
int8_t offset = READ_U8();
|
||||
printf("BEQ $%04X\n", m->pc + offset);
|
||||
} break;
|
||||
case 0xF1: {
|
||||
printf("SBC ($%02X),Y\n", READ_U8());
|
||||
} break;
|
||||
case 0xF5: {
|
||||
printf("SBC $%02X,X\n", READ_U8());
|
||||
} break;
|
||||
case 0xF6: {
|
||||
printf("INC $%02X,X\n", READ_U8());
|
||||
} break;
|
||||
case 0xF8: {
|
||||
printf("SED\n");
|
||||
} break;
|
||||
case 0xF9: {
|
||||
printf("SBC $%04X,Y\n", READ_U16());
|
||||
} break;
|
||||
case 0xFD: {
|
||||
printf("SBC $%04X,X\n", READ_U16());
|
||||
} break;
|
||||
case 0xFE: {
|
||||
printf("INC $%04X,X\n", READ_U16());
|
||||
} break;
|
||||
default:
|
||||
printf("???\n");
|
||||
}
|
||||
mos6502_disassemble_ins(m);
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user