From 958c9818cc58f37048e80c99e711f619fc84de3c Mon Sep 17 00:00:00 2001 From: retro-wertz Date: Thu, 7 Mar 2019 17:34:09 +0800 Subject: Fix CD audio not playing on some platforms --- Makefile.libretro | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Makefile.libretro b/Makefile.libretro index a8c8c4a..28a47fd 100644 --- a/Makefile.libretro +++ b/Makefile.libretro @@ -36,6 +36,7 @@ LIBDL := -lroot -lnetwork else LIBDL := -ldl endif +LIBM := -lm MMAP_WIN32=0 EXTRA_LDFLAGS = @@ -54,6 +55,7 @@ else ifeq ($(platform), linux-portable) LIBZ := LIBPTHREAD := LIBDL := + LIBM := NO_UNDEF_CHECK = 1 # OS X @@ -215,6 +217,7 @@ else ifeq ($(platform), qnx) MAIN_LDLIBS += -lsocket LIBPTHREAD := LIBDL := + LIBM := #Raspberry Pi 2 else ifeq ($(platform), rpi2) @@ -317,11 +320,12 @@ else MAIN_LDLIBS += -lws2_32 LIBPTHREAD := LIBDL := + LIBM := endif CFLAGS += $(fpic) MAIN_LDFLAGS += -shared -MAIN_LDLIBS += $(LIBPTHREAD) $(LIBDL) $(LIBZ) +MAIN_LDLIBS += $(LIBPTHREAD) $(LIBM) $(LIBDL) $(LIBZ) # try to autodetect stuff for the lazy ifndef ARCH -- cgit v1.2.3 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(-) 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(-) 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 +++++++++++++++------- libpcsxcore/misc.c | 2 +- libpcsxcore/psxcommon.h | 1 + 3 files changed, 17 insertions(+), 8 deletions(-) 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); diff --git a/libpcsxcore/misc.c b/libpcsxcore/misc.c index 58170cf..bb34e5b 100644 --- a/libpcsxcore/misc.c +++ b/libpcsxcore/misc.c @@ -180,7 +180,7 @@ int LoadCdrom() { // is just below, do it here fake_bios_gpu_setup(); - if (!Config.HLE) { + if (!Config.HLE && !Config.SlowBoot) { // skip BIOS logos psxRegs.pc = psxRegs.GPR.n.ra; return 0; diff --git a/libpcsxcore/psxcommon.h b/libpcsxcore/psxcommon.h index 9f5444e..a7dd6ae 100644 --- a/libpcsxcore/psxcommon.h +++ b/libpcsxcore/psxcommon.h @@ -119,6 +119,7 @@ typedef struct { boolean PsxAuto; boolean Cdda; boolean HLE; + boolean SlowBoot; boolean Debug; boolean PsxOut; boolean SpuIrq; -- 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(-) 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