Main Content

Necroware's GamePort Adapter

Many people from the retro community still have their beloved joysticks and gamepads from the early days. These devices often live their lives somewhere in the dark corners of our basements and we don’t dare to throw them away, because of nostalgic reasons. They remind us so much of our childhoods, where we played our Wing Commanders, X-Wings, Descents and many other games. These old joysticks were all made to be connected to the game port, usually on a sound card. But by the end of 90’s and beginning of 2000’s game ports vanished from our computers and were replaced by USB and our old joysticks disappeared into the past. Today not everybody has a full retro PC and many people are using their modern computer with DOSBox to play the old games, sometimes with a modern USB joystick. But wouldn’t it be great to play the old games with the same joystick which we used back then? And this is where this adapter comes into play. It can be used to connect gameport joysticks to a USB port.

How does it work?
The adapter is built around Arduino Pro Micro, which uses the same ATmega32U4 microcontroller as Leonardo. This microcontroller has built-in USB HID capabilities and can be used to build HID input devices, like joysticks. The adapter itself is super simple, the main brainwork was invested into the software. Very much simplified, it reads the joystick states and sends the data, via USB, to the computer, which thinks that it is communicating with a USB joystick.

What is special about this one?
There are already plenty of gameport to USB adapters for basic analog joysticks and, as far as I know, there were some efforts to communicate with Sidewinder joysticks by Microsoft as well. But there is no universal adapter, which would work with different types of joysticks. This adapter implements multiple drivers for various analog and digital joysticks, with an option to add more, in the future.

Features overview:

Support for generic analog joysticks with 2/4 buttons and 2/4 axes
Four switches to select joystick type
Autodetection for various digital protocol joysticks
Auto-Calibration
Very low input lag
What is the difference between analog and digital joystick?
Many people call button-only joysticks or gamepads digital. This is kind of right, because A button is either pressed or not. You can’t have an analog values in between. However by digital, in this case, we mean something different. A gameport contains 15 pins, 8 of which are used for joystick communication. 4 pins are for buttons and carry digital values in sense of on/off and 4 pins are for analog axes, which deliver voltage somewhere between 0V and 5V. Joysticks which were made in the early days used this pinout. They could have a maximum of 4 buttons and 4 axes and were DOS compatible. Later, in the time of Windows 95/98 many joysticks were made to be plugged into a gameport as well, but they were not limited to 4 buttons and 4 axes. They had a lot more exciting features, like hat switches and throttle controls. But how did this work? Well the manufacturers implemented their drivers to communicate with the joystick via gameport using a proprietary communication protocol. For example, by using one pin of the gameport as clock and another one as data, the possibilities were almost limitless. Such joysticks are called digital as well, because they used digital protocols to communicate with the PC. And suddenly, many features were possible, but the price of these features was the lost compatibility to DOS. You couldn’t just plug such a joystick it into the gameport and expect it to work in old DOS games. The plug was the same, but the signaling was completely different.”

Link to article