Merge pull request #6620 from lioncash/dvd

DVDInterface: Deduplicate code in UpdateInterrupts()
This commit is contained in:
Léo Lam 2018-04-09 12:52:38 +02:00 committed by GitHub
commit 67f8e6e60a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 22 deletions

View File

@ -588,15 +588,11 @@ void RegisterMMIO(MMIO::Mapping* mmio, u32 base)
void UpdateInterrupts()
{
if ((s_DISR.DEINT & s_DISR.DEINITMASK) || (s_DISR.TCINT & s_DISR.TCINTMASK) ||
(s_DISR.BRKINT & s_DISR.BRKINTMASK) || (s_DICVR.CVRINT & s_DICVR.CVRINTMASK))
{
ProcessorInterface::SetInterrupt(ProcessorInterface::INT_CAUSE_DI, true);
}
else
{
ProcessorInterface::SetInterrupt(ProcessorInterface::INT_CAUSE_DI, false);
}
const bool set_mask = (s_DISR.DEINT & s_DISR.DEINITMASK) || (s_DISR.TCINT & s_DISR.TCINTMASK) ||
(s_DISR.BRKINT & s_DISR.BRKINTMASK) ||
(s_DICVR.CVRINT & s_DICVR.CVRINTMASK);
ProcessorInterface::SetInterrupt(ProcessorInterface::INT_CAUSE_DI, set_mask);
// Required for Summoner: A Goddess Reborn
CoreTiming::ForceExceptionCheck(50);

View File

@ -135,9 +135,9 @@ void UpdateException()
PowerPC::ppcState.Exceptions &= ~EXCEPTION_EXTERNAL_INT;
}
static const char* Debug_GetInterruptName(u32 _causemask)
static const char* Debug_GetInterruptName(u32 cause_mask)
{
switch (_causemask)
switch (cause_mask)
{
case INT_CAUSE_PI:
return "INT_CAUSE_PI";
@ -176,33 +176,33 @@ static const char* Debug_GetInterruptName(u32 _causemask)
}
}
void SetInterrupt(u32 _causemask, bool _bSet)
void SetInterrupt(u32 cause_mask, bool set)
{
DEBUG_ASSERT_MSG(POWERPC, Core::IsCPUThread(), "SetInterrupt from wrong thread");
if (_bSet && !(m_InterruptCause & _causemask))
if (set && !(m_InterruptCause & cause_mask))
{
DEBUG_LOG(PROCESSORINTERFACE, "Setting Interrupt %s (set)", Debug_GetInterruptName(_causemask));
DEBUG_LOG(PROCESSORINTERFACE, "Setting Interrupt %s (set)", Debug_GetInterruptName(cause_mask));
}
if (!_bSet && (m_InterruptCause & _causemask))
if (!set && (m_InterruptCause & cause_mask))
{
DEBUG_LOG(PROCESSORINTERFACE, "Setting Interrupt %s (clear)",
Debug_GetInterruptName(_causemask));
Debug_GetInterruptName(cause_mask));
}
if (_bSet)
m_InterruptCause |= _causemask;
if (set)
m_InterruptCause |= cause_mask;
else
m_InterruptCause &= ~_causemask; // is there any reason to have this possibility?
m_InterruptCause &= ~cause_mask; // is there any reason to have this possibility?
// F|RES: i think the hw devices reset the interrupt in the PI to 0
// if the interrupt cause is eliminated. that isn't done by software (afaik)
UpdateException();
}
static void SetResetButton(bool _bSet)
static void SetResetButton(bool set)
{
SetInterrupt(INT_CAUSE_RST_BUTTON, !_bSet);
SetInterrupt(INT_CAUSE_RST_BUTTON, !set);
}
static void ToggleResetButtonCallback(u64 userdata, s64 cyclesLate)

View File

@ -73,7 +73,7 @@ inline u32 GetCause()
return m_InterruptCause;
}
void SetInterrupt(u32 _causemask, bool _bSet = true);
void SetInterrupt(u32 cause_mask, bool set = true);
// Thread-safe func which sets and clears reset button state automagically
void ResetButton_Tap();