Hi milyard,
I was struggeling myself to setup my 2 player arcade controls connected via ipac2 to a RPI with RetroPie/Retroarch.
I spent several days trying to get retroarch to recognize my bindings but in vain. Then I configured the ipac2 to behave like a joypad and everything worked pretty finde.
However there were other issues so I thought about the keyboard mode again. After reading a lot of stuff and finally understanding how it all works together I think I figured it out. I have now the ipac2 setup working for 2 players for all libretro emulators (SNES, FBA, Megadrive, etc.). I’m describing it for the retroarch/retropie approach so you might need to copy it somewhere else on your system.
All libretro emulator configs are stored in /opt/retropie/configs/fba [snes, megadrive, …] contain a file retroarch.cfg. This file contains the whole settings. It seems to be autogenerated from /opt/retropie/configs/all/retroarch.cfg if not existing.
I adapted ot according to my needs until everything works. Then you can just copy the exactly same file to the other directories - or change them for individual emulators of course.
The following settings configure the ipac2 for libretro. (Front button shows/hides menu). This took me 1 month until it finally found out how it all worked together…
Do not use the UI for setup! Change the config file directly with a text editor (of course stop libretro emulators before).
Search in the file for the input* settings and replace them accordingly.
The settings are the default settings from ipac2, which send LALT, LCTRL, ENTER, SPACE, … for the buttons - just like MAME expects them.
[…]
input_player1_b = “alt”
input_player1_b_btn = “nul”
input_player1_b_axis = “nul”
input_player1_y = “z”
input_player1_y_btn = “nul”
input_player1_y_axis = “nul”
input_player1_select = “num5”
input_player1_select_btn = “nul”
input_player1_select_axis = “nul”
input_player1_start = “num1”
input_player1_start_btn = “nul”
input_player1_start_axis = “nul”
input_player1_up = “up”
input_player1_up_btn = “nul”
input_player1_up_axis = “nul”
input_player1_down = “down”
input_player1_down_btn = “nul”
input_player1_down_axis = “nul”
input_player1_left = “left”
input_player1_left_btn = “nul”
input_player1_left_axis = “nul”
input_player1_right = “right”
input_player1_right_btn = “nul”
input_player1_right_axis = “nul”
input_player1_a = “ctrl”
input_player1_a_btn = “nul”
input_player1_a_axis = “nul”
input_player1_x = “shift”
input_player1_x_btn = “nul”
input_player1_x_axis = “nul”
input_player1_l = “space”
input_player1_l_btn = “nul”
input_player1_l_axis = “nul”
input_player1_r = “x”
input_player1_r_btn = “nul”
input_player1_r_axis = “nul”
input_player1_l2 = “nul”
input_player1_l2_btn = “nul”
input_player1_l2_axis = “nul”
input_player1_r2 = “nul”
input_player1_r2_btn = “nul”
input_player1_r2_axis = “nul”
input_player1_l3 = “nul”
input_player1_l3_btn = “nul”
input_player1_l3_axis = “nul”
input_player1_r3 = “nul”
input_player1_r3_btn = “nul”
input_player1_r3_axis = “nul”
input_player1_l_x_plus = “nul”
input_player1_l_x_plus_btn = “nul”
input_player1_l_x_plus_axis = “nul”
input_player1_l_x_minus = “nul”
input_player1_l_x_minus_btn = “nul”
input_player1_l_x_minus_axis = “nul”
input_player1_l_y_plus = “nul”
input_player1_l_y_plus_btn = “nul”
input_player1_l_y_plus_axis = “nul”
input_player1_l_y_minus = “nul”
input_player1_l_y_minus_btn = “nul”
input_player1_l_y_minus_axis = “nul”
input_player1_r_x_plus = “nul”
input_player1_r_x_plus_btn = “nul”
input_player1_r_x_plus_axis = “nul”
input_player1_r_x_minus = “nul”
input_player1_r_x_minus_btn = “nul”
input_player1_r_x_minus_axis = “nul”
input_player1_r_y_plus = “nul”
input_player1_r_y_plus_btn = “nul”
input_player1_r_y_plus_axis = “nul”
input_player1_r_y_minus = “nul”
input_player1_r_y_minus_btn = “nul”
input_player1_r_y_minus_axis = “nul”
input_player1_turbo = “nul”
input_player1_turbo_btn = “nul”
input_player1_turbo_axis = “nul”
input_player2_b = “s”
input_player2_b_btn = “nul”
input_player2_b_axis = “nul”
input_player2_y = “i”
input_player2_y_btn = “nul”
input_player2_y_axis = “nul”
input_player2_select = “num6”
input_player2_select_btn = “nul”
input_player2_select_axis = “nul”
input_player2_start = “num2”
input_player2_start_btn = “nul”
input_player2_start_axis = “nul”
input_player2_up = “r”
input_player2_up_btn = “nul”
input_player2_up_axis = “nul”
input_player2_down = “f”
input_player2_down_btn = “nul”
input_player2_down_axis = “nul”
input_player2_left = “d”
input_player2_left_btn = “nul”
input_player2_left_axis = “nul”
input_player2_right = “g”
input_player2_right_btn = “nul”
input_player2_right_axis = “nul”
input_player2_a = “a”
input_player2_a_btn = “nul”
input_player2_a_axis = “nul”
input_player2_x = “w”
input_player2_x_btn = “nul”
input_player2_x_axis = “nul”
input_player2_l = “q”
input_player2_l_btn = “nul”
input_player2_l_axis = “nul”
input_player2_r = “k”
input_player2_r_btn = “nul”
input_player2_l_axis = “nul”
input_toggle_fast_forward = “o”
input_toggle_fast_forward_btn = “nul”
input_toggle_fast_forward_axis = “nul”
input_hold_fast_forward = “l”
input_hold_fast_forward_btn = “nul”
input_hold_fast_forward_axis = “nul”
input_load_state = “f4”
input_load_state_btn = “nul”
input_load_state_axis = “nul”
input_save_state = “f2”
input_save_state_btn = “nul”
input_save_state_axis = “nul”
input_toggle_fullscreen = “f”
input_toggle_fullscreen_btn = “nul”
input_toggle_fullscreen_axis = “nul”
input_exit_emulator = “nul”
input_exit_emulator_btn = “nul”
input_exit_emulator_axis = “nul”
input_state_slot_increase = “f7”
input_state_slot_increase_btn = “nul”
input_state_slot_increase_axis = “nul”
input_state_slot_decrease = “f6”
input_state_slot_decrease_btn = “nul”
input_state_slot_decrease_axis = “nul”
input_rewind = “r”
input_rewind_btn = “nul”
input_rewind_axis = “nul”
input_movie_record_toggle = “o”
input_movie_record_toggle_btn = “nul”
input_movie_record_toggle_axis = “nul”
input_pause_toggle = “p”
input_pause_toggle_btn = “nul”
input_pause_toggle_axis = “nul”
input_frame_advance = “k”
input_frame_advance_btn = “nul”
input_frame_advance_axis = “nul”
input_reset = “h”
[…]
You probably dont need all these *_btn and *_axis lines, but I will finetune this lateron.
Hope it works for you!
BR
daubsi