X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=frontend%2Flibretro.c;h=23eecf6e25ec5ce5c5249e4f8cbc6a40f8cccf43;hb=48f615ba48949d7b6cf7b6765a15f069033a3fdd;hp=103ee8e552aee42394d9c75bd249254fb1ae183a;hpb=74ebc05b15569d7745b9ab59f9b289f427abeeac;p=pcsx_rearmed.git diff --git a/frontend/libretro.c b/frontend/libretro.c index 103ee8e5..23eecf6e 100644 --- a/frontend/libretro.c +++ b/frontend/libretro.c @@ -242,6 +242,10 @@ void retro_set_environment(retro_environment_t cb) static const struct retro_variable vars[] = { { "frameskip", "Frameskip; 0|1|2|3" }, { "region", "Region; Auto|NTSC|PAL" }, + { "pad1type", "Pad 1 Type; standard|analog" }, +#ifndef DRC_DISABLE + { "rearmed_drc", "Dynamic recompiler; enabled|disabled" }, +#endif #ifdef __ARM_NEON__ { "neon_interlace_enable", "Enable interlacing mode(s); disabled|enabled" }, { "neon_enhancement_enable", "Enhanced resolution (slow); disabled|enabled" }, @@ -785,6 +789,17 @@ static void update_variables(bool in_flight) else if (strcmp(var.value, "PAL") == 0) Config.PsxType = 1; } + + var.value = NULL; + var.key = "pad1type"; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value) + { + in_type1 = PSE_PAD_TYPE_STANDARD; + if (strcmp(var.value, "analog") == 0) + in_type1 = PSE_PAD_TYPE_ANALOGPAD; + } + #ifdef __ARM_NEON__ var.value = "NULL"; var.key = "neon_interlace_enable"; @@ -819,6 +834,27 @@ static void update_variables(bool in_flight) pl_rearmed_cbs.gpu_neon.enhancement_no_main = 1; } #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 @@ -852,6 +888,14 @@ void retro_run(void) if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i)) in_keystate |= retro_psx_map[i]; + if (in_type1 == PSE_PAD_TYPE_ANALOGPAD) + { + in_a1[0] = (input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X) / 256) + 128; + in_a1[1] = (input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y) / 256) + 128; + in_a2[0] = (input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X) / 256) + 128; + in_a2[1] = (input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y) / 256) + 128; + } + stop = 0; psxCpu->Execute();