From 9f7442cbb486d18e1f120276145f3d22bf499a3f Mon Sep 17 00:00:00 2001 From: refraction Date: Mon, 26 Apr 2010 13:25:55 +0000 Subject: [PATCH] Fix for Dragon Quest 8 videos, possibly the others which were stopping early too, will need testing. git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2906 96395faa-99c1-11dd-bbfe-3dabce05a288 --- pcsx2/IPU/IPU.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pcsx2/IPU/IPU.cpp b/pcsx2/IPU/IPU.cpp index 14657fd63..00518c600 100644 --- a/pcsx2/IPU/IPU.cpp +++ b/pcsx2/IPU/IPU.cpp @@ -1366,6 +1366,15 @@ int IPU1dma() //We need to make sure GIF has flushed before sending IPU data, it seems to REALLY screw FFX videos //if(!WaitGSPaths()) return totalqwc; + if(ipu1dma->chcr.STR == false) + { + //We MUST stop the IPU from trying to fill the FIFO with more data if the DMA has been suspended + //if we don't, we risk causing the data to go out of sync with the fifo and we end up losing some! + //This is true for Dragons Quest 8 and probably others which suspend the DMA. + //DevCon.Warning("IPU1 running when IPU1 DMA disabled! CHCR %x QWC %x", ipu1dma->chcr._u32, ipu1dma->qwc); + return 0; + } + IPU_LOG("IPU1 DMA Called QWC %x Finished %d In Progress %d tadr %x", ipu1dma->qwc, IPU1Status.DMAFinished, IPU1Status.InProgress, ipu1dma->tadr); switch(IPU1Status.DMAMode) @@ -1580,7 +1589,6 @@ __forceinline void dmaIPU1() // toIPU if(ipu1dma->qwc == 0) { IPU1Status.InProgress = false; - IPU1Status.TagFollow = IPU1_TAG_NONE; IPU1Status.DMAFinished = false; } else