Skip to content
Permalink
Browse files
Merge pull request #6620 from lioncash/dvd
DVDInterface: Deduplicate code in UpdateInterrupts()
  • Loading branch information
leoetlino committed Apr 9, 2018
2 parents 049736b + a8088b7 commit 67f8e6e
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 22 deletions.
@@ -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);
@@ -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)
@@ -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();

0 comments on commit 67f8e6e

Please sign in to comment.