Why is controller configuration in Linux such a mess?

I really like my recently purchased RetroFlag Sega USB controller. The buttons are just enough spongy and “mushy”, the size is perfect for my hands, and the quality feels superior to the Genesis controller of its Retro-Bit competitor (which broke for me after just two weeks of use).

What I don’t like is how impossible it seems to get it working as I want it to, in RetroArch.

If I just go with the autoconfig that’s pre-configured, everything is a mess. When I try it out using the Sega Genesis 6 button controller test ROM using PicoDrive and Genesis Plus MX, the three main buttons are mapped backwards; CBA instead of ABC. And XYZ and L+R are messed up even worse.

The same wrong mapping occurs when trying the official RetroFlag mapping guide on the back of the box.

If I instead configure it just as my Retro-Bit Sega Genesis controller was mapped before it broke, by following the RetroPie guide for the Mega Drive/Genesis ArcadePad Controller, at least PicoDrive and Genesis MX Plus work as they should with all buttons correctly mapped.

The next obstacle, which I haven’t been able to solve, is getting the mapping to work with SNES cores. To troubleshoot this, I’m using SNES9x and the SNES Burn-In Test cartridge.

At first, all the buttons work but are a bit misplaced. I want the SNES L and R buttons to be mapped to the physical L2 and R2 buttons of the RetroFlag controller. And to use the SNES Y,X and B,A to be mapped to the Retroflag’s Y,X and B,C buttons. However, when I configure the core input like this, every button other than the controller’s physical B and C buttons stop working.

I’ve also tried out Mednafen and all the others, and they all exhibit the same mapping error as SNES 9x. What I’ve tried as well, is to not map L1 and L2 to the Retroflag’s physical X and Z buttons, but instead leave them as is, ie mapped to the physical L and R side buttons. This doesn’t change anything.

Is there any way to get this to work?

A related issue that’s bothering me, is when I connect a different controller. What RetroArch does is adapt the mapping of the RetroFlag controller, even when it’s a completely different controller (Xbox, 8bitdo’s SNES controller etc) which it identifies correctly. If I manually change the mapping so that it works with the other controller and save the settings, the mapping of the Retroflag controller is one big mess when I connect it back again.

I do not have these issues at all when using RetroArch in my Nvidia Shield that runs Android. Autoconfig works for all controllers and it doesn’t mix the mappings up just because I connect a different one.

If the pad is recognized and autoconfigured correctly, you never need to do anything in settings > input > port 1 controls.

If it’s not recognized and/or autoconfigured correctly, the first step is to create a working, correct autoconfig profile.

Once that’s done, again, you never need to go back into settings > input > port 1 controls. Everything else happens in quick menu > controls, where you can move the core’s functions around on the gamepad.

These remaps can be saved on a per-core basis, so they will not affect the mapping of other cores, but we don’t support per-game+per-controller profiles, so if you plug in a different controller, the inputs for that core will be screwy with that second pad.

Thanks, I’ll guess I’ll have to do without that.

Any ideas for my other issues, when only using one single controller?

If I understand you correctly, as soon as I got the main inputs set up, I should be able to remap buttons however I like per core. I don’t understand the reason why no SNES core allows me to remap L, R, X and Y to L, R, Y and Z. Heck, I cannot remap them to any buttons at all. I’ve tried various ones and as soon as I try that they stop working.

Hmm, dunno what would cause that. Remapping SNES cores works fine here.