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)
622void 622void
623STA(uint16_t mem) 623STA(uint16_t mem)
624{ 624{
625 uint8_t tmp = peek(mem);
626 memwrite(mem, regs.a); 625 memwrite(mem, regs.a);
627} 626}
628 627
629void 628void
630STX(uint16_t mem) 629STX(uint16_t mem)
631{ 630{
632 uint8_t tmp = peek(mem);
633 memwrite(mem, regs.x); 631 memwrite(mem, regs.x);
634} 632}
635 633
636void 634void
637STY(uint16_t mem) 635STY(uint16_t mem)
638{ 636{
639 uint8_t tmp = peek(mem);
640 memwrite(mem, regs.y); 637 memwrite(mem, regs.y);
641} 638}
642 639
@@ -728,13 +725,19 @@ interpret(void)
728 printf("$%04X", arg); 725 printf("$%04X", arg);
729 break; 726 break;
730 case AM_ABS_X: 727 case AM_ABS_X:
731 printf("$%04X,X @ %04X", arg - regs.x, arg); 728 printf("$%04X,X @ %04X", (uint16_t)(arg - regs.x), arg);
732 break; 729 break;
733 case AM_ABS_Y: 730 case AM_ABS_Y:
734 printf("$%04X,Y @ %04X", arg - regs.y, arg); 731 printf("$%04X,Y @ %04X", (uint16_t)(arg - regs.y), arg);
735 break; 732 break;
736 case AM_IND: 733 case AM_IND:
737 printf("($%04X) = %04X\t\t", arg, peek16(arg)); 734 printf("($%04X) = %04X", arg, peek16(arg));
735 break;
736 case AM_IND_X:
737 printf("($%02X,X) @ %02X = %04X", peek(regs.pc - 1), peek(regs.pc - 1) + regs.x, arg);
738 break;
739 case AM_IND_Y:
740 printf("($%02X),Y = %04X @ %04X", peek(regs.pc - 1), (uint16_t)(arg - regs.y), arg);
738 break; 741 break;
739 case AM_ACC: 742 case AM_ACC:
740 case AM_NONE: 743 case AM_NONE:
@@ -748,9 +751,10 @@ interpret(void)
748 if (opcodes[op].memread || opcodes[op].memwrite) 751 if (opcodes[op].memread || opcodes[op].memwrite)
749 printf(" = %02X", peek(arg)); 752 printf(" = %02X", peek(arg));
750 753
751 if (mode != AM_ABS_X && mode != AM_ABS_Y) 754 if (mode != AM_IND && mode != AM_ABS_X && mode != AM_ABS_Y)
752 putchar('\t'); 755 putchar('\t');
753 printf("\t\t"); 756 if (mode != AM_IND_X && mode != AM_IND_Y)
757 printf("\t\t");
754 758
755 printf("A:%02X X:%02X Y:%02X P:%02X SP:%02X CYC:%d\n", 759 printf("A:%02X X:%02X Y:%02X P:%02X SP:%02X CYC:%d\n",
756 regs.a, regs.x, regs.y, STATUS_TO_INT(), regs.sp, cycles); 760 regs.a, regs.x, regs.y, STATUS_TO_INT(), regs.sp, cycles);