diff --git a/src/core/cdrom.cc b/src/core/cdrom.cc index 556ce3f1..4dac7e10 100644 --- a/src/core/cdrom.cc +++ b/src/core/cdrom.cc @@ -293,13 +293,15 @@ class CDRomImpl final : public PCSX::CDRom { void scheduleDMA(uint32_t cycles) { PCSX::g_emulator->m_cpu->schedule(PCSX::Schedule::CDRDMA, cycles); } void scheduleDMA(std::chrono::nanoseconds delay) { scheduleDMA(PCSX::psxRegisters::durationToCycles(delay)); } + // An acknowledged response no longer holds its slot: its unread bytes stay readable + // until the next response replaces them. bool maybeEnqueueResponse(QueueElement &response) { if (m_responseFifo[0].valueEmpty() && !m_responseFifo[1].empty()) { m_responseFifo[0] = m_responseFifo[1]; m_responseFifo[1] = response; return true; } - if (m_responseFifo[0].empty()) { + if (m_responseFifo[0].valueEmpty()) { m_responseFifo[0] = response; return true; } else if (m_responseFifo[1].empty()) { diff --git a/src/core/cdrom.h b/src/core/cdrom.h index eea08b09..3ea48b23 100644 --- a/src/core/cdrom.h +++ b/src/core/cdrom.h @@ -221,7 +221,7 @@ class CDRom { QueueElement m_commandFifo; QueueElement m_commandExecuting; QueueElement m_responseFifo[2]; - bool responseFifoFull() { return !m_responseFifo[0].empty() && !m_responseFifo[1].empty(); } + bool responseFifoFull() { return !m_responseFifo[0].valueEmpty() && !m_responseFifo[1].empty(); } private: friend class Widgets::IsoBrowser;