Found and fixed the issue causing some FFX battles to hang since ~400 revs ago.

The same problem caused the hang in Phantasy Star 4 when pressing pause.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3645 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
ramapcsx2 2010-08-16 18:04:05 +00:00
parent a8e406523b
commit 6798f27d4d
2 changed files with 24 additions and 12 deletions

View File

@ -342,11 +342,17 @@ __fi void dmaSIF0()
psHu32(SBUS_F240) |= 0x2000; psHu32(SBUS_F240) |= 0x2000;
sif0.ee.busy = true; sif0.ee.busy = true;
/*if (sif0.iop.busy) // Okay, this here is needed currently (r3644).
{*/ // FFX battles in the thunder plains map die otherwise, Phantasy Star 4 as well
hwIntcIrq(INTC_SBUS); // These 2 games could be made playable again by increasing the time the EE or the IOP run,
// showing that this is very timing sensible.
// Doing this DMA unfortunately brings back an old warning in Legend of Legaia though, but it still works.
if (sif0.iop.busy)
{
//hwIntcIrq(INTC_SBUS); // not sure, so let's not
SIF0Dma(); SIF0Dma();
psHu32(SBUS_F240) &= ~0x20; // Do we really want to mess with the SIF flags like that? Nah.
psHu32(SBUS_F240) &= ~0x2000; //psHu32(SBUS_F240) &= ~0x20;
//} //psHu32(SBUS_F240) &= ~0x2000;
}
} }

View File

@ -341,11 +341,17 @@ __fi void dmaSIF1()
psHu32(SBUS_F240) |= 0x4000; psHu32(SBUS_F240) |= 0x4000;
sif1.ee.busy = true; sif1.ee.busy = true;
/*if (sif1.iop.busy) // Okay, this here is needed currently (r3644).
{*/ // FFX battles in the thunder plains map die otherwise, Phantasy Star 4 as well
// These 2 games could be made playable again by increasing the time the EE or the IOP run,
// showing that this is very timing sensible.
// Doing this DMA unfortunately brings back an old warning in Legend of Legaia though, but it still works.
if (sif1.iop.busy)
{
SIF1Dma(); SIF1Dma();
psHu32(SBUS_F240) &= ~0x40; // Do we really want to mess with the SIF flags like that? Nah.
psHu32(SBUS_F240) &= ~0x100; //psHu32(SBUS_F240) &= ~0x40;
psHu32(SBUS_F240) &= ~0x4000; //psHu32(SBUS_F240) &= ~0x100;
//} //psHu32(SBUS_F240) &= ~0x4000;
}
} }