lightrec: Emulate BREAK
[pcsx_rearmed.git] / libpcsxcore / lightrec / plugin.c
index d3e4b33..1fe04f6 100644 (file)
@@ -470,8 +470,6 @@ static int lightrec_plugin_init(void)
                        lightrec_map, ARRAY_SIZE(lightrec_map),
                        &lightrec_ops);
 
-       lightrec_set_unsafe_opt_flags(lightrec_state, lightrec_hacks);
-
        // fprintf(stderr, "M=0x%lx, P=0x%lx, R=0x%lx, H=0x%lx\n",
        //              (uintptr_t) psxM,
        //              (uintptr_t) psxP,
@@ -527,6 +525,8 @@ static void lightrec_plugin_execute_internal(bool block_only)
 
                if (flags & LIGHTREC_EXIT_SYSCALL)
                        psxException(R3000E_Syscall << 2, 0, (psxCP0Regs *)regs->cp0);
+               if (flags & LIGHTREC_EXIT_BREAK)
+                       psxException(R3000E_Bp << 2, 0, (psxCP0Regs *)regs->cp0);
                else if (flags & LIGHTREC_EXIT_UNKNOWN_OP) {
                        u32 op = intFakeFetch(psxRegs.pc);
                        u32 hlec = op & 0x03ffffff;
@@ -625,6 +625,8 @@ static void lightrec_plugin_reset(void)
 
        regs->cp0[12] = 0x10900000; // COP0 enabled | BEV = 1 | TS = 1
        regs->cp0[15] = 0x00000002; // PRevID = Revision ID, same as R3000A
+
+       lightrec_set_unsafe_opt_flags(lightrec_state, lightrec_hacks);
 }
 
 static void lightrec_plugin_sync_regs_from_pcsx(bool need_cp2)