u32 event_cycles[PSXINT_COUNT];
-void schedule_timeslice(void)
+u32 schedule_timeslice(void)
{
u32 i, c = psxRegs.cycle;
u32 irqs = psxRegs.interrupt;
min = dif;
}
next_interupt = c + min;
-}
-
-static void unusedInterrupt()
-{
+ return next_interupt;
}
typedef void (irq_func)();
[PSXINT_GPUOTCDMA] = gpuotcInterrupt,
[PSXINT_CDRDMA] = cdrDmaInterrupt,
[PSXINT_CDRLID] = cdrLidSeekInterrupt,
- [PSXINT_CDRPLAY_OLD] = unusedInterrupt,
+ [PSXINT_IRQ10] = irq10Interrupt,
[PSXINT_SPU_UPDATE] = spuUpdate,
[PSXINT_RCNT] = psxRcntUpdate,
};
}
}
- if ((psxHu32(0x1070) & psxHu32(0x1074)) && (cp0->n.Status & 0x401) == 0x401) {
- psxException(0x400, 0, cp0);
+ cp0->n.Cause &= ~0x400;
+ if (psxHu32(0x1070) & psxHu32(0x1074))
+ cp0->n.Cause |= 0x400;
+ if (((cp0->n.Cause | 1) & cp0->n.SR & 0x401) == 0x401) {
+ psxException(0, 0, cp0);
pending_exception = 1;
}
}