Game port
|
The game port is the traditional connection for video game input devices on an x86-based PCs. The game port is usually integrated with a PC I/O or sound card, either ISA or PCI, or as an on-board feature of some motherboards.
Contents |
Other types of game controller connectors on the IBM-PC
The game port has been to some extent replaced by the Universal Serial Bus, which allows for better plug-and-play support, although it remains a popular choice for both analog joysticks and gamepads, as game port based controllers tend to be somewhat cheaper than USB-based ones. Earlier attempts to replace game port based controllers with e.g. parallel port, serial port or PS/2 ones had little success, until the introduction of the USB standard.
MIDI connectors
Game ports use DB-15 connectors, and usually double as connectors for MIDI instruments. To use a game port with MIDI instruments, one had to obtain an unusual cable (http://www.trianglecables.com/6footmidcabd.html) with both DB-15 and 5-pin DIN connectors (similar to old-style pre-PS/2 keyboard connectors known as Baby AT or AT 5 connectors).
Gameport details
Analog interface
Unlike other joystick connectors (and controllers) during the early days of home computing and game consoles, the game port is actually analog rather than digital, relying on some form of ADC to interpret joystick movements. Early IBM-PC manuals describe this port as suitable for connecting two analog paddles rather than joysticks. This approach has historically given the IBM-PC an advantage in simulation games, especially flight simulators, but on the other hand rendered the design and use of simpler arcade or console joysticks more complex and needlessly convoluted, apart from being essentially incompatible with any existent joystick interface, most notably the standard 9-pin Atari joysticks.
Acquisition and programming
Also, while other joystick standards (such as Atari or NES joysticks) are very easy and straightforward to use by programmers, the game port requires careful programming and well-timed software interrupt triggering in order to read an input. This of course caused performance issues as reading the game port took a notable amount of CPU time, especially compared to systems with a 'normal' digital (TTL) joystick port.
Circuits
The typical implementation of a gameport uses a capacitor and a ramp-compare ADC, which needs to be reset and triggered at precise moments in order to read an input, something that needs to be done several times (generally above 30) per second in order to provide a responsive game input, and the actual value read may also depend on the joystick's internal resistance, noise, CPU speed and ADC counter speed (which is not standard and, on many implementations, not programmable).
Known issues
Its analog nature has also been the cause of many problems e.g. all kinds of joysticks needed "calibration", even arcade-style ones since no game controller and no joystick produced the same measurements each time, but they were dependent on the exact way acquisition was made and even by the CPU's speed in some rather poor designs. Also, all kinds of PC Gameports suffer from electrical noise.
The calibration procedure is still required at some phase, even under modern operating systems such as Windows XP and usually consists of moving the joystick around all of its axes in order to measure the maximum axis excursion values, no matter if the joystick is analog (using potentiometers) or digital (using microswitches or contacts). USB joysticks do not require calibration, in general.
In the days of DOS, each game using the gameport(s) had to do its own calibration, often each time the game started, and some poorly coded calibration routines even failed to work consistently and properly, rendering some joysticks unusable with some games.
Extensions of the gameport capabilities
Some advanced gameport joysticks support more than 4 buttons (e.g. 6 or 8) but typically require a special device driver for the 6 buttons to work properly, since the gameport doesn't have actual hardware support for more than 4 distinct buttons.
This can be overcome by either using some normally "unused" pins or changing the joystick's circuits (and related software) in order to read a 4-bit state code from the 4 button inputs, thus giving up to 16 button combinations (albeit with some limitations e.g. some buttons may not be held down) or a combination of both techniques.
High-end gameport joysticks rely on multiplexing a proprietary data stream through the 4 standard button inputs and sometimes through the "unused" pins, achieving full support for a rather high number of buttons (e.g. 16 or 20) while special features such as daisychaining multiple joysticks, force feedback or joystick programming become possible in some cases.
The obvious drawback here is the need for using a special device driver in order to interpret the joystick input, and making its usage rather 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 a wide array of input devices to the gameport and even found other applications for it e.g. voltage or current measurement, simple interfacing and data acquisition etc.
History and variants
The original gameport design by IBM initially allowed four analog axes and four buttons on one port, allowing two joysticks or four paddles to be connected, although but this required a special "Y-splitter" cable and isn't fully supported by some combined midi/game ports usually found on sound cards.
Some poorly implemented game ports (usually built-in on old motherboards and I/O cards) didn't fully support either 4 axes or 4 buttons, making only the use of a single 2-axis and 2-buttons joystick possible.
See also
- Game controller
- Fairly detailed gameport pinouts and specs (http://pinouts.ru/data/GameportPC_pinout.shtml)
- Page with extensive info and a lot of experimental/DIY material on gameports (http://www.epanorama.net/documents/joystick/pc_circuits.html)