]> Shamusworld >> Repos - virtualjaguar/blobdiff - src/jaguar.cpp
Fix to M68K core vs. DSP thread sync problem.
[virtualjaguar] / src / jaguar.cpp
index e868b32e59ca13b367ab207f297e0cf713fc6a8a..5f23f1b4da8306ef7c3351baa079e2d3d27e26ad 100644 (file)
 //Do this in makefile??? Yes! Could, but it's easier to define here...
 //#define LOG_UNMAPPED_MEMORY_ACCESSES
 //#define ABORT_ON_UNMAPPED_MEMORY_ACCESS
-#define ABORT_ON_ILLEGAL_INSTRUCTIONS
+//#define ABORT_ON_ILLEGAL_INSTRUCTIONS
 //#define ABORT_ON_OFFICIAL_ILLEGAL_INSTRUCTION
 #define CPU_DEBUG_MEMORY
 //#define LOG_CD_BIOS_CALLS
+#define CPU_DEBUG_TRACING
 
 // Private function prototypes
 
@@ -78,6 +79,7 @@ uint32 returnAddr[4000], raPtr = 0xFFFFFFFF;
 
 uint32 pcQueue[0x400];
 uint32 pcQPtr = 0;
+bool startM68KTracing = false;
 
 //
 // Callback function to detect illegal instructions
@@ -121,6 +123,17 @@ if (inRoutine)
        instSeen++;
 #endif
 
+// For code tracing...
+#ifdef CPU_DEBUG_TRACING
+       if (startM68KTracing)
+       {
+               static char buffer[2048];
+
+               m68k_disassemble(buffer, m68kPC, 0);
+               WriteLog("%06X: %s\n", m68kPC, buffer);
+       }
+#endif
+
 // For tracebacks...
 // Ideally, we'd save all the registers as well...
        pcQueue[pcQPtr++] = m68kPC;
@@ -270,7 +283,7 @@ if (m68kPC == 0x802058) start = true;
                        m68k_get_reg(NULL, M68K_REG_A0), m68k_get_reg(NULL, M68K_REG_A1),
                        m68k_get_reg(NULL, M68K_REG_D0), m68k_get_reg(NULL, M68K_REG_D1), m68k_get_reg(NULL, M68K_REG_D2));
        }//*/
-       if (m68kPC == 0x82E1A)
+/*     if (m68kPC == 0x82E1A)
        {
                static char buffer[2048];
                m68k_disassemble(buffer, m68kPC, 0);//M68K_CPU_TYPE_68000);
@@ -279,7 +292,7 @@ if (m68kPC == 0x802058) start = true;
                        m68k_get_reg(NULL, M68K_REG_A0), m68k_get_reg(NULL, M68K_REG_A1),
                        m68k_get_reg(NULL, M68K_REG_D0), m68k_get_reg(NULL, M68K_REG_D1), m68k_get_reg(NULL, M68K_REG_D2));
        }//*/
-       if (m68kPC == 0x82E58)
+/*     if (m68kPC == 0x82E58)
                WriteLog("--> [Routine end]\n");
        if (m68kPC == 0x80004)
        {
@@ -929,6 +942,13 @@ handler:
 #endif
 int irq_ack_handler(int level)
 {
+#ifdef CPU_DEBUG_TRACING
+       if (startM68KTracing)
+       {
+               WriteLog("irq_ack_handler: M68K PC=%06X\n", m68k_get_reg(NULL, M68K_REG_PC));
+       }
+#endif
+
        // Tracing the IPL lines on the Jaguar schematic yields the following:
        // IPL1 is connected to INTL on TOM (OUT to 68K)
        // IPL0-2 are also tied to Vcc via 4.7K resistors!
@@ -1830,9 +1850,26 @@ void JaguarDone(void)
 //     for(int i=M68K_REG_A0; i<=M68K_REG_A7; i++)
 //             WriteLog("\tA%i = 0x%.8x\n", i-M68K_REG_A0, m68k_get_reg(NULL, (m68k_register_t)i));
        int32 topOfStack = m68k_get_reg(NULL, M68K_REG_A7);
-       WriteLog("M68K: Top of stack: %08X. Stack trace:\n", JaguarReadLong(topOfStack));
+       WriteLog("M68K: Top of stack: %08X -> (%08X). Stack trace:\n", topOfStack, JaguarReadLong(topOfStack));
+#if 0
        for(int i=-2; i<9; i++)
                WriteLog("%06X: %08X\n", topOfStack + (i * 4), JaguarReadLong(topOfStack + (i * 4)));
+#else
+       uint32 address = topOfStack - (4 * 4 * 3);
+
+       for(int i=0; i<10; i++)
+       {
+               WriteLog("%06X:", address);
+
+               for(int j=0; j<4; j++)
+               {
+                       WriteLog(" %08X", JaguarReadLong(address));
+                       address += 4;
+               }
+
+               WriteLog("\n");
+       }
+#endif
 
 /*     WriteLog("\nM68000 disassembly at $802288...\n");
        jaguar_dasm(0x802288, 3);
@@ -1990,7 +2027,7 @@ void JaguarExecuteNew(void)
 // it will be half this number for a half frame. BUT, since we're counting
 // HALF lines, we double this number and we're back at 525 for NTSC, 625 for PAL.
 //
-// Scanline times are 63.5555... \0s in NTSC and 64 \0s in PAL
+// Scanline times are 63.5555... μs in NTSC and 64 μs in PAL
 // Half line times are, naturally, half of this. :-P
 void HalflineCallback(void)
 {