Hlavní navigace

Gameport na osobních počítačích

12. 2. 2009
Doba čtení: 12 minut

Sdílet

V dnešní části seriálu o architekturách počítačů si popíšeme takzvaný gameport. Jedná se o dnes již poněkud zastaralý typ rozhraní, které je určeno pro připojení analogových joysticků a ovladačů typu paddle, později i MIDI. Gameport však lze využít i pro čtení různých čidel či napájení externích zařízení.

Obsah

1. Gameport na osobních počítačích
2. Popis pinů konektoru gameportu
3. Digitální vstupy
4. Analogové vstupy
5. Ovládání gameportu
6. Způsoby využití gameportu
7. Literatura a odkazy na Internetu

1. Gameport na osobních počítačích

Dalším rozhraním, se kterým se můžeme při práci na osobních počítačích (většinou desktopech a dokonce i na některých starších noteboocích) setkat, je takzvaný gameport. Firma IBM toto rozhraní původně navrhla tak, aby bylo možné k počítači jednoduše připojit ovladače typu paddle. Každý ovladač paddle obsahuje pouze minimální množství součástek – potenciometr a tlačítko či mikrospínač (viz první obrázek). Později se, spolu se vznikem nových žánrů her (leteckých simulátorů apod.), začaly ke gameportu připojovat místo ovladačů padle analogové joysticky, ve kterých se sice také nachází potenciometry, ale místo přímého otáčení jejich osou je použito naklánění páky joysticku převedené většinou na lineární pohyb (v základně joysticku se nachází dva lineární odporové děliče). O převod (analogové) hodnoty odporu potenciometru do digitální formy se musely postarat obvody gameportu, zabudované přímo v počítači nebo umístěné na přídavné kartě (původní gameport byl skutečně realizovaný jako samostatná přídavná karta určená pro osmibitovou sběrnici ISA, která obsahovala pouze čtyři monostabilní klopné obvody, několik diskrétních součástek a adresový dekodér).

pc4801

Obrázek 1: Originální ovladače typu paddle vyráběné firmou Atari. Tyto ovladače bylo možné připojit jak k herním konzolím Atari 2600 a Atari 5200, tak i k osmibitovým domácím počítačům Atari 400, 800, 800XL, 130XE atd.

Aby se cena gameportu co nejvíce snížila, bylo pro jeho realizaci zvoleno co nejjednodušší obvodové řešení (analogově-digitální převodník založený na monostabilním klopném obvodu původně realizovaném pomocí slavného čipu 555, přesněji řečeno na jeho variantě označované kódem 558, která na jednom čipu sdružovala hned čtyři obvody 555), což však, jak si řekneme v navazujících kapitolách, klade mnohem větší požadavky na programové vybavení, zejména v moderních multitaskových operačních systémech.

Označení vývodů čipu 558, který obsahuje čtyři obvody 555. Společné jsou (samozřejmě) piny pro napájení a také signál /RST (reset), což nevadí, protože hodnoty všech čtyř analogových vstupů se zjišťují ve stejnou chvíli:

       +---+--+---+
    1Q |1  +--+ 16| 4Q
1RCext |2       15| 4RCext
   1TR |3       14| 4TR
    CV |4       13| /RST
   VCC |5  558  12| GND
   2TR |6       11| 3TR
2RCext |7       10| 3RCext
    2Q |8        9| 3Q
       +----------+

V současnosti je gameport považován (z hlediska typického uživatele PC vcelku oprávněně) za zastaralý, jeho funkci do značné míry nahradila universální sériová sběrnice (USB), ke které se připojuje většina herních ovladačů. V některých případech se však gameport stále používá; především pro připojení jednodušších čidel či měřicích přístrojů, snímačů polohy atd. (není nutné vyrábět či nakoupit analogově-digitální převodníky pro USB nebo PCI, což s sebou přináší mj. i problémy s ovladači). Předností gameportu je možnost snadného připojení až čtyř na sobě nezávislých analogových vstupů, čtyř vstupů digitálních a také to, že z gameportu lze získat napětí +5V, které může pro zmíněná čidla a měřicí přístroje zajistit napájení bez nutnosti použití externích napájecích zdrojů (napětí dodávané zdrojem v PC je vyhlazené, bez nežádoucích rušení).

