Category Archives: Electronics

GP-Wiz40 To RetroPie Arcade Controller

Now that the (endless) software issues have been taken care of, I built out the controller.

The button on the front edge is the ESC (in MAME) / exit emulator (others) button — press it and the emulator closes, returning the user to Emulator Station.

Lots of wires, but much simpler than it looks. I added an LED (above the GP-Wiz40 board) so that I can confirm that the USB is connected.

DSCN3958 (Large)

DSCN3957 (Large)

GP-Wiz40 MAX USB and MAME4All-Pi on RetroPie

So, as it stands with the September 2013 build of MAME4All-Pi, the code supported 16 joystick buttons. Now, under normal conditions, this would be just fine. However, I’m trying to get two players on the one GP-Wiz40 board — using all digital pins (no “joystick ports”).

After messing with the joystick stuff, I could get Linux to recognize and calibrate the sticks (which are actually digital – LOW=0, CENTER=127, HIGH=255). But no luck with MAME.

So, I fell back to the Source Code. Luckily, in the Google repository, I was able to find the changes needed (when they changed the code to support 16 buttons). So, if I could find all those changes, I could add more (with any luck).

And I ended up lucky!

Go to /opt/retropie/emulators/mame4all-pi/src

These files need to be updated:


I added 4 new buttons, bringing the total to 20.

One thing I just noticed: in inptport.h and inptport.cpp there is a READ_HANDLER that does up to 20 ports (boy, was I lucky). If I add more buttons, I’m probably going to mess with that. Not sure why that was already there — maybe they are using 4 for directions and 16 for buttons? Not sure. I’m just hacking the code, so don’t have a proper understanding of it. Either way, I didn’t touch that part, yet my new buttons are working. Go figure.

Once the source is updated, go to /opt/retropie/emulators/mame4all-pi/ and make clean and then make.

(Note that I was sick of permissions issues, so was a bad boy and just granted all users full access to the directory. You may need to do this, or try sudo. I was sick of getting stopped by “security” that I don’t need, so used the brute force approach.)

So, now I can have P1 and P2 have 8 control buttons each (U/D/L/R/A/B/X/Y) and I have four more lines for COIN, P1 Start, P2 Start (?), and probably ESC (close emulator). I’ll stick with 20 for now, since I’m sick of this little hornets nest and want to get to building the hardware!



GP-Wiz40 To Linux / RetroPie Joystick Mapping

Here is how the GP-Wiz40 maps to the Linux buttons. Note that the current build of MAME4ALL for Pi is limited to 16 buttons. There may be a way around this. This might change in the future. For now, it’s causing me problems. I’m hoping I can figure out how to get the actual analog stick ports to work — that would solve my problem.

I’ve included a column for what function I mapped to each button. You can do whatever you like. This worked for me.


Also, remember I’m trying to use only one of my GP-Wiz40 boards. First, it would be silly to waste another board. Second, I want to use only one USB port (so I can connect a keyboard for debugging, if needed, and not have a USB hub added to this mess.)

Update: I got the Linux values the hard way (don’t ask). The easier/proper way is to get the Linux jstest (joystick test) program. Which, for reasons unknown, isn’t included in the RetroPie build. To get it, go to the command line and install via:

sudo apt-get install joystick

You’ll then have access to jstest:
To see everything: jstest /dev/input/js0
To see events as they come in (easier when checking individual wires/buttons): jstest –event /dev/input/js0

(js0 = joystick #1, js1 = joystick #2, etc,) The GP-Wiz40 gets auto detected under js0, at least in my environment. :-)

next up: Seeing if jscal (joystick calibration) can help get the “normal” GP-Wiz40 joystick (analog) ports working — so I can free up four digitals per player. Here’s hoping.

Update #2: Well, I got calibration to work. But MAME still doesn’t see/find/accept the “analog” joystick pins. So, I’ll stick to pure digital. Remember the problem with that: MAME4ALL-PI only supports 16 buttons. So, I pulled down the source and modified the code so that it will do 20 (for now — just testing). The compile is running now. We’ll see if that works.