From 79f29e0a90de800f4dc8b07c4ff4957e6ed6e7f3 Mon Sep 17 00:00:00 2001 From: retro-wertz Date: Thu, 7 Mar 2019 17:50:31 +0800 Subject: Fix detection for rumble interface --- frontend/libretro.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'frontend') diff --git a/frontend/libretro.c b/frontend/libretro.c index 7fa63cb..5e5d88c 100644 --- a/frontend/libretro.c +++ b/frontend/libretro.c @@ -57,7 +57,7 @@ static retro_input_poll_t input_poll_cb; static retro_input_state_t input_state_cb; static retro_environment_t environ_cb; static retro_audio_sample_batch_t audio_batch_cb; -static struct retro_rumble_interface rumble; +static retro_set_rumble_state_t rumble_cb; static struct retro_log_callback logging; static retro_log_printf_t log_cb; @@ -430,10 +430,13 @@ void pl_timing_prepare(int is_pal) void plat_trigger_vibrate(int pad, int low, int high) { - if(in_enable_vibration) + if (!rumble_cb) + return; + + if (in_enable_vibration) { - rumble.set_rumble_state(pad, RETRO_RUMBLE_STRONG, high << 8); - rumble.set_rumble_state(pad, RETRO_RUMBLE_WEAK, low ? 0xffff : 0x0); + rumble_cb(pad, RETRO_RUMBLE_STRONG, high << 8); + rumble_cb(pad, RETRO_RUMBLE_WEAK, low ? 0xffff : 0x0); } } @@ -1883,6 +1886,7 @@ static int init_memcards(void) void retro_init(void) { + struct retro_rumble_interface rumble; const char *bios[] = { "SCPH101", "SCPH7001", "SCPH5501", "SCPH1001", "scph101", "scph7001", "scph5501", "scph1001" @@ -1962,7 +1966,10 @@ void retro_init(void) environ_cb(RETRO_ENVIRONMENT_GET_CAN_DUPE, &vout_can_dupe); environ_cb(RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE, &disk_control); - environ_cb(RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE, &rumble); + + rumble_cb = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE, &rumble)) + rumble_cb = rumble.set_rumble_state; /* Set how much slower PSX CPU runs * 100 (so that 200 is 2 times) * we have to do this because cache misses and some IO penalties -- cgit v1.2.3 From 0963774720493115d123104f9ddc506d49a886bc Mon Sep 17 00:00:00 2001 From: retro-wertz Date: Thu, 7 Mar 2019 18:36:22 +0800 Subject: Run SysReset() only from retro_run, causes retroarch to freeze... ... on some platforms --- frontend/libretro.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'frontend') diff --git a/frontend/libretro.c b/frontend/libretro.c index 5e5d88c..ec0065d 100644 --- a/frontend/libretro.c +++ b/frontend/libretro.c @@ -1289,7 +1289,10 @@ bool retro_load_game(const struct retro_game_info *info) return false; } - SysReset(); + /* TODO: Calling SysReset() outside retro_run for some system + * causes RetroArch to freeze, e.g Ludo */ + //SysReset(); + rebootemu = 1; if (LoadCdrom() == -1) { log_cb(RETRO_LOG_INFO, "could not load CD\n"); -- cgit v1.2.3 From f422f444ca3ef7ecac9ac2ffc2f8e227578399a3 Mon Sep 17 00:00:00 2001 From: retro-wertz Date: Thu, 7 Mar 2019 19:17:45 +0800 Subject: Fix show bios bootlogo core option --- frontend/libretro.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'frontend') diff --git a/frontend/libretro.c b/frontend/libretro.c index ec0065d..2363c37 100644 --- a/frontend/libretro.c +++ b/frontend/libretro.c @@ -22,6 +22,7 @@ #include "../libpcsxcore/cdrom.h" #include "../libpcsxcore/cdriso.h" #include "../libpcsxcore/cheat.h" +#include "../libpcsxcore/r3000a.h" #include "../plugins/dfsound/out.h" #include "../plugins/dfsound/spu_config.h" #include "../plugins/dfinput/externals.h" @@ -1582,7 +1583,9 @@ static void update_variables(bool in_flight) if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value) { if (strcmp(var.value, "enabled") == 0) - rebootemu = 1; + Config.SlowBoot = 1; + else + Config.SlowBoot = 0; } } } @@ -1622,11 +1625,16 @@ static uint16_t get_analog_button(retro_input_state_t input_state_cb, int player void retro_run(void) { - int i; - //SysReset must be run while core is running,Not in menu (Locks up Retroarch) - if(rebootemu != 0){ - rebootemu = 0; - SysReset(); + int i; + //SysReset must be run while core is running,Not in menu (Locks up Retroarch) + if (rebootemu != 0) { + rebootemu = 0; + SysReset(); + if (!Config.HLE && !Config.SlowBoot) { + // skip BIOS logos + psxRegs.pc = psxRegs.GPR.n.ra; + return 0; + } } input_poll_cb(); @@ -1938,7 +1946,7 @@ void retro_init(void) #endif vout_buf_ptr = vout_buf; - + if (environ_cb(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &dir) && dir) { snprintf(Config.BiosDir, sizeof(Config.BiosDir), "%s", dir); -- cgit v1.2.3 From b8d1fb0981058cc8dba7ab45d90f480663bf1ab4 Mon Sep 17 00:00:00 2001 From: retro-wertz Date: Thu, 7 Mar 2019 19:59:53 +0800 Subject: Fix this... "invalid return 0" request --- frontend/libretro.c | 1 - 1 file changed, 1 deletion(-) (limited to 'frontend') diff --git a/frontend/libretro.c b/frontend/libretro.c index 2363c37..bc56ff8 100644 --- a/frontend/libretro.c +++ b/frontend/libretro.c @@ -1633,7 +1633,6 @@ void retro_run(void) if (!Config.HLE && !Config.SlowBoot) { // skip BIOS logos psxRegs.pc = psxRegs.GPR.n.ra; - return 0; } } -- cgit v1.2.3