Princip periferie Multijoy

Geniální myšlenky jsou jednoduché a přesně to se dá říci o nápadu Radka na připojení více ovladačů ke standartním vstupům počítače bez zásahu do jeho vlastních útrob. Je vlastně velmi divné, že se toto řešení neobjevilo už dříve kdekoliv ve světě (tedy kde mají ATARI 800), zřejmě je nejtěžší nápad dostat.

Protože Radek není elektronik, nechal technickou stránku věci na mě a já tedy na konci roku 1998 vzal na schůzku klubu pár součástek, nepájivé kontaktní pole a měřáček.

Pákový ovladač je v principu soustava spínačů, na něž je přivedena zem počítače (záporný pól napájení) a tuto bud spínají na své výstupy nebo ne. Páka ovládá čtveřici kontaktů, z nichž vždy dva sousední mohou být sepnuty současně. Tlačítko, kdo chce fire, je pátý nezávislý spínač.

Některé prameny tvrdí, že toto tlačítko je zapojeno opačně - spíná kladný pól. Sám jsem si to tak myslel, než jsem si ovladač rozebral a prověřil. Tato pověra je silná, dokonce ještě i po úspěšném dokončení Multijoye se našli lidé, kteří jí věřili a vykládali mi ji jako správou.

Tedy shrnuto - u nás v Prostějově tlačítko na ovladači spíná na svůj výstup zem.

Na pochopení principu Multijoye je potřebná znalost chování logických hradel, a to jak principielně, tak je nutno počítat s jejich elektrickými vlastnostmi. U logiky TTL jsou omezení v počtu vstupů, které je možné připojit na výstup hradla, prostě nepřetížit to a nedělat zkraty.

Já dost těžce vzpomínal, jak to vlastně s číslicovou technikou je, protože co mám počítač(e), pájku jsem prakticky nedržel v ruce. Nejdůležitější jsou dvě věci - logické úrovně a chování hradel.

V našem malém Atari je použita logika TTL, která definuje logickou nulu jako napětí 0 až nějaké desetiny Voltu, logickou jedničku od 2.5 do 5 Voltů.

Nulové napětí znamená připojení hradla na zem, nikoliv nepřipojit vůbec. Vevnitř je to totiž děláno tak, že nepřipojený vstup se chová jako kdyby na něj byla přivedena logická jednička. To je taková důležitá věc, která mi dělal potíže, když jsem se poprvé s číslicovou technikou seznamoval.

Z tohoto principu vyplývá, že ovladač skutečně musí na vstup v počítači přivádět buď zem, nebo vůbec nic, vstup sám bude tvrdit, že byla na něj přivedena logická jednička.

Radkova myšlenka spočívá v paralelním připojení ovladačů na jeden počítačový vstup, přičemž vždy jen jeden z nich bude mít připojený zemní (nulový) přívod. Z výše uvedeného vyplývá, že ovladač bez něj se na vstupu chová jako by nebyl, protože prostě nemá možnost dodat logickou nulu.

Na řízení připojování země (logické nuly) do skupiny ovladačů se pochopitelně využije zase počítač, v našem případě se nabízí druhý ovladačový port, jehož 4 bity lze díky dobrému chování obvodu 6520 přepínat do výstupního režimu nezávisle na prvních 4 bitech, které zůstávají jako vstupní v prvním portu. Právě na něj se připojí hejno paralelních ovladačů.

Výstupní 4 bity si můžeme představit jako 4 vývody, z nichž primitivním programovým řízením může vždy právě jeden být ve stavu logická nula, ostatní v logické jedničce. Připojením zemního přívodu do ovladačů na tyto výstupy místo na tvrdou zem lze tak dosáhnout potřebného přepínání ovladačů do aktivního stavu - vždy pouze jeden z nich je schopný dodávat na svých výstupech logické nuly.

4 bity ovšem také znamenají 16 kombinací nul a jedniček. Vhodným dekodérem adresy lze tak ovládat až 16 výstupů. Takovému dekodéru se říká jedna z šestnácti a má ještě další odborné názvy. Prostě má čtyřbitový vstup, označený jako adresové vodiče a 16 výstupů, ze kterých vždy jen jeden může mít stav logické nuly.

Praktickými pokusy jsme zjistili nekolik důležitých skutečností. Předně vstup obvodu 6520 neshoří přetížením, klidně se na něj může připojit tvrdá zem, je totiž omezen nějak do 2 mA možného proudu. (To může kolísat u různých kusů) Pozor - logické vývody sériového portu, (kazeťák, disketovka) nemají ochranu, například při paralelním spojení shoří. Tyto jsou realizovány obvodem POKEY který má v počítači i další funkce.

