// Stop transferring iop, and signal an interrupt. static __fi void EndIOP() { SIF_LOG("Sif2: End IOP"); sif2data = 0; //sif2.iop.end = false; sif2.iop.busy = false; if (sif2.iop.cycles == 0) { DevCon.Warning("SIF2 IOP: cycles = 0"); sif2.iop.cycles = 1; } // 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: //PSX_INT(IopEvt_SIF2, ( ( sif2.iop.cycles*BIAS ) / 4 ) / 8); PSX_INT(IopEvt_SIF2, sif2.iop.cycles); }
// Stop processing IOP, and signal an interrupt. static __fi void EndIOP() { sif1data = 0; sif1.iop.end = false; sif1.iop.busy = false; SIF_LOG("Sif 1: End IOP"); //Fixme ( voodoocycles ): //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 //Total cycles over 1024 makes SIF too slow to keep up the sound stream in so3... if (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) PSX_INT(IopEvt_SIF1, /*min((*/sif1.iop.cycles/* * 26*//*), 1024)*/); }
__fi void SIO_INT() { if( !(psxRegs.interrupt & (1<<IopEvt_SIO)) ) PSX_INT(IopEvt_SIO, 64 ); // PSXCLK/250000); }