PCSX2: IPU Normal error end of video freeze fix

Fixes end of video freeze with IPU Normal error in games like Enter The
Matrix, Rygar, Freestyle Metal X, etc.
This commit is contained in:
FlatOutPS2 2016-08-09 14:06:21 +02:00
parent 0b86aad059
commit 59a4442880
1 changed files with 13 additions and 14 deletions

View File

@ -293,6 +293,19 @@ __fi void dmaIPU1() // toIPU
hwDmacIrq(DMAC_TO_IPU);
}
if (ipu1ch.chcr.MOD == NORMAL_MODE && ipu1ch.qwc == 0) //avoids freeze when IPU1 Normal error is triggered
{
/*ipu1ch.chcr.STR = false;
// Hack to force stop IPU
ipuRegs.cmd.BUSY = 0;
ipuRegs.ctrl.BUSY = 0;
ipuRegs.topbusy = 0;
//
hwDmacIrq(DMAC_TO_IPU);*/
IPU_LOG("IPU1 Normal error fix");
ipu1ch.qwc = 1;
}
if (ipu1ch.chcr.MOD == CHAIN_MODE) //Chain Mode
{
IPU_LOG("Setting up IPU1 Chain mode");
@ -322,25 +335,11 @@ __fi void dmaIPU1() // toIPU
}
else //Normal Mode
{
if(ipu1ch.qwc == 0)
{
ipu1ch.chcr.STR = false;
// Hack to force stop IPU
ipuRegs.cmd.BUSY = 0;
ipuRegs.ctrl.BUSY = 0;
ipuRegs.topbusy = 0;
//
hwDmacIrq(DMAC_TO_IPU);
Console.Warning("IPU1 Normal error!");
}
else
{
IPU_LOG("Setting up IPU1 Normal mode");
IPU1Status.InProgress = true;
IPU1Status.DMAFinished = true;
IPU1Status.DMAMode = DMA_MODE_NORMAL;
IPU1dma();
}
}
}