X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libpcsxcore%2Fr3000a.c;h=8035dfd13bb289f6cc93ce0029d75ec6e527b418;hb=65722e0455a2a42eece5e67ce2e92bfac03e1368;hp=9b4793628638346c7959b238a6b3bdb577973508;hpb=11d23573173ec4b5074eb35665c6012a46034d5c;p=pcsx_rearmed.git diff --git a/libpcsxcore/r3000a.c b/libpcsxcore/r3000a.c index 9b479362..8035dfd1 100644 --- a/libpcsxcore/r3000a.c +++ b/libpcsxcore/r3000a.c @@ -26,6 +26,7 @@ #include "mdec.h" #include "gte.h" #include "psxinterpreter.h" +#include "psxbios.h" #include "../include/compiler_features.h" R3000Acpu *psxCpu = NULL; @@ -210,6 +211,8 @@ void psxBranchTest() { psxRegs.CP0.n.Cause |= 0x400; if (((psxRegs.CP0.n.Cause | 1) & psxRegs.CP0.n.SR & 0x401) == 0x401) psxException(0, 0, &psxRegs.CP0); + else if (unlikely(psxRegs.pc == psxRegs.biosBranchCheck)) + psxBiosCheckBranch(); } void psxJumpTest() { @@ -264,7 +267,7 @@ static void psxScheduleIrq10One(u32 cycles_abs) { 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() { @@ -280,8 +283,11 @@ 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) {