mirror of https://github.com/PCSX2/pcsx2.git
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:
parent
294705aea6
commit
6ffb25cb83
|
@ -164,7 +164,7 @@ static __forceinline void EndIOP()
|
||||||
|
|
||||||
if (sif0.iop.cycles == 0)
|
if (sif0.iop.cycles == 0)
|
||||||
{
|
{
|
||||||
SIF_LOG("SIF0 IOP: cycles = 0");
|
DevCon.Warning("SIF0 IOP: cycles = 0");
|
||||||
sif0.iop.cycles = 1;
|
sif0.iop.cycles = 1;
|
||||||
}
|
}
|
||||||
// iop is 1/8th the clock rate of the EE and psxcycles is in words (not quadwords)
|
// 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.
|
// Handle the EE transfer.
|
||||||
static __forceinline void HandleEETransfer()
|
static __forceinline void HandleEETransfer()
|
||||||
{
|
{
|
||||||
#ifdef PCSX2_DEVBUILD
|
|
||||||
if (dmacRegs->ctrl.STS == STS_SIF0)
|
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->qwc <= 0)
|
||||||
{
|
{
|
||||||
if ((sif0dma->chcr.MOD == NORMAL_MODE) || sif0.ee.end)
|
if ((sif0dma->chcr.MOD == NORMAL_MODE) || sif0.ee.end)
|
||||||
|
|
|
@ -191,7 +191,7 @@ static __forceinline void EndIOP()
|
||||||
//Total cycles over 1024 makes SIF too slow to keep up the sound stream in so3...
|
//Total cycles over 1024 makes SIF too slow to keep up the sound stream in so3...
|
||||||
if (sif1.iop.cycles == 0)
|
if (sif1.iop.cycles == 0)
|
||||||
{
|
{
|
||||||
SIF_LOG("SIF1 IOP: cycles = 0");
|
DevCon.Warning("SIF1 IOP: cycles = 0");
|
||||||
sif1.iop.cycles = 1;
|
sif1.iop.cycles = 1;
|
||||||
}
|
}
|
||||||
// iop is 1/8th the clock rate of the EE and psxcycles is in words (not quadwords)
|
// 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.
|
// Handle the EE transfer.
|
||||||
static __forceinline void HandleEETransfer()
|
static __forceinline void HandleEETransfer()
|
||||||
{
|
{
|
||||||
#ifdef PCSX2_DEVBUILD
|
|
||||||
if (dmacRegs->ctrl.STD == STD_SIF1)
|
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 there's no more to transfer.
|
||||||
if (sif1dma->qwc <= 0)
|
if (sif1dma->qwc <= 0)
|
||||||
|
|
Loading…
Reference in New Issue