drc: optional address error exception support
[pcsx_rearmed.git] / libpcsxcore / new_dynarec / emu_if.c
index 50819e4..89716fa 100644 (file)
@@ -28,7 +28,7 @@ void pcsx_mtc0(u32 reg, u32 val)
        evprintf("MTC0 %d #%x @%08x %u\n", reg, val, psxRegs.pc, psxRegs.cycle);
        MTC0(&psxRegs, reg, val);
        gen_interupt(&psxRegs.CP0);
-       if (psxRegs.CP0.n.Cause & psxRegs.CP0.n.Status & 0x0300) // possible sw irq
+       if (psxRegs.CP0.n.Cause & psxRegs.CP0.n.SR & 0x0300) // possible sw irq
                pending_exception = 1;
 }
 
@@ -265,6 +265,17 @@ static void ari64_execute()
        }
 }
 
+static void ari64_execute_block(enum blockExecCaller caller)
+{
+       if (caller == EXEC_CALLER_BOOT)
+               stop++;
+
+       ari64_execute_until();
+
+       if (caller == EXEC_CALLER_BOOT)
+               stop--;
+}
+
 static void ari64_clear(u32 addr, u32 size)
 {
        size *= 4; /* PCSX uses DMA units (words) */
@@ -315,7 +326,7 @@ R3000Acpu psxRec = {
        ari64_init,
        ari64_reset,
        ari64_execute,
-       ari64_execute_until,
+       ari64_execute_block,
        ari64_clear,
        ari64_notify,
        ari64_apply_config,
@@ -326,7 +337,7 @@ R3000Acpu psxRec = {
 
 unsigned int address;
 int pending_exception, stop;
-unsigned int next_interupt;
+u32 next_interupt;
 int new_dynarec_did_compile;
 int cycle_multiplier_old;
 int new_dynarec_hacks_pergame;