X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=frontend%2Flibretro.c;h=e4772848cf2c44c4fdb8abc3cf2d23fc649cb964;hb=de36a5369040b8a76db02d263ed8bb717ebf9157;hp=3e74b230273d89505aebef37b672da89c8d7939c;hpb=fae38d7aa986b5c0c156808b12e155de8fc0713d;p=pcsx_rearmed.git diff --git a/frontend/libretro.c b/frontend/libretro.c index 3e74b230..e4772848 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) @@ -1966,9 +1966,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 */ @@ -2074,6 +2076,16 @@ static void update_variables(bool in_flight) spu_config.iUseInterpolation = 0; } + var.value = NULL; + var.key = "pcsx_rearmed_spu_thread"; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) + { + if (strcmp(var.value, "enabled") == 0) + spu_config.iUseThread = 1; + else + spu_config.iUseThread = 0; + } + #ifndef _WIN32 var.value = NULL; var.key = "pcsx_rearmed_async_cd"; @@ -2421,17 +2433,19 @@ static void update_input_guncon(int port, int ret) //Mouse range is -32767 -> 32767 //1% is about 655 //Use the left analog stick field to store the absolute coordinates - //Fix cursor to top-left when gun is detected as "offscreen" + + int gunx = input_state_cb(port, RETRO_DEVICE_LIGHTGUN, 0, RETRO_DEVICE_ID_LIGHTGUN_SCREEN_X); + int guny = input_state_cb(port, RETRO_DEVICE_LIGHTGUN, 0, RETRO_DEVICE_ID_LIGHTGUN_SCREEN_Y); + + //Have the Libretro API let /libpcsxcore/plugins.c know when the lightgun is pointed offscreen + //Offscreen value is chosen to be well out of range of any possible scaling done via core options if (input_state_cb(port, RETRO_DEVICE_LIGHTGUN, 0, RETRO_DEVICE_ID_LIGHTGUN_IS_OFFSCREEN) || input_state_cb(port, RETRO_DEVICE_LIGHTGUN, 0, RETRO_DEVICE_ID_LIGHTGUN_RELOAD)) { - in_analog_left[port][0] = -32767; - in_analog_left[port][1] = -32767; + in_analog_left[port][0] = (65536 - 512) * 64; + in_analog_left[port][1] = (65536 - 512) * 64; } else { - int gunx = input_state_cb(port, RETRO_DEVICE_LIGHTGUN, 0, RETRO_DEVICE_ID_LIGHTGUN_SCREEN_X); - int guny = input_state_cb(port, RETRO_DEVICE_LIGHTGUN, 0, RETRO_DEVICE_ID_LIGHTGUN_SCREEN_Y); - in_analog_left[port][0] = (gunx * GunconAdjustRatioX) + (GunconAdjustX * 655); in_analog_left[port][1] = (guny * GunconAdjustRatioY) + (GunconAdjustY * 655); } @@ -2696,12 +2710,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 +2807,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; 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 +3151,5 @@ void SysDLog(const char *fmt, ...) if (log_cb) log_cb(RETRO_LOG_DEBUG, "%s", msg); } + +// vim:sw=3:ts=3:expandtab