source: https://japanatron.com/blog/other/it/10417-batocera-how-to-pair-8bitdo-m30-controller
- Put the controller into pairing mode first, then start Bluetooth discovery on Batocera. Use the Android D-input (Start + B) pairing mode.
- 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.
- Turn off the controller by holding down start.
- Restart Batocera.
- 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
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.
#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