famec hack, CPU debug in CD mode
[picodrive.git] / Pico / cd / Sek.c
index 6005f59..ba85533 100644 (file)
@@ -1,4 +1,4 @@
-// (c) Copyright 2006 notaz, All rights reserved.
+// (c) Copyright 2007 notaz, All rights reserved.
 
 
 #include "../PicoInt.h"
@@ -64,9 +64,13 @@ static int SekUnrecognizedOpcodeS68k(void)
 #ifdef EMU_M68K
 static int SekIntAckMS68k(int level)
 {
+#ifndef EMU_CORE_DEBUG
   int level_new = new_irq_level(level);
   dprintf("s68kACK %i -> %i", level, level_new);
   CPU_INT_LEVEL = level_new << 8;
+#else
+  CPU_INT_LEVEL = 0;
+#endif
   return M68K_INT_ACK_AUTOVECTOR;
 }
 #endif
@@ -76,7 +80,15 @@ static void SekIntAckFS68k(unsigned level)
 {
   int level_new = new_irq_level(level);
   dprintf("s68kACK %i -> %i", level, level_new);
+#ifndef EMU_CORE_DEBUG
   PicoCpuFS68k.interrupts[0] = level_new;
+#else
+  {
+    extern int dbg_irq_level_sub;
+    dbg_irq_level_sub = level_new;
+    PicoCpuFS68k.interrupts[0] = 0;
+  }
+#endif
 }
 #endif
 
@@ -107,8 +119,9 @@ PICO_INTERNAL int SekInitS68k()
     void *oldcontext = g_m68kcontext;
     g_m68kcontext = &PicoCpuFS68k;
     memset(&PicoCpuFS68k, 0, sizeof(PicoCpuFS68k));
-    m68k_init();
+    fm68k_init();
     PicoCpuFS68k.iack_handler = SekIntAckFS68k;
+    PicoCpuFS68k.sr = 0x2704; // Z flag
     g_m68kcontext = oldcontext;
   }
 #endif
@@ -146,7 +159,7 @@ PICO_INTERNAL int SekResetS68k()
   {
     void *oldcontext = g_m68kcontext;
     g_m68kcontext = &PicoCpuFS68k;
-    m68k_reset();
+    fm68k_reset();
     g_m68kcontext = oldcontext;
   }
 #endif
@@ -161,6 +174,14 @@ PICO_INTERNAL int SekInterruptS68k(int irq)
   irqs = Pico_mcd->m.s68k_pend_ints >> 1;
   while ((irqs >>= 1)) real_irq++;
 
+#ifdef EMU_CORE_DEBUG
+  {
+    extern int dbg_irq_level_sub;
+    dbg_irq_level_sub=real_irq;
+    elprintf(EL_ANOMALY, "s68k irq %i", real_irq);
+    return 0;
+  }
+#endif
 #ifdef EMU_C68K
   PicoCpuCS68k.irq=real_irq;
 #endif