psxRegs.interrupt |= 1 << PSXINT_IRQ10;
psxRegs.intCycle[PSXINT_IRQ10].cycle = c;
psxRegs.intCycle[PSXINT_IRQ10].sCycle = rcnts[3].cycleStart;
- new_dyna_set_event(PSXINT_IRQ10, c);
+ new_dyna_set_event_abs(PSXINT_IRQ10, cycles_abs);
}
void irq10Interrupt() {
irq10count, psxRegs.cycle - prevc,
(psxRegs.CP0.n.SR & 0x401) != 0x401, !(psxHu32(0x1074) & 0x400));
#endif
- if (--irq10count > 0)
- psxScheduleIrq10One(prevc + PSXCLK / 60 / 263);
+ if (--irq10count > 0) {
+ u32 cycles_per_line = Config.PsxType
+ ? PSXCLK / 50 / 314 : PSXCLK / 60 / 263;
+ psxScheduleIrq10One(prevc + cycles_per_line);
+ }
}
void psxScheduleIrq10(int irq_count, int x_cycles, int y) {