- Adjust the IRQ cycles so ecco boots again.
- Also stopped it from doing IRQ when the cycle counts are zero, since that >should< mean
we had no transfer. In fact our SIF is commonly doing 0 sized memcpy's, probably due to the wrong approach we took with it.
- Note that this could break games, so please test! (It does fix Eternal Poison though.)

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2521 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
ramapcsx2 2010-01-25 16:38:34 +00:00
parent 4383cb5b0c
commit 79a212a3bc
1 changed files with 8 additions and 8 deletions

View File

@ -250,8 +250,8 @@ static __forceinline void SIF0EEend(int &cycles)
// Stop & signal interrupts on EE // Stop & signal interrupts on EE
sif0.end = 0; sif0.end = 0;
eesifbusy[0] = false; eesifbusy[0] = false;
if (cycles == 0) DevCon.Warning("EESIF0cycles = 0"); if (cycles == 0) DevCon.Warning("EESIF0cycles = 0"); // No transfer happened
CPU_INT(5, cycles*BIAS); else CPU_INT(5, cycles*BIAS); // Hence no Interrupt
} }
static __forceinline void SIF1EEend(int &cycles) static __forceinline void SIF1EEend(int &cycles)
@ -263,8 +263,8 @@ static __forceinline void SIF1EEend(int &cycles)
// Voodoocycles : Okami wants around 100 cycles when booting up // Voodoocycles : Okami wants around 100 cycles when booting up
// Other games reach like 50k cycles here, but the EE will long have given up by then and just retry. // Other games reach like 50k cycles here, but the EE will long have given up by then and just retry.
// (Cause of double interrupts on the EE) // (Cause of double interrupts on the EE)
if (cycles == 0) DevCon.Warning("EESIF1cycles = 0"); if (cycles == 0) DevCon.Warning("EESIF1cycles = 0"); // No transfer happened
CPU_INT(6, min((int)(cycles*BIAS), 384)); else CPU_INT(6, min((int)(cycles*BIAS), 384)); // Hence no Interrupt (fixes Eternal Poison reboot when selecting new game)
} }
static __forceinline void SIF0IOPend(int &psxCycles) static __forceinline void SIF0IOPend(int &psxCycles)
@ -276,8 +276,8 @@ static __forceinline void SIF0IOPend(int &psxCycles)
// 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)
// So when we're all done, the equation looks like thus: // So when we're all done, the equation looks like thus:
//PSX_INT(IopEvt_SIF0, ( ( psxCycles*BIAS ) / 4 ) / 8); //PSX_INT(IopEvt_SIF0, ( ( psxCycles*BIAS ) / 4 ) / 8);
if (psxCycles == 0) DevCon.Warning("IOPSIF0cycles = 0"); if (psxCycles == 0) DevCon.Warning("IOPSIF0cycles = 0"); // No transfer happened
PSX_INT(IopEvt_SIF0, psxCycles); else PSX_INT(IopEvt_SIF0, psxCycles); // Hence no Interrupt
} }
static __forceinline void SIF1IOPend(int &psxCycles) static __forceinline void SIF1IOPend(int &psxCycles)
@ -290,8 +290,8 @@ static __forceinline void SIF1IOPend(int &psxCycles)
//The *24 are needed for ecco the dolphin (CDVD hangs) and silver surfer (Pad not detected) //The *24 are needed for ecco the dolphin (CDVD hangs) and silver surfer (Pad not detected)
//Greater than *35 break rebooting when trying to play Tekken5 arcade history //Greater than *35 break rebooting when trying to play Tekken5 arcade history
//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 (psxCycles == 0) DevCon.Warning("IOPSIF1cycles = 0"); if (psxCycles == 0) DevCon.Warning("IOPSIF1cycles = 0"); // No transfer happened
PSX_INT(IopEvt_SIF1, min((psxCycles * 24), 1024)); else PSX_INT(IopEvt_SIF1, min((psxCycles * 26), 1024)); // Hence no Interrupt
} }
//General format of all the SIF#(EE/IOP)Dma functions is this: //General format of all the SIF#(EE/IOP)Dma functions is this: