Game port

The **Game port** is a port on some PC hardware, and hardware similar to it. This port is for the connection of analog devices used to control computer games, such as joysticks. In most hardware designs for personal computers in 2010, the port is an integrated component on the sound card, another I/O card, or the motherboard itself. Starting with Windows Vista Microsoft no longer supports this port with drivers from the Operating System, but third party drivers are still available. There are also drivers that allow to map the game port to a USB device.

## Hardware

Unlike most other ports on the PC, the Game port is an analog port. This means that signal first needs to be changed to digital form, a task which is usually done by an analog-to-digital converter. In the early days, most joystick designs were digital, which made them easier to build and cheaper. The game port has a 15-pin DSUB interface. Most home computers that used digital joysticks had a 9-pin one. This made existing joysticks unable to work well with the new interface.

Digital joysticks are easy for programmers to access. The signal is already digital, and only gets transferred to the PC. Analog signals are much harder to use, they need careful software interrupt driven programming (to get a useful signal). Interrupts use the main CPU of the system. Digital circuits can use Transistor–transistor logic, which does not use the CPU.

### Circuits

The usual way a game port is added is using a capacitor and a simple voltage comparator. Both together form a sort of simple ramp-compare ADC. This system is polled periodically and reset at precise moments to read an input. This must be done more than 30 times every second. The actual frequency and value usually depend on the joystick's resistance inside, noise, CPU speed and the total joystick-capacitor's RC time constant.

### The need for calibration

Its analog nature has been the cause of problems. One problem was that all kinds of joysticks needed calibration. This was true even for arcade-style ones. The reason for this was that no game controller and no joystick produced the same measurements each time. These depended on the exact way acquisition was made. Some of the worst designs even depended on the speed of the CPU. Also, all kinds of PC game ports suffer from electrical noise.

The calibration procedure is still needed at some point, even under modern operating systems such as Windows XP. Usually, it consists of moving the joystick around all of its axes to measure the maximum axis excursion values, no matter if the joystick uses analog signals (from potentiometers) or digital signals (using microswitches or contacts). USB joysticks, on the other hand, do not need calibration. This is because USB sends digital signals.

In the days of DOS, every game using the game port(s) had to do its own calibration, often each time the game started, and some poorly coded calibration routines made some joysticks unusable with some games. With Windows XP, only one calibration per joystick is enough, which is thought "valid" until the joystick is unplugged.

Certain applications and games are  able to use some analog joysticks even without explicit calibration, under certain restricted conditions. A system of a joystic and game port that is not calibrated can give a "direction", at best. It can not give an intensity. An analog joystick can be "self calibrated" just by leaving the joystick in the middle position and taking a measurement, and then using some arbitrary or adaptive threshold to detect movement and excursion from the middle position. The reading of the same joystick over the same game port can change over time, and some joysticks cannot work at all with this method. The joystick must be in the middle position at least once when the implicit "self calibration" takes place.

Microsoft declared it would no longer include support for game ports in operating systems beginning with MS-Windows XP Professional x64 edition, reasoning that USB-based gaming equipment had become more common. This leaves game port support up to the manufacturer of the device (i.e. Sound card or USB converters) the game port ships on.

## Extensions of the game port capabilities

Some advanced game port joysticks support more than 4 buttons (e.g. 6 or 8) but require a special device driver for the extra buttons to work properly, since the game port does not have actual hardware support for more than 4 different buttons.

This can be fixed by using pins and input meant for the second joystick (i.e. button 5 through 8 are mapped to the signals to the axis pins meant for the second joystick - resulting in the issue of the two buttons mapped to the same axis being not both usable at the same time), using some normally "unused" pins, or changing the joystick's circuits (and related software) to read a 4-bit state code from the four button inputs, thus giving up to 16 button combinations (though with some limitations e.g. some buttons may not be held down) or a combination of both techniques.

High-end game port joysticks such as the Microsoft SideWinder rely on multiplexing a proprietary data stream through the 4 standard button inputs and sometimes through the "unused" pins, giving full support for a rather high number of buttons (e.g. 16 or 20) while special features such as daisy-chaining multiple joysticks, force feedback or joystick programming become possible.

The obvious drawback is the need for a special device driver to understand the joystick input. This makes its use time consuming and operating system-dependent, while the joystick is usually unusable without a special driver (unless multiple operating modes are supported).

Some hardware and DIY enthusiasts have found ways to connect many different input devices to the game port and found other uses for it, such as voltage or current measurement or simple interfacing and data acquisition.

## History and variants

The original game port design by IBM (released in 1981 as a separate expansion card for the first IBM PC) first allowed four analog axes and four buttons on one port, allowing two joysticks or four paddles to be connected, although this required a special "Y-splitter" cable and is not fully supported by some combined midi/game ports usually found on sound cards.

Some poorly made game ports (usually built-in on old motherboards and I/O cards) did not fully support either 4 axes or 4 buttons, making only the use of a single 2-axis and 2-button joystick possible.

Adapters exist that allow older joysticks and controllers to connect via USB.  Microsoft's Vista operating system lacks all game port support, even for USB adapters.

## MIDI connectors

Game ports use DA-15 connectors (also incorrectly called DB-15). Since the game port moved from dedicated expansion cards to sound cards about 1990, these connectors usually double as connectors for MIDI instruments; two of the redundant +5V and GND pins of the original standard were rededicated to MIDI input and output to make this possible. To use a game port with MIDI instruments, one requires a cable with a male and a female DA-15 and two male 5-pin DIN connectors. The drivers and hardware for the game port midi capabilities are based around the now standard Roland MPU-401 MIDI interface (in UART mode only), and support most MPU-401 standard applications for Windows and DOS. The official _proper design_ for a game port-MIDI adapter can be found at midi.org.

## Other websites

- Fairly detailed game port pinouts and specs
- Page with extensive info and a lot of experimental/DIY material on game ports

## Infobox (connector)

- **name**: Game port
- **type**: Joystick input port
- **image**:
- **caption**: A DA-15 connector on a Soundcard
- **designer**: IBM
- **superseded by**: Universal Serial Bus, USB
- **external**: yes
- **hotplug**: yes
- **physical connector**: D-subminiature, DA-15
- **num pins**: 15
- **pinout image**:
- **pin1**: +5V DC
- **pin1 name**: +5V
- **pin2**: Button 1
- **pin2 name**: B1
- **pin3**: X axis for joystick 1 (0–100 kΩ)
- **pin3 name**: X1
- **pin4**: Ground for B1
- **pin4 name**: GND
- **pin5**: Ground for B2
- **pin5 name**: GND
- **pin6**: Y axis for joystick 1 (0–100 kΩ)
- **pin6 name**: Y1
- **pin7**: Button 2
- **pin7 name**: B2
- **pin8**: +5V DC
- **pin8 name**: +5V
- **pin9**: +5V DC
- **pin9 name**: +5V
- **pin10**: Button 4
- **pin10 name**: B4
- **pin11**: X axis for joystick 2 (0–100 kΩ)
- **pin11 name**: X2
- **pin12**: Ground for buttons 3 and 4 (or MIDI out)
- **pin12 name**: GND
- **pin13**: Y axis for joystick 2 (0–100 kΩ)
- **pin13 name**: Y2
- **pin14**: Button 3
- **pin14 name**: B3
- **pin15**: +5 V DC (or MIDI in, sometimes unconnected)
- **pin15 name**: +5 V