diff --git a/src/core/cdrom.cpp b/src/core/cdrom.cpp index e7201c732..c826f7ddf 100644 --- a/src/core/cdrom.cpp +++ b/src/core/cdrom.cpp @@ -476,7 +476,7 @@ void CDROM::UpdateStatusRegister() TickCount CDROM::GetAckDelayForCommand() const { - const u32 default_ack_delay = 2000; + const u32 default_ack_delay = 4000; if (m_command == Command::Init) return 60000; else @@ -934,10 +934,16 @@ void CDROM::BeginReading(bool cdda) if (m_setloc_pending) { - BeginSeeking(); - m_read_after_seek = !cdda; - m_play_after_seek = cdda; - return; + if (m_media->GetMSFPositionOnDisc() != m_setloc_position) + { + BeginSeeking(); + m_read_after_seek = !cdda; + m_play_after_seek = cdda; + return; + } + + // already in position + m_setloc_pending = false; } m_secondary_status.motor_on = true; @@ -980,6 +986,7 @@ void CDROM::DoSeekComplete() m_async_response_fifo.Push(m_secondary_status.bits); SetAsyncInterrupt(Interrupt::INT2); + UpdateStatusRegister(); } else {