Možný proud do 2 mA je pro naše účely málo, protože na ovladači je možné mít současně zapnuté až tři spínače - dva sousední směrové a jedno tlačítko. A tyto dodávají proud asi 3 mA. To znamená, že když si ho vstup nevezme, vytvoří se na něm kladné napětí které překročí limit pro logickou nulu a je tedy stav špatně vyhodnocen. Na toto byl nejcitlivější vstup pro tlačítko, který zpracovává tuším GTIA.

Problém se dá řešit oddělovačem TTL (v počítači jsou vlastně obvody CMOS) které mají běžně pracovat do 10 mA. Protože hradla a zmiňovaný dekodér jsou cenově prakticky shodná, začali jsme rovnou pracovat s ním.

Tento obvod krásně polykal potřebné 3 mA a udržoval na svých výstupech pěknou nulu, přímo jako původní zemní vývod. Jediná chybička je v tom, že původně se předpokládal možný provoz naprosto bez přídavných obvodů.

Druhý problém dělá možnost současně spínat na ovladačích dvě sousední polohy. To je vidět na nákresu propojené skupiny ovladačů, jejichž výstupy jsou propojené paralelně. To znamená například všechny vývody páka vlevo spolu a na příslušný vstupní bit portu, a tak dále.

Při takových současných stisknutích se může dostat logická nula přes sousední ovladače i na vstupy, kam původně nepatřila. Proto je nutné vývody ovladače opatřit diodami, které zabrání zpětnému proudu. To znamená dát diody na pákové výstupy (na každý ovladač 4 kusy) zapojení katoda směrem k ovladači, aby mohla propouštět zem na vstup počítače. Ale zpátky do ovladače ji nepustí.

Cena zařízení se příliš nezvýší, diody se dají koupit snad do 2 korun, více jsem měl strach z úbytku napětí na nich. Na křemíkové diodě je to typicky 0.6 Voltu, což je na úroveň logické nuly až dost. Naštěstí na všech zkoušených počítačích to fungovalo bezchybně.

Měli jsme princip a zbývalo dohodnout se na realizaci. Počet připojených ovladačů jsme omezili na 8 kusů. Cena periferie je totiž hlavně závislá na počtu sériových konektorů pro ovladače a 16 je dvojnásobek osmi.

Z programátorského hlediska by také určitě byl problém vymyslet hru skutečně hratelnou pro 16 účastníků zároveň. Proto náš elektronik Svatopluk Musil sestavil omezenou verzi, v níž tuším použil dekodér 1 z 8, tedy obvod, který má tři adresové vstupy a 8 výstupních linek, z nichž zase vždy jen jedna může být ve stavu logická nula.

Na místě by bylo vhodné nakreslit nebo alespoň popsat skutečné zapojení, ale musím se omluvit, já to přesně nevím. Dostal jsem totiž hotovou krabičku a nenapadlo mě zeptat se jak to je. Vím jen, že se používají vývody portu dva pro ovladač označené normálně jako vstupy páka vlevo, vpravo, nahoru a dolů, z nichž jeden je nyní vynechán.

V současné době existuje jen jedna hra od Radka využívající Multijoy. Lákal jsem jiné programátory, ale není zřejmě jednoduché zvolit téma vhodné pro více hráčů naráz. Logicky - při osmi hráčích na každého zbývá jen kousek místa na monitoru. Teprve nedávno dostal Radek dobrý nápad na Tetris pro 4 hráče, to by mělo jít.

Multijoy má další nevyužité rezervy. Zůstal totiž nepoužitý původní druhý vstup pro tlačítko. (všechna tlačítka jsou teď na tom prvním) Teoreticky by bylo možné mít ovladače se dvěma tlačítky (to jich řada má) nezávisle připojené na výstup ovladače, prostě přídavným vodičem. (žádný nemá.)

To by sem mě například moc líbilo mít ve hře Ghostbusters možnost zhazovat vnadidlo přímo tlačítkem na ovladači, a ne uhozenou klávesou "n", kdyby to udělali alespoň na mezerník!

Jenže Multijoy přišel o takových 15 let pozdě, dnes asi nikdo nebude vyrábět ovladače se dvěma tlačítky a dělat spoustu nových her.

A to ještě při variantě do 8 ovladačů zůstává nevyužitý jeden bit původního portu, protože se pro adresování použijí jen tři. To znamená, že by mohl být použitý jako další, již třetí tlačítko!

-ZB-