DMA: Fix an unlikely case where LL DMA gets stuck on
Fixes Frogger.
This commit is contained in:
parent
dac114fa4e
commit
5cd78dcab5
|
@ -307,16 +307,16 @@ bool DMA::TransferChannel(Channel channel)
|
||||||
cs.base_address = current_address;
|
cs.base_address = current_address;
|
||||||
m_system->StallCPU(used_ticks);
|
m_system->StallCPU(used_ticks);
|
||||||
|
|
||||||
if (used_ticks >= m_max_slice_ticks)
|
|
||||||
{
|
|
||||||
// stall the transfer for a bit if we ran for too long
|
|
||||||
// Log_WarningPrintf("breaking dma chain at 0x%08X", current_address);
|
|
||||||
HaltTransfer(m_halt_ticks);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((current_address & UINT32_C(0x800000)) == 0)
|
if ((current_address & UINT32_C(0x800000)) == 0)
|
||||||
{
|
{
|
||||||
|
if (used_ticks >= m_max_slice_ticks && cs.request)
|
||||||
|
{
|
||||||
|
// stall the transfer for a bit if we ran for too long
|
||||||
|
// Log_WarningPrintf("breaking dma chain at 0x%08X", current_address);
|
||||||
|
HaltTransfer(m_halt_ticks);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// linked list not yet complete
|
// linked list not yet complete
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue