# Gameport

Der Gameport [ˈgeɪmpɔːɹt] (eigentlich Game port) ist eine externe Schnittstelle an IBM-PC-kompatiblen Computern, an die man analoge Joysticks, Paddles, Gamepads und bei neueren Ports MIDI-Geräte anschließen kann. Es können bis zu vier analoge Steuerungsachsen und vier digitale Feuerknöpfe über einen Gameport abgefragt werden.

## Geschichte

Der Gameport wurde bereits für den originalen IBM Personal Computer von 1981 als Steckkarte angeboten und gehörte damit lange Zeit zusammen mit der seriellen RS-232 und der parallelen Centronics zu den „klassischen“ PC-Schnittstellen.
Inzwischen wurde der Gameport, ebenso wie die RS-232 und Centronics (bzw. IEEE 1284), durch die vielseitigere USB-Schnittstelle verdrängt, die jedoch komplexere Elektronik in den Eingabegeräten benötigt. An neuen PCs ist deshalb heute zumeist kein Gameport mehr vorhanden. Zugleich steht der freigewordene Platz auf der Blende nun für Surroundbuchsen zur Verfügung.
Während der Linux-Kernel bis heute (2020) einen Gerätetreiber für den Gameport enthält, bietet das Betriebssystem Microsoft Windows ab Version NT 6.0 (Windows Vista) keinerlei Unterstützung mehr für den Gameport und setzt für die entsprechenden Geräte vollständig auf USB. Allerdings ist es für die Hersteller von Gameport-Hardware zumindest unter den 32-Bit-Versionen von Windows Vista und neuer durchaus noch möglich, unsignierte eigene Treiber bereitzustellen, was teilweise auch getan wurde. Unter den 64-Bit-Versionen dieser Betriebssysteme ist dies dagegen im Normalbetrieb nicht möglich, da Microsoft hier die digitale Signatur von Treibern erzwingt. Der Gameport ist daher beinahe vollständig vom Markt verschwunden.

## Peripheriegeräte

Peripheriegeräte zum Anschluss an den Gameport benötigen nur ein Minimum an eigener Elektronik, da die Auswertung der analogen Signale im Computer erfolgt (zur prinzipiellen Funktionsweise aller am Gameport anschließbaren Geräte siehe Paddle). Es können über einen Y-Adapter auch zwei Joysticks bzw. Gamepads zugleich angeschlossen werden, allerdings gilt dies nur für zweiachsige und zweiknöpfige Standard-Joysticks. Mehrachsige Joysticks und Gamepads mit mehr Knöpfen benötigen einen ganzen Gameport für sich selbst.
Zusätzlich können, wenn der Gameport wie seit etwa 1990 üblich auf einer Soundkarte oder einer Hauptplatine mit Onboard-Soundchip integriert ist, mittels eines speziellen Kabels meistens auch MIDI-Ein- und Ausgabegeräte angeschlossen werden, die dann von der Software des PCs nach dem Standard MPU-401 angesprochen werden. Diese Möglichkeit MIDI über den Gameport nutzen zu können, wurde von den ersten Sound-Blaster-Karten eingeführt und ist nicht Bestandteil der ursprünglichen Norm. Die ersten Soundblaster und Soundblaster Pro Karten sind allerdings nicht MPU-401 kompatibel und verwenden eine proprietäre Beschaltung des Gameports für MIDI-Signale, weswegen hierfür speziell an diese Karten angepasste MIDI-Adapter erforderlich waren. Die Soundblaster 16 und später ist zu MPU-401 nur im UART-Modus kompatibel, nicht aber im Normalmodus. Auch MPU-401 wird ab Windows Vista nicht mehr unterstützt. Im Linux-Kernel ist bis heute (2020) ein MPU-401-Treiber enthalten.

## Steckverbinder

Am Computer ist der Gameport als zweireihige 15-polige D-Sub-Buchse ausgeführt. Seit dem PC System Design Guide von Intel und Microsoft ist der Anschluss als goldfarben vorgesehen.

### Pinbelegung

| Pin | Beschreibung |
| 1 | Versorgungsspannung +5 Volt |
| 2 | Joystick 1 Taste 1 |
| 3 | Joystick 1 X-Achse |
| 4 | Masse |
| 5 | Masse |
| 6 | Joystick 1 Y-Achse |
| 7 | Joystick 1 Taste 2 |
| 8 | Versorgungsspannung +5 Volt |
| 9 | Versorgungsspannung +5 Volt |
| 10 | Joystick 2 Taste 1 |
| 11 | Joystick 2 X-Achse |
| 12 | Masse (MIDI Out) |
| 13 | Joystick 2 Y-Achse |
| 14 | Joystick 2 Taste 2 |
| 15 | +5 Volt (MIDI In) |
Zwischen den Pins der Achsen und +5 V (Pin 1) wird das 100-kΩ-Potentiometer geschaltet, das mit dem eigentlichen beweglichen Joystick verbunden und meist in dessen Bodenteil eingebaut ist. Wenn die Tasten des Joysticks betätigt werden, werden die entsprechenden Leitungen mit Masse verbunden.
Es ist zu beachten, dass Gameports auf PCI-Karten oft nur +3,3 V Spannung statt +5 V auf den entsprechenden Pins ausgeben. Dadurch funktionieren einige Geräte mit aktiver Elektronik an solchen Karten nicht mehr.

## Programmierung

Während einige moderne Betriebssysteme eigene Treiber für den Gameport mitbringen, die Spielen und Anwendungsprogrammen skalierte und normierte Werte zurückgeben, war dies zu DOS-Zeiten nicht der Fall. Da DOS selbst keinen eigenen Treiber für den Gameport mitbringt, mussten Programme und Spiele den Gameport direkt programmieren und die Werte abfragen.
Hierfür muss zuerst ein beliebiger Wert an den I/O-Port 201$_{hex}$ geschrieben werden und dann in einer Schleife fortwährend vom gleichen Port gelesen werden, bis die entsprechenden Bits der jeweiligen Achsen auf 0 zurückgefallen sind. Die Zeit bis zum Fallen auf 0 ist dabei proportional zum gemessenen Widerstand, welcher jedoch – je nach Joystick-Modell – nicht proportional zur Achsauslenkung sein muss.
Im PC-BIOS existiert eine Funktion, die über Software-Interrupt 15$_{hex}$ aufgerufen werden kann, welche die Joystick-Werte vom Gameport wie oben beschrieben abfragt und für die analogen Achsen Werte zwischen 0 und 255 zurückgibt.