extern char McdDisable[2];
/* PCSX ReARMed core calls and stuff */
-int in_type[8] = { PSE_PAD_TYPE_STANDARD, PSE_PAD_TYPE_STANDARD,
- PSE_PAD_TYPE_STANDARD, PSE_PAD_TYPE_STANDARD,
- PSE_PAD_TYPE_STANDARD, PSE_PAD_TYPE_STANDARD,
- PSE_PAD_TYPE_STANDARD, PSE_PAD_TYPE_STANDARD };
+int in_type[8] = { PSE_PAD_TYPE_NONE, PSE_PAD_TYPE_NONE,
+ PSE_PAD_TYPE_NONE, PSE_PAD_TYPE_NONE,
+ PSE_PAD_TYPE_NONE, PSE_PAD_TYPE_NONE,
+ PSE_PAD_TYPE_NONE, PSE_PAD_TYPE_NONE };
int in_analog_left[8][2] = {{ 127, 127 },{ 127, 127 },{ 127, 127 },{ 127, 127 },{ 127, 127 },{ 127, 127 },{ 127, 127 },{ 127, 127 }};
int in_analog_right[8][2] = {{ 127, 127 },{ 127, 127 },{ 127, 127 },{ 127, 127 },{ 127, 127 },{ 127, 127 },{ 127, 127 },{ 127, 127 }};
unsigned short in_keystate[PORTS_NUMBER];
return RETRO_API_VERSION;
}
-static void update_controller_port_device(unsigned port, unsigned device)
+static int controller_port_variable(unsigned port, struct retro_variable *var)
{
if (port >= PORTS_NUMBER)
- return;
+ return 0;
- static const char **CONTROLLER_VARIABLE = {
- "pcsx_rearmed_pad1type", "pcsx_rearmed_pad2type",
- "pcsx_rearmed_pad3type", "pcsx_rearmed_pad4type",
- "pcsx_rearmed_pad5type", "pcsx_rearmed_pad6type",
- "pcsx_rearmed_pad7type", "pcsx_rearmed_pad8type",
- };
+ if (!environ_cb)
+ return 0;
+
+ var->value = NULL;
+ switch (port) {
+ case 0:
+ var->key = "pcsx_rearmed_pad1type";
+ break;
+ case 1:
+ var->key = "pcsx_rearmed_pad2type";
+ break;
+ case 2:
+ var->key = "pcsx_rearmed_pad3type";
+ break;
+ case 3:
+ var->key = "pcsx_rearmed_pad4type";
+ break;
+ case 4:
+ var->key = "pcsx_rearmed_pad5type";
+ break;
+ case 5:
+ var->key = "pcsx_rearmed_pad6type";
+ break;
+ case 6:
+ var->key = "pcsx_rearmed_pad7type";
+ break;
+ case 7:
+ var->key = "pcsx_rearmed_pad8type";
+ break;
+ }
+
+ return environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, var) || var->value;
+}
+
+static void update_controller_port_variable(unsigned port)
+{
+ if (port >= PORTS_NUMBER)
+ return;
struct retro_variable var;
- var.value = NULL;
- var.key = CONTROLLER_VARIABLE[port];
- if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ if (controller_port_variable(port, &var))
{
if (strcmp(var.value, "standard") == 0)
in_type[0] = PSE_PAD_TYPE_STANDARD;
in_type[0] = PSE_PAD_TYPE_NEGCON;
else if (strcmp(var.value, "none") == 0)
in_type[0] = PSE_PAD_TYPE_NONE;
- else // 'default' case
- {
- switch (device)
- {
- case RETRO_DEVICE_JOYPAD:
- in_type[port] = PSE_PAD_TYPE_STANDARD;
- break;
- case RETRO_DEVICE_ANALOG:
- in_type[port] = PSE_PAD_TYPE_ANALOGPAD;
- break;
- case RETRO_DEVICE_MOUSE:
- in_type[port] = PSE_PAD_TYPE_MOUSE;
- break;
- case RETRO_DEVICE_LIGHTGUN:
- in_type[port] = PSE_PAD_TYPE_GUN;
- break;
- case RETRO_DEVICE_NONE:
- default:
- in_type[port] = PSE_PAD_TYPE_NONE;
- }
- }
+ // else 'default' case, do nothing
+ }
+}
+
+static void update_controller_port_device(unsigned port, unsigned device)
+{
+ if (port >= PORTS_NUMBER)
+ return;
+
+ struct retro_variable var;
+
+ if (!controller_port_variable(port, &var))
+ return;
+
+ if (strcmp(var.value, "default") != 0)
+ return;
+
+ switch (device)
+ {
+ case RETRO_DEVICE_JOYPAD:
+ in_type[port] = PSE_PAD_TYPE_STANDARD;
+ break;
+ case RETRO_DEVICE_ANALOG:
+ in_type[port] = PSE_PAD_TYPE_ANALOGPAD;
+ break;
+ case RETRO_DEVICE_MOUSE:
+ in_type[port] = PSE_PAD_TYPE_MOUSE;
+ break;
+ case RETRO_DEVICE_LIGHTGUN:
+ in_type[port] = PSE_PAD_TYPE_GUN;
+ break;
+ case RETRO_DEVICE_NONE:
+ default:
+ in_type[port] = PSE_PAD_TYPE_NONE;
}
}
static void update_multitap()
{
struct retro_variable var;
+ int auto_case;
var.value = NULL;
var.key = "pcsx_rearmed_multitap1";
- if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ 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
- {
- // If a gamepad is plugged after port 2, we need a first multitap.
- multitap1 = 0;
- for (int port = 2; port < PORTS_NUMBER; port++)
- multitap1 |= in_type[port] != PSE_PAD_TYPE_NONE;
- }
+ 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 (int port = 2; port < PORTS_NUMBER; port++)
+ multitap1 |= in_type[port] != PSE_PAD_TYPE_NONE;
}
var.value = NULL;
var.key = "pcsx_rearmed_multitap2";
- if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ auto_case = 0;
+ if (environ_cb && (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value))
{
if (strcmp(var.value, "enabled") == 0)
multitap2 = 1;
else if (strcmp(var.value, "disabled") == 0)
multitap2 = 0;
else // 'auto' case
- {
- // If a gamepad is plugged after port 4, we need a second multitap.
- multitap2 = 0;
- for (int port = 4; port < PORTS_NUMBER; port++)
- multitap2 |= in_type[port] != PSE_PAD_TYPE_NONE;
- }
+ 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 (int port = 4; port < PORTS_NUMBER; port++)
+ multitap2 |= in_type[port] != PSE_PAD_TYPE_NONE;
}
}
}
for (int i = 0; i < PORTS_NUMBER; i++)
- update_controller_port_device(i, RETRO_DEVICE_NONE);
+ update_controller_port_variable(i);
update_multitap();