new timing for main and cd
[picodrive.git] / pico / pico.c
index bbc514f..bd4621b 100644 (file)
@@ -169,7 +169,7 @@ int PicoReset(void)
   SekReset();\r
   // s68k doesn't have the TAS quirk, so we just globally set normal TAS handler in MCD mode (used by Batman games).\r
   SekSetRealTAS(PicoAHW & PAHW_MCD);\r
-  SekCycleCntT = SekCycleCnt = SekCycleAim = 0;\r
+  SekCycleCnt = SekCycleAim = 0;\r
 \r
   if (PicoAHW & PAHW_MCD)\r
     // needed for MCD to reset properly, probably some bug hides behind this..\r
@@ -278,23 +278,25 @@ PICO_INTERNAL int CheckDMA(void)
 \r
 #include "pico_cmn.c"\r
 \r
-int z80stopCycle;\r
-int z80_cycle_cnt;        /* 'done' z80 cycles before z80_run() */\r
+unsigned int last_z80_sync; /* in 68k cycles */\r
+int z80_cycle_cnt;\r
 int z80_cycle_aim;\r
 int z80_scanline;\r
 int z80_scanline_cycles;  /* cycles done until z80_scanline */\r
 \r
 /* sync z80 to 68k */\r
-PICO_INTERNAL void PicoSyncZ80(int m68k_cycles_done)\r
+PICO_INTERNAL void PicoSyncZ80(unsigned int m68k_cycles_done)\r
 {\r
   int cnt;\r
-  z80_cycle_aim = cycles_68k_to_z80(m68k_cycles_done);\r
+  z80_cycle_aim += cycles_68k_to_z80(m68k_cycles_done - last_z80_sync);\r
   cnt = z80_cycle_aim - z80_cycle_cnt;\r
+  last_z80_sync = m68k_cycles_done;\r
 \r
   pprof_start(z80);\r
 \r
-  elprintf(EL_BUSREQ, "z80 sync %i (%i|%i -> %i|%i)", cnt, z80_cycle_cnt, z80_cycle_cnt / 228,\r
-    z80_cycle_aim, z80_cycle_aim / 228);\r
+  elprintf(EL_BUSREQ, "z80 sync %i (%u|%u -> %u|%u)", cnt,\r
+    z80_cycle_cnt, z80_cycle_cnt / 288,\r
+    z80_cycle_aim, z80_cycle_aim / 288);\r
 \r
   if (cnt > 0)\r
     z80_cycle_cnt += z80_run(cnt);\r