mcd, add poll detection for gfx busy
authorkub <derkub@gmail.com>
Sat, 27 Apr 2024 07:53:33 +0000 (09:53 +0200)
committerkub <derkub@gmail.com>
Sat, 27 Apr 2024 08:12:30 +0000 (10:12 +0200)
pico/cd/gfx.c
pico/cd/memory.c

index 84c4f43..4df1c34 100644 (file)
@@ -409,6 +409,8 @@ void gfx_start(uint32 base)
 
     /* start graphics operation */
     Pico_mcd->s68k_regs[0x58] = 0x80;
+    Pico_mcd->m.state_flags &= ~PCD_ST_S68K_POLL;
+    Pico_mcd->m.s68k_poll_cnt = 0;
 
     gfx_schedule();
   }
@@ -451,6 +453,8 @@ void gfx_update(unsigned int cycles)
     Pico_mcd->s68k_regs[0x64] =
     Pico_mcd->s68k_regs[0x65] = 0;
 
+    Pico_mcd->m.state_flags &= ~PCD_ST_S68K_POLL;
+    Pico_mcd->m.s68k_poll_cnt = 0;
     if (Pico_mcd->s68k_regs[0x33] & PCDS_IEN1) {
       elprintf(EL_INTS|EL_CD, "s68k: gfx_cd irq 1");
       pcd_irq_s68k(1, 1);
index 17abd04..d6cf127 100644 (file)
@@ -366,8 +366,8 @@ u32 s68k_reg_read16(u32 a)
 \r
   d = (Pico_mcd->s68k_regs[a]<<8) | Pico_mcd->s68k_regs[a+1];\r
 \r
-  if (a >= 0x0e && a < 0x30)\r
-    return s68k_poll_detect(a, d);\r
+  if ((a >= 0x0e && a < 0x30) || a == 0x58)\r
+    d = s68k_poll_detect(a, d);\r
 \r
 end:\r
   return d;\r
@@ -995,7 +995,7 @@ static u32 PicoReadS68k8_pr(u32 a)
     a &= 0x1ff;\r
     if (a >= 0x0e && a < 0x30) {\r
       d = Pico_mcd->s68k_regs[a];\r
-      s68k_poll_detect(a & ~1, d);\r
+      d = s68k_poll_detect(a & ~1, d);\r
       goto regs_done;\r
     }\r
     d = s68k_reg_read16(a & ~1);\r