# Game port

La game port (in italiano porta giochi) è una porta hardware utilizzata per il collegamento di connettore per dispositivi di input per videogiochi su PC con architettura x86.

## Storia

L'originale game port fu ideata dalla IBM e distribuita nel 1981 come una scheda di espansione del primo PC IBM che inizialmente consentiva di gestire quattro assi analogici e quattro pulsanti su una porta, permettendo di collegare due joystick e due paddle, sebbene questo richiedesse uno speciale cavo "Y-Splitter" e non fosse completamente supportato da alcune porte midi/game di solito posizionate sulla scheda audio. Utilizza sui primi IBM PC fino ai primi anni 1990, è stata solitamente integrata con PC I/O o schede audio, o ISA o PCI, o come una caratteristica incorporata di alcune schede madri; prima di ciò, era di solito su una scheda ISA dedicata.
Microsoft nel 2006 ha cessato il supporto di game port con Windows Vista, tuttavia è ancora totalmente possibile fornire driver di terze parti che funzionano con la game port, e alcune società che hanno prodotto schede con le game port in passato agiscono in questo modo. Sono anche disponibili sul mercato degli adattori USB che permettono ai controller delle game port di funzionare.

## Descrizione generale
### Interfaccia analogica

Diversamente dalla maggior parte degli altri connettori e controller per joystick durante i primi tempi dei computer per casa e delle console per i giochi, utilizza un segnale analogico piuttosto che digitale, facendo affidamento su qualche forma di convertitore analogico-digitale (analog-to-digital converter, ADC) per interpretare i movimenti del joystick. I primi manuali per PC IBM descrivono questa porta come adatta per connettere due paddle analogiche piuttosto che dei joystick. Questo approccio se da un lato poteva garantire ai PC IBM un vantaggio nei giochi di simulazione, specialmente i simulatori di volo, d'altro canto rendeva il modello e l'uso di più semplici joystick per arcade o console più complesso, a parte il fatto di essere essenzialmente incompatibile con qualsiasi altra interfaccia per joystick esistente.

### Acquisizione e programmazione

Mentre altri standard per i joystick (come i joystick Atari o NES) sono molto facili e semplici da usare per i programmatori, la game port richiede un'attenta programmazione e un'attivazione tempestiva dell'interrupt software per leggere un input. Questo naturalmente causava problemi di prestazioni in quanto leggere la game port richiedeva una notevole quantità di tempo per la CPU, specialmente in confronto a sistemi con una "normale" porta joystick digitale (TTL).

### Circuiti

La tipica implementazione di una game port usa un condensatore ed un semplice comparatore di tensione per formare una sorta di rozzo ADC. Per leggere un input questo circuito deve essere interrogato e resettato in precisi momenti (generalmente oltre 30 volte al secondo) in modo da garantire una sufficiente prontezza in fase di gioco. La frequenza di acquisizione dei dati ed i valori effettivi dipendono tipicamente dalla resistenza interna del joystick, dal rumore elettrico, dalla velocità della CPU e dalla costante temporale RC totale del condensatore utilizzato.

### Caratteristiche elettroniche

La corrente massima erogabile dalla porta giochi è di circa 750 mA, tuttavia è condivisa con la tastiera (max 100 mA), il mouse (~ 25 mA), e la porta VGA (50 mA). Restano così approssimativamente 575 mA ad effettiva disposizione della game port.

## Estensione delle capacità

La game port supporta nativamente solo 4 distinti pulsanti per controller, tuttavia esistono joystick avanzati in grado di gestirne un numero maggiore.
La prima variante di joystick avanzato sacrifica la possibilità di collegare due controller per poter gestire i tasti aggiuntivi al posto di quelli che, normalmente, utilizzerebbe il secondo giocatore. Altri joystick hanno un circuito interno modificato che codifica lo stato dei pulsanti su 4 bit in modo da poterne gestire fino a 16.
I joystick di alta gamma come il Microsoft SideWinder fanno affidamento sulla multiplazione di un flusso proprietario di dati attraverso gli input dei 4 pulsanti standard e a volte attraverso i piedini "inutilizzati", ottenendo pieno supporto per un numero di pulsanti piuttosto elevato (ad es. 16 o 20), e, in alcuni casi, diventa possibile implementare caratteristiche speciali come collegare in Daisy chain più joystick, gestire il force feedback o programmare le funzioni del joystick. I dati di tutti questi tipi di joystick (deviando dallo standard IBM), non possono essere interpretati con i metodi convenzionali, rendendo così necessario l'uso di driver specifico per ogni modello.
Alcuni appassionati di hardware e di fai da te hanno trovato usi alternativi per la game port, collegandole una vasta gamma di dispositivi di input, dai misuratori di tensione alle interfacce di acquisizione dati.

## Connettori MIDI

Le porte giochi usano connettori DA-15 (chiamati anche scorrettamente DB-15). Da quando la game port, intorno al 1990, si è spostata dalle schede di espansione dedicate, alle schede audio, questi connettori di solito fungono anche da connettori per strumenti MIDI; per rendere questo possibile, due dei piedini +5V e GND superflui dello standard originale sono stati ridedicati agli input e output MIDI. Per usare una porta giochi con strumenti MIDI, occorre un cavo con un DA-15 maschio ed uno femmina e due connettori DIN maschi da 5 piedini. I driver e l'hardware per le funzioni MIDI delle game port si basano sull'interfaccia MIDI MPU-401 della Roland, ormai standard (solo in modalità UART), e supportano la maggior parte delle applicazioni standard MPU-401 per Windows e DOS. Il "modello corretto" ufficiale di un adattatore MIDI per una porta giochi si può trovare in questa pagina MIDI.

## Varianti

Alcune game port (di solito incorporate nelle vecchie schede madri o su schede di I/O) non supportavano completamente 4 assi e 4 pulsanti, rendendo possibile solo l'uso di un singolo joystick a 2 assi e 2 pulsanti.
La porta giochi a 15 piedini non è più fornita sui PC fabbricati attualmente, benché esistano adattatori che consentono a joystick e controller più vecchi di connettersi via USB e Microsoft ha terminato di fornirle nativamente supporto a partire da Windows Vista, con la motivazione della maggiore diffusione delle periferiche da gioco USB. Questo lascia il supporto per le game port a carico del fabbricante del dispositivo (cioè scheda audio o convertitori USB) su cui la stessa game port è montata.

## Problemi noti

La sua natura analogica è stata anche la causa di molti problemi, ad es. tutti i tipi di joystick avevano bisogno di "calibrazione", anche quelli stile arcade, in quanto nessun controller di giochi e nessun joystick produceva ogni volta le stesse misurazioni, ma esse erano dipendenti dal modo esatto in cui era fatta l'acquisizione e perfino dalla velocità della CPU in alcuni modelli piuttosto scadenti. Inoltre, tutti i tipi di porte giochi per PC soffrono di rumore elettrico.
La procedura di calibrazione è ancora richiesta in qualche fase, anche sotto sistemi operativi moderni come Windows XP e di solito consiste nel muovere il joystick intorno a tutti i suoi assi per misurare i valori massimi di escursione su ciascun asse, non importa se il joystick usa segnali analogici (da potenziometri) o segnali digitali (usando microinterruttori o contatti). I joystick USB non richiedono calibrazione, in generale.
Ai tempi del DOS, ogni gioco che usava le porte giochi doveva fare la propria calibrazione, spesso ogni volta che il gioco partiva, e alcune routine di calibrazione malamente codificate non riuscivano nemmeno a funzionare in modo coerente e corretto, rendendo alcuni joystick inutilizzabili con alcuni giochi. Con Windows XP, è sufficiente solo un'unica calibrazione per joystick, che è assunta "valida" finché il joystick non è staccato.
Certe applicazioni e giochi, tuttavia, erano (e sono) in grado di usare alcuni joystick analogici senza calibrazione esplicita, sotto determinate limitate condizioni. In generale, se è richiesto solo un input puramente discrezionale senza nessuna informazione dotata di una precisa intensità, un joystick analogico può essere "autocalibrato" semplicemente lasciandolo in posizione centrale e prendendo una misura, e usando poi qualche soglia arbitraria o adattativa per rilevare il movimento e l'escursione dalla posizione centrale. La limitazione di questo metodo è che la lettura dello stesso joystick sulla stessa game port può cambiare nel tempo, e alcuni joystick possono non funzionare affatto con questo metodo. Inoltre, il joystick deve essere in posizione centrale almeno una volta quando ha luogo l'"autocalibrazione" implicita, anche se non esplicitamente dichiarato.