initial neGcon controller support
authorphaseIV <phaseIV@users.noreply.github.com>
Mon, 16 Nov 2015 13:24:33 +0000 (14:24 +0100)
committerphaseIV <phaseIV@users.noreply.github.com>
Mon, 16 Nov 2015 13:24:33 +0000 (14:24 +0100)
frontend/libretro.c
frontend/menu.c
frontend/plugin.c
plugins/dfinput/main.c

index 2964587..9bada99 100644 (file)
@@ -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();
 
index 0088a63..5737db4 100644 (file)
@@ -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) {
index 49ae1fe..03fd47b 100644 (file)
@@ -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];
index 475ea07..f4a14fa 100644 (file)
@@ -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);