pc4802

Obrázek 2: Základní deska staršího typu (AT s volitelným ATX napájením), která neobsahuje přímo konektory jednotlivých portů (ty se objevily až u formátu ATX), ale „pouze“ skupinu pinů, které jsou s příslušným konektorem propojeny krátkým kabelem. Na tomto obrázku jsou piny pro připojení paralelního portu označeny zeleně, modře jsou orámovány piny pro dvojici sériových portů a červeně piny pro dnes popisovaný gameport.

2. Popis pinů konektoru gameportu

Pro gameport se na osobních počítačích kompatibilních s IBM PC používá konektor typu DB s patnácti piny umístěnými ve dvou řadách (8+7 pinů). Piny je možné podle jejich funkce rozdělit do čtyř skupin. Na piny označené symbolem +5V je vyvedeno (jak se dá očekávat) napájecí napětí +5V, které je původně určeno pro připojení potenciometrů představujících X-ovou nebo Y-ovou osu prvního nebo druhého analogového joysticku (X1, Y1, X2 a Y2), později se však tyto piny začaly využívat i k jiným účelům, protože většina zařízení připojených k počítači pro svoji činnost vyžaduje napájení právě pěti volty (jedná se například o různé mikrořadiče, aktivní A/D a D/A převodníky, záchytné registry atd.). Toto napětí však není dostupné ani na sériovém portu ani na portu paralelním (nutno říci, že někdy je +5V vyvedeno na výstup nSelect-Printer (pull-up) paralelního portu, avšak ne vždy se na to dá spolehnout).

Z tohoto důvodu bývají zařízení připojená na sériový či paralelní port vybavena buď vlastním napájecím zdrojem nebo nábojovou pumpou (například se jedná o některé mobilní programátory pamětí). U zařízení vyráběných pro vlastní potřebu je také možné využít malého triku – napětí 5 V lze získat z dnes popisovaného joystickového portu nebo z konektoru universální sériové sběrnice. Zatížitelnost sice není příliš velká (většinou se jedná o řádově desítky mA u gameportů dodávaných například spolu se zvukovými kartami, ale v originálním zapojení bylo možné odebírat maximální proud dodávaný ISA sběrnicí), ale například po potřeby napájení mikrořadiče, který s počítačem může komunikovat například po paralelním portu, je dostačující. Na dalších pinech označených symbolem GND se nachází signálová zem. Tlačítka joysticků bývají připojena právě k signálové zemi, protože stlačení tlačítka znamená uzemnění jednoho z pinů B1B4 (interně jsou tyto piny přes pull-up rezistor nastaveny na hodnotu logické jedničky – viz třetí kapitola).

pc4803

Obrázek 3: Konektor gameportu s očíslováním jednotlivých pinů. V případě, že je gameport zabudován na zvukových kartách nebo přímo základních deskách, jsou některé piny určené původně pro napájení, použity pro rozhraní MIDI. Původní verze gameportu vyráběné firmou IBM rozhraní MIDI neobsahovala.

V následující tabulce je popsán význam jednotlivých pinů konektoru DB-15:

Pin číslo Označení Alt. označení Význam
1 +5V +5V Napájení +5V (původně pro analogové vstupy X1 a Y1)
2 B1 D4 Vstup tlačítka číslo 1
3 X1 A0 X-ová osa pro první joystick (standardně 0 až 100 kΩ)
4 GND GND Zem pro tlačítko číslo 1
5 GND GND Zem pro tlačítko číslo 2
6 Y1 A1 Y-ová osa pro první joystick (standardně 0 až 100 kΩ)
7 B2 D5 Vstup tlačítka číslo 2
8 +5V +5V Napájení +5V
9 +5V +5V Napájení +5V (pro analogové vstupy X2 a Y2)
10 B4 D6 Vstup tlačítka číslo 4
11 X2 A2 X-ová osa pro druhý joystick (standardně 0 až 100 kΩ)
12 GND GND Zem pro tlačítka číslo 3 a 4, taktéž použito pro připojení MIDI zařízení
13 Y2 A3 Y-ová osa pro druhý joystick (standardně 0 až 100 kΩ)
14 B3 D7 Vstup tlačítka číslo 3
15 +5V +5V Napájení +5V, taktéž použito pro připojení MIDI zařízení, někdy není tento pin vůbec zapojen

3. Digitální vstupy

Z tabulky vypsané v předchozí kapitole je zřejmé, že na gameport je možné přímo připojit až čtyři tlačítka představující digitální (dvoustavové, binární) vstupy. V případě, že jsou ke gameportu připojeny standardní analogové joysticky, obsahuje každý joystick dvojici tlačítek, přičemž stav každého tlačítka je možné kdykoli přečíst, nezávisle na stavu ostatních tří tlačítek – příznak stlačení každého tlačítka je uložen v záchytném klopném obvodu typu D, odkud lze informaci přečíst bez nutnosti použití poměrně složitého přenosového protokolu známého například z klávesnic osobních počítačů (vzhledem ke konstrukci většiny klávesnic není možné korektně použít všechny kombinace kláves, zatímco u gameportu to možné je). Tlačítka se zapojují mezi piny označené B1B3 (alternativně se můžeme setkat s označením D4D7) a některý z pinů představující signálovou zem (GND). Původní gameport neobsahoval žádný obvod pro eliminaci zákmitů tlačítka, dnes je samozřejmě tato problematika u dražších joysticků řešena, typicky přímo v čipsetu základní desky.

pc4804

Obrázek 4: Standardní zapojení dvojice analogových joysticků ke gameportu. V praxi se mnohdy tento způsob zapojení zcela přesně nedodržuje, používají se například odlišné napájecí vodiče či pouze jedna signálová zem.

Některé typy joysticků obsahují větší množství tlačítek. V tomto případě se buď stavy tlačítek OR-ují (tj. například stlačení dvou tlačítek současně má stejný význam, jako stlačení třetího tlačítka), nebo se stavy tlačítek přenáší do počítače sériovým protokolem, což ovšem vyžaduje specializovaný ovladač (tímto způsobem lze počet tlačítek zvýšit prakticky na libovolnou hodnotu, v praxi mívají některé joysticky až šestnáct tlačítek, mnohdy s programovatelným významem). Existují i ovladače, u kterých je analogový joystick nahrazen čtveřicí tlačítek nebo původním „digitálním“ joystickem (ten dokáže rozeznat pouze osm směrů náklonu, protože místo potenciometrů obsahuje pouze čtyři spínače). Zapojení takovýchto ovladačů musí simulovat analogový joystick, proto se stav jednotlivých tlačítek převádí na odpor o hodnotách typicky 0 kΩ, 50 kΩ a 100 kΩ, což odpovídá náklonu páky analogového joysticku zcela doleva (nahoru), vycentrování páky a náklonu zcela doprava (dolů) – viz první odkaz uvedený v osmé kapitole, kde se nachází několik velmi jednoduchých schémat.

pc4805

Obrázek 5: Jedna z možných redukcí umožňujících připojit původní „digitální“ joystick na gameport.

4. Analogové vstupy

V předchozí kapitole popsané digitální vstupy nejsou z implementačního hlediska ničím výjimečné. Zajímavější jsou analogové vstupy, které obsahují velmi jednoduchou formu analogově-digitálního převodníku. Z mnoha různých typů těchto převodníků byl vybrán A/D převodník pracující na principu měření doby nabíjení kondenzátoru zapojeného do integračního RC článku. Princip práce tohoto typu A/D převodníku je zobrazen na šestém obrázku. Nejprve je pomocí časovače 555 (pracujícího v režimu monostabilního klopného obvodu) provedeno vybití kondenzátoru, tj. na obou elektrodách je nulové napětí. Posléze se přes externě připojený potenciometr (paddle, joystick atd.) a interní rezistor o hodnotě cca 2,2 kΩ kondenzátor začíná nabíjet s časovou konstantou τ=RC. Ve chvíli, kdy napětí na kondenzátoru dosáhne prahové hodnoty (zhruba 3,3V), monostabilní klopný obvod se překlopí, tj. změní svůj stav, který je možné programově přečíst. Doba mezi prvotním vybitím kondenzátoru a změnou stavu monostabilního klopného obvodu je úměrná aktuálnímu odporu potenciometru. Běžné analogové joysticky používají potenciometr o maximálním odporu 100 kΩ, avšak například při připojení vlastního čidla lze použít i jiný rozsah. Příliš velká hodnota odporu však má za následek delší dobu měření a také může (u velmi dlouhých časů nabíjení) docházet k samovolnému vybíjení kondenzátoru, což měření ovlivňuje. Naopak při malé hodnotě připojeného odporu se zvětšuje chyba měření; výpočet je závislý na intervalu zjišťování stavu monostabilního klopného obvodu.

pc4806

Obrázek 6: Principiální schema zapojení jednoho analogového vstupu gameportu. Časovač 555 pracuje v režimu monostabilního klopného obvodu. Dnes se samozřejmě (pokud je gameport v počítači vůbec použit) místo čtveřice klopných obvodů používá integrovaný obvod sdružující i další funkce (sériové a paralelní porty, zvukový čip atd.).

Podobným způsobem byl analogově/digitální převodník realizován i na osmibitových domácích počítačích Atari a některých herních automatech, kde tuto funkci obstarával čip nazvaný POKEY, který mj. obsahoval i několik časovačů, ovládací obvody klávesnice i magnetofonu a v neposlední řadě i zvukový generátor se čtyřmi zvukovými kanály – na čtyřicetipinový čip s poměrně malou integrací je to úctyhodné množství funkcí. Největší rozdíl mezi gameportem použitým na osobních počítačích a čipem POKEY spočívá v tom, že POKEY automaticky prováděl měření času nabití kondenzátoru, takže nebylo nutné programovat měřicí smyčky ani používat časovače. Interní čítač v obvodu POKEY byl osmibitový a jeho hodnota se měnila (o jedničku) s každým obrazovým řádkem. Přesto, že se používal interní osmibitový čítač, mohla naměřená hodnota ležet v rozsahu 0–228, kde 0 značí nulový odpor (zkrat) a 228 nekonečný odpor (rozpojené vývody). POKEY celkově obsahoval osm analogových vstupů, tj. bylo možné připojit až osm potenciometrů (jedná se o základ již zmíněného ovladače paddle). Současné přečtení všech osmi vstupů bylo možné provést během zobrazení jednoho obrazového snímku, tj. 50× za sekundu, popř. i několikrát během jednoho snímku, ale s nižší přesností.

pc4807

Obrázek 7: Původní ovladače typu paddle nepoužívaly patnáctipinový konektor popsaný ve druhé kapitole, ale konektor typu DE-9 obsahující devět pinů. Na každý konektor se přes rozbočovač zapojila dvojice ovladačů, jak je patrné z této fotografie.

5. Ovládání gameportu

Standardní gameport byl mapován na jedinou vstupně/výstupní adresu 201H, avšak u některých karet obsahujících gameport bylo možné přes jumpery či utilitou ISAPNP (ISA Plug and Play) tuto adresu změnit, typicky v rozsahu 200H až 208H. Pokud je na zvolenou vstupně/výstupní adresu zapsána libovolná hodnota, dojde k vybití kondenzátorů u všech čtyř analogových vstupů. Ve skutečnosti se zapisovaná hodnota nikam neuloží, přídavná karta s gameportem pouze reaguje na adresu 201H poslanou na adresovou sběrnici a signál zápisu je přiveden na vstup Reset monostabilních klopných obvodů. Přečtením bajtu z této adresy se získá aktuální stav všech čtyř tlačítek (sepnuto či rozepnuto) a také stav klopných obvodů pro jednotlivé analogové vstupy. Vzhledem k tomu, že standardní gameport nedokáže vygenerovat přerušení při změně stavu některého z klopných obvodů, musí se provádět aktivní čtení (polling) z adresy 201H (pro operační systém DOS nebyl tento způsob řízení problematický, poněkud horší je to u moderních multitaskových systémů, ve kterých se většinou musí použít ovladače a nikoli přímé čtení stavu gameportu z programu běžícího v userlandu). Ovladače většinou využívají některý z časovačů počítače a v poměrně krátkých intervalech testují stav klopných obvodů. Z času mezi jejich resetem (=zápisem na adresu 201H) a změnou stavu se odvozuje proud nabíjející kondenzátor a tím pádem i aktuální nastavení jednotlivých potenciometrů.

Bit Význam
0 stav klopného obvodu pro vstup X1, 0=kondenzátor nabitý/přepnuto, 1=provádí se nabíjení
1 stav klopného obvodu pro vstup Y1, 0=kondenzátor nabitý/přepnuto, 1=provádí se nabíjení
2 stav klopného obvodu pro vstup X2, 0=kondenzátor nabitý/přepnuto, 1=provádí se nabíjení
3 stav klopného obvodu pro vstup Y2, 0=kondenzátor nabitý/přepnuto, 1=provádí se nabíjení
4 stav tlačítka B1, 0=sepnuto, 1=rozepnuto
5 stav tlačítka B2, 0=sepnuto, 1=rozepnuto
6 stav tlačítka B3, 0=sepnuto, 1=rozepnuto
7 stav tlačítka B4, 0=sepnuto, 1=rozepnuto

6. Způsoby využití gameportu

Kromě připojení komerčně vyráběných ovladačů typu analogový joystick, volant atd. (které se dnes již stejně vyrábí s rozhraním USB) je možné gameport použít pro čtení stavu mnoha typů čidel, především těch, které převádí měřenou veličinu na elektrický odpor. Jedná se například o fotoodpor nebo termistor, který lze většinou přímo připojit ke gameportu (pro jistotu je dobré spočítat, zda nebude fotoodpor nadměrně zatěžován procházejícím proudem a v případě potřeby do série připojit běžný odpor – viz výše uvedené interní schéma jednoho analogového vstupu s RC článkem) a provádět měření. Rozsah měřitelného odporu se pohybuje od zkratu až po desítky MΩ, přesnost měření však není příliš velká – po kalibraci dosahuje cca 1–5%, většinou v závislosti na změně okolní teploty (a také přesnosti čtení stavů gameportu). Se zvyšujícím se odporem připojené součástky také roste čas nutný pro nabití kondenzátoru, čímž se doba měření jednoho vzorku prodlužuje až na desítky či dokonce stovky milisekund. Také je možné na analogový vstup gameportu připojit Hallovu sondu či další podobné součástky. V případě, že použité čidlo převádí měřenou veličinu na napětí, je již nutné použít složitější obvod.. Aby bylo měření co nejpřesnější, je vhodné provádět kalibraci. Většinou postačuje před prováděním měření místo čidla zapojit přesnější odpory (například z řady E24 – http://www.bu­cek.name/stran­ky/ruzne/odpo­rove_rady/odpo­rove_rady.htm) o hodnotě například 1 kΩ, 47 kΩ a 100 kΩ a na naměřené hodnoty nakalibrovat převodní tabulky v aplikaci, která měření provádí.

bitcoin_skoleni

pc4808

Obrázek 8: Takzvaný Y-kabel, který se používá při připojení dvou analogových joysticků ke gameportu.

7. Literatura a odkazy na Internetu

  1. PC joystick interface circuits,
    http://www.epa­norama.net/do­cuments/joystic­k/pc_circuits­.html
  2. Vojtěch Pavlík: The Linux Joystick Driver, http://atrey.kar­lin.mff.cuni.cz/~voj­tech/joystick/
  3. Vojtěch Pavlík: Odlišnosti některých joysticků a jejich rozhraní od standardního gameportu,
    http://atrey.kar­lin.mff.cuni.cz/~voj­tech/joystick/spec­s.txt
  4. Atari Inc.: POKEY CHIP,
    (originální datasheet i s vnitřním schématem zapojení, dnes lze získat ve formě naskenovaného dokumentu)
  5. Paddle (game controller),
    http://en.wiki­pedia.org/wiki/Pad­dle_(game_con­troller)
  6. Joystick,
    http://en.wiki­pedia.org/wiki/Jo­ystick
  7. Analog stick,
    http://en.wiki­pedia.org/wiki/A­nalog_stick
  8. Game port,
    http://en.wiki­pedia.org/wiki/Ga­me_port

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.