Game port

The game port is a device port that was found on IBM PC compatible and other computer systems throughout the 1980s and 1990s. It was the traditional connector for joystick input, and occasionally MIDI devices, until made obsolete by USB in the late 1990s.

Originally located on a dedicated Game Control Adapter expansion card, the game port was later integrated with PC sound cards, and still later on the PC's motherboard. During the transition to USB, many input devices used the game port and a USB adapter dongle was included for systems without a game port.

Pre-IBM game ports




At the time IBM was developing its game port, there was no industry standard for controller ports, although the Atari joystick port was close. It was introduced in 1977 with the Atari Video Computer System, and was later used on the VIC-20 (1980), Commodore 64 (1982), and Amstrad's PC1512 (1986).

In contrast with the IBM design, the Atari port was primarily designed for digital inputs (including a pair of two-axis/four-contact digital joysticks, each with a single pushbutton trigger). Its only analog connections were intended for paddles -- although, as there were two analog inputs per port, each port could theoretically support a two-axis analog joystick, touchpad, trackball, or mouse (some of these being eventually developed for Atari systems).

The Apple II, BBC Micro, TRS-80 Color Computer, and other popular 8-bit machines all used different, incompatible, joysticks and ports. In most respects, the IBM design was similar to, or more advanced than, existing designs.

Initial IBM PC type game ports
The IBM PC game port first appeared during the initial launch of the original IBM PC in 1981, in the form of an optional US$55 expansion card known as the Game Control Adapter. The design allowed for four analog axes and four buttons on one port, allowing two joysticks or four paddles to be connected via a special "Y-splitter" cable.

Originally available only as add-on that took up an entire slot, game ports remained relatively rare in the early days of the IBM PC, and most games used the keyboard as an input. IBM did not release a joystick of its own for the PC, which did not help. The most common device available was the Kraft joystick, originally developed for the Apple II but easily adapted to the IBM with the addition of another button on the back of the case. When IBM finally did release a joystick, for the IBM PCjr, it was a version of the Kraft stick. However, it connected to the computer using two incompatible 7-pin connectors, which were mechanically connected together as part of a larger multi-pin connector on the back of the machine. This eliminated the need for the Y-adapter. Adapters for Atari-style "digital" sticks were also common during this era.

The game port became somewhat more common in the mid-1980s, as improving electronic density began to produce expansion cards with ever-increasing functionality. By 1983, it was common to see cards combining memory, game ports, serial and parallel ports and a realtime clock on a single expansion card. The era of combo expansion cards largely came to an end by the late 1980s, as many of the separate functions normally provided on plug-in boards became common features of the motherboard itself. Game ports were not always part of this supported set of ports.

Integration with sound cards
However, the game port was given a major boost in usage in 1989, with the introduction of the first Sound Blaster. As sound cards were primarily used with computer games, Creative Labs took the opportunity to include a game port on the card, producing an all-in-one gaming solution. At the same time, they re-purposed two otherwise redundant pins on the port, 12 and 15, to produce a serial bus with enough performance to drive an external MIDI port adapter. Previous MIDI systems like the MPU-401 used their own separate expansion cards and a complex external adapter, whereas the Sound Blaster only required an inexpensive adapter to produce the same result. By the end of the year the Sound Blaster was the best selling expansion card on the PC, and the game port was receiving widespread software support.

With the exception of laptops—for which companies released joystick adapters for parallel or serial ports, which needed custom software drivers —through the early 1990s, the game port was universally supported on sound cards, and increasingly became built-in features as motherboards added sound support of their own. This remained true through the second half of the 1990s, by which time integrated sound support had displaced the third-party sound card to a large degree. By the early 2000s, such support was so widespread that newer sound cards began to dispense with the game port as it was certain the machine they would be used in already had such support, including MIDI. Every Sound Blaster card from the first model up to August 2001 included a game port. In 2001 the Sound Blaster Audigy moved the game port to a second expansion slot, which connected to a header on the card.

Replacement by USB
The introduction of the first USB standard in 1996 was aimed squarely at the sort of roles provided by the game port, but initially had little market impact. The subsequent release of the iMac, which featured no legacy ports in favor of USB, started a rapid expansion of USB in the market. This led both to new gaming devices using USB, as well as the profusion of adapters. For instance, the 1997 Microsoft Precision Pro joystick was re-introduced in a version that used a game port connector, but also included a USB adapter in the box. The rapid takeover of USB meant that this was superfluous when the Precision Pro 2 was released the next year in 1998. By 2000, game ports were purely for backward compatibility with now outdated devices.

Microsoft Windows discontinued support for the game port with Windows Vista, though USB converters can serve as a workaround.

Hardware
The game port's DA-15 connector includes inputs for a total of four analog channels and four buttons. These were almost always implemented as two joysticks with two buttons each, but it is also possible to support four paddle controllers each with one button, or a single gamepad with two analog sticks and four buttons using the same inputs. The port includes redundant pins, including a total of four +5 V supplies, and separate grounds for most of the buttons. In most similar game ports, like those on the Atari, a single +5 V and ground is used for all the channels.

The game port was originally mounted on a dedicated ISA card. Since the early 1990s, when the game port moved from dedicated expansion cards to PC I/O or sound cards, these connectors have usually doubled as connectors for MIDI instruments; two of the redundant +5 V 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, a break-out cable with the necessary opto-isolation hardware and compatible connectors is required - typically these consisted of a male and a female DA-15 and two male 5-pin DIN connectors. For many sound cards, the game port midi capabilities were based around the Roland MPU-401 MIDI interface (in UART mode only), however some older sound cards (notably the original Sound Blaster and Sound Blaster Pro) used a proprietary interface that was not compatible with the MPU-401.

The analog channels are read by sending voltage into the line, through a potentiometer in the controller, in this case 100,000 ohm, and then into a capacitor. The value is read by timing how long it took for the voltage in the capacitor to cross a certain threshold. The rate varied depending on the resistance, and thus physical position, of the potentiometer. In the Atari port, which had similar analog channels, there is a convenient timer available in the form of the video clock circuitry. In the PC there is no similar clock because video functionality is normally provided on an expansion card. Instead, a software routine needs to first trigger capacitor discharge by issuing an IO write to the Gameport, and then measure the time it takes to charge them again by constantly polling Gameport. Using original IBM formula, Time = 24.2 μs + 0.011 (r) μs and assuming 100Kohm potentiometers this process can take up to 1.1ms per readout, or over 60ms if we decide to read joystick position 60 times a second. This significant overhead was the reason why using original Gameport on the PC could consume up to 10% of CPU time independent of CPU speed.

Software
Initially there was no standardized software for running the joysticks; applications would poll the known ports associated with the sticks as part of their game loop. This did, however, leave the implementation of a lot of housekeeping tasks to every application that used them, such as looking for and enumerating the active devices, and calibrating them. This changed in Windows 95, which introduced standardized Windows Registry entries to hold these values and make it easier for applications to find these devices. DirectX further expanded the options through DirectInput with the "joystick mini-driver" with a number of new capabilities. Among these were support for up to six analog axes, a point-of-view hat, and up to 64 buttons. It also supported up to 16 such devices, which could be connected using any interface, not just the game port.