Merge pull request #3716 from degasus/coretiming
CoreTiming: Drop ProcessFifoWaitEvents.
This commit is contained in:
commit
b16333a25c
|
@ -389,30 +389,6 @@ void ForceExceptionCheck(s64 cycles)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This raise only the events required while the fifo is processing data
|
|
||||||
void ProcessFifoWaitEvents()
|
|
||||||
{
|
|
||||||
MoveEvents();
|
|
||||||
|
|
||||||
if (!first)
|
|
||||||
return;
|
|
||||||
|
|
||||||
while (first)
|
|
||||||
{
|
|
||||||
if (first->time <= g_globalTimer)
|
|
||||||
{
|
|
||||||
Event* evt = first;
|
|
||||||
first = first->next;
|
|
||||||
event_types[evt->type].callback(evt->userdata, (int)(g_globalTimer - evt->time));
|
|
||||||
FreeEvent(evt);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MoveEvents()
|
void MoveEvents()
|
||||||
{
|
{
|
||||||
BaseEvent sevt;
|
BaseEvent sevt;
|
||||||
|
@ -480,14 +456,11 @@ void LogPendingEvents()
|
||||||
|
|
||||||
void Idle()
|
void Idle()
|
||||||
{
|
{
|
||||||
// DEBUG_LOG(POWERPC, "Idle");
|
|
||||||
|
|
||||||
if (SConfig::GetInstance().bSyncGPUOnSkipIdleHack)
|
if (SConfig::GetInstance().bSyncGPUOnSkipIdleHack)
|
||||||
{
|
{
|
||||||
// When the FIFO is processing data we must not advance because in this way
|
// When the FIFO is processing data we must not advance because in this way
|
||||||
// the VI will be desynchronized. So, We are waiting until the FIFO finish and
|
// the VI will be desynchronized. So, We are waiting until the FIFO finish and
|
||||||
// while we process only the events required by the FIFO.
|
// while we process only the events required by the FIFO.
|
||||||
ProcessFifoWaitEvents();
|
|
||||||
Fifo::FlushGpu();
|
Fifo::FlushGpu();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,6 @@ void RemoveEvent(int event_type);
|
||||||
void RemoveAllEvents(int event_type);
|
void RemoveAllEvents(int event_type);
|
||||||
void Advance();
|
void Advance();
|
||||||
void MoveEvents();
|
void MoveEvents();
|
||||||
void ProcessFifoWaitEvents();
|
|
||||||
|
|
||||||
// Pretend that the main CPU has executed enough cycles to reach the next event.
|
// Pretend that the main CPU has executed enough cycles to reach the next event.
|
||||||
void Idle();
|
void Idle();
|
||||||
|
|
|
@ -418,44 +418,9 @@ void CheckExceptions()
|
||||||
}
|
}
|
||||||
|
|
||||||
// EXTERNAL INTERRUPT
|
// EXTERNAL INTERRUPT
|
||||||
else if (MSR & 0x0008000) // Handling is delayed until MSR.EE=1.
|
else
|
||||||
{
|
{
|
||||||
if (exceptions & EXCEPTION_EXTERNAL_INT)
|
CheckExternalExceptions();
|
||||||
{
|
|
||||||
// Pokemon gets this "too early", it hasn't a handler yet
|
|
||||||
SRR0 = NPC;
|
|
||||||
SRR1 = MSR & 0x87C0FFFF;
|
|
||||||
MSR |= (MSR >> 16) & 1;
|
|
||||||
MSR &= ~0x04EF36;
|
|
||||||
PC = NPC = 0x00000500;
|
|
||||||
|
|
||||||
INFO_LOG(POWERPC, "EXCEPTION_EXTERNAL_INT");
|
|
||||||
ppcState.Exceptions &= ~EXCEPTION_EXTERNAL_INT;
|
|
||||||
|
|
||||||
_dbg_assert_msg_(POWERPC, (SRR1 & 0x02) != 0, "EXTERNAL_INT unrecoverable???");
|
|
||||||
}
|
|
||||||
else if (exceptions & EXCEPTION_PERFORMANCE_MONITOR)
|
|
||||||
{
|
|
||||||
SRR0 = NPC;
|
|
||||||
SRR1 = MSR & 0x87C0FFFF;
|
|
||||||
MSR |= (MSR >> 16) & 1;
|
|
||||||
MSR &= ~0x04EF36;
|
|
||||||
PC = NPC = 0x00000F00;
|
|
||||||
|
|
||||||
INFO_LOG(POWERPC, "EXCEPTION_PERFORMANCE_MONITOR");
|
|
||||||
ppcState.Exceptions &= ~EXCEPTION_PERFORMANCE_MONITOR;
|
|
||||||
}
|
|
||||||
else if (exceptions & EXCEPTION_DECREMENTER)
|
|
||||||
{
|
|
||||||
SRR0 = NPC;
|
|
||||||
SRR1 = MSR & 0x87C0FFFF;
|
|
||||||
MSR |= (MSR >> 16) & 1;
|
|
||||||
MSR &= ~0x04EF36;
|
|
||||||
PC = NPC = 0x00000900;
|
|
||||||
|
|
||||||
INFO_LOG(POWERPC, "EXCEPTION_DECREMENTER");
|
|
||||||
ppcState.Exceptions &= ~EXCEPTION_DECREMENTER;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -276,7 +276,6 @@ void GatherPipeBursted()
|
||||||
if (IsOnThread())
|
if (IsOnThread())
|
||||||
SetCPStatusFromCPU();
|
SetCPStatusFromCPU();
|
||||||
|
|
||||||
ProcessFifoEvents();
|
|
||||||
// if we aren't linked, we don't care about gather pipe data
|
// if we aren't linked, we don't care about gather pipe data
|
||||||
if (!m_CPCtrlReg.GPLinkEnable)
|
if (!m_CPCtrlReg.GPLinkEnable)
|
||||||
{
|
{
|
||||||
|
@ -454,13 +453,6 @@ void SetCPStatusFromCPU()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProcessFifoEvents()
|
|
||||||
{
|
|
||||||
if (IsOnThread() && (s_interrupt_waiting.load() || s_interrupt_finish_waiting.load() ||
|
|
||||||
s_interrupt_token_waiting.load()))
|
|
||||||
CoreTiming::ProcessFifoWaitEvents();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Shutdown()
|
void Shutdown()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -137,6 +137,5 @@ void SetInterruptFinishWaiting(bool waiting);
|
||||||
void SetCpClearRegister();
|
void SetCpClearRegister();
|
||||||
void SetCpControlRegister();
|
void SetCpControlRegister();
|
||||||
void SetCpStatusRegister();
|
void SetCpStatusRegister();
|
||||||
void ProcessFifoEvents();
|
|
||||||
|
|
||||||
} // namespace CommandProcessor
|
} // namespace CommandProcessor
|
||||||
|
|
Loading…
Reference in New Issue