X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=frontend%2Flibretro.c;h=e5b21d5293a2c6e715a4af48557f343bea5029ea;hb=f28d12a72998b0a6018b41af8f86a24b10ab506f;hp=3e74b230273d89505aebef37b672da89c8d7939c;hpb=8c84ba5f4478dd4e7cc48e86f1b023bc6b99ea9c;p=pcsx_rearmed.git diff --git a/frontend/libretro.c b/frontend/libretro.c index 3e74b230..e5b21d52 100644 --- a/frontend/libretro.c +++ b/frontend/libretro.c @@ -501,7 +501,7 @@ struct rearmed_cbs pl_rearmed_cbs = { void pl_frame_limit(void) { /* called once per frame, make psxCpu->Execute() above return */ - stop = 1; + stop++; } void pl_timing_prepare(int is_pal) @@ -1881,7 +1881,7 @@ static void update_variables(bool in_flight) #ifdef GPU_NEON var.value = NULL; - var.key = "pcsx_rearmed_neon_interlace_enable"; + var.key = "pcsx_rearmed_neon_interlace_enable_v2"; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { @@ -1889,6 +1889,8 @@ static void update_variables(bool in_flight) pl_rearmed_cbs.gpu_neon.allow_interlace = 0; else if (strcmp(var.value, "enabled") == 0) pl_rearmed_cbs.gpu_neon.allow_interlace = 1; + else // auto + pl_rearmed_cbs.gpu_neon.allow_interlace = 2; } var.value = NULL; @@ -1966,9 +1968,11 @@ static void update_variables(bool in_flight) psxCpu = (Config.Cpu == CPU_INTERPRETER) ? &psxInt : &psxRec; if (psxCpu != prev_cpu) { + prev_cpu->Notify(R3000ACPU_NOTIFY_BEFORE_SAVE, NULL); prev_cpu->Shutdown(); psxCpu->Init(); - psxCpu->Reset(); // not really a reset.. + psxCpu->Reset(); + psxCpu->Notify(R3000ACPU_NOTIFY_AFTER_LOAD, NULL); } } #endif /* !DRC_DISABLE */ @@ -2043,6 +2047,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 @@ -2074,28 +2088,38 @@ static void update_variables(bool in_flight) spu_config.iUseInterpolation = 0; } -#ifndef _WIN32 var.value = NULL; - var.key = "pcsx_rearmed_async_cd"; + var.key = "pcsx_rearmed_spu_thread"; 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 (strcmp(var.value, "enabled") == 0) + spu_config.iUseThread = 1; + else + spu_config.iUseThread = 0; + } + + if (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"; @@ -2696,12 +2720,6 @@ void retro_run(void) { rebootemu = 0; SysReset(); - if (!Config.HLE && !Config.SlowBoot) - { - // skip BIOS logos - psxRegs.pc = psxRegs.GPR.n.ra; - } - return; } print_internal_fps(); @@ -2799,23 +2817,36 @@ 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" }; DIR *dir; struct dirent *ent; bool ret = false; + size_t i; dir = opendir(dirpath); if (dir == NULL) return false; - while ((ent = readdir(dir))) + for (i = 0; i < (sizeof(substrings) / sizeof(substrings[0])); i++) { - if ((strncasecmp(ent->d_name, "scph", 4) != 0) && (strncasecmp(ent->d_name, "psx", 3) != 0)) - continue; - - snprintf(path, path_size, "%s%c%s", dirpath, SLASH, ent->d_name); - ret = try_use_bios(path); - if (ret) - break; + const char *substr = substrings[i]; + size_t len = strlen(substr); + rewinddir(dir); + while ((ent = readdir(dir))) + { + if ((strncasecmp(ent->d_name, substr, len) != 0)) + continue; + if (strstr(ent->d_name, "unirom")) + continue; + + snprintf(path, path_size, "%s%c%s", dirpath, SLASH, ent->d_name); + ret = try_use_bios(path); + if (ret) + { + closedir(dir); + return ret; + } + } } closedir(dir); return ret; @@ -3130,3 +3161,5 @@ void SysDLog(const char *fmt, ...) if (log_cb) log_cb(RETRO_LOG_DEBUG, "%s", msg); } + +// vim:sw=3:ts=3:expandtab