Hacking game port peripherals to work with modern PCs

[Atiti] has a bad habit of hanging on to old things. Some people call this sort of behavior “hoarding”, but around here we understand his affliction. It turns out that in his collection of old computer peripherals, he located a Thrustmaster Formula 1 racing wheel he used back in the day. Analog racing wheels can cost a pretty penny nowadays, depending on what you buy, so he decided to see if he could hack this outdated controller to work with his new PC.

You see, the problem with this wheel is that it utilized a “game port” connecter to interface with the computer. If you don’t remember the game port, go dig up an old PCI sound card and take a look on the back. That 15-pin connector? That’s a game port. Microsoft discontinued support for the game port once Vista was released, so [Atti] had to figure out how in the world he would get it to work on his new PC.

His solution was an Arduino, which is used to read the analog signals output by the wheel. Those signals are processed and sent to a parallel port joystick emulator, enabling him to use the wheel with any game supporting a standard joystick.

Obviously he could have just gone out to the store and bought a USB wheel, but where’s the fun in that?

Good on the builder for solving the problem but I am a bit on nitori’s side on this one. Also could this not be solved by a virtual machine maybe that does support MPU401? I wouldn’t be a huge fan of using vista to run as a gaming rig without some tweaking. But again, good on our “hoarder” friend :) and keeping things working and useful beyond their scoped lifetime :)

IIRC (and it has been a while), the ‘game port’ on the back of a soundcard was actually a MIDI I/O which had been (generally) repurposed for controllers – a CC for pitch, one for yaw, etc, with 128 discrete values in each one.

That’s right, but joysticks were simpler than even that, MIDI is digital but most of the gaming periphs didn’t utilise the MIDI control but had the potentiometers and buttons mapped directly to special pins

i hope hes not down sampling his 10-bit adc readings to 8 bit. a common method for doing this kinda thing tends to emulate a specific ppjoy interface module by formatting a serial packet in just the right way and doing no actual programming at the pc end.

to get around this issue i simply created my own packet format and i wrote a serial -> ppjoy interface program to send the values through at a full 10 bit resolution.

Good for [Atiti] for keeping something useful out of a landfill. It’s probably better quality than most wheels on the market now, to boot.

@blue_carbuncle: MPU401 is a MIDI interface standard and has nothing to do with joysticks (other than the use of the joystick connector to carry MIDI signals on many sound cards).

@Loki: Actually, it’s the other way around: Creative Labs re-purposed some duplicate power supply pins on their Sound Blaster’s on-board joystick port to carry MIDI data (to save a few cents per unit on MIDI connectors and optoisolators; which they sold as an adapter cable to those who wanted MIDI).

if i go look in my garage, i’ll find my old steering wheel or giant joystick that came with a gameport to usb adapter back in 2001. the one in the link, at 14.95- way overpriced. i would rather buy a pci to usb card and blow it up attempting to guess which wire to put where from usb to gameport.

Using an Arduino for this is overkill. There are dozens of cheap analogue->usb HID devices on the market, they are plug and play, and show up as HID devices in windows. No need for programming the device yourself, and no need for 3rd party software to interface it. Of course if this was just an exercise in DIY, then it’s all good.

The real thing I’m curious about is if anyone has tried to do this kind of hacking on some of the last rounds of game port devices, stuff like the Sidewinder Game Pad that ran through a game port but was “digital” in nature, meaning it didn’t work with these typical USB to Game Port converters.

I did a similar thing a couple of years ago, but I used a USB PIC and programmed it as a HID device, so I had full control over the USB descriptor and the configuration of the joystick. With that you could easily replicate the functionality of the Sidewinder and similar devices.

If you purchase a cheap USB game pad (or a USB PIC), you could wire the pins from the sidewinder directly to the corresponding buttons on the USB game pad.

I did something similar when I wired up a Mad Catz Xbox 360 game pad to take input from a old NeoGeo game pad, same concept as the Sidewinder just the pin out is different. Why an Xbox 360 pad, the client wanted to use a NeoGeo pad on the 360.

Im sorry to reply to a very old article, but @darksakul are you the same that frequents tech talk from SRK? I want to do just what you are saying, but I have a flight stick that obviously has 2 axis, so it works with potentiometers, do you think that if I just wire these to the corresponding points of a Dualshock 1 for example, it will work?