summaryrefslogtreecommitdiff
path: root/cpu.c
diff options
context:
space:
mode:
authorvin <git@vineetk.net>2024-07-20 20:27:55 -0400
committervin <git@vineetk.net>2024-07-20 20:27:55 -0400
commit70937cd61f63e159d5de226fa640d102c8fb0d14 (patch)
tree08b81c1bed085e4b8f14cb3f68e118ce620981d0 /cpu.c
parentca5a09cd94a5fc92e727cd69fb89f58760f34176 (diff)
replace tabs with spaces to better match nestest.log
Diffstat (limited to 'cpu.c')
-rw-r--r--cpu.c63
1 files changed, 43 insertions, 20 deletions
diff --git a/cpu.c b/cpu.c
index 4b55818..a4be93c 100644
--- a/cpu.c
+++ b/cpu.c
@@ -841,8 +841,8 @@ XAS(uint16_t arg)
841static void 841static void
842interpret(void) 842interpret(void)
843{ 843{
844 uint8_t op; 844 uint8_t op, spaces;
845 uint16_t arg, mem, deref; 845 uint16_t arg;
846 enum addressing_mode mode; 846 enum addressing_mode mode;
847 847
848 for (;;) { 848 for (;;) {
@@ -854,16 +854,13 @@ interpret(void)
854 for (uint8_t i = 0; i < opcodes[op].bytes - 1; i++) 854 for (uint8_t i = 0; i < opcodes[op].bytes - 1; i++)
855 printf(" %02X", peek(regs.pc + i)); 855 printf(" %02X", peek(regs.pc + i));
856 856
857 if (opcodes[op].unofficial) { 857 if (opcodes[op].bytes == 1)
858 if (opcodes[op].bytes == 1) 858 printf(" ");
859 printf(" "); 859 else if (opcodes[op].bytes == 2)
860 else if (opcodes[op].bytes == 2) 860 printf(" ");
861 printf(" "); 861 else if (opcodes[op].bytes == 3)
862 else if (opcodes[op].bytes == 3) 862 putchar(' ');
863 putchar(' '); 863 putchar((opcodes[op].unofficial) ? '*' : ' ');
864 putchar('*');
865 } else
866 putchar('\t');
867 printf("%s ", opcodes[op].name); 864 printf("%s ", opcodes[op].name);
868 865
869 mode = opcodes[op].mode; 866 mode = opcodes[op].mode;
@@ -896,27 +893,53 @@ interpret(void)
896 printf("($%04X) = %04X", arg, peek16(arg)); 893 printf("($%04X) = %04X", arg, peek16(arg));
897 break; 894 break;
898 case AM_IND_X: 895 case AM_IND_X:
899 printf("($%02X,X) @ %02X = %04X", peek(regs.pc - 1), peek(regs.pc - 1) + regs.x, arg); 896 printf("($%02X,X) @ %02X = %04X", peek(regs.pc - 1), (peek(regs.pc - 1) + regs.x) & 0xFF, arg);
900 break; 897 break;
901 case AM_IND_Y: 898 case AM_IND_Y:
902 printf("($%02X),Y = %04X @ %04X", peek(regs.pc - 1), (uint16_t)(arg - regs.y), arg); 899 printf("($%02X),Y = %04X @ %04X", peek(regs.pc - 1), (uint16_t)(arg - regs.y), arg);
903 break; 900 break;
904 case AM_ACC: 901 case AM_ACC:
905 case AM_NONE: 902 case AM_NONE:
906 putchar('\t'); 903 printf(" ");
907 break;
908 default:
909 printf("\t\t\t\t");
910 break; 904 break;
911 } 905 }
912 906
907 spaces = 9;
908
913 if (opcodes[op].memread || opcodes[op].memwrite) 909 if (opcodes[op].memread || opcodes[op].memwrite)
914 printf(" = %02X", peek(arg)); 910 printf(" = %02X", peek(arg));
911 else
912 spaces += 5;
915 913
916 if (mode != AM_IND && mode != AM_ABS_X && mode != AM_ABS_Y) 914 if (mode != AM_IND && mode != AM_ABS_X && mode != AM_ABS_Y)
917 putchar('\t'); 915 spaces += 7;
918 if (mode != AM_IND_X && mode != AM_IND_Y) 916
919 printf("\t\t"); 917 switch (opcodes[op].mode) {
918 case AM_IND_X:
919 spaces -= 12;
920 break;
921 case AM_IND_Y:
922 spaces -= 14;
923 break;
924 case AM_ZP:
925 spaces += 4;
926 break;
927 case AM_ZP_X:
928 case AM_ZP_Y:
929 case AM_REL:
930 case AM_ABS:
931 spaces += 2;
932 break;
933 case AM_IMM:
934 case AM_ACC:
935 case AM_NONE:
936 spaces += 3;
937 break;
938 default:
939 break;
940 }
941
942 while (spaces--) putchar(' ');
920 943
921 printf("A:%02X X:%02X Y:%02X P:%02X SP:%02X CYC:%d\n", 944 printf("A:%02X X:%02X Y:%02X P:%02X SP:%02X CYC:%d\n",
922 regs.a, regs.x, regs.y, STATUS_TO_INT(), regs.sp, cycles); 945 regs.a, regs.x, regs.y, STATUS_TO_INT(), regs.sp, cycles);