X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=frontend%2Flibretro.c;h=ccf14330776b7030a72df78f47dac2ffd4239de1;hb=2945189addb952d1b01eb1ea28de61adf96635aa;hp=e5ce194170e3ac5c8041d512604265867c6162e5;hpb=e7bf35317049a51f31a84f9ef42322548fb957cd;p=pcsx_rearmed.git diff --git a/frontend/libretro.c b/frontend/libretro.c index e5ce1941..ccf14330 100644 --- a/frontend/libretro.c +++ b/frontend/libretro.c @@ -28,6 +28,7 @@ #include "../plugins/dfinput/externals.h" #include "cspace.h" #include "main.h" +#include "menu.h" #include "plugin.h" #include "plugin_lib.h" #include "arm_features.h" @@ -50,6 +51,8 @@ #define ISHEXDEC ((buf[cursor]>='0') && (buf[cursor]<='9')) || ((buf[cursor]>='a') && (buf[cursor]<='f')) || ((buf[cursor]>='A') && (buf[cursor]<='F')) +#define INTERNAL_FPS_SAMPLE_PERIOD 64 + //hack to prevent retroarch freezing when reseting in the menu but not while running with the hot key static int rebootemu = 0; @@ -69,6 +72,8 @@ static int vout_doffs_old, vout_fb_dirty; static bool vout_can_dupe; static bool duping_enable; static bool found_bios; +static bool display_internal_fps = false; +static unsigned frame_count = 0; static int plugins_opened; static int is_pal_mode; @@ -497,13 +502,24 @@ void retro_set_environment(retro_environment_t cb) { "pcsx_rearmed_neon_enhancement_no_main", "Enhanced resolution speed hack; disabled|enabled" }, #endif { "pcsx_rearmed_duping_enable", "Frame duping; enabled|disabled" }, + { "pcsx_rearmed_display_internal_fps", "Display Internal FPS; disabled|enabled" }, { "pcsx_rearmed_show_bios_bootlogo", "Show Bios Bootlogo(Breaks some games); disabled|enabled" }, { "pcsx_rearmed_spu_reverb", "Sound: Reverb; enabled|disabled" }, { "pcsx_rearmed_spu_interpolation", "Sound: Interpolation; simple|gaussian|cubic|off" }, { "pcsx_rearmed_idiablofix", "Diablo Music Fix; disabled|enabled" }, { "pcsx_rearmed_pe2_fix", "Parasite Eve 2/Vandal Hearts 1/2 Fix; disabled|enabled" }, { "pcsx_rearmed_inuyasha_fix", "InuYasha Sengoku Battle Fix; disabled|enabled" }, - { NULL, NULL }, + + /* Advance options */ + { "pcsx_rearmed_noxadecoding", "XA Decoding; enabled|disabled" }, + { "pcsx_rearmed_nocdaudio", "CD Audio; enabled|disabled" }, +#ifndef DRC_DISABLE + { "pcsx_rearmed_nosmccheck", "(Speed Hack) Disable SMC Checks; disabled|enabled" }, + { "pcsx_rearmed_gteregsunneeded", "(Speed Hack) Assume GTE Regs Unneeded; disabled|enabled" }, + { "pcsx_rearmed_nogteflags", "(Speed Hack) Disable GTE Flags; disabled|enabled" }, +#endif + + { NULL, NULL } }; if (cb(RETRO_ENVIRONMENT_GET_LOG_INTERFACE, &logging)) @@ -691,7 +707,7 @@ void retro_get_system_info(struct retro_system_info *info) #define GIT_VERSION "" #endif info->library_version = "r22" GIT_VERSION; - info->valid_extensions = "bin|cue|img|mdf|pbp|toc|cbn|m3u"; + info->valid_extensions = "bin|cue|img|mdf|pbp|toc|cbn|m3u|chd"; info->need_fullpath = true; } @@ -1233,6 +1249,8 @@ bool retro_load_game(const struct retro_game_info *info) { 0 }, }; + frame_count = 0; + environ_cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, desc); #ifdef FRONTEND_SUPPORTS_RGB565 @@ -1491,6 +1509,17 @@ static void update_variables(bool in_flight) duping_enable = true; } + var.value = "NULL"; + var.key = "pcsx_rearmed_display_internal_fps"; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value) + { + if (strcmp(var.value, "disabled") == 0) + display_internal_fps = false; + else if (strcmp(var.value, "enabled") == 0) + display_internal_fps = true; + } + #ifndef DRC_DISABLE var.value = NULL; var.key = "pcsx_rearmed_drc"; @@ -1577,6 +1606,58 @@ static void update_variables(bool in_flight) Config.VSyncWA = 1; } + var.value = NULL; + var.key = "pcsx_rearmed_noxadecoding"; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value) + { + if (strcmp(var.value, "disabled") == 0) + Config.Xa = 1; + else + Config.Xa = 0; + } + + var.value = NULL; + var.key = "pcsx_rearmed_nocdaudio"; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value) + { + if (strcmp(var.value, "disabled") == 0) + Config.Cdda = 1; + else + Config.Cdda = 0; + } + +#ifndef DRC_DISABLE + var.value = NULL; + var.key = "pcsx_rearmed_nosmccheck"; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value) + { + if (strcmp(var.value, "enabled") == 0) + new_dynarec_hacks |= NDHACK_NO_SMC_CHECK; + else + new_dynarec_hacks &= ~NDHACK_NO_SMC_CHECK; + } + + var.value = NULL; + var.key = "pcsx_rearmed_gteregsunneeded"; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value) + { + if (strcmp(var.value, "enabled") == 0) + new_dynarec_hacks |= NDHACK_GTE_UNNEEDED; + else + new_dynarec_hacks &= ~NDHACK_GTE_UNNEEDED; + } + + var.value = NULL; + var.key = "pcsx_rearmed_nogteflags"; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value) + { + if (strcmp(var.value, "enabled") == 0) + new_dynarec_hacks |= NDHACK_GTE_NO_FLAGS; + else + new_dynarec_hacks &= ~NDHACK_GTE_NO_FLAGS; + } +#endif + if (in_flight) { // inform core things about possible config changes plugin_call_rearmed_cbs(); @@ -1664,6 +1745,31 @@ void retro_run(void) } } + if (display_internal_fps) { + frame_count++; + + if (frame_count % INTERNAL_FPS_SAMPLE_PERIOD == 0) { + unsigned internal_fps = pl_rearmed_cbs.flip_cnt * (is_pal_mode ? 50 : 60) / INTERNAL_FPS_SAMPLE_PERIOD; + char str[64]; + const char *strc = (const char*)str; + struct retro_message msg = + { + strc, + 180 + }; + + str[0] = '\0'; + + snprintf(str, sizeof(str), "Internal FPS: %2d", internal_fps); + + pl_rearmed_cbs.flip_cnt = 0; + + environ_cb(RETRO_ENVIRONMENT_SET_MESSAGE, &msg); + } + } else { + frame_count = 0; + } + input_poll_cb(); bool updated = false;