mcd, optimizations for polling detection
authorkub <derkub@gmail.com>
Mon, 17 May 2021 21:13:27 +0000 (23:13 +0200)
committerkub <derkub@gmail.com>
Mon, 17 May 2021 21:13:27 +0000 (23:13 +0200)
pico/cd/mcd.c
pico/cd/memory.c

index 602b6eb..732a429 100644 (file)
@@ -342,7 +342,7 @@ void pcd_run_cpus_normal(int m68k_cycles)
       Pico_mcd->m.m68k_poll_cnt = 0;
 
 #ifdef USE_POLL_DETECT
-    if (Pico_mcd->m.m68k_poll_cnt >= 32) {
+    if (Pico_mcd->m.m68k_poll_cnt >= 16) {
       int s68k_left;
       // main CPU is polling, (wake and) run sub only
       if (SekIsStoppedS68k())
index a47d6a3..05ee3e1 100644 (file)
@@ -63,7 +63,7 @@ static void remap_prg_window(u32 r1, u32 r3);
 static void remap_word_ram(u32 r3);\r
 \r
 // poller detection\r
-#define POLL_LIMIT 32\r
+#define POLL_LIMIT 16\r
 #define POLL_CYCLES 64\r
 \r
 void m68k_comm_check(u32 a)\r
@@ -78,13 +78,15 @@ void m68k_comm_check(u32 a)
     Pico_mcd->m.need_sync = 1;\r
   }\r
   Pico_mcd->m.m68k_poll_clk = cycles;\r
-  if (SekNotPolling || a != Pico_mcd->m.m68k_poll_a || clkdiff > POLL_CYCLES) {\r
+  if (SekNotPolling || a != Pico_mcd->m.m68k_poll_a || clkdiff > POLL_CYCLES || clkdiff <= 16) {\r
     Pico_mcd->m.m68k_poll_a = a;\r
     Pico_mcd->m.m68k_poll_cnt = 0;\r
     SekNotPolling = 0;\r
     return;\r
   }\r
   Pico_mcd->m.m68k_poll_cnt++;\r
+  if(Pico_mcd->m.m68k_poll_cnt == POLL_LIMIT)\r
+    SekEndRun(0);\r
 }\r
 \r
 #ifndef _ASM_CD_MEMORY_C\r