X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=frontend%2Flibretro.c;h=bce05e893ac59e59f8b7dc1d9d0665878f1c5b6d;hb=c82d5b4ba31ae828cae27962f1a4d328fd4ea4da;hp=be132a15444133c4e3cfa9fa20c56f2d619ee33a;hpb=cbe0561f7794ced67ba38d0aa0f118fca21e367d;p=pcsx_rearmed.git diff --git a/frontend/libretro.c b/frontend/libretro.c index be132a15..bce05e89 100644 --- a/frontend/libretro.c +++ b/frontend/libretro.c @@ -243,7 +243,10 @@ void retro_set_environment(retro_environment_t cb) { "frameskip", "Frameskip; 0|1|2|3" }, { "region", "Region; Auto|NTSC|PAL" }, { "pad1type", "Pad 1 Type; standard|analog" }, -#ifdef __ARM_NEON__ +#ifndef DRC_DISABLE + { "rearmed_drc", "Dynamic recompiler; enabled|disabled" }, +#endif +#if defined(__ARM_NEON__) || defined(NEON_PC) { "neon_interlace_enable", "Enable interlacing mode(s); disabled|enabled" }, { "neon_enhancement_enable", "Enhanced resolution (slow); disabled|enabled" }, { "neon_enhancement_no_main", "Enhanced resolution speed hack; disabled|enabled" }, @@ -797,7 +800,7 @@ static void update_variables(bool in_flight) in_type1 = PSE_PAD_TYPE_ANALOGPAD; } -#ifdef __ARM_NEON__ +#if defined(__ARM_NEON__) || defined(NEON_PC) var.value = "NULL"; var.key = "neon_interlace_enable"; @@ -832,6 +835,28 @@ static void update_variables(bool in_flight) } #endif +#ifndef DRC_DISABLE + var.value = NULL; + var.key = "rearmed_drc"; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value) + { + R3000Acpu *prev_cpu = psxCpu; + + if (strcmp(var.value, "disabled") == 0) + Config.Cpu = CPU_INTERPRETER; + else if (strcmp(var.value, "enabled") == 0) + Config.Cpu = CPU_DYNAREC; + + psxCpu = (Config.Cpu == CPU_INTERPRETER) ? &psxInt : &psxRec; + if (psxCpu != prev_cpu) { + prev_cpu->Shutdown(); + psxCpu->Init(); + psxCpu->Reset(); // not really a reset.. + } + } +#endif + if (in_flight) { // inform core things about possible config changes plugin_call_rearmed_cbs();