Game port 271315 225712391 2008-07-15T01:06:35Z Quantumobserver 7242225 /* Known issues */ Corrected a grammatical error {{Infobox connector |name=Game port |type=Joystick input port |image=[[Image:Da-15 port.PNG|300px]] |logo= |caption=A DA-15 connector on a [[Soundcard]] |designer=[[IBM]] |design_date= |manufacturer= |production_date= |superseded= |superseded_by=[[Universal Serial Bus|USB]] |superseded_by_date= |external=yes |hotplug=yes |length= |width= |height= |cable= |physical_connector=[[D-subminiature|DA-15]] |num_pins=15 |pinout_col1_name= |pinout_col2_name= |pinout_image=[[Image:DA-15 DSubM.png|300px]] |pinout_caption= |pin1=+5V DC |pin1_name=+5V |pin2=Button 1 |pin2_name=B1 |pin3=X axis for joystick 1 (0-100 kohm) |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 kohm) |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 kohm) |pin11_name=X2 |pin12=Ground for buttons 3 and 4 |pin12_name=GND |pin13=Y axis for joystick 2 (0-100 kohm) |pin13_name=Y2 |pin14=Button 3 |pin14_name=B3 |pin15=+5V DC (sometimes unconnected) |pin15_name=+5V |pinout_notes= }} The '''game port''' is the traditional connector for [[video game]] input devices on [[x86]]-based [[Personal computer|PCs]]. The game port is usually integrated with a PC [[I/O]] or [[sound card]], either [[Industry standard architecture|ISA]] or [[Peripheral Component Interconnect|PCI]], or as an on-board feature of some [[motherboard]]s. [[Microsoft]] has discontinued game port support with [[Windows Vista]], so it is probable that manufacturers will cease to produce boards with this connector. However, it's still entirely possible to provide third-party drivers that will work with the gameport. [http://forums.creative.com/creativelabs/board/message?board.id=Vista&message.id=4732&view=by_date_ascending&page=2] == Gameport details == === Analog interface === Unlike most other [[joystick]] connectors (and controllers) during the early days of home computing and game consoles, the game port is actually [[analog (signal)|analog]] rather than [[digital (signal)|digital]], relying on some form of [[Analog-to-digital converter|ADC]] to interpret joystick movements. Early IBM-PC manuals describe this port as suitable for connecting two analog [[Paddle (game controller)|paddles]] rather than joysticks. This approach has historically given the [[IBM-PC]] an advantage in [[simulation]] games, especially [[flight simulator]]s, 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 existing joystick interface, most notably the standard [[DE-9 connector]] [[Atari]] joysticks. === Acquisition and programming === Also, while other joystick standards (such as [[Atari]] or [[Nintendo Entertainment System|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 ([[Transistor-transistor logic|TTL]]) joystick port. === Circuits === The typical implementation of a gameport uses a capacitor and a simple [[voltage comparator]], which together form a sort of crude [[Analog-to-digital converter|ramp-compare ADC]], which needs to be periodically polled and reset 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 acquisition frequency and value typically depend on the joystick's internal resistance, noise, CPU speed and the total joystick-capacitor's [[RC circuit|RC time constant]]. === Known issues === Its analog nature has also been the cause of many problems e.g. all kinds of joysticks needed "calibration", even [[arcade game|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 [[Central processing unit|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 system]]s 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 uses [[analog signal]]s (from [[potentiometer]]s) or [[digital signal]]s (using [[microswitch]]es or [[contact]]s). [[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. With Windows XP, only one calibration per joystick is enough, which is assumed "valid" until a joystick is unplugged. Certain applications and games were (and are) however able to use some analog joysticks without explicit calibration, under certain restricted conditions. In general, if only a purely directional input with no precise intensity information is required, 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 in order to detect movement and excursion from the middle position. The limitation of this method is that the reading of the same joystick over the same gameport can change over time, and some joysticks cannot work at all with this method. Also, the joystick must be in the middle position at least once when the implicit "self calibration" takes place, even if not explicitly stated. Recently, Microsoft has announced that it will no longer include support for gameports in operating systems beginning with Windows XP Professional x64 edition, reasoning that USB-based gaming equipment is now more common. This leaves gameport support up to the manufacturer of the device (i.e. Sound card or USB converters) the gameport ships on. == 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 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 simultaneously usable), 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 such as the [[Microsoft Sidewinder]] 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 [[daisychain]]ing 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 [[Do it yourself|DIY]] enthusiasts have found ways to connect a wide array of input devices to the gameport and even found other applications for it, such as voltage or current [[measurement]] or simple [[interfacing]] and [[data acquisition]]. == History and variants == The original gameport design by [[IBM]] (as a separate expansion card for the [[IBM PC]]<ref>[http://mysite.du.edu/~etuttle/electron/elect57.htm Electronics 57<!-- Bot generated title -->]</ref>) initially 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 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-button joystick possible. The 15-pin gameport is no longer provided on presently manufactured PCs. However, adapters exist that allow older joysticks and controllers to connect via USB. However, Microsoft's Vista operating system natively lacks all gameport support, even for USB adapters. == MIDI connectors == Game ports use [[D-subminiature|DA-15]] connectors (also incorrectly called [[D-subminiature#Description and nomenclature|DB-15]]), and usually double as connectors for [[MIDI]] instruments. 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 connector]]s. 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 gameport-MIDI adaptor can be found at [http://www.midi.org/about-midi/electrical.shtml this MIDI page]. == Other types of game controller connectors on the IBM-PC == The game port has been replaced by the [[Universal Serial Bus]], which allows for better [[plug-and-play]] support. Earlier attempts to replace game port based controllers with e.g. [[parallel port]], [[serial port]] or [[PS/2 connector|PS/2]] ones had little success, until the introduction of the [[Universal Serial Bus|USB]] standard. == See also == * [[Game controller]] == References == <references/> == External links == * [http://pinouts.ru/Inputs/GameportPC_pinout.shtml Fairly detailed gameport pinouts and specs] * [http://www.epanorama.net/documents/joystick/pc_circuits.html Page with extensive info and a lot of experimental/DIY material on gameports] [[Category:Computer peripherals]] [[Category:Legacy hardware]] [[cs:Gameport]] [[de:Gameport]] [[es:Puerto de juegos]] [[ja:ゲームポート]] [[ru:Игровой порт]]