From 50a25b63b1c82158ebd30f4daee46340de68c1b9 Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Sat, 11 Jul 2020 20:34:16 +1000 Subject: [PATCH] CDROM: Track seek position when resetting Fixes Blasto hanging after starting game. --- src/core/cdrom.cpp | 4 +++- src/core/cdrom.h | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/core/cdrom.cpp b/src/core/cdrom.cpp index 753977894..56f790294 100644 --- a/src/core/cdrom.cpp +++ b/src/core/cdrom.cpp @@ -1184,7 +1184,9 @@ void CDROM::ExecuteCommand() UpdatePositionWhileSeeking(); m_drive_state = DriveState::Resetting; - m_drive_event->Schedule(400000 + GetTicksForSeek(0)); + m_drive_event->SetIntervalAndSchedule(BASE_RESET_TICKS + GetTicksForSeek(0)); + m_seek_start_lba = m_current_lba; + m_seek_end_lba = 0; EndCommand(); return; diff --git a/src/core/cdrom.h b/src/core/cdrom.h index 805cb35ae..c2d92be81 100644 --- a/src/core/cdrom.h +++ b/src/core/cdrom.h @@ -59,6 +59,8 @@ private: RESPONSE_FIFO_SIZE = 16, DATA_FIFO_SIZE = RAW_SECTOR_OUTPUT_SIZE, NUM_SECTOR_BUFFERS = 8, + + BASE_RESET_TICKS = 400000, }; static constexpr u8 INTERRUPT_REGISTER_MASK = 0x1F; @@ -200,7 +202,8 @@ private: bool IsDriveIdle() const { return m_drive_state == DriveState::Idle; } bool IsSeeking() const { - return (m_drive_state == DriveState::SeekingLogical || m_drive_state == DriveState::SeekingPhysical); + return (m_drive_state == DriveState::SeekingLogical || m_drive_state == DriveState::SeekingPhysical || + m_drive_state == DriveState::Resetting); } bool IsReadingOrPlaying() const {