psxbios: don't limit pointers to ram
[pcsx_rearmed.git] / libpcsxcore / r3000a.c
index 9b47936..8035dfd 100644 (file)
@@ -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) {