Skip to content

Commit

Permalink
Merge pull request notaz#20 from phaseIV/master
Browse files Browse the repository at this point in the history
patch to support the neGcon racing controller
  • Loading branch information
inactive123 committed Nov 18, 2015
2 parents ce36c10 + 2cab578 commit 7853c49
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 12 deletions.
66 changes: 63 additions & 3 deletions frontend/libretro.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand All @@ -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__
Expand Down Expand Up @@ -1215,7 +1220,7 @@ static void update_variables(bool in_flight)

void retro_run(void)
{
int i;
int i, val;

input_poll_cb();

Expand All @@ -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;
Expand All @@ -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();

Expand Down
4 changes: 2 additions & 2 deletions frontend/menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
14 changes: 7 additions & 7 deletions frontend/plugin.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,20 +53,20 @@ 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;
}

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];
Expand Down
2 changes: 2 additions & 0 deletions plugins/dfinput/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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; \
Expand All @@ -52,6 +53,7 @@ static int old_controller_type1 = -1, old_controller_type2 = -1;
} \
}


void dfinput_activate(void)
{
PadDataS pad;
Expand Down

0 comments on commit 7853c49

Please sign in to comment.