Can I map the Dpad on this controller? Can I also map and swap the A/B/X/Y buttons on this controller?
Yes, you can when wired via USB. The default mode of the DPad on this controller is as left analogue stick. You can also:
- LEFT + Select : set Dpad as left analogue stick.
- Up + Select : reset Dpad.
- Right + Select : set Dpad as right analogue stick.
- Down + Select : Swap A/B and X/Y mapping (on Switch mode only).
Notes:
- Press and hold any of the key combinations above for 5 seconds to map the buttons.
- LED will blink in red to indicate the success of each button mapping.
- You need to reset the buttons manually.
When it is connected to SG Mini/SG Mini:
- L = Z
- R = C
When it is connected to Switch:
- C = R
- Z = L
- L = ZL
- R = ZR
When it is connected to Windows 10:
- C = R1
- Z = L1
- L = L2
- R = R2
We suggest you charge it via a phone power adapter. The controller uses 480mAh rechargeable battery with 1-2 hour charging time. The battery can last up to 35 hours when fully charged.
Not sure if this applies to the M30 2.4G, but seems to work when in wired mode.
- First, make sure it's off
- Hold Start to power off - note the lights at the bottom
Now, to bring it back online:
- Hold Y + Start to power on - Switch mode
- Hold X + Start to power on - Windows X-Input mode
- Hold B + Start to power on - Android OR Windows X-Input mode if using the Retro Receiver (also maybe Hold Select + Up for 3 seconds)
- Turn off the controller
- Press and hold L+R+START to enter its pairing mode
- Blue and yellow LEDs start to blink
- Plug in the USB cable (PC will read it as a U disk)
- Copy or drag the DAT file to the U disk
- Unplug the USB cable and then press and hold START for 3 seconds to turn back on the controller
- C = A
- B = B
- Y = X
- A = Y
- X = LB
- Z = RB
- LB = L2
- RB = R2
<inputConfig type="joystick" name="8BitDo M30 2.4G USB" deviceName="Microsoft X-Box 360 pad" deviceGUID="030000005e0400008e02000014010000">
<input name="a" type="axis" id="5" value="1" code="5" />
<input name="b" type="button" id="1" value="1" code="305" />
<input name="down" type="hat" id="0" value="4" />
<input name="hotkey" type="button" id="8" value="1" code="316" />
<input name="joystick1left" type="axis" id="0" value="-1" code="0" />
<input name="joystick1up" type="axis" id="1" value="-1" code="1" />
<input name="joystick2left" type="axis" id="3" value="-1" code="3" />
<input name="joystick2up" type="axis" id="4" value="-1" code="4" />
<input name="l2" type="button" id="4" value="1" code="310" />
<input name="left" type="hat" id="0" value="8" />
<input name="pagedown" type="button" id="5" value="1" code="311" />
<input name="pageup" type="button" id="2" value="1" code="307" />
<input name="r2" type="axis" id="2" value="1" code="2" />
<input name="right" type="hat" id="0" value="2" />
<input name="select" type="button" id="6" value="1" code="314" />
<input name="start" type="button" id="7" value="1" code="315" />
<input name="up" type="hat" id="0" value="1" />
<input name="x" type="button" id="3" value="1" code="308" />
<input name="y" type="button" id="0" value="1" code="304" />
</inputConfig>
<inputConfig type="joystick" deviceName="6B controller" name="8BitDo M30 2.4G" deviceGUID="03000000a30c00002400000011010000">
<input name="a" type="button" id="5" value="1" code="293" />
<input name="b" type="button" id="1" value="1" code="289" />
<input name="down" type="axis" id="1" value="1" code="1" />
<input name="hotkey" type="button" id="8" value="1" code="296" />
<input name="l2" type="button" id="6" value="1" code="294" />
<input name="left" type="axis" id="0" value="-1" code="0" />
<input name="pagedown" type="button" id="4" value="1" code="292" />
<input name="pageup" type="button" id="3" value="1" code="291" />
<input name="r2" type="button" id="7" value="1" code="295" />
<input name="right" type="axis" id="0" value="1" code="0" />
<input name="select" type="button" id="8" value="1" code="296" />
<input name="start" type="button" id="9" value="1" code="297" />
<input name="up" type="axis" id="1" value="-1" code="1" />
<input name="x" type="button" id="0" value="1" code="288" />
<input name="y" type="button" id="2" value="1" code="290" />
</inputConfig>
input_driver = "hid"
# This configuration is for when the controller is connected by USB. Note the 8BitDo M30 2.4G USB
# when plugged in via USB runs in XInput mode and identifies itself using a generic Xbox 360 Wired
# controller product and vendor ID. That means that it's impossible to change the RetroArch
# configuration for it without also affecting the configuration of other controllers!
input_device = "Xbox 360 Wired Controller"
input_device_display_name = "8BitDo M30 2.4G USB"
input_vendor_id = "1118"
input_product_id = "654"
# Buttons
# The RetroPad layout has four face buttons, whereas the M30 has six. We map the M30's to the Retroarch
# Megadrive/Genesis (6 Button) layout to allow nature layout in megadrive/genesis emulators.
# We map the M30's L and R buttons to the RetroPad's triggers, and map the M30's Z and C buttons to the
# RetroPad's left and right shoulder buttons respectively. That may seem somewhat counterintuitive but
# it follows the convention that is used in many cores for systems that have six face buttons in this
# layout. That allows the controller to be autoconfigured and work in the natural way in the Beetle
# Saturn core, and megadrive/genesis emulators. However, this does cause issues with some emulators
# with fighting games such as SNES, FBNeo, PSX and MAME. If you want a config for those systems uncomment
# config further below
# Mapping (M30->libretro):
# C = A
# B = B
# Y = X
# A = Y
# X = LB
# Z = RB
# LB = L2
# RB = R2
# Genesis/Saturn buttons layout:
input_select_btn = "9"
input_start_btn = "8"
input_menu_toggle_btn = "10"
input_a_axis = "+5"
input_b_btn = "1"
input_x_btn = "3"
input_y_btn = "0"
input_l_btn = "2"
input_r_btn = "5"
input_l2_btn = "4"
input_r2_axis = "+4"
input_select_btn_label = "Mode (-)"
input_start_btn_label = "Start"
input_menu_toggle_btn_label = "Heart"
input_a_axis_label = "C"
input_b_btn_label = "B"
input_x_btn_label = "Y"
input_y_btn_label = "A"
input_l_btn_label = "X"
input_r_btn_label = "Z"
input_l2_btn_label = "LB"
input_r2_axis_label = "RB"
# Fighting game layout for the SNES, FBNeo, PSX and MAME:
# uncomment further below if you want this one
# A = B
# B = A
# C = R
# X = Y
# Y = X
# Z = L
# LB = L2
# RB = R2
# input_select_btn = "9"
# input_start_btn = "8"
# input_menu_toggle_btn = "10"
# input_b_btn = "0"
# input_a_btn = "1"
# input_r_axis = "+5"
# input_y_btn = "2"
# input_x_btn = "3"
# input_l_btn = "5"
# input_l2_btn = "4"
# input_r2_axis = "+4"
# input_select_btn_label = "Mode (-)"
# input_start_btn_label = "Start"
# input_menu_toggle_btn_label = "Heart"
# input_b_btn_label = "A"
# input_a_btn_label = "B"
# input_r_axis_label = "C"
# input_y_btn_label = "X"
# input_x_btn_label = "Y"
# input_l_btn_label = "Z"
# input_l2_btn_label = "LB"
# input_r2_axis_label = "RB"
# D-Pad:
input_up_btn = "11"
input_down_btn = "12"
input_left_btn = "13"
input_right_btn = "14"
input_up_btn_label = "D-PAD Up"
input_down_btn_label = "D-PAD Down"
input_left_btn_label = "D-PAD Left"
input_right_btn_label = "D-PAD Right"
# The controller can be configured to have the D-Pad report inputs as either a left or right analog
# stick instead of as a digital D-Pad:
input_l_x_plus_axis = "+1"
input_l_x_minus_axis = "-1"
input_l_y_plus_axis = "-2"
input_l_y_minus_axis = "+2"
input_l_x_plus_axis_label = "D-PAD Right (Left Analog Stick Mode)"
input_l_x_minus_axis_label = "D-PAD Left (Left Analog Stick Mode)"
input_l_y_plus_axis_label = "D-PAD Down (Left Analog Stick Mode)"
input_l_y_minus_axis_label = "D-PAD Up (Left Analog Stick Mode)"
input_r_x_plus_axis = "+3"
input_r_x_minus_axis = "-3"
input_r_y_plus_axis = "+4"
input_r_y_minus_axis = "-4"
input_r_x_plus_axis_label = "D-PAD Right (Right Analog Stick Mode)"
input_r_x_minus_axis_label = "D-PAD Left (Right Analog Stick Mode)"
input_r_y_plus_axis_label = "D-PAD Down (Right Analog Stick Mode)"
input_r_y_minus_axis_label = "D-PAD Up (Right Analog Stick Mode)"