diff options
author | phaseIV | 2015-11-16 14:24:33 +0100 |
---|---|---|
committer | phaseIV | 2015-11-16 14:24:33 +0100 |
commit | e8d96071f1a0b34b58647372b9d9976c5e397aba (patch) | |
tree | ac0a8e73016ee57d9b492048cb0b7eaf641686d0 | |
parent | ce36c10b348009c13282048540d6d9c553bbcc96 (diff) | |
download | pcsx_rearmed-e8d96071f1a0b34b58647372b9d9976c5e397aba.tar.gz pcsx_rearmed-e8d96071f1a0b34b58647372b9d9976c5e397aba.tar.bz2 pcsx_rearmed-e8d96071f1a0b34b58647372b9d9976c5e397aba.zip |
initial neGcon controller support
-rw-r--r-- | frontend/libretro.c | 40 | ||||
-rw-r--r-- | frontend/menu.c | 4 | ||||
-rw-r--r-- | frontend/plugin.c | 14 | ||||
-rw-r--r-- | plugins/dfinput/main.c | 11 |
4 files changed, 58 insertions, 11 deletions
diff --git a/frontend/libretro.c b/frontend/libretro.c index 2964587..9bada99 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__ @@ -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,36 @@ 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) + { + in_a1[0] = 0; + + if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, 12)) // left brake + in_a1[1] = 255; + else + in_a1[1] = 0; + + + in_a2[0] = (input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X) / 256) + 128; //steer + in_a2[1] = 255 - ((input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y) / 256) + 128); //thrust + } + + if (in_type2 == PSE_PAD_TYPE_NEGCON) + { + in_a3[0] = 0; + + if(input_state_cb(1, RETRO_DEVICE_JOYPAD, 0, 12)) // left brake + in_a3[1] = 255; + else + in_a3[1] = 0; + + + in_a4[0] = (input_state_cb(1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X) / 256) + 128; //steer + in_a4[1] = 255 - ((input_state_cb(1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y) / 256) + 128); //thrust + } + + 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..f4a14fa 100644 --- a/plugins/dfinput/main.c +++ b/plugins/dfinput/main.c @@ -15,6 +15,9 @@ #include <windows.h> #endif +#include <stdio.h> +#include <string.h> + #include "main.h" unsigned char CurPad, CurByte, CurCmd, CmdLen; @@ -44,6 +47,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,9 +56,16 @@ static int old_controller_type1 = -1, old_controller_type2 = -1; } \ } +// case PSE_PAD_TYPE_NEGCON: \ +// PAD##n##_startPoll = PADstartPoll_negcon; \ +// PAD##n##_poll = PADpoll_negcon; \ +// negcon_init(); \ +// break; \ + void dfinput_activate(void) { PadDataS pad; + int i; PAD1_readPort1(&pad); select_pad(1); |