#include <libretro.h>
#include "libretro_core_options.h"
+#ifdef USE_LIBRETRO_VFS
+#include <streams/file_stream_transforms.h>
+#endif
+
#ifdef _3DS
#include "3ds/3ds_utils.h"
#endif
int multitap1 = 0;
int multitap2 = 0;
int in_enable_vibration = 1;
-static int input_changed = 0;
// NegCon adjustment parameters
// > The NegCon 'twist' action is somewhat awkward when mapped
/* 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))
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; }
static void update_multitap(void)
{
- struct retro_variable var;
- int auto_case, port;
+ struct retro_variable var = { 0 };
- 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 // 'auto' case
- auto_case = 1;
- }
- else
- auto_case = 1;
-
- 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 // 'auto' case
- auto_case = 1;
- }
- else
- auto_case = 1;
-
- 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;
+ }
}
}
{
char line[1024];
char name[PATH_MAX];
- FILE *f = fopen(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;
}
}
- fclose(f);
+ fclose(fp);
return (disk_count != 0);
}
}
}
+ /* set ports to use "standard controller" initially */
+ for (i = 0; i < 8; ++i)
+ in_type[i] = PSE_PAD_TYPE_STANDARD;
+
plugin_call_rearmed_cbs();
/* dfinput_activate(); */
set_retro_memmap();
- input_changed = 1;
-
return true;
}
Config.PsxType = 1;
}
- /*for (i = 0; i < PORTS_NUMBER; i++)
- update_controller_port_variable(i);*/
-
update_multitap();
var.value = NULL;
unsigned i;
struct retro_core_option_display option_display;
char gpu_peops_option[][50] = {
- "pcsx_rearmed_multitap1",
- "pcsx_rearmed_multitap2",
"pcsx_rearmed_negcon_deadzone",
"pcsx_rearmed_negcon_response",
"pcsx_rearmed_analog_axis_modifier",
void retro_run(void)
{
- /* update multitap when inputs have changed */
- /* this is only applied on core restart */
- if (input_changed)
- {
- int i;
- input_changed = 0;
- update_multitap();
- for (i = 0; i < 8; i++)
- SysDLog("Player %d: %s\n", i + 1, get_pse_pad_label[in_type[i]]);
- SysDLog("Multiplayer 1: %s\n", multitap1 ? "enabled" : "disabled");
- SysDLog("Multiplayer 2: %s\n", multitap2 ? "enabled" : "disabled");
- }
-
//SysReset must be run while core is running,Not in menu (Locks up Retroarch)
if (rebootemu != 0)
{
static bool try_use_bios(const char *path)
{
- FILE *f;
long size;
const char *name;
-
- f = fopen(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;
unsigned useHLE = 0;
const char *bios[] = {
+ "PS1_ROM", "ps1_rom",
"PSXONPSP660", "psxonpsp660",
"SCPH101", "scph101",
"SCPH5501", "scph5501",
}
}
- if (useHLE || !found_bios)
+ if (!found_bios)
{
- const char *msg_str = "No PlayStation BIOS file found - add for better compatibility";
-
- SysPrintf("no BIOS files found.\n");
+ const char *msg_str;
+ if (useHLE)
+ {
+ msg_str = "BIOS set to \'hle\' in core options - real BIOS will be ignored";
+ SysPrintf("Using HLE BIOS.\n");
+ }
+ else
+ {
+ msg_str = "No PlayStation BIOS file found - add for better compatibility";
+ SysPrintf("No BIOS files found.\n");
+ }
if (msg_interface_version >= 1)
{
msg_interface_version = 0;
environ_cb(RETRO_ENVIRONMENT_GET_MESSAGE_INTERFACE_VERSION, &msg_interface_version);
-#ifdef __MACH__
+#if defined(__MACH__) && !defined(TVOS)
// magic sauce to make the dynarec work on iOS
syscall(SYS_ptrace, 0 /*PTRACE_TRACEME*/, 0, 0, 0);
#endif