mirror of https://github.com/PCSX2/pcsx2.git
IPU DMA: If no underflow occurs on QWC = 0, end DMA.
Explanation in changes
This commit is contained in:
parent
398f675412
commit
7b6db5ad7a
|
@ -197,6 +197,19 @@ __fi void dmaIPU0() // fromIPU
|
||||||
//IPU_INT_FROM( 160 );
|
//IPU_INT_FROM( 160 );
|
||||||
// Update 22/12/2021 - Doesn't seem to need this now after fixing some FIFO/DMA behaviour
|
// Update 22/12/2021 - Doesn't seem to need this now after fixing some FIFO/DMA behaviour
|
||||||
IPU0dma();
|
IPU0dma();
|
||||||
|
|
||||||
|
// Explanation of this:
|
||||||
|
// The DMA logic on a NORMAL transfer is generally a "transfer first, ask questions later" so when it's sent
|
||||||
|
// QWC == 0 (which we change to 0x10000) it transfers, causing an underflow, then asks if it's reached 0
|
||||||
|
// since IPU_FROM is beholden to the OUT FIFO, if there's nothing to transfer, it will stay at 0 and won't underflow
|
||||||
|
// so the DMA will end.
|
||||||
|
if (ipu0ch.qwc == 0x10000)
|
||||||
|
{
|
||||||
|
ipu0ch.qwc = 0;
|
||||||
|
ipu0ch.chcr.STR = false;
|
||||||
|
hwDmacIrq(DMAC_FROM_IPU);
|
||||||
|
DMA_LOG("IPU0 DMA End");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
__fi void dmaIPU1() // toIPU
|
__fi void dmaIPU1() // toIPU
|
||||||
|
|
Loading…
Reference in New Issue