mcd, minor optimization for poll detection
authorkub <derkub@gmail.com>
Thu, 13 Oct 2022 19:25:25 +0000 (19:25 +0000)
committerkub <derkub@gmail.com>
Thu, 13 Oct 2022 19:25:25 +0000 (19:25 +0000)
pico/cd/mcd.c
pico/cd/memory.c

index 732a429..223d1f2 100644 (file)
@@ -345,8 +345,10 @@ void pcd_run_cpus_normal(int m68k_cycles)
     if (Pico_mcd->m.m68k_poll_cnt >= 16) {
       int s68k_left;
       // main CPU is polling, (wake and) run sub only
-      if (SekIsStoppedS68k())
+      if (SekIsStoppedS68k()) {
         SekSetStopS68k(0);
+        Pico_mcd->m.s68k_poll_cnt = 0;
+      }
       s68k_left = pcd_sync_s68k(Pico.t.m68c_aim, 1);
 
       Pico.t.m68c_cnt = Pico.t.m68c_aim;
index 0a84f78..fc67750 100644 (file)
@@ -85,7 +85,7 @@ void m68k_comm_check(u32 a)
     return;\r
   }\r
   Pico_mcd->m.m68k_poll_cnt++;\r
-  if(Pico_mcd->m.m68k_poll_cnt == POLL_LIMIT)\r
+  if(Pico_mcd->m.m68k_poll_cnt >= POLL_LIMIT)\r
     SekEndRun(0);\r
 }\r
 \r
@@ -231,7 +231,7 @@ void m68k_reg_write8(u32 a, u32 d)
   return;\r
 \r
 write_comm:\r
-  if (d == Pico_mcd->s68k_regs[a])\r
+  if (Pico_mcd->s68k_regs[a] == (u8)d)\r
     return;\r
 \r
   pcd_sync_s68k(SekCyclesDone(), 0);\r
@@ -490,6 +490,9 @@ void s68k_reg_write8(u32 a, u32 d)
   return;\r
 \r
 write_comm:\r
+  if (Pico_mcd->s68k_regs[a] == (u8)d)\r
+    return;\r
+\r
   Pico_mcd->s68k_regs[a] = (u8) d;\r
   if (Pico_mcd->m.m68k_poll_cnt)\r
     SekEndRunS68k(0);\r
@@ -550,6 +553,9 @@ void s68k_reg_write16(u32 a, u32 d)
   return;\r
 \r
 write_comm:\r
+  if (r[a] == (u8)(d >> 8) && r[a + 1] == (u8)d)\r
+    return;\r
+\r
   r[a] = d >> 8;\r
   r[a + 1] = d;\r
   if (Pico_mcd->m.m68k_poll_cnt)\r