diff options
author | vin <git@vineetk.net> | 2024-07-03 21:02:34 -0400 |
---|---|---|
committer | vin <git@vineetk.net> | 2024-07-03 21:49:27 -0400 |
commit | d57acb77c7d617fbfe4e0c2fb6d19e1b60723a97 (patch) | |
tree | 547290156af8388d263ae37ed815a9fe914a4768 /cpu.c | |
parent | 4fcc8d48f4dd3f7be37d917826a148c02701d0e3 (diff) |
finalize trace logging to match nestest.log minus PPU cycles
Diffstat (limited to 'cpu.c')
-rw-r--r-- | cpu.c | 20 |
1 files changed, 12 insertions, 8 deletions
@@ -622,21 +622,18 @@ SEI(uint16_t arg) void STA(uint16_t mem) { - uint8_t tmp = peek(mem); memwrite(mem, regs.a); } void STX(uint16_t mem) { - uint8_t tmp = peek(mem); memwrite(mem, regs.x); } void STY(uint16_t mem) { - uint8_t tmp = peek(mem); memwrite(mem, regs.y); } @@ -728,13 +725,19 @@ interpret(void) printf("$%04X", arg); break; case AM_ABS_X: - printf("$%04X,X @ %04X", arg - regs.x, arg); + printf("$%04X,X @ %04X", (uint16_t)(arg - regs.x), arg); break; case AM_ABS_Y: - printf("$%04X,Y @ %04X", arg - regs.y, arg); + printf("$%04X,Y @ %04X", (uint16_t)(arg - regs.y), arg); break; case AM_IND: - printf("($%04X) = %04X\t\t", arg, peek16(arg)); + printf("($%04X) = %04X", arg, peek16(arg)); + break; + case AM_IND_X: + printf("($%02X,X) @ %02X = %04X", peek(regs.pc - 1), peek(regs.pc - 1) + regs.x, arg); + break; + case AM_IND_Y: + printf("($%02X),Y = %04X @ %04X", peek(regs.pc - 1), (uint16_t)(arg - regs.y), arg); break; case AM_ACC: case AM_NONE: @@ -748,9 +751,10 @@ interpret(void) if (opcodes[op].memread || opcodes[op].memwrite) printf(" = %02X", peek(arg)); - if (mode != AM_ABS_X && mode != AM_ABS_Y) + if (mode != AM_IND && mode != AM_ABS_X && mode != AM_ABS_Y) putchar('\t'); - printf("\t\t"); + if (mode != AM_IND_X && mode != AM_IND_Y) + printf("\t\t"); printf("A:%02X X:%02X Y:%02X P:%02X SP:%02X CYC:%d\n", regs.a, regs.x, regs.y, STATUS_TO_INT(), regs.sp, cycles); |