mcd, fix md+ not looping when cd drive unused
authorkub <derkub@gmail.com>
Wed, 22 Jan 2025 21:02:38 +0000 (22:02 +0100)
committerkub <derkub@gmail.com>
Wed, 22 Jan 2025 21:02:38 +0000 (22:02 +0100)
pico/cd/mcd.c
pico/cd/megasd.c
pico/cd/memory.c

index c0d9192..6c3548e 100644 (file)
@@ -79,6 +79,7 @@ PICO_INTERNAL void PicoPowerMCD(void)
   Pico_mcd->s68k_regs[3] = 1; // 2M word RAM mode, m68k access
   if (Pico.romsize == 0) // no HINT vector from gate array for MSU
     memset(Pico_mcd->bios + 0x70, 0xff, 4);
+  pcd_event_schedule_s68k(PCD_EVENT_CDC, 12500000/75);
 }
 
 void pcd_soft_reset(void)
@@ -171,13 +172,13 @@ static void pcd_cdc_event(unsigned int now)
     Pico_mcd->s68k_regs[0x4b] = 0xf0;
   }
 
-  msd_update();
-
   if ((Pico_mcd->s68k_regs[0x33] & PCDS_IEN4) && (Pico_mcd->s68k_regs[0x37] & 4)) {
     elprintf(EL_INTS|EL_CD, "s68k: cdd irq 4");
     pcd_irq_s68k(4, 1);
   }
 
+  msd_update();
+
   pcd_event_schedule(now, PCD_EVENT_CDC, 12500000/75);
 }
 
index ec31acb..f0228a4 100644 (file)
@@ -48,6 +48,7 @@ static void cdd_play(s32 lba)
 
   cdd_play_audio(Pico_msd.index, Pico_msd.currentlba);
   Pico_msd.state |= MSD_ST_PLAY;
+  Pico_msd.state &= ~MSD_ST_PAUSE;
 }
 
 static void cdd_pause(void)
index d00f5b9..7b9452f 100644 (file)
@@ -482,10 +482,6 @@ void s68k_reg_write8(u32 a, u32 d)
       u32 d_old = Pico_mcd->s68k_regs[0x37];\r
       Pico_mcd->s68k_regs[0x37] = d & 7;\r
       if ((d ^ d_old) & 4) {\r
-        // ??\r
-       if (d & 4)\r
-          pcd_event_schedule_s68k(PCD_EVENT_CDC, 12500000/75);\r
-\r
         if ((d & 4) && (Pico_mcd->s68k_regs[0x33] & PCDS_IEN4)) {\r
           elprintf(EL_INTS, "cdd export irq 4");\r
           pcd_irq_s68k(4, 1);\r