Fix crash on retrying mission in driver (#165)
authorifcaro <ifcaro@ifcaro.net>
Sat, 4 Jul 2020 13:26:16 +0000 (15:26 +0200)
committerGitHub <noreply@github.com>
Sat, 4 Jul 2020 13:26:16 +0000 (16:26 +0300)
Fix crash on retrying mission in driver

libpcsxcore/cdrom.c

index 3e31c0a..a725efa 100644 (file)
@@ -539,6 +539,7 @@ void cdrInterrupt() {
        int start_rotating = 0;
        int error = 0;
        int delay;
+       unsigned int seekTime = 0;
 
        // Reschedule IRQ
        if (cdr.Stat) {
@@ -909,6 +910,8 @@ void cdrInterrupt() {
                case CdlReadN:
                case CdlReadS:
                        if (cdr.SetlocPending) {
+                               seekTime = abs(msf2sec(cdr.SetSectorPlay) - msf2sec(cdr.SetSector)) * (cdReadTime / 200);
+                               if(seekTime > 1000000) seekTime = 1000000;
                                memcpy(cdr.SetSectorPlay, cdr.SetSector, 4);
                                cdr.SetlocPending = 0;
                        }
@@ -948,7 +951,7 @@ void cdrInterrupt() {
                                // - fix cutscene speech (startup)
 
                                // ??? - use more accurate seek time later
-                               CDREAD_INT((cdr.Mode & 0x80) ? (cdReadTime / 2) : cdReadTime * 1);
+                               CDREAD_INT(((cdr.Mode & 0x80) ? (cdReadTime / 2) : cdReadTime * 1) + seekTime);
                        } else {
                                cdr.StatP |= STATUS_READ;
                                cdr.StatP &= ~STATUS_SEEK;