From 8ac294d4f9b106b5e79e0b61311edd5e9329825b Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sat, 6 Jun 2026 12:31:14 +1000 Subject: [PATCH] CDROM: Fix DisableReadSpeed() never having any effect --- src/core/cdrom.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/core/cdrom.cpp b/src/core/cdrom.cpp index e7483491f..09676887f 100644 --- a/src/core/cdrom.cpp +++ b/src/core/cdrom.cpp @@ -1508,18 +1508,20 @@ bool CDROM::CanUseReadSpeedup() void CDROM::DisableReadSpeedup() { - if (s_state.drive_state != CDROM::DriveState::Reading || !CanUseReadSpeedup()) + if (s_state.drive_state != CDROM::DriveState::Reading || s_state.mode.cdda || s_state.mode.xa_enable || + !s_state.mode.double_speed) + { return; + } // Can't test the interval directly because max speedup changes the downcount directly. const TickCount expected_ticks = System::GetTicksPerSecond() / DOUBLE_SPEED_SECTORS_PER_SECOND; const TickCount ticks_since_last_sector = s_state.drive_event.GetTicksSinceLastExecution(); const TickCount ticks_until_next_sector = s_state.drive_event.GetTicksUntilNextExecution(); const TickCount sector_ticks = ticks_since_last_sector + ticks_until_next_sector; - if (sector_ticks >= expected_ticks) - return; - - s_state.drive_event.Schedule(expected_ticks - ticks_since_last_sector); + s_state.drive_event.SetInterval(std::min(s_state.drive_event.GetInterval(), expected_ticks)); + if (sector_ticks < expected_ticks) + s_state.drive_event.Schedule(expected_ticks - ticks_since_last_sector); } TickCount CDROM::GetAckDelayForCommand(Command command)