X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libpcsxcore%2Fnew_dynarec%2Fevents.c;h=2bc93326f8453848af224bf5b97f754de618c0fc;hb=eb38e4a2fbcdece0afdea63f6f0ad3b2a84cb8a5;hp=71aed6b2cc90982674e0352c136656366aa1da42;hpb=bc7c5acb6eb1ac9adc6b4381a2c2b2baffd5aebe;p=pcsx_rearmed.git diff --git a/libpcsxcore/new_dynarec/events.c b/libpcsxcore/new_dynarec/events.c index 71aed6b2..2bc93326 100644 --- a/libpcsxcore/new_dynarec/events.c +++ b/libpcsxcore/new_dynarec/events.c @@ -12,7 +12,7 @@ extern int pending_exception; u32 event_cycles[PSXINT_COUNT]; -void schedule_timeslice(void) +u32 schedule_timeslice(void) { u32 i, c = psxRegs.cycle; u32 irqs = psxRegs.interrupt; @@ -28,10 +28,7 @@ void schedule_timeslice(void) min = dif; } next_interupt = c + min; -} - -static void unusedInterrupt() -{ + return next_interupt; } typedef void (irq_func)(); @@ -47,7 +44,7 @@ static irq_func * const irq_funcs[] = { [PSXINT_GPUOTCDMA] = gpuotcInterrupt, [PSXINT_CDRDMA] = cdrDmaInterrupt, [PSXINT_CDRLID] = cdrLidSeekInterrupt, - [PSXINT_CDRPLAY_OLD] = unusedInterrupt, + [PSXINT_IRQ10] = irq10Interrupt, [PSXINT_SPU_UPDATE] = spuUpdate, [PSXINT_RCNT] = psxRcntUpdate, }; @@ -68,8 +65,11 @@ static void irq_test(psxCP0Regs *cp0) } } - if ((psxHu32(0x1070) & psxHu32(0x1074)) && (cp0->n.SR & 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; } }