X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=frontend%2Flibretro.c;h=5fbabdab1a7918819f5635c2bcb31215e06c74d9;hb=6cb1dcb1f49337ba124e9243ed93da1566dad773;hp=f94bcc68769b33c19adceb4dddc2a2361b2cf031;hpb=4ee722a52cb0fb56260ccd3962537e5c772800e0;p=pcsx_rearmed.git diff --git a/frontend/libretro.c b/frontend/libretro.c index f94bcc68..5fbabdab 100644 --- a/frontend/libretro.c +++ b/frontend/libretro.c @@ -39,9 +39,12 @@ #include "revision.h" #include -#include #include "libretro_core_options.h" +#ifdef USE_LIBRETRO_VFS +#include +#endif + #ifdef _3DS #include "3ds/3ds_utils.h" #endif @@ -556,6 +559,10 @@ static const struct retro_controller_info ports[9] = /* libretro */ void retro_set_environment(retro_environment_t cb) { +#ifdef USE_LIBRETRO_VFS + struct retro_vfs_interface_info vfs_iface_info; +#endif + environ_cb = cb; if (cb(RETRO_ENVIRONMENT_GET_LOG_INTERFACE, &logging)) @@ -563,6 +570,13 @@ void retro_set_environment(retro_environment_t cb) environ_cb(RETRO_ENVIRONMENT_SET_CONTROLLER_INFO, (void*)ports); libretro_set_core_options(environ_cb); + +#ifdef USE_LIBRETRO_VFS + vfs_iface_info.required_interface_version = 1; + vfs_iface_info.iface = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VFS_INTERFACE, &vfs_iface_info)) + filestream_vfs_init(&vfs_iface_info); +#endif } void retro_set_video_refresh(retro_video_refresh_t cb) { video_cb = cb; } @@ -578,53 +592,24 @@ unsigned retro_api_version(void) static void update_multitap(void) { - struct retro_variable var; - int auto_case, port; - - var.value = NULL; - var.key = "pcsx_rearmed_multitap1"; - auto_case = 0; - if (environ_cb && (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)) - { - if (strcmp(var.value, "enabled") == 0) - multitap1 = 1; - else if (strcmp(var.value, "disabled") == 0) - multitap1 = 0; - else if (strcmp(var.value, "automatic") == 0) - auto_case = 1; - } - else - multitap1 = 0; + struct retro_variable var = { 0 }; - if (auto_case) - { - // If a gamepad is plugged after port 2, we need a first multitap. - multitap1 = 0; - for (port = 2; port < PORTS_NUMBER; port++) - multitap1 |= in_type[port] != PSE_PAD_TYPE_NONE; - } + multitap1 = 0; + multitap2 = 0; var.value = NULL; - var.key = "pcsx_rearmed_multitap2"; - auto_case = 0; + var.key = "pcsx_rearmed_multitap"; if (environ_cb && (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)) { - if (strcmp(var.value, "enabled") == 0) + if (strcmp(var.value, "port 1") == 0) + multitap1 = 1; + else if (strcmp(var.value, "port 2") == 0) multitap2 = 1; - else if (strcmp(var.value, "disabled") == 0) - multitap2 = 0; - else if (strcmp(var.value, "automatic") == 0) - auto_case = 1; - } - else - multitap2 = 0; - - if (auto_case) - { - // If a gamepad is plugged after port 4, we need a second multitap. - multitap2 = 0; - for (port = 4; port < PORTS_NUMBER; port++) - multitap2 |= in_type[port] != PSE_PAD_TYPE_NONE; + else if (strcmp(var.value, "ports 1 and 2") == 0) + { + multitap1 = 1; + multitap2 = 1; + } } } @@ -661,6 +646,7 @@ void retro_set_controller_port_device(unsigned port, unsigned device) } SysPrintf("port: %u device: %s\n", port + 1, get_pse_pad_label[in_type[port]]); + input_changed = 1; } void retro_get_system_info(struct retro_system_info *info) @@ -1113,11 +1099,11 @@ static bool read_m3u(const char *file) { char line[1024]; char name[PATH_MAX]; - FILE *f = fopen_utf8(file, "r"); - if (!f) + FILE *fp = fopen(file, "r"); + if (!fp) return false; - while (fgets(line, sizeof(line), f) && disk_count < sizeof(disks) / sizeof(disks[0])) + while (fgets(line, sizeof(line), fp) && disk_count < sizeof(disks) / sizeof(disks[0])) { if (line[0] == '#') continue; @@ -1143,7 +1129,7 @@ static bool read_m3u(const char *file) } } - fclose(f); + fclose(fp); return (disk_count != 0); } @@ -2569,17 +2555,15 @@ void retro_run(void) static bool try_use_bios(const char *path) { - FILE *f; long size; const char *name; - - f = fopen_utf8(path, "rb"); - if (f == NULL) + FILE *fp = fopen(path, "rb"); + if (fp == NULL) return false; - fseek(f, 0, SEEK_END); - size = ftell(f); - fclose(f); + fseek(fp, 0, SEEK_END); + size = ftell(fp); + fclose(fp); if (size != 512 * 1024) return false;