1.1 diff -r 4c03f6433d0d -r 3246b74d96bc src/musashi/m68kcpu.h 1.2 --- a/src/musashi/m68kcpu.h Wed Jan 16 00:41:51 2013 +0000 1.3 +++ b/src/musashi/m68kcpu.h Fri Jan 18 17:03:48 2013 +0000 1.4 @@ -1,4 +1,5 @@ 1.5 #include <stdio.h> 1.6 +#include <ctype.h> 1.7 /* ======================================================================== */ 1.8 /* ========================= LICENSING & COPYRIGHT ======================== */ 1.9 /* ======================================================================== */ 1.10 @@ -1652,6 +1653,41 @@ 1.11 INLINE void m68ki_exception_trapN(uint vector) 1.12 { 1.13 uint sr = m68ki_init_exception(); 1.14 + 1.15 +#ifdef MC68K_TRAP_SYSCALLS 1.16 + if (vector == 32) { 1.17 + printf(">>> TRAP #0 = SYSCALL #%d%s\n", REG_D[0] & 63, REG_D[0] > 63 ? "!!!" : ""); 1.18 + // d0 = syscall number 1.19 + printf("\t d0:%08X d1:%08X d2:%08X d3:%08X\n", REG_D[0], REG_D[1], REG_D[2], REG_D[3]); 1.20 + printf("\t d4:%08X d5:%08X d6:%08X d7:%08X\n", REG_D[4], REG_D[5], REG_D[6], REG_D[7]); 1.21 + printf("\t a0:%08X a1:%08X a2:%08X a3:%08X\n", REG_A[0], REG_A[1], REG_A[2], REG_A[3]); 1.22 + printf("\t a4:%08X a5:%08X a6:%08X sp:%08X\n", REG_A[4], REG_A[5], REG_A[6], REG_USP); 1.23 + printf("\t pc:%08X sr:%08X\n", REG_PC, sr); 1.24 + 1.25 + /* 1.26 + // dump stack -- but syscalls use registers to pass parameters 1.27 + for (int i=-128; i<128; i+=4) { 1.28 + printf(" sp%s%02d: %08X\n", i<0?"":"+", i, m68k_read_disassembler_32(REG_SP+i)); 1.29 + } 1.30 + */ 1.31 + for (int r=0; r<2; r++) { 1.32 + printf(" *a%d: [", r); 1.33 + if (REG_A[r] == 0x00) { 1.34 + printf("NullPointer]\n"); 1.35 + continue; 1.36 + } 1.37 + for (int i=0; i<32; i++) { 1.38 + unsigned char c = m68k_read_disassembler_8(REG_A[r]+i); 1.39 + if (isprint(c)) 1.40 + putchar(c); 1.41 + else 1.42 + putchar('.'); 1.43 + } 1.44 + printf("]\n"); 1.45 + } 1.46 + } 1.47 +#endif // MC68K_TRAP_SYSCALLS 1.48 + 1.49 m68ki_stack_frame_0000(REG_PC, sr, vector); 1.50 m68ki_jump_vector(vector); 1.51