Enabling two gamepads on GenplusGX

We tried to play a two player Megadrive game last night using two iBuffalo SNES usb gamepads. After choosing 6 button gamepad as the device type and binding all buttons for both pads in xmb, one pad controls both players no matter what we did.

Both pads work perfectly on Snes 9x NEXT, FBA and Mednafen PCE Fast cores.

It works perfectly fine for me (and I didn’t even bind any buttons to my pads because my pad is autorecognized)

  1. gpgx has an auto pad that should work fine for most cases (I tried SSFII and it worked fine), you shouldn’t need to set it to 6 button
  2. what nightly are you using? there were many changes related to binding controllers recently (fixes) and the erratic behavior present with “bind all” is gone now
  3. are you binding pads differently because gpgx has a weird 6 button map? that’s not needed, instead you should leave your binding alone, and once you load content go to core input remapping and reassign the buttons there instead

Is your pad autorecognized? if not, can you submit an autoconf for your pad? it’s really easy::

  • Load RetroArch
  • Make sure your autoconf dir is configured
  • Update autoconf profiles in case there is something new
  • Navigate to Input Settings
  • Select User 1 default all
  • Select User 1 bind all, bind anything that you don’t have to a single button and then clean it up in the next step
  • Go back to the previous menu and select Input 1 User Binds and try to correct anything that might be mapped wrong, the GUI is a bit to sensitive, also clean up any binds for buttons you don’t have
  • Go to input settings and select User 1 Save Autoconfig Then make sure to select User 1 default all so the manual bindings are cleared, restart and test, if everything went smoothly it should now detect your controller just fine

You’ll end up with a file like this:


input_vendor_id = 14368
input_product_id = 9
input_driver = "android"
input_device = "8Bitdo NES30 Pro"
input_b_btn = "97"
input_y_btn = "100"
input_select_btn = "109"
input_start_btn = "108"
input_up_btn = "h0up"
input_down_btn = "h0down"
input_left_btn = "h0left"
input_right_btn = "h0right"
input_a_btn = "96"
input_x_btn = "99"
input_l_btn = "102"
input_r_btn = "103"
input_l2_btn = "104"
input_r2_btn = "105"
input_l3_btn = "106"
input_r3_btn = "107"
input_l_x_plus_axis = "+0"
input_l_x_minus_axis = "-0"
input_l_y_plus_axis = "+1"
input_l_y_minus_axis = "-1"
input_r_x_plus_axis = "+2"
input_r_x_minus_axis = "-2"
input_r_y_plus_axis = "+3"
input_r_y_minus_axis = "-3"

Autoconf now works based on a score system, matching VID/PID adds 3 points, an exact name adds 2 points, and a partial name match adds 1 point so the more information the better. VID/PID won’t be saved unless you’re running commit 766b6b811ee678e847053f215be70c7c995717e3 or later. Now touch up the file if you want to submit it:

input_display_name = "NES30 Pro Controller"

Add this to add a friendly display name, cosmetic only, many devices just print “Virtual” or “Broadcom Bluetooth”, so this makes the osd message “better”

input_vendor_id = 14368
input_product_id = 9

Add these if they weren’t added to make sure the match is exact, you can check VID/PID under Information, System Information

input_b_btn_label = "B"
input_y_btn_label = "A"
input_select_btn_label = "SELECT"
input_start_btn_label = "START"
input_up_axis_label = "D-Pad Up"
input_down_axis_label = "D-Pad Down"
input_left_axis_label = "D-Pad Left"
input_right_axis_label = "D-Pad Right"
input_a_btn_label = "A"
input_x_btn_label = "X"
input_l_btn_label = "L"
input_r_btn_label = "R"
input_l2_btn_label = "L2"
input_r2_btn_label = "R2"
input_l3_btn_label = "L3"
input_r3_btn_label = "R3"
input_l_x_plus_axis_label = "Left Analog X+"
input_l_x_minus_axis_label = "Left Analog X-"
input_l_y_plus_axis_label = "Left Analog Y+"
input_l_y_minus_axis_label = "Left Analog Y-"
input_r_x_plus_axis_label = "Right Analog X+"
input_r_x_minus_axis_label = "Right Analog X-"
input_r_y_plus_axis_label = "Right Analog Y+"
input_r_y_minus_axis_label = "Right Analog Y-"

Add these to have friendly labels in the input binds, follow retropad button naming convention

Hi Radius,

details for my gamepad as follows:

input_display_name = “iBuffalo Classic USB Gamepad” input_driver = “xinput” input_device = “iBuffalo Classic USB Gamepad” input_vendor_id = “1411” input_product_id = “8288” input_b_btn = “1” input_y_btn = “3” input_select_btn = “6” input_start_btn = “7” input_up_axis = “-1” input_down_axis = “+1” input_left_axis = “-0” input_right_axis = “+0” input_a_btn = “0” input_x_btn = “2” input_l_btn = “4” input_r_btn = “5” input_b_btn_label = “B” input_y_btn_label = “Y” input_select_btn_label = “SELECT” input_start_btn_label = “START” input_up_axis_label = “D-Pad Up” input_down_axis_label = “D-Pad Down” input_left_axis_label = “D-Pad Left” input_right_axis_label = “D-Pad Right” input_a_btn_label = “A” input_x_btn_label = “X” input_l_btn_label = “L” input_r_btn_label = “R”

Hi Radius, can this be added to https://github.com/libretro/retroarch-joypad-autoconfig/tree/master/xinput ? They are a fairly popular pad so it might be helpful :slight_smile: