CPU: Make interrupts actually edge-triggered

This commit is contained in:
Stenzek
2024-03-16 23:28:53 +10:00
parent 3702a533f2
commit fa6850902a
13 changed files with 145 additions and 98 deletions

View File

@ -986,6 +986,7 @@ void CDROM::WriteRegister(u32 offset, u8 value)
s_interrupt_flag_register &= ~(value & INTERRUPT_REGISTER_MASK);
if (s_interrupt_flag_register == 0)
{
InterruptController::SetLineState(InterruptController::IRQ::CDROM, false);
if (HasPendingAsyncInterrupt())
QueueDeliverAsyncInterrupt();
else
@ -1212,10 +1213,8 @@ void CDROM::UpdateStatusRegister()
void CDROM::UpdateInterruptRequest()
{
if ((s_interrupt_flag_register & s_interrupt_enable_register) == 0)
return;
InterruptController::InterruptRequest(InterruptController::IRQ::CDROM);
InterruptController::SetLineState(InterruptController::IRQ::CDROM,
(s_interrupt_flag_register & s_interrupt_enable_register) != 0);
}
bool CDROM::HasPendingDiscEvent()