RetroArch and I-Pac 2

I have a question. I just purchased an I-Pac 2. I have it all setup and installed. I am doing 2 player with 2 joystickseach player with 6 buttons.

So in MAME all seems fine. I didn’t need to reallychange anything to get working. Now however when working on Sega Genesiswith RetroArch I am lost as to how should bind keys. I know how to getinto setting via F1 but not sure what keys should be doing what.

Do you have a setup or guide?

Thanks!

Ray

There’s no guide, but I had to manually edit my binds in a text editor when I set my jpac up (admittedly, it’s been awhile). Many of MAME’s default keys conflict with RetroArch’s hotkey default mappings, so you’ll have to change those to “nul” in the config.

MAME seems to work as default. It’s basicly other systems. I am new to using RetroArch so not sure how should setup. Retropad or Keyboard? What type of joystick etc. When start blinding it ask for what seems like Xbox 360 buttons to set to my joystick. IE: A B X Y etc

RetroArch uses an abstraction for gamepads known as the ‘retropad’, which is setup basically like a ps3/360 controller. The only real peculiarity is that the face buttons are labeled like an SNES (i.e., B/A/Y/X instead of A/B/X/Y). The idea is that you can set your buttons up once and they work everywhere instead of having to map them separately for each core.

Once you get them setup generally, you can go into the core’s own ‘core input remapping’ and change which buttons are mapped to which retropad virtual buttons. This is helpful for Genesis/MD, since its buttons don’t really map to the 360 layout sensibly.

Since the IPACs show up as keyboards, you’ll bind them with the keyboard mode. You’ll just use ‘joypad’, not ‘joypad w/ analogs’ or whatever, since it doesn’t have analogs.

For reference, this is what my retroarch.cfg looks like with my jpac in my arcade cab: http://pastie.org/10357655

[QUOTE=hunterk;27049]RetroArch uses an abstraction for gamepads known as the ‘retropad’, which is setup basically like a ps3/360 controller. The only real peculiarity is that the face buttons are labeled like an SNES (i.e., B/A/Y/X instead of A/B/X/Y). The idea is that you can set your buttons up once and they work everywhere instead of having to map them separately for each core.

Once you get them setup generally, you can go into the core’s own ‘core input remapping’ and change which buttons are mapped to which retropad virtual buttons. This is helpful for Genesis/MD, since its buttons don’t really map to the 360 layout sensibly.

Since the IPACs show up as keyboards, you’ll bind them with the keyboard mode. You’ll just use ‘joypad’, not ‘joypad w/ analogs’ or whatever, since it doesn’t have analogs.

For reference, this is what my retroarch.cfg looks like with my jpac in my arcade cab: http://pastie.org/10357655[/QUOTE]

Still not sure what you mean.

But I am guessing change where says Retropad to Retrokeyboard?

When I try doing binding I get the A/B/Y/X and Select/Start but D pad, right and left stick etc I am not sure what to do.

Yeah, that A/B/Y/X etc. is the retropad. It’s not a physical thing, it’s an abstraction that you can map buttons or keys to. You bind your joystick buttons to the retropad buttons and then the cores’ buttons get mapped to the retropad.

I’m guessing you have 8-way joysticks and 6 buttons? If so, map the up/down/left/right directions to your joystick and then: retropad Y = ctrl = mame button 1 retropad X = alt = mame button 2 retropad L1 = space = mame button 3 retropad B = shift = mame button 4 retropad A = ‘Z’ = mame button 5 retropad R1 = ‘X’ = mame button 6 retropad select = ‘num5’ = mame coin retropad start = ‘num1’ = mame P1 start Just hit ‘enter’ on your keyboard to skip the other binds that you don’t need (i.e., L/R 2 and 3 and the analogs).

Player 2’s binds are a bit harder because they conflict with default MAME mappings, which it’s easier to deal with in RetroArch than to reprogram your IPAC. retropad Y = ‘A’ = mame button 1 retropad X = ‘S’ = mame button 2 retropad L1 = ‘Q’ = mame button 3 retropad B = ‘W’ = mame button 4 retropad A = ‘I’ = mame button 5 retropad R1 = ‘K’ = mame button 6 retropad select = ‘num6’ = mame coin retropad start = ‘num2’ = mame P1 start

You can open your retroarch.cfg with a text editor and search for any of the conflicting hotkey assignments and change those to “nul” (I don’t remember what those are offhand, it’s been a long time since I set this up for myself).

If you don’t want to have to keep a keyboard handy (like in my arcade cab), the IPAC/JPACs have some built-in macros you can leverage. For example, if you hold P1-Start and hit P1-joystick-down, it makes a ‘p’ keyboard event, which I have mapped to input_menu_toggle in my retroarch.cfg (this is normally set to the ‘pause’ hotkey in RetroArch, but that’s not a thing I ever really want to do in a cab, so I changed input_pause_toggle to “nul” to avoid a conflict).

Does that make sense?

Thanks for info. I am at work today so can’t mess with it much. However here is a screenshot of where I am not sure what I should be selecting.

Bind Mode ? User 1 Device Type ? User 1 Analog to Digital ? User 1 Device Index = I-PAC 2 (guessing right)

And same info for User 2.

Thanks for info. I am at work today so can’t mess with it much. However here is a screenshot of where I am not sure what I should be selecting.

Bind Mode ? User 1 Device Type ? User 1 Analog to Digital ? User 1 Device Index = I-PAC 2 (guessing right)

And same info for User 2.


Bind mode should probably be retrokeyboard, though I’m not sure all of the modifier keys will actually be picked up properly. You may have to edit your retroarch.cfg to get those in there.

Don’t mess with User 1 Device Type, typically.

Analog to Digital can let your analog sticks also handle dpad stuff (for convenience navigating menus, etc.). It’s not going to apply to an IPAC.

Device Index is going to be IPAC2 for both players, I think.

[QUOTE=hunterk;27057]Yeah, that A/B/Y/X etc. is the retropad. It’s not a physical thing, it’s an abstraction that you can map buttons or keys to. You bind your joystick buttons to the retropad buttons and then the cores’ buttons get mapped to the retropad.

I’m guessing you have 8-way joysticks and 6 buttons? If so, map the up/down/left/right directions to your joystick and then: retropad Y = ctrl = mame button 1 retropad X = alt = mame button 2 retropad L1 = space = mame button 3 retropad B = shift = mame button 4 retropad A = ‘Z’ = mame button 5 retropad R1 = ‘X’ = mame button 6 retropad select = ‘num5’ = mame coin retropad start = ‘num1’ = mame P1 start Just hit ‘enter’ on your keyboard to skip the other binds that you don’t need (i.e., L/R 2 and 3 and the analogs).

Player 2’s binds are a bit harder because they conflict with default MAME mappings, which it’s easier to deal with in RetroArch than to reprogram your IPAC. retropad Y = ‘A’ = mame button 1 retropad X = ‘S’ = mame button 2 retropad L1 = ‘Q’ = mame button 3 retropad B = ‘W’ = mame button 4 retropad A = ‘I’ = mame button 5 retropad R1 = ‘K’ = mame button 6 retropad select = ‘num6’ = mame coin retropad start = ‘num2’ = mame P1 start

You can open your retroarch.cfg with a text editor and search for any of the conflicting hotkey assignments and change those to “nul” (I don’t remember what those are offhand, it’s been a long time since I set this up for myself).

If you don’t want to have to keep a keyboard handy (like in my arcade cab), the IPAC/JPACs have some built-in macros you can leverage. For example, if you hold P1-Start and hit P1-joystick-down, it makes a ‘p’ keyboard event, which I have mapped to input_menu_toggle in my retroarch.cfg (this is normally set to the ‘pause’ hotkey in RetroArch, but that’s not a thing I ever really want to do in a cab, so I changed input_pause_toggle to “nul” to avoid a conflict).

Does that make sense?[/QUOTE]

Forgot. Yes I have a Happ Competition 8 way joysticks with 6 buttons for each player. Plus start and coin for each player and 2 on sides planning for pinball.

One part that confuses me is the D pad and right and left stick when binding. Since only have one should I skip the D Pad and one of the stick bindings?

I am really starting to lose my mind here. I have deleted my entire RetroArch setup. Downloaded 1.2.2 Win 64. When I change the Bind Mode to Retrokeyboard save the config it always comes back Retropad. From what I am seeing must be keyboard to even begin mapping buttons.

Anyone know what is going on here?

The bind mode only matters for right that moment, IIRC. It will always default back to retropad on exit. Just change it to retrokeyboard and immediately bind your keys.

Tbh, I think it’s going to be much easier on you just to modify the retroarch.cfg similar to mine.

Working from home tomorrow so will look at it more.

Messing around with it some and seem to kinda have player one working. Not completely sure. One button seems to put system in turbo.

So player 2 need to figure out also. But getting player 1 right first! However when use down on player 2 joystick puts RetroArch in Full screen looks like so bezels are messed up.

Yes, if you look at my previous posts, I already explained what the mame defaults are (for buttons, at least), and mame button 4 is spacebar, which is retroarch’s vsync toggle. You’ll have to change that hotkey mapping to something else (either another key/button or nul). Likewise, mame’s default for p2-down is ‘f’, which is retroarch’s fullscreen toggle, and up is ‘r’, which is retroarch’s rewind hotkey, so you’ll have to remap/nul those, too.

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