mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2024-11-26 15:45:42 +00:00
CDROM: Don't queue up a second INT1 when one is still pending
This commit is contained in:
parent
40d6be7142
commit
c8af4abad8
|
@ -422,6 +422,14 @@ void CDROM::SetInterrupt(Interrupt interrupt)
|
|||
|
||||
void CDROM::SetAsyncInterrupt(Interrupt interrupt)
|
||||
{
|
||||
if (m_interrupt_flag_register == static_cast<u8>(interrupt))
|
||||
{
|
||||
Log_WarningPrintf("Not setting async interrupt %u because there is already one unacknowledged",
|
||||
static_cast<u8>(interrupt));
|
||||
m_async_response_fifo.Clear();
|
||||
return;
|
||||
}
|
||||
|
||||
Assert(m_pending_async_interrupt == 0);
|
||||
m_pending_async_interrupt = static_cast<u8>(interrupt);
|
||||
if (!HasPendingInterrupt())
|
||||
|
@ -1418,13 +1426,6 @@ void CDROM::ProcessDataSector(const u8* raw_sector, const CDImage::SubChannelQ&
|
|||
}
|
||||
}
|
||||
|
||||
// Deliver to CPU
|
||||
if (HasPendingAsyncInterrupt())
|
||||
{
|
||||
Log_WarningPrintf("Data interrupt was not delivered");
|
||||
ClearAsyncInterrupt();
|
||||
}
|
||||
|
||||
// TODO: How does XA relate to this buffering?
|
||||
SectorBuffer* sb = &m_sector_buffers[0];
|
||||
if (sb->size > 0)
|
||||
|
@ -1450,6 +1451,13 @@ void CDROM::ProcessDataSector(const u8* raw_sector, const CDImage::SubChannelQ&
|
|||
sb->size = DATA_SECTOR_OUTPUT_SIZE;
|
||||
}
|
||||
|
||||
// Deliver to CPU
|
||||
if (HasPendingAsyncInterrupt())
|
||||
{
|
||||
Log_WarningPrintf("Data interrupt was not delivered");
|
||||
ClearAsyncInterrupt();
|
||||
}
|
||||
|
||||
m_async_response_fifo.Push(m_secondary_status.bits);
|
||||
SetAsyncInterrupt(Interrupt::DataReady);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue