32x: add other timing hacks
[picodrive.git] / pico / 32x / 32x.c
index c10e148..9bfbefa 100644 (file)
@@ -422,6 +422,9 @@ void p32x_sync_other_sh2(SH2 *sh2, unsigned int m68k_target)
   }
 }
 
+#define STEP_LS 24
+#define STEP_N 440
+
 #define sync_sh2s_normal p32x_sync_sh2s
 //#define sync_sh2s_lockstep p32x_sync_sh2s
 
@@ -451,6 +454,8 @@ void sync_sh2s_normal(unsigned int m68k_target)
     target = m68k_target;
     if (event_time_next && CYCLES_GT(target, event_time_next))
       target = event_time_next;
+    if (CYCLES_GT(target, now + STEP_N))
+      target = now + STEP_N;
 
     while (CYCLES_GT(target, now))
     {
@@ -502,9 +507,10 @@ void sync_sh2s_normal(unsigned int m68k_target)
     if (CYCLES_GT(m68k_target, ssh2.m68krcycles_done))
       ssh2.m68krcycles_done = m68k_target;
   }
-}
 
-#define STEP_68K 24
+  // everyone is in sync now
+  Pico32x.comm_dirty = 0;
+}
 
 void sync_sh2s_lockstep(unsigned int m68k_target)
 {
@@ -515,7 +521,7 @@ void sync_sh2s_lockstep(unsigned int m68k_target)
     mcycles = ssh2.m68krcycles_done;
 
   while (mcycles < m68k_target) {
-    mcycles += STEP_68K;
+    mcycles += STEP_LS;
     sync_sh2s_normal(mcycles);
   }
 }