Merge pull request #536 from gameblabla/cdrom_fixes
authorAutechre <libretro@gmail.com>
Mon, 16 Aug 2021 05:14:52 +0000 (07:14 +0200)
committerGitHub <noreply@github.com>
Mon, 16 Aug 2021 05:14:52 +0000 (07:14 +0200)
CDRom timings changes

1  2 
libpcsxcore/cdrom.c

diff --combined libpcsxcore/cdrom.c
@@@ -496,6 -496,7 +496,7 @@@ void cdrPlayInterrupt(
                if (cdr.SetlocPending) {
                        memcpy(cdr.SetSectorPlay, cdr.SetSector, 4);
                        cdr.SetlocPending = 0;
+                       cdr.m_locationChanged = TRUE;
                }
                Find_CurTrack(cdr.SetSectorPlay);
                ReadTrack(cdr.SetSectorPlay);
                }
        }
  
-       CDRMISC_INT(cdReadTime);
+       if (cdr.m_locationChanged)
+       {
+               CDRMISC_INT(cdReadTime * 30);
+               cdr.m_locationChanged = FALSE;
+       }
+       else
+       {
+               CDRMISC_INT(cdReadTime);
+       }
  
        // update for CdlGetlocP/autopause
        generate_subq(cdr.SetSectorPlay);
@@@ -589,6 -598,7 +598,7 @@@ void cdrInterrupt() 
                        if (cdr.SetlocPending) {
                                memcpy(cdr.SetSectorPlay, cdr.SetSector, 4);
                                cdr.SetlocPending = 0;
+                               cdr.m_locationChanged = TRUE;
                        }
  
                        // BIOS CD Player
                        }
                        cdr.Result[0] |= (cdr.Result[1] >> 4) & 0x08;
  
 -                      strncpy((char *)&cdr.Result[4], "PCSX", 4);
 +                      /* This adds the string "PCSX" in Playstation bios boot screen */
 +                      memcpy((char *)&cdr.Result[4], "PCSX", 4);
                        cdr.Stat = Complete;
                        break;
  
                                if(seekTime > 1000000) seekTime = 1000000;
                                memcpy(cdr.SetSectorPlay, cdr.SetSector, 4);
                                cdr.SetlocPending = 0;
+                               cdr.m_locationChanged = TRUE;
                        }
                        Find_CurTrack(cdr.SetSectorPlay);
  
@@@ -1131,7 -1141,13 +1142,13 @@@ void cdrReadInterrupt() 
  
        cdr.Readed = 0;
  
-       CDREAD_INT((cdr.Mode & MODE_SPEED) ? (cdReadTime / 2) : cdReadTime);
+       uint32_t delay = (cdr.Mode & MODE_SPEED) ? (cdReadTime / 2) : cdReadTime;
+       if (cdr.m_locationChanged) {
+               CDREAD_INT(delay * 30);
+               cdr.m_locationChanged = FALSE;
+       } else {
+               CDREAD_INT(delay);
+       }
  
        /*
        Croc 2: $40 - only FORM1 (*)
@@@ -1469,6 -1485,8 +1486,8 @@@ void cdrReset() 
        cdr.DriveState = DRIVESTATE_STANDBY;
        cdr.StatP = STATUS_ROTATING;
        pTransfer = cdr.Transfer;
+       cdr.SetlocPending = 0;
+       cdr.m_locationChanged = FALSE;
  
        // BIOS player - default values
        cdr.AttenuatorLeftToLeft = 0x80;