Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Core fixes #235

Merged
merged 5 commits into from Mar 7, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion Makefile.libretro
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ LIBDL := -lroot -lnetwork
else
LIBDL := -ldl
endif
LIBM := -lm
MMAP_WIN32=0
EXTRA_LDFLAGS =

Expand All @@ -54,6 +55,7 @@ else ifeq ($(platform), linux-portable)
LIBZ :=
LIBPTHREAD :=
LIBDL :=
LIBM :=
NO_UNDEF_CHECK = 1

# OS X
Expand Down Expand Up @@ -215,6 +217,7 @@ else ifeq ($(platform), qnx)
MAIN_LDLIBS += -lsocket
LIBPTHREAD :=
LIBDL :=
LIBM :=

#Raspberry Pi 2
else ifeq ($(platform), rpi2)
Expand Down Expand Up @@ -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
Expand Down
43 changes: 30 additions & 13 deletions frontend/libretro.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -57,7 +58,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;

Expand Down Expand Up @@ -430,10 +431,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);
}
}

Expand Down Expand Up @@ -1286,7 +1290,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");
Expand Down Expand Up @@ -1576,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;
}
}
}
Expand Down Expand Up @@ -1616,11 +1625,15 @@ 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;
}
}

input_poll_cb();
Expand Down Expand Up @@ -1883,6 +1896,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"
Expand Down Expand Up @@ -1931,7 +1945,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);
Expand Down Expand Up @@ -1962,7 +1976,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
Expand Down
2 changes: 1 addition & 1 deletion libpcsxcore/misc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
1 change: 1 addition & 0 deletions libpcsxcore/psxcommon.h
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ typedef struct {
boolean PsxAuto;
boolean Cdda;
boolean HLE;
boolean SlowBoot;
boolean Debug;
boolean PsxOut;
boolean SpuIrq;
Expand Down