From 110aa8bd936e79a7e9085e79b68204bc27e2e3d2 Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Sat, 16 May 2020 00:33:01 +1000 Subject: [PATCH] CDROM: Reset read sector buffer on INT1 Fixes GetlocL -> DMA out returning incorrect data. Fixes FoxKids.com - Micro Maniacs Racing. --- src/core/cdrom.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/core/cdrom.cpp b/src/core/cdrom.cpp index 4acc99d61..2cd2cdc34 100644 --- a/src/core/cdrom.cpp +++ b/src/core/cdrom.cpp @@ -473,6 +473,9 @@ void CDROM::DeliverAsyncInterrupt() Assert(m_pending_async_interrupt != 0 && !HasPendingInterrupt()); Log_DebugPrintf("Delivering async interrupt %u", m_pending_async_interrupt); + if (m_pending_async_interrupt == static_cast(Interrupt::DataReady)) + m_current_read_sector_buffer = m_current_write_sector_buffer; + m_response_fifo.Clear(); m_response_fifo.PushFromQueue(&m_async_response_fifo); m_interrupt_flag_register = m_pending_async_interrupt; @@ -1582,8 +1585,8 @@ void CDROM::ProcessDataSector(const u8* raw_sector, const CDImage::SubChannelQ& } // TODO: How does XA relate to this buffering? - SectorBuffer* sb = &m_sector_buffers[m_current_write_sector_buffer]; m_current_write_sector_buffer = (m_current_write_sector_buffer + 1) % NUM_SECTOR_BUFFERS; + SectorBuffer* sb = &m_sector_buffers[m_current_write_sector_buffer]; if (sb->size > 0) { Log_DevPrintf("Sector buffer %u was not read, previous sector dropped",