if (ret != 0)
return 0;
- if (load)
+ if (load) {
ret = LoadState(fname);
+
+ // reflect hle/bios mode from savestate
+ if (Config.HLE)
+ bios_sel = 0;
+ else if (bios_sel == 0 && bioses[1] != NULL)
+ // XXX: maybe find the right bios instead
+ bios_sel = 1;
+ }
else
ret = SaveState(fname);
static const char h_cfg_spuirq[] = "Compatibility tweak; should probably be left off";
static const char h_cfg_rcnt1[] = "Parasite Eve 2, Vandal Hearts 1/2 Fix";
static const char h_cfg_rcnt2[] = "InuYasha Sengoku Battle Fix";
+static const char h_cfg_nodrc[] = "Disable dynamic recompiler and use interpreter\n"
+ "Might be useful to overcome some dynarec bugs";
static menu_entry e_menu_adv_options[] =
{
mee_onoff_h ("SPU IRQ Always Enabled", 0, Config.SpuIrq, 1, h_cfg_spuirq),
mee_onoff_h ("Rootcounter hack", 0, Config.RCntFix, 1, h_cfg_rcnt1),
mee_onoff_h ("Rootcounter hack 2", 0, Config.VSyncWA, 1, h_cfg_rcnt2),
+ mee_onoff_h ("Disable dynarec (slow!)",0, Config.Cpu, 1, h_cfg_nodrc),
mee_end,
};
void menu_prepare_emu(void)
{
+ R3000Acpu *prev_cpu = psxCpu;
+
plat_video_menu_leave();
switch (scaling) {
apply_cpu_clock();
stop = 0;
+ psxCpu = (Config.Cpu == CPU_INTERPRETER) ? &psxInt : &psxRec;
+ if (psxCpu != prev_cpu)
+ // note that this does not really reset, just clears drc caches
+ psxCpu->Reset();
+
// core doesn't care about Config.Cdda changes,
// so handle them manually here
if (Config.Cdda)