8Bitdo M30 w/Retroarch

Just got my M30 in the mail.

In Windows, I have it in Windows mode. Seems like a great controller.

However, I can’t seem to find the best mappings that seem perfect for 6 button Sega. ie: Street Fighter 2 on Mega Drive.

Anyone that has a great setup, care to share your settings? (hotkey and retroarch quit key) included?

Different note, RetroArch won’t let me map 2 keys for quiting. Meaning, I want to map start and select, or left shoulder and start to quit Retroarch. But when I go to map them, I it just picks one of the buttons pressed. Any ideas?

THANK YOU!

1 Like

looks like the mapping it needs is:

LXR
YBA

Also, to answer your question about using a combo for the menu, we don’t have any way to map custom button combos, but you can select from a set of hardcoded combinations for opening the menu (including start+select) in settings > input > menu toggle gamepad combo.

1 Like

Have you run into any problems mapping the D-Pad? For some reason the M30’s D-Pad registers in X-input as a left-stick and it’s causing me all kinds of weird issues with the way I have things setup normally.

I just got an M30 also, and although I’ve only tried it out with the Switch so far, and not any sort of Retroarch, it has a unique setup that isn’t mentioned in the manual or website, as far as I can tell. I’m assuming these functions are across the board, and not only when functioning with a Switch.

By default the dpad is defined as the left-analog stick. Weird choice on 8bitdo’s part.

You can reassign the dpad using button commands: Hold the Minus button plus a dpad direction for five seconds to reassign:

  • Minus + Up = digital dpad
  • Minus + Left = left analog
  • Minus + Right = right analog
  • Minus + Down = Toggles the ABXY buttons to the match the Switch buttons according to their physical labelling.

Hope this helps!

1 Like

THAT’S AMAZING! Where on earth did you find this information? This totally worked on my PC and has saved me SO much headache.

Happened across it in a thread on a different forum discussing the M30. I had no idea that remapping functionality was hidden in there either.

In fact I didn’t even notice it was automatically defined as the right analog when I was first testing it out, since the games I was testing on Switch used the same controls on both analog and dpad. But I can imagine this would be a massive pain to be setting it up with a Retroarch autoconfig and not realize that the dpad is automatically defined as the right analog.

1 Like

Load retroarch, a core and a game via commandline. I noticed that doing this, the input mapping screen will show buttons related only to that core. So a Saturn or Genesis core will show A,B,C,X,Y,Z allowing you to easily map the m30. If your setup allows it, you can then just do a per-core config setup (since different cores require different mappings).

Has anyone gotten the Home & Star buttons to work on Windows? They worked before and now I can’t get RA to read them. Trying to make Home the RGUI key

Honestly I’ve ignored those buttons entirely. What are they ‘supposed’ to do exactly? Home kinda makes sense… but star?

Basically extra function buttons, very useful for emulation. They’re probably more intended for the Mega SG.

On the Switch the Star button is set as the screen capture button. Switch support got added in to 8bitdo controllers firmware as a nice surprise a couple years back. Now their bluetooth controllers are arguably designed with the Switch foremost in mind and the function keys seem to reflect that.

If I get around to setting mine up with RA I’d imagine the Star button might make a nice secondary function key, like a turbo button.

I often use my old Saturn SLS USB pad with Retroarch, and while it’s great, it’s a bit too authentically modeled after a Saturn pad, lacking a dedicated Select Button or any sort of extra function keys.

How about adding the option to manually assign a specific button as the „RA menu button“?

In that case you‘d be able to manually remap an unused button (like the star or Home buttons on the new M30 for example) to bring up the RA interface.

As this would be an addition alongside the existing, hard-coded menu toggles, it would not interfere with the regular button mapping on other controllers that have fewer buttons.

You can assign specific buttons to various hotkeys–including to open the menu–in settings > input > hotkey binds. If you’d like to assign a button just for that controller, you can add it to the controller’s autoconfig profile via text editor and it will assign the hotkey just for that controller.

Here is a quickly put together autoconf file. This was made for when the pad is paired with bluetooth in Dinput mode and for use with the udev driver (Linux). I don’t know if it can be used as is for other drivers or if it is compliant with the official conventions (not sure about labeling - should it be the virtual RetroPad or real pad button names?)

I’ll gladly work on it some more (xinput pairing mode and other drivers) if no one else is working on it at the moment.

8Bitdo_M30_BT.cfg

# 8Bitdo M30                 - http://www.8bitdo.com/     - http://www.8bitdo.com/m30/
# Firmware v1.10             - http://support.8bitdo.com/ - http://download.8bitdo.com/Firmware/Controller/M30/M30_Firmware_V1.10.zip

input_driver = "udev"
input_device = "8BitDo M30 gamepad"
input_device_display_name = "8Bitdo M30"

# Hex vid:pid is found using "dmesg -w" or "tail -f /var/log/syslog" and converted to Decimal using http://www.binaryhexconverter.com/hex-to-decimal-converter
# Hex vid:pid = 2DC8:0651 -> Decimal vid:pid = 11720:1617
input_vendor_id = "11720"
input_product_id = "1617"

input_b_btn = "0"
input_y_btn = "3"
input_select_btn = "10"
input_start_btn = "11"
input_a_btn = "1"
input_x_btn = "4"
input_l_btn = "6"
input_r_btn = "7"
input_l2_btn = "8"
input_r2_btn = "9"
input_menu_toggle_btn = "2"

input_b_btn_label = "A"
input_y_btn_label = "X"
input_select_btn_label = "Select"
input_start_btn_label = "Start"
input_a_btn_label = "B"
input_x_btn_label = "Y"
input_l_btn_label = "Z"
input_r_btn_label = "C"
input_l2_btn_label = "L"
input_r2_btn_label = "R"
input_menu_toggle_btn_label = "Home"

input_up_axis = "-1"
input_down_axis = "+1"
input_left_axis = "-0"
input_right_axis = "+0"

input_up_axis_label = "Dpad Up"
input_down_axis_label = "Dpad Down"
input_left_axis_label = "Dpad Left"
input_right_axis_label = "Dpad Right"

# -------------------------------------------------------------------------------------------------------------------------------------------------
# If RetroArch do NOT detect the controller when connected via Bluetooth and won't even recognize manual binding,
# fix it by adding this udev rule (the line below WITHOUT the # symbol at the beginning!) to "/etc/udev/rules.d/10-local.rules" and reboot.
# SUBSYSTEM=="input", ATTRS{name}=="8Bitdo SFC30 GamePad", MODE="0666", ENV{ID_INPUT_JOYSTICK}="1"
# -------------------------------------------------------------------------------------------------------------------------------------------------
2 Likes

great joypad! :wink:

Hey there!

I updated the cfg file to work for the M30 with the dinput driver out of the box once updated with the 1.13 version of the firmware. I tested it with Mortal Kombat II to make sure the buttons were mapped properly!

Thanks for giving me a template!

8Bitdo_M30_gamepad.cfg

# 8Bitdo M30                 - http://www.8bitdo.com/     - http://www.8bitdo.com/m30/
# Firmware v1.13             - http://support.8bitdo.com/ - http://download.8bitdo.com/Firmware/Controller/M30/M30_Firmware_V1.13.zip

input_driver = "dinput"
input_device = "8BitDo M30 gamepad"
input_device_display_name = "8Bitdo M30"

# Hex vid:pid is found using "dmesg -w" or "tail -f /var/log/syslog" and converted to Decimal using http://www.binaryhexconverter.com/hex-to-decimal-converter
# Hex vid:pid = 2DC8:5006 -> Decimal vid:pid = 11720:1617
input_vendor_id = "11720"
input_product_id = "20486"

input_b_btn = "1"
input_y_btn = "0"
input_select_btn = "10"
input_start_btn = "11"
input_a_btn = "7"
input_x_btn = "4"
input_l_btn = "3"
input_r_btn = "6"
input_l2_btn = "8"
input_r2_btn = "9"

input_b_btn_label = "B"
input_y_btn_label = "A"
input_select_btn_label = "Minus"
input_start_btn_label = "Start"
input_a_btn_label = "C"
input_x_btn_label = "Y"
input_l_btn_label = "X"
input_r_btn_label = "Z"
input_l2_btn_label = "L"
input_r2_btn_label = "R"

input_up_axis = "-1"
input_down_axis = "+1"
input_left_axis = "-0"
input_right_axis = "+0"

input_up_axis_label = "Dpad Up"
input_down_axis_label = "Dpad Down"
input_left_axis_label = "Dpad Left"
input_right_axis_label = "Dpad Right"

# -------------------------------------------------------------------------------------------------------------------------------------------------
# If RetroArch do NOT detect the controller when connected via Bluetooth and won't even recognize manual binding,
# fix it by adding this udev rule (the line below WITHOUT the # symbol at the beginning!) to "/etc/udev/rules.d/10-local.rules" and reboot.
# SUBSYSTEM=="input", ATTRS{name}=="8Bitdo SFC30 GamePad", MODE="0666", ENV{ID_INPUT_JOYSTICK}="1"
# -------------------------------------------------------------------------------------------------------------------------------------------------
1 Like

For xinput mode (Start+X)

input_driver = "xinput"
input_device = "XInput Controller"
input_device_display_name = "8BitDo M30 XInput"
input_vendor_id = "1118"
input_product_id = "736"

# ---------------------------------------

input_b_btn = "1"
input_y_btn = "0"
input_select_btn = "7"
input_start_btn = "6"
input_x_btn = "3"
input_l_btn = "2"
input_r_btn = "5"
input_l2_btn = "4"


input_b_btn_label = "B"
input_y_btn_label = "A"
input_select_btn_label = "Mode"
input_start_btn_label = "Start"
input_x_btn_label = "Y"
input_l_btn_label = "X"
input_r_btn_label = "Z"
input_l2_btn_label = "L"

input_up_axis = "+1"
input_down_axis = "-1"
input_left_axis = "-0"
input_right_axis = "+0"

input_a_axis = "+5"
input_r2_axis = "+4"

input_up_axis_label = "Dpad Up"
input_down_axis_label = "Dpad Down"
input_left_axis_label = "Dpad Left"
input_right_axis_label = "Dpad Right"
input_r2_axis_label = "R"
input_a_axis_label = "C"

Hello. I use M30 on Android and OSX. Already configured the gamepad on Android correctly, but on the OSX works only 4 buttons (ABXY). On the OSX there is only a ‘hid’ input-driver. Is there a config for M30 on the ‘hid’ driver for the OSX? (so that all 6 buttons work)

Have you tried configuring it yourself in settings > input > port 1 binds?

Thanks! Really, I can “copy” configuration like Android device. And manually configure it. I still do not understand how the configurations settings work :relaxed:

1 Like