Controlblock MAME keyboard emulation remapping
gmilner last edited by
I'm using a Controlblock set to "MAME" in order to enable the switches on an old Atari 2600 case to act as keypresses in Retropie (to trigger events such as "game reset", "quit retroarch", "next shader" etc.). The hardware part is great - I've wired the switches to z,x,c,v,1 and the Raspberry Pi4 is receiving the keystrokes properly.
I'm able to edit the retroarch.cfg files to change the hotkey mapping to match the keystrokes generated by the Controlblock - so everything works kinda fine...
...except that the Retropie build I'm using has different retroarch.cfg files for each emulator that already mess with the hotkey bindings, so I can't just change the bindings in the all/retroarch.cfg file. If I want to change what each switch does I have to manually change the different retroarch.cfg files for each emulator - a real grind.
Is there a way that I can change the keys that are sent to the Pi from the ControlBlock under the Controlblock MAME layout to match the default hotkeys in Retroarch? Or are the keys used hardwired into the Controlblock firmware?
Many thanks for any thoughts!
etheling last edited by etheling
I did a similar project not too long a go. E.g. built RetroPie into Atari 2600 case. Anyways - yes, key presses that ControlBlock sends when using MAME layout are hardcoded into it's driver:
To change e.g. switch 'z' to send something else than z, say a, you would modify lines below and replace KEY_Z with KEY_A. And recompile and re-install the driver (instructions here https://github.com/petrockblog/ControlBlockService2).
Available KEY_* events (that you could replace KEY_Z above) are found from here: https://github.com/petrockblog/ControlBlockService2/blob/master/src/controlblock/uinput/UInputEventCodes.h
I hope this helps you forward. I did a slight re-write for the driver myself as I wanted all the Atari 2600 switches to provide their original functionality. Which isn't straightforward since official ControlBlock driver doesn't support switch where both on and off indicate certain state (e.g. on -> colorTV, off B&W). I suppose I could clean up my code a bit and put it up to github sometime.