prev_cpu->Notify(R3000ACPU_NOTIFY_BEFORE_SAVE, NULL);
prev_cpu->Shutdown();
psxCpu->Init();
- psxCpu->Reset();
psxCpu->Notify(R3000ACPU_NOTIFY_AFTER_LOAD, NULL);
}
}
prev_cpu->Notify(R3000ACPU_NOTIFY_BEFORE_SAVE, NULL);
prev_cpu->Shutdown();
psxCpu->Init();
- psxCpu->Reset();
psxCpu->Notify(R3000ACPU_NOTIFY_AFTER_LOAD, NULL);
}
extern u32 lightrec_hacks;
+static void lightrec_plugin_apply_config();
extern void lightrec_code_inv(void *ptr, uint32_t len);
enum my_cp2_opcodes {
#ifndef _WIN32
signal(SIGPIPE, exit);
#endif
+ lightrec_plugin_apply_config();
return 0;
}
cycles_per_op_old = cycles_per_op;
lightrec_set_cycles_per_opcode(lightrec_state, cycles_per_op);
+ lightrec_set_unsafe_opt_flags(lightrec_state, lightrec_hacks);
intApplyConfig();
}
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)
psxHwFreeze(f, 0);
psxRcntFreeze(f, 0);
mdecFreeze(f, 0);
+
+ if (Config.HLE != oldhle) {
+ // at least ari64 drc compiles differently so hard reset
+ psxCpu->Shutdown();
+ psxCpu->Init();
+ }
ndrc_freeze(f, 0);
padFreeze(f, 0);
if (Config.HLE)
psxBiosCheckExe(biosBranchCheckOld, 0x60, 1);
- if (Config.HLE != oldhle) {
- // at least ari64 drc compiles differently so hard reset
- psxCpu->Shutdown();
- psxCpu->Init();
- }
psxCpu->Notify(R3000ACPU_NOTIFY_AFTER_LOAD, NULL);
result = 0;
zeromem_ptr = zero_mem;
scratch_buf_ptr = scratch_buf; // for gte_neon.S
+ ndrc_g.cycle_multiplier_old = Config.cycle_multiplier;
+ ndrc_g.hacks_old = ndrc_g.hacks | ndrc_g.hacks_pergame;
+ ari64_apply_config();
ari64_thread_init();
return 0;
///////////////////////////////////////////
static int intInit() {
+ intApplyConfig();
return 0;
}
#define __PSXINTERPRETER_H__
struct psxRegisters;
+struct psxCP2Regs;
// get an opcode without triggering exceptions or affecting cache
u32 intFakeFetch(u32 pc);