This should be the proper fix for Eternal Poison dieing on reboots.

Bit ugly code though..

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2791 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
ramapcsx2 2010-03-29 18:56:40 +00:00
parent 294705aea6
commit 6ffb25cb83
2 changed files with 21 additions and 9 deletions

View File

@ -164,7 +164,7 @@ static __forceinline void EndIOP()
if (sif0.iop.cycles == 0)
{
SIF_LOG("SIF0 IOP: cycles = 0");
DevCon.Warning("SIF0 IOP: cycles = 0");
sif0.iop.cycles = 1;
}
// iop is 1/8th the clock rate of the EE and psxcycles is in words (not quadwords)
@ -176,13 +176,19 @@ static __forceinline void EndIOP()
// Handle the EE transfer.
static __forceinline void HandleEETransfer()
{
#ifdef PCSX2_DEVBUILD
if (dmacRegs->ctrl.STS == STS_SIF0)
{
SIF_LOG("SIF0 stall control");
DevCon.Warning("SIF0 stall control");
}
#endif
if (sif0dma->qwc == 0)
if (sif0dma->chcr.MOD == NORMAL_MODE)
if (!sif0.ee.end){
DevCon.Warning("sif0 irq prevented");
done = true;
return;
}
if (sif0dma->qwc <= 0)
{
if ((sif0dma->chcr.MOD == NORMAL_MODE) || sif0.ee.end)

View File

@ -191,7 +191,7 @@ static __forceinline void EndIOP()
//Total cycles over 1024 makes SIF too slow to keep up the sound stream in so3...
if (sif1.iop.cycles == 0)
{
SIF_LOG("SIF1 IOP: cycles = 0");
DevCon.Warning("SIF1 IOP: cycles = 0");
sif1.iop.cycles = 1;
}
// iop is 1/8th the clock rate of the EE and psxcycles is in words (not quadwords)
@ -201,12 +201,18 @@ static __forceinline void EndIOP()
// Handle the EE transfer.
static __forceinline void HandleEETransfer()
{
#ifdef PCSX2_DEVBUILD
if (dmacRegs->ctrl.STD == STD_SIF1)
{
SIF_LOG("SIF1 stall control"); // STD == fromSIF1
DevCon.Warning("SIF1 stall control"); // STD == fromSIF1
}
#endif
if (sif1dma->qwc == 0)
if (sif1dma->chcr.MOD == NORMAL_MODE)
if (!sif1.ee.end){
DevCon.Warning("sif1 irq prevented");
done = true;
return;
}
// If there's no more to transfer.
if (sif1dma->qwc <= 0)