CPU: Support stalling CPU for bus activity such as DMA

This commit is contained in:
Connor McLaughlin 2019-10-18 00:20:38 +10:00
parent 0324ae2fd7
commit 9d5f3c1306
3 changed files with 13 additions and 0 deletions

View file

@ -35,6 +35,11 @@ public:
TickCount GetPendingTicks() const { return m_pending_ticks; } TickCount GetPendingTicks() const { return m_pending_ticks; }
void ResetPendingTicks() { m_pending_ticks = 0; } void ResetPendingTicks() { m_pending_ticks = 0; }
void AddPendingTicks(TickCount ticks)
{
m_pending_ticks += ticks;
m_downcount -= ticks;
}
void SetDowncount(TickCount downcount) { m_downcount = (downcount < m_downcount) ? downcount : m_downcount; } void SetDowncount(TickCount downcount) { m_downcount = (downcount < m_downcount) ? downcount : m_downcount; }
void ResetDowncount() { m_downcount = MAX_SLICE_SIZE; } void ResetDowncount() { m_downcount = MAX_SLICE_SIZE; }

View file

@ -296,6 +296,11 @@ void System::SetDowncount(TickCount downcount)
m_cpu->SetDowncount(downcount); m_cpu->SetDowncount(downcount);
} }
void System::StallCPU(TickCount ticks)
{
m_cpu->AddPendingTicks(ticks);
}
void System::SetController(u32 slot, std::shared_ptr<PadDevice> dev) void System::SetController(u32 slot, std::shared_ptr<PadDevice> dev)
{ {
m_pad->SetController(slot, std::move(dev)); m_pad->SetController(slot, std::move(dev));

View file

@ -58,6 +58,9 @@ public:
void SetDowncount(TickCount downcount); void SetDowncount(TickCount downcount);
void Synchronize(); void Synchronize();
// Adds ticks to the global tick counter, simulating the CPU being stalled.
void StallCPU(TickCount ticks);
void SetController(u32 slot, std::shared_ptr<PadDevice> dev); void SetController(u32 slot, std::shared_ptr<PadDevice> dev);
void SetMemoryCard(u32 slot, std::shared_ptr<PadDevice> dev); void SetMemoryCard(u32 slot, std::shared_ptr<PadDevice> dev);