void psxReset() {
psxMemReset();
- memset(&psxRegs, 0, sizeof(psxRegs));
+ memset(&psxRegs, 0x00, sizeof(psxRegs));
psxRegs.pc = 0xbfc00000; // Start in bootstrap
}
// Set the Cause
- psxRegs.CP0.n.Cause = code;
+ psxRegs.CP0.n.Cause = (psxRegs.CP0.n.Cause & 0x300) | code;
// Set the EPC & PC
if (bd) {
cdrLidSeekInterrupt();
}
}
+ if (psxRegs.interrupt & (1 << PSXINT_SPU_UPDATE)) { // scheduled spu update
+ if ((psxRegs.cycle - psxRegs.intCycle[PSXINT_SPU_UPDATE].sCycle) >= psxRegs.intCycle[PSXINT_SPU_UPDATE].cycle) {
+ psxRegs.interrupt &= ~(1 << PSXINT_SPU_UPDATE);
+ spuUpdate();
+ }
+ }
}
if (psxHu32(0x1070) & psxHu32(0x1074)) {