Core/PowerPC: Minor code cleanup to CheckExternalExceptions function.

This commit is contained in:
Jordan Woyak committed 2026-04-10 14:57:52 -05:00
1 parent c0e0b685f3
commit 23e8a3c569
1 file changed
+21 -23
+21 -23
View File
@@ -583,46 +583,37 @@ void PowerPCManager::CheckExceptions()
void PowerPCManager::CheckExternalExceptions() void PowerPCManager::CheckExternalExceptions()
{ {
u32 exceptions = m_ppc_state.Exceptions; const u32 exceptions = m_ppc_state.Exceptions;
// EXTERNAL INTERRUPT // EXTERNAL INTERRUPT
// Handling is delayed until MSR.EE=1. // Handling is delayed until MSR.EE=1.
if (exceptions && m_ppc_state.msr.EE) if (exceptions == 0 || !m_ppc_state.msr.EE)
{ return;
u32 exception_vector = 0;
if (exceptions & EXCEPTION_EXTERNAL_INT) if (exceptions & EXCEPTION_EXTERNAL_INT)
{ {
// Pokemon gets this "too early", it hasn't a handler yet // Pokemon gets this "too early", it hasn't a handler yet
SRR0(m_ppc_state) = m_ppc_state.npc;
SRR1(m_ppc_state) = m_ppc_state.msr.Hex & 0x87C0FFFF;
m_ppc_state.msr.LE = m_ppc_state.msr.ILE;
m_ppc_state.msr.Hex &= ~0x04EF36;
m_ppc_state.pc = m_ppc_state.npc = 0x00000500;
DEBUG_LOG_FMT(POWERPC, "EXCEPTION_EXTERNAL_INT"); DEBUG_LOG_FMT(POWERPC, "EXCEPTION_EXTERNAL_INT");
m_ppc_state.Exceptions &= ~EXCEPTION_EXTERNAL_INT; DEBUG_ASSERT_MSG(POWERPC, m_ppc_state.msr.RI, "EXTERNAL_INT unrecoverable???");
DEBUG_ASSERT_MSG(POWERPC, (SRR1(m_ppc_state) & 0x02) != 0, "EXTERNAL_INT unrecoverable???"); exception_vector = 0x00000500;
m_ppc_state.Exceptions &= ~EXCEPTION_EXTERNAL_INT;
} }
else if (exceptions & EXCEPTION_PERFORMANCE_MONITOR) else if (exceptions & EXCEPTION_PERFORMANCE_MONITOR)
{ {
SRR0(m_ppc_state) = m_ppc_state.npc;
SRR1(m_ppc_state) = m_ppc_state.msr.Hex & 0x87C0FFFF;
m_ppc_state.msr.LE = m_ppc_state.msr.ILE;
m_ppc_state.msr.Hex &= ~0x04EF36;
m_ppc_state.pc = m_ppc_state.npc = 0x00000F00;
DEBUG_LOG_FMT(POWERPC, "EXCEPTION_PERFORMANCE_MONITOR"); DEBUG_LOG_FMT(POWERPC, "EXCEPTION_PERFORMANCE_MONITOR");
exception_vector = 0x00000F00;
m_ppc_state.Exceptions &= ~EXCEPTION_PERFORMANCE_MONITOR; m_ppc_state.Exceptions &= ~EXCEPTION_PERFORMANCE_MONITOR;
} }
else if (exceptions & EXCEPTION_DECREMENTER) else if (exceptions & EXCEPTION_DECREMENTER)
{ {
SRR0(m_ppc_state) = m_ppc_state.npc;
SRR1(m_ppc_state) = m_ppc_state.msr.Hex & 0x87C0FFFF;
m_ppc_state.msr.LE = m_ppc_state.msr.ILE;
m_ppc_state.msr.Hex &= ~0x04EF36;
m_ppc_state.pc = m_ppc_state.npc = 0x00000900;
DEBUG_LOG_FMT(POWERPC, "EXCEPTION_DECREMENTER"); DEBUG_LOG_FMT(POWERPC, "EXCEPTION_DECREMENTER");
exception_vector = 0x00000900;
m_ppc_state.Exceptions &= ~EXCEPTION_DECREMENTER; m_ppc_state.Exceptions &= ~EXCEPTION_DECREMENTER;
} }
else else
@@ -630,10 +621,17 @@ void PowerPCManager::CheckExternalExceptions()
DEBUG_ASSERT_MSG(POWERPC, 0, "Unknown EXT interrupt: Exceptions == {:08x}", exceptions); DEBUG_ASSERT_MSG(POWERPC, 0, "Unknown EXT interrupt: Exceptions == {:08x}", exceptions);
ERROR_LOG_FMT(POWERPC, "Unknown EXTERNAL INTERRUPT exception: Exceptions == {:08x}", ERROR_LOG_FMT(POWERPC, "Unknown EXTERNAL INTERRUPT exception: Exceptions == {:08x}",
exceptions); exceptions);
return;
} }
SRR0(m_ppc_state) = m_ppc_state.npc;
SRR1(m_ppc_state) = m_ppc_state.msr.Hex & 0x87C0FFFF;
m_ppc_state.msr.LE = m_ppc_state.msr.ILE;
m_ppc_state.msr.Hex &= ~0x04EF36;
m_ppc_state.pc = m_ppc_state.npc = exception_vector;
MSRUpdated(); MSRUpdated();
} }
}
bool PowerPCManager::CheckBreakPoints() bool PowerPCManager::CheckBreakPoints()
{ {