I’ve been wrestling with this particular issue for a couple of weeks now, and I’ve finally had a breakthrough that I think will be useful for other people, and thought I might share it here.
The problem I was having is two-fold:
First up: The Picade with its default firmware worked perfectly for all emulators I used it with, with the exception of MAME cores. For some reason, the inputs were not binding correctly. Start, Coin, Button 1, Button 2, and the joystick was working perfectly, but the rest of the buttons were seemingly assigned to other random button presses, or combinations of button presses. In addition, none of the Retroarch shortcuts (particularly saving and loading states) wouldn’t work. Changing settings in the MAME tab menu didn’t help, and neither did changing the controller settings in the Retroarch configuration. The solution? Install the official new firmware, and reconfigure the Picade as a gamepad, leaving the volume buttons, Esc and Enter as normal. Here is the serial config for that:
a 220 221 222 223 230 231 232 233 234 235 236 237 176 177 250 251 105 111 112
Making that change and then changing the input driver in Retroarch to sdl2 fixed the problem, and the Picade controls worked exactly as expected. Unfortunately, that leads to my second problem.
Second problem: The Picade on its own will play most games without issue, but if I ever want to use N64 games or PS1 games, or really anything that requires dual analog sticks or the L2, R2, L3, and R3 buttons, I have a Logitech F710 controller I use in tandem with the Picade. The only problem is, the Logitech F710 does not work under the sdl2 driver (it shows up as unrecognized input). The Picade works in udev mode, but none of the buttons work except for X and Y, which act as Start and Select respectively. This means no multiplayer games in this configuration, and if I ever want to switch controllers, I have to change the input driver in the Retroarch settings.
After banging my head against the wall for a while, I finally figured out the problem: Under the udev input driver, when Emulationstation binds the buttons, the configuration that is passed to Retroarch is wrong. The buttons behave as they should in Emulationtation, but once any of the emulator cores launches, the button mapping is wonky. The joystick is correct, but the configuration in Retroarch assumes that the button layout in udev mode is as follows:
1 (Y button) = 0
2 (X button) = 1
3 (L button) = 2
4 (B button) = 3
5 (A button) = 4
6 (R button) = 5
Select/Coin = 6
Start = 7
In actuality, the Picade buttons ACTUALLY send the following inputs when using the udev driver:
1 (Y button) = 6
2 (X button) = 7
3 (L button) = 8
4 (B button) = 9
5 (A button) = 10
6 (R button) = 11
Select/Coin = 12
Start = 13
So the fix for getting the Picade working in udev mode is to manually edit the Retroarch joypad config file, /opt/retropie/configs/all/retroarch-joypads/ArduinoLLCArduinoLeonardo.cfg, and then manually changing the button mappings to use the above numbering.
Hope this helps anyone who might have had the same issue as me!