aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTwinaphex2015-11-18 02:20:01 +0100
committerTwinaphex2015-11-18 02:20:01 +0100
commit7853c498e88becf8ddf7aae21f741faf02498749 (patch)
tree0c9076dd37c2414b2285a993a9e8603d8d5f50af
parentce36c10b348009c13282048540d6d9c553bbcc96 (diff)
parent2cab5787882abef4508e5b45d18dae79a041c298 (diff)
downloadpcsx_rearmed-7853c498e88becf8ddf7aae21f741faf02498749.tar.gz
pcsx_rearmed-7853c498e88becf8ddf7aae21f741faf02498749.tar.bz2
pcsx_rearmed-7853c498e88becf8ddf7aae21f741faf02498749.zip
Merge pull request #20 from phaseIV/master
patch to support the neGcon racing controller
-rw-r--r--frontend/libretro.c66
-rw-r--r--frontend/menu.c4
-rw-r--r--frontend/plugin.c14
-rw-r--r--plugins/dfinput/main.c2
4 files changed, 74 insertions, 12 deletions
diff --git a/frontend/libretro.c b/frontend/libretro.c
index 2964587..aaeb624 100644
--- a/frontend/libretro.c
+++ b/frontend/libretro.c
@@ -329,8 +329,8 @@ void retro_set_environment(retro_environment_t cb)
static const struct retro_variable vars[] = {
{ "pcsx_rearmed_frameskip", "Frameskip; 0|1|2|3" },
{ "pcsx_rearmed_region", "Region; Auto|NTSC|PAL" },
- { "pcsx_rearmed_pad1type", "Pad 1 Type; standard|analog" },
- { "pcsx_rearmed_pad2type", "Pad 2 Type; standard|analog" },
+ { "pcsx_rearmed_pad1type", "Pad 1 Type; standard|analog|negcon" },
+ { "pcsx_rearmed_pad2type", "Pad 2 Type; standard|analog|negcon" },
#ifndef DRC_DISABLE
{ "pcsx_rearmed_drc", "Dynamic recompiler; enabled|disabled" },
#endif
@@ -1067,6 +1067,8 @@ static void update_variables(bool in_flight)
in_type1 = PSE_PAD_TYPE_STANDARD;
if (strcmp(var.value, "analog") == 0)
in_type1 = PSE_PAD_TYPE_ANALOGPAD;
+ if (strcmp(var.value, "negcon") == 0)
+ in_type1 = PSE_PAD_TYPE_NEGCON;
}
var.value = NULL;
@@ -1077,6 +1079,9 @@ static void update_variables(bool in_flight)
in_type2 = PSE_PAD_TYPE_STANDARD;
if (strcmp(var.value, "analog") == 0)
in_type2 = PSE_PAD_TYPE_ANALOGPAD;
+ if (strcmp(var.value, "negcon") == 0)
+ in_type2 = PSE_PAD_TYPE_NEGCON;
+
}
#ifdef __ARM_NEON__
@@ -1215,7 +1220,7 @@ static void update_variables(bool in_flight)
void retro_run(void)
{
- int i;
+ int i, val;
input_poll_cb();
@@ -1232,6 +1237,7 @@ void retro_run(void)
if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i))
in_keystate |= retro_psx_map[i];
+
if (in_type1 == PSE_PAD_TYPE_ANALOGPAD)
{
in_a1[0] = (input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X) / 256) + 128;
@@ -1248,6 +1254,60 @@ void retro_run(void)
in_a4[1] = (input_state_cb(1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y) / 256) + 128;
}
+
+ if (in_type1 == PSE_PAD_TYPE_NEGCON)
+ {
+ /* left brake */
+ if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, 12))
+ in_a1[1] = 255;
+ else
+ in_a1[1] = 0;
+
+ /* steer */
+ in_a2[0] = (input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X) / 256) + 128;
+
+ /* thrust and fire */
+ val = ((input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y) / 127));
+ if(val < -2) {
+ in_a1[0] = 256 - val;
+ }
+ if (val > 2) {
+ in_a2[1] = val;
+ }
+ if(val >= -2 && val <= 2)
+ {
+ in_a2[1] = 0;
+ in_a1[0] = 0;
+ }
+ }
+
+ if (in_type2 == PSE_PAD_TYPE_NEGCON)
+ {
+ /* left brake */
+ if(input_state_cb(1, RETRO_DEVICE_JOYPAD, 0, 12))
+ in_a3[1] = 255;
+ else
+ in_a3[1] = 0;
+
+ /* steer */
+ in_a4[0] = (input_state_cb(1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X) / 256) + 128;
+
+ /* thrust and fire */
+ val = ((input_state_cb(1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y) / 127));
+ if(val < -2) {
+ in_a3[0] = 256 - val;
+ }
+ if (val > 2) {
+ in_a4[1] = val;
+ }
+ if(val >= -2 && val <= 2)
+ {
+ in_a4[1] = 0;
+ in_a3[0] = 0;
+ }
+ }
+
+
stop = 0;
psxCpu->Execute();
diff --git a/frontend/menu.c b/frontend/menu.c
index 0088a63..5737db4 100644
--- a/frontend/menu.c
+++ b/frontend/menu.c
@@ -308,12 +308,12 @@ static void menu_sync_config(void)
switch (in_type_sel1) {
case 1: in_type1 = PSE_PAD_TYPE_ANALOGPAD; break;
- case 2: in_type1 = PSE_PAD_TYPE_GUNCON; break;
+ case 2: in_type1 = PSE_PAD_TYPE_NEGCON; break;
default: in_type1 = PSE_PAD_TYPE_STANDARD;
}
switch (in_type_sel2) {
case 1: in_type2 = PSE_PAD_TYPE_ANALOGPAD; break;
- case 2: in_type2 = PSE_PAD_TYPE_GUNCON; break;
+ case 2: in_type2 = PSE_PAD_TYPE_NEGCON; break;
default: in_type2 = PSE_PAD_TYPE_STANDARD;
}
if (in_evdev_allow_abs_only != allow_abs_only_old) {
diff --git a/frontend/plugin.c b/frontend/plugin.c
index 49ae1fe..03fd47b 100644
--- a/frontend/plugin.c
+++ b/frontend/plugin.c
@@ -53,12 +53,12 @@ static long PADreadPort1(PadDataS *pad)
{
pad->controllerType = in_type1;
pad->buttonStatus = ~in_keystate;
- if (in_type1 == PSE_PAD_TYPE_ANALOGPAD) {
- pad->leftJoyX = in_a1[0];
- pad->leftJoyY = in_a1[1];
- pad->rightJoyX = in_a2[0];
- pad->rightJoyY = in_a2[1];
- }
+ if (in_type1 == PSE_PAD_TYPE_ANALOGPAD || in_type1 == PSE_PAD_TYPE_NEGCON) {
+ pad->leftJoyX = in_a1[0];
+ pad->leftJoyY = in_a1[1];
+ pad->rightJoyX = in_a2[0];
+ pad->rightJoyY = in_a2[1];
+ }
return 0;
}
@@ -66,7 +66,7 @@ static long PADreadPort2(PadDataS *pad)
{
pad->controllerType = in_type2;
pad->buttonStatus = ~in_keystate >> 16;
- if (in_type2 == PSE_PAD_TYPE_ANALOGPAD) {
+ if (in_type2 == PSE_PAD_TYPE_ANALOGPAD || in_type2 == PSE_PAD_TYPE_NEGCON) {
pad->leftJoyX = in_a3[0];
pad->leftJoyY = in_a3[1];
pad->rightJoyX = in_a4[0];
diff --git a/plugins/dfinput/main.c b/plugins/dfinput/main.c
index 475ea07..c3adedd 100644
--- a/plugins/dfinput/main.c
+++ b/plugins/dfinput/main.c
@@ -44,6 +44,7 @@ static int old_controller_type1 = -1, old_controller_type2 = -1;
PAD##n##_poll = PADpoll_guncon; \
guncon_init(); \
break; \
+ case PSE_PAD_TYPE_NEGCON: \
case PSE_PAD_TYPE_GUN: \
default: \
PAD##n##_startPoll = PAD##n##__startPoll; \
@@ -52,6 +53,7 @@ static int old_controller_type1 = -1, old_controller_type2 = -1;
} \
}
+
void dfinput_activate(void)
{
PadDataS pad;