X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libpcsxcore%2Flightrec%2Fplugin.c;h=d51fbc24f68b7873524c01591de5767117c242f3;hb=b51e7884dc9a1d04f852cb3a12d2033a4d930024;hp=7248c178260d9dbf142137ee5808056841f1982b;hpb=ec4baa7d5d08c244066f11638298e20e37f91368;p=pcsx_rearmed.git diff --git a/libpcsxcore/lightrec/plugin.c b/libpcsxcore/lightrec/plugin.c index 7248c178..d51fbc24 100644 --- a/libpcsxcore/lightrec/plugin.c +++ b/libpcsxcore/lightrec/plugin.c @@ -66,6 +66,8 @@ static bool use_lightrec_interpreter; static bool use_pcsx_interpreter; static bool block_stepping; +extern u32 lightrec_hacks; + enum my_cp2_opcodes { OP_CP2_RTPS = 0x01, OP_CP2_NCLIP = 0x06, @@ -490,6 +492,9 @@ static void lightrec_plugin_execute_internal(bool block_only) regs = lightrec_get_registers(lightrec_state); gen_interupt((psxCP0Regs *)regs->cp0); + if (!block_only && stop) + return; + cycles_pcsx = next_interupt - psxRegs.cycle; assert((s32)cycles_pcsx > 0); @@ -523,6 +528,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; @@ -545,8 +552,6 @@ static void lightrec_plugin_execute_internal(bool block_only) static void lightrec_plugin_execute(void) { - extern int stop; - while (!stop) lightrec_plugin_execute_internal(false); } @@ -621,6 +626,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)