Skip to content

Instantly share code, notes, and snippets.

@giventofly
Last active July 28, 2023 00:18
Show Gist options
  • Save giventofly/485e8641d527c5d7d2b1b1328a5d923c to your computer and use it in GitHub Desktop.
Save giventofly/485e8641d527c5d7d2b1b1328a5d923c to your computer and use it in GitHub Desktop.
8bitdo M30 on batocera/retropie/retroarch for megadrive and saturn

source: https://japanatron.com/blog/other/it/10417-batocera-how-to-pair-8bitdo-m30-controller

  1. Put the controller into pairing mode first, then start Bluetooth discovery on Batocera. Use the Android D-input (Start + B) pairing mode.
  2. After pairing it, it will likely go kinda crazy. Down doesn't work, and it keeps scrolling to the side, etc. Take a deep breath. We can fix this.
  3. Turn off the controller by holding down start.
  4. Restart Batocera.
  5. Turn on the controller by holding down start. BOOM! PROFIT!

source: https://www.reddit.com/r/SBCGaming/comments/11oqvum/how_to_map_a_sixbutton_controller_in/

East (SNES A) is B
South (SNES B) is A
North (SNES X) is Y
West (SNES Y) is X

Start is Start
Select is Mode (the button right under Start on M30)
D-pad as usual
Left shoulder is Z
Right shoulder is C
Left analog — hold any button to skip these
Left trigger is L
Right trigger is R
Left/Right stick press — hold any button to skip these
Hotkey — also Mode button (read the explanation about mode button functionality above).

Do this for all of your M30 controllers

For megadrive/saturn/32x/megacd add to system/batocera.conf to map A = A, B=B and C=C and two players with the same controller

image

For saturn (also similar A,B,C mapping idea as megadrive) but doesn't work properly, but it is only to play panzer dragon zwei, so it is not a problem. image

#megadrive retroarch set 8bitdo M30 P1
megadrive.retroarch.input_player1_a_btn = 7
megadrive.retroarch.input_player1_b_btn = 1
megadrive.retroarch.input_player1_x_btn = 4
megadrive.retroarch.input_player1_y_btn = 0
megadrive.retroarch.input_player1_l_btn = 3
megadrive.retroarch.input_player1_r_btn = 6
megadrive.retroarch.input_player1_l2_axis = +5
megadrive.retroarch.input_player1_r2_axis = +4
megadrive.retroarch.input_player1_start_btn = 11
megadrive.retroarch.input_player1_select_btn = 10
megadrive.retroarch.input_player1_gun_aux_a_btn = 7
megadrive.retroarch.input_player1_gun_aux_b_btn = 1
megadrive.retroarch.input_player1_gun_aux_c_btn = 0
megadrive.retroarch.input_player1_gun_offscreen_shot_btn = 3
megadrive.retroarch.input_player1_gun_trigger_btn = 6
megadrive.retroarch.input_player1_gun_start_btn = 11
megadrive.retroarch.input_player1_gun_select_btn = 10
megadrive.retroarch.input_player1_up_axis = -1
megadrive.retroarch.input_player1_gun_dpad_up_axis = -1
megadrive.retroarch.input_player1_down_axis = +1
megadrive.retroarch.input_player1_gun_dpad_down_axis = +1
megadrive.retroarch.input_player1_left_axis = -0
megadrive.retroarch.input_player1_gun_dpad_left_axis = -0
megadrive.retroarch.input_player1_right_axis = +0
megadrive.retroarch.input_player1_gun_dpad_right_axis = +0
megadrive.retroarch.input_player1_mouse_index = 0
megadrive.retroarch.input_player1_joypad_index = 0
megadrive.retroarch.input_player1_analog_dpad_mode = 0
#megadrive retroarch set 8bitdo M30 P2
megadrive.retroarch.input_player2_a_btn = 7
megadrive.retroarch.input_player2_b_btn = 1
megadrive.retroarch.input_player2_x_btn = 4
megadrive.retroarch.input_player2_y_btn = 0
megadrive.retroarch.input_player2_l_btn = 3
megadrive.retroarch.input_player2_r_btn = 6
megadrive.retroarch.input_player2_l2_axis = +5
megadrive.retroarch.input_player2_r2_axis = +4
megadrive.retroarch.input_player2_start_btn = 11
megadrive.retroarch.input_player2_select_btn = 10
megadrive.retroarch.input_player2_gun_aux_a_btn = 7
megadrive.retroarch.input_player2_gun_aux_b_btn = 1
megadrive.retroarch.input_player2_gun_aux_c_btn = 0
megadrive.retroarch.input_player2_gun_offscreen_shot_btn = 3
megadrive.retroarch.input_player2_gun_trigger_btn = 6
megadrive.retroarch.input_player2_gun_start_btn = 11
megadrive.retroarch.input_player2_gun_select_btn = 10
megadrive.retroarch.input_player2_up_axis = -1
megadrive.retroarch.input_player2_gun_dpad_up_axis = -1
megadrive.retroarch.input_player2_down_axis = +1
megadrive.retroarch.input_player2_gun_dpad_down_axis = +1
megadrive.retroarch.input_player2_left_axis = -0
megadrive.retroarch.input_player2_gun_dpad_left_axis = -0
megadrive.retroarch.input_player2_right_axis = +0
megadrive.retroarch.input_player2_gun_dpad_right_axis = +0
megadrive.retroarch.input_player2_mouse_index = 0
megadrive.retroarch.input_player2_joypad_index = 1
megadrive.retroarch.input_player2_analog_dpad_mode = 0
#32x
#sega32x retroarch set 8bitdo M30 P1
sega32x.retroarch.input_player1_a_btn = 7
sega32x.retroarch.input_player1_b_btn = 1
sega32x.retroarch.input_player1_x_btn = 4
sega32x.retroarch.input_player1_y_btn = 0
sega32x.retroarch.input_player1_l_btn = 3
sega32x.retroarch.input_player1_r_btn = 6
sega32x.retroarch.input_player1_l2_axis = +5
sega32x.retroarch.input_player1_r2_axis = +4
sega32x.retroarch.input_player1_start_btn = 11
sega32x.retroarch.input_player1_select_btn = 10
sega32x.retroarch.input_player1_gun_aux_a_btn = 7
sega32x.retroarch.input_player1_gun_aux_b_btn = 1
sega32x.retroarch.input_player1_gun_aux_c_btn = 0
sega32x.retroarch.input_player1_gun_offscreen_shot_btn = 3
sega32x.retroarch.input_player1_gun_trigger_btn = 6
sega32x.retroarch.input_player1_gun_start_btn = 11
sega32x.retroarch.input_player1_gun_select_btn = 10
sega32x.retroarch.input_player1_up_axis = -1
sega32x.retroarch.input_player1_gun_dpad_up_axis = -1
sega32x.retroarch.input_player1_down_axis = +1
sega32x.retroarch.input_player1_gun_dpad_down_axis = +1
sega32x.retroarch.input_player1_left_axis = -0
sega32x.retroarch.input_player1_gun_dpad_left_axis = -0
sega32x.retroarch.input_player1_right_axis = +0
sega32x.retroarch.input_player1_gun_dpad_right_axis = +0
sega32x.retroarch.input_player1_mouse_index = 0
sega32x.retroarch.input_player1_joypad_index = 0
sega32x.retroarch.input_player1_analog_dpad_mode = 0
#sega32x retroarch set 8bitdo M30 P2
sega32x.retroarch.input_player2_a_btn = 7
sega32x.retroarch.input_player2_b_btn = 1
sega32x.retroarch.input_player2_x_btn = 4
sega32x.retroarch.input_player2_y_btn = 0
sega32x.retroarch.input_player2_l_btn = 3
sega32x.retroarch.input_player2_r_btn = 6
sega32x.retroarch.input_player2_l2_axis = +5
sega32x.retroarch.input_player2_r2_axis = +4
sega32x.retroarch.input_player2_start_btn = 11
sega32x.retroarch.input_player2_select_btn = 10
sega32x.retroarch.input_player2_gun_aux_a_btn = 7
sega32x.retroarch.input_player2_gun_aux_b_btn = 1
sega32x.retroarch.input_player2_gun_aux_c_btn = 0
sega32x.retroarch.input_player2_gun_offscreen_shot_btn = 3
sega32x.retroarch.input_player2_gun_trigger_btn = 6
sega32x.retroarch.input_player2_gun_start_btn = 11
sega32x.retroarch.input_player2_gun_select_btn = 10
sega32x.retroarch.input_player2_up_axis = -1
sega32x.retroarch.input_player2_gun_dpad_up_axis = -1
sega32x.retroarch.input_player2_down_axis = +1
sega32x.retroarch.input_player2_gun_dpad_down_axis = +1
sega32x.retroarch.input_player2_left_axis = -0
sega32x.retroarch.input_player2_gun_dpad_left_axis = -0
sega32x.retroarch.input_player2_right_axis = +0
sega32x.retroarch.input_player2_gun_dpad_right_axis = +0
sega32x.retroarch.input_player2_mouse_index = 0
sega32x.retroarch.input_player2_joypad_index = 1
sega32x.retroarch.input_player2_analog_dpad_mode = 0
#segacd retroarch set 8bitdo M30 P1
segacd.retroarch.input_player1_a_btn = 7
segacd.retroarch.input_player1_b_btn = 1
segacd.retroarch.input_player1_x_btn = 4
segacd.retroarch.input_player1_y_btn = 0
segacd.retroarch.input_player1_l_btn = 3
segacd.retroarch.input_player1_r_btn = 6
segacd.retroarch.input_player1_l2_axis = +5
segacd.retroarch.input_player1_r2_axis = +4
segacd.retroarch.input_player1_start_btn = 11
segacd.retroarch.input_player1_select_btn = 10
segacd.retroarch.input_player1_gun_aux_a_btn = 7
segacd.retroarch.input_player1_gun_aux_b_btn = 1
segacd.retroarch.input_player1_gun_aux_c_btn = 0
segacd.retroarch.input_player1_gun_offscreen_shot_btn = 3
segacd.retroarch.input_player1_gun_trigger_btn = 6
segacd.retroarch.input_player1_gun_start_btn = 11
segacd.retroarch.input_player1_gun_select_btn = 10
segacd.retroarch.input_player1_up_axis = -1
segacd.retroarch.input_player1_gun_dpad_up_axis = -1
segacd.retroarch.input_player1_down_axis = +1
segacd.retroarch.input_player1_gun_dpad_down_axis = +1
segacd.retroarch.input_player1_left_axis = -0
segacd.retroarch.input_player1_gun_dpad_left_axis = -0
segacd.retroarch.input_player1_right_axis = +0
segacd.retroarch.input_player1_gun_dpad_right_axis = +0
segacd.retroarch.input_player1_mouse_index = 0
segacd.retroarch.input_player1_joypad_index = 0
segacd.retroarch.input_player1_analog_dpad_mode = 0
#segacd retroarch set 8bitdo M30 P2
segacd.retroarch.input_player2_a_btn = 7
segacd.retroarch.input_player2_b_btn = 1
segacd.retroarch.input_player2_x_btn = 4
segacd.retroarch.input_player2_y_btn = 0
segacd.retroarch.input_player2_l_btn = 3
segacd.retroarch.input_player2_r_btn = 6
segacd.retroarch.input_player2_l2_axis = +5
segacd.retroarch.input_player2_r2_axis = +4
segacd.retroarch.input_player2_start_btn = 11
segacd.retroarch.input_player2_select_btn = 10
segacd.retroarch.input_player2_gun_aux_a_btn = 7
segacd.retroarch.input_player2_gun_aux_b_btn = 1
segacd.retroarch.input_player2_gun_aux_c_btn = 0
segacd.retroarch.input_player2_gun_offscreen_shot_btn = 3
segacd.retroarch.input_player2_gun_trigger_btn = 6
segacd.retroarch.input_player2_gun_start_btn = 11
segacd.retroarch.input_player2_gun_select_btn = 10
segacd.retroarch.input_player2_up_axis = -1
segacd.retroarch.input_player2_gun_dpad_up_axis = -1
segacd.retroarch.input_player2_down_axis = +1
segacd.retroarch.input_player2_gun_dpad_down_axis = +1
segacd.retroarch.input_player2_left_axis = -0
segacd.retroarch.input_player2_gun_dpad_left_axis = -0
segacd.retroarch.input_player2_right_axis = +0
segacd.retroarch.input_player2_gun_dpad_right_axis = +0
segacd.retroarch.input_player2_mouse_index = 0
segacd.retroarch.input_player2_joypad_index = 1
segacd.retroarch.input_player2_analog_dpad_mode = 0
saturn.retroarch.input_player1_a_btn = 7
saturn.retroarch.input_player1_analog_dpad_mode = 0
saturn.retroarch.input_player1_b_btn = 1
saturn.retroarch.input_player1_down_axis = +1
saturn.retroarch.input_player1_gun_aux_a_btn = 7
saturn.retroarch.input_player1_gun_aux_b_btn = 1
saturn.retroarch.input_player1_gun_aux_c_btn = 0
saturn.retroarch.input_player1_gun_dpad_down_axis = +1
saturn.retroarch.input_player1_gun_dpad_left_axis = -0
saturn.retroarch.input_player1_gun_dpad_right_axis = +0
saturn.retroarch.input_player1_gun_dpad_up_axis = -1
saturn.retroarch.input_player1_gun_offscreen_shot_btn = 3
saturn.retroarch.input_player1_gun_select_btn = 10
saturn.retroarch.input_player1_gun_start_btn = 11
saturn.retroarch.input_player1_gun_trigger_btn = 6
saturn.retroarch.input_player1_joypad_index = 0
saturn.retroarch.input_player1_l2_axis = +5
saturn.retroarch.input_player1_l_btn = 3
saturn.retroarch.input_player1_left_axis = -0
saturn.retroarch.input_player1_mouse_index = 0
saturn.retroarch.input_player1_r2_axis = +4
saturn.retroarch.input_player1_r_btn = 6
saturn.retroarch.input_player1_right_axis = +0
saturn.retroarch.input_player1_select_btn = 10
saturn.retroarch.input_player1_start_btn = 11
saturn.retroarch.input_player1_up_axis = -1
saturn.retroarch.input_player1_x_btn = 4
saturn.retroarch.input_player1_y_btn = 0
saturn.retroarch.input_player2_a_btn = 7
saturn.retroarch.input_player2_analog_dpad_mode = 0
saturn.retroarch.input_player2_b_btn = 1
saturn.retroarch.input_player2_down_axis = +1
saturn.retroarch.input_player2_gun_aux_a_btn = 7
saturn.retroarch.input_player2_gun_aux_b_btn = 1
saturn.retroarch.input_player2_gun_aux_c_btn = 0
saturn.retroarch.input_player2_gun_dpad_down_axis = +1
saturn.retroarch.input_player2_gun_dpad_left_axis = -0
saturn.retroarch.input_player2_gun_dpad_right_axis = +0
saturn.retroarch.input_player2_gun_dpad_up_axis = -1
saturn.retroarch.input_player2_gun_offscreen_shot_btn = 3
saturn.retroarch.input_player2_gun_select_btn = 10
saturn.retroarch.input_player2_gun_start_btn = 11
saturn.retroarch.input_player2_gun_trigger_btn = 6
saturn.retroarch.input_player2_joypad_index = 1
saturn.retroarch.input_player2_l2_axis = +5
saturn.retroarch.input_player2_l_btn = 3
saturn.retroarch.input_player2_left_axis = -0
saturn.retroarch.input_player2_mouse_index = 0
saturn.retroarch.input_player2_r2_axis = +4
saturn.retroarch.input_player2_r_btn = 6
saturn.retroarch.input_player2_right_axis = +0
saturn.retroarch.input_player2_select_btn = 10
saturn.retroarch.input_player2_start_btn = 11
saturn.retroarch.input_player2_up_axis = -1
saturn.retroarch.input_player2_x_btn = 4
saturn.retroarch.input_player2_y_btn = 0

Additional configurations for better graphics

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment