X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=frontend%2Flibretro.c;h=5d876ae4ab09db90819708135b03316d9ddf4fec;hb=8cddf57556a1fc436981a32637a0e5c9d7f13e3f;hp=21189d6fa85d698e959ba8958c114ceea6d2b574;hpb=4c20e9554b257c1bbd91b865d193ac8954638d3f;p=pcsx_rearmed.git diff --git a/frontend/libretro.c b/frontend/libretro.c index 21189d6f..5d876ae4 100644 --- a/frontend/libretro.c +++ b/frontend/libretro.c @@ -1471,6 +1471,8 @@ bool retro_load_game(const struct retro_game_info *info) size_t i; unsigned int cd_index = 0; bool is_m3u = (strcasestr(info->path, ".m3u") != NULL); + bool is_exe = (strcasestr(info->path, ".exe") != NULL); + int ret; struct retro_input_descriptor desc[] = { #define JOYP(port) \ @@ -1664,7 +1666,7 @@ bool retro_load_game(const struct retro_game_info *info) plugin_call_rearmed_cbs(); /* dfinput_activate(); */ - if (CheckCdrom() == -1) + if (!is_exe && CheckCdrom() == -1) { log_cb(RETRO_LOG_INFO, "unsupported/invalid CD image: %s\n", info->path); return false; @@ -1672,9 +1674,13 @@ bool retro_load_game(const struct retro_game_info *info) SysReset(); - if (LoadCdrom() == -1) + if (is_exe) + ret = Load(info->path); + else + ret = LoadCdrom(); + if (ret != 0) { - log_cb(RETRO_LOG_INFO, "could not load CD\n"); + log_cb(RETRO_LOG_INFO, "could not load %s (%d)\n", is_exe ? "exe" : "CD", ret); return false; } emu_on_new_cd(0); @@ -2047,6 +2053,16 @@ static void update_variables(bool in_flight) Config.icache_emulation = 1; } + var.value = NULL; + var.key = "pcsx_rearmed_exception_emulation"; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) + { + if (strcmp(var.value, "enabled") == 0) + Config.PreciseExceptions = 1; + else + Config.PreciseExceptions = 0; + } + psxCpu->ApplyConfig(); // end of CPU emu config @@ -2088,28 +2104,28 @@ static void update_variables(bool in_flight) spu_config.iUseThread = 0; } -#ifndef _WIN32 - var.value = NULL; - var.key = "pcsx_rearmed_async_cd"; - if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) - { - if (strcmp(var.value, "async") == 0) - { - Config.AsyncCD = 1; - Config.CHD_Precache = 0; - } - else if (strcmp(var.value, "sync") == 0) - { - Config.AsyncCD = 0; - Config.CHD_Precache = 0; - } - else if (strcmp(var.value, "precache") == 0) - { - Config.AsyncCD = 0; - Config.CHD_Precache = 1; - } + if (P_HAVE_PTHREAD) { + var.value = NULL; + var.key = "pcsx_rearmed_async_cd"; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) + { + if (strcmp(var.value, "async") == 0) + { + Config.AsyncCD = 1; + Config.CHD_Precache = 0; + } + else if (strcmp(var.value, "sync") == 0) + { + Config.AsyncCD = 0; + Config.CHD_Precache = 0; + } + else if (strcmp(var.value, "precache") == 0) + { + Config.AsyncCD = 0; + Config.CHD_Precache = 1; + } + } } -#endif var.value = NULL; var.key = "pcsx_rearmed_noxadecoding"; @@ -2807,7 +2823,7 @@ static bool try_use_bios(const char *path) static bool find_any_bios(const char *dirpath, char *path, size_t path_size) { - static const char *substrings[] = { "scph", "psx", "openbios" }; + static const char *substrings[] = { "scph", "ps", "openbios" }; DIR *dir; struct dirent *ent; bool ret = false; @@ -3027,7 +3043,7 @@ void retro_init(void) #ifdef _3DS vout_buf = linearMemAlign(VOUT_MAX_WIDTH * VOUT_MAX_HEIGHT * 2, 0x80); -#elif defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200112L) && !defined(VITA) && !defined(__SWITCH__) +#elif defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200112L) && P_HAVE_POSIX_MEMALIGN if (posix_memalign(&vout_buf, 16, VOUT_MAX_WIDTH * VOUT_MAX_HEIGHT * 2) != 0) vout_buf = (void *) 0; #else