]> Shamusworld >> Repos - virtualjaguar/blobdiff - src/m68000/m68kinterface.c
Fixed 68K STOP instruction never resuming.
[virtualjaguar] / src / m68000 / m68kinterface.c
index dd5dfc1e74f1b7aea3880294f3621b9bdf2807a2..8dab55d7690610964ab1e6efaeaa5ab04b2548fc 100644 (file)
@@ -127,6 +127,18 @@ void DumpRegisters(void)
 #endif
 
 
+void M68KDebugHalt(void)
+{
+       regs.spcflags |= SPCFLAG_DEBUGGER;
+}
+
+
+void M68KDebugResume(void)
+{
+       regs.spcflags &= ~SPCFLAG_DEBUGGER;
+}
+
+
 void m68k_set_cpu_type(unsigned int type)
 {
 }
@@ -187,6 +199,7 @@ void m68k_pulse_reset(void)
        REG_PC = m68ki_read_imm_32();
        m68ki_jump(REG_PC);
 #else
+       regs.spcflags = 0;
        regs.stopped = 0;
        regs.remainingCycles = 0;
        
@@ -233,6 +246,17 @@ int m68k_execute(int num_cycles)
        /* Main loop.  Keep going until we run out of clock cycles */
        do
        {
+               // This is so our debugging code can break in on a dime.
+               // Otherwise, this is just extra slow down :-P
+               if (regs.spcflags & SPCFLAG_DEBUGGER)
+               {
+                       // Not sure this is correct... :-P
+                       num_cycles = initialCycles - regs.remainingCycles;
+                       regs.remainingCycles = 0;       // int32_t
+                       regs.interruptCycles = 0;       // uint32_t
+
+                       return num_cycles;
+               }
 #if 0
                /* Set tracing accodring to T1. (T0 is done inside instruction) */
                m68ki_trace_t1(); /* auto-disable (see m68kcpu.h) */
@@ -465,12 +489,14 @@ void m68ki_exception_interrupt(uint32_t intLevel)
        CPU_INT_LEVEL = 0;
 #endif /* M68K_EMULATE_INT_ACK */
 #else
-       // Turn off the stopped state
+       // Turn off the stopped state (N.B.: normal 68K behavior!)
        regs.stopped = 0;
 
 //JLH: need to add halt state?
+// prolly, for debugging/alpine mode... :-/
+// but then again, this should be handled already by the main execution loop :-P
        // If we are halted, don't do anything
-//     if (CPU_STOPPED)
+//     if (regs.stopped)
 //             return;
 
        // Acknowledge the interrupt (NOTE: This is a user supplied function!)