summaryrefslogtreecommitdiff
path: root/cpu.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpu.c')
-rw-r--r--cpu.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/cpu.c b/cpu.c
index bba0ed5..31f4be2 100644
--- a/cpu.c
+++ b/cpu.c
@@ -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);