Atari

MULTIJOY

Radek Štěrba / RASTER & Atariklub Prostějov

MultiJoy (rok vzniku 1998) je interface pro Atari XE/XL, který se připojuje na oba joystickové porty a umožňuje současné použití až 16 pákových ovladačů.

Základ této myšlenky je starý spoustu let. Tehdy jsem hledal způsob, jakým připojit k Atárku hudební klaviaturu a zjišťovat stav jednotlivých kláves. Napadlo mě, že by bylo možné přepnout horní 4 bity (JOY1) na výstup a přes ně adresovat 16 částí mechanické klávesnice. Tím by se vždy stanovilo, která čtveřice kláves se právě sleduje. Stav takto vybraných čtyř kláves by se pak vždy přečetl přes 4 vstupní bity (JOY0). Celkem by se takto dalo sledovat zcela nezávislých 64 kláves.
(S využitím tlačítek TRIG0 a TRIG1 dokonce až 96!)

Když jsem s tímhle přišel za Jirkou Svobodou, jen se potutelně usmál a vytáhl ze šuplíku všechny potřebné elektronické součástky. Prý přesně nad tímhle taky kdysi přemýšlel, ale nikdy se do toho nepustil. Předal mi je jako štafetu. Ovšem já, protože nejsem zdatný elektrotechnik, jsem vlastní konstrukci též stále oddaloval. Pak se objevil MIDI interface, přes který jsem bez problémů připojil své MIDI klávesy, a tak už nemělo smysl s původním nápadem dál experimentovat. Až po letech jsme se k tomu vrátili v Atariklubu Prostějov a sestrojili MultiJoy.

Pohled dovnitř interface MultiJoy8 Pohled dovnitř interface MultiJoy8
Pohled na odkrytovaný interface MultiJoy8. (praktická realizace p.Musil)

MultiJoy8 - schema (rev.2007):

Multijoy8 - schema

Popis k technickému řešení:
(Z.Burian)

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 je pátý nezávislý spínač (spíná na svůj výstup též 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. 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. 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).

Myšlenka MultiJoye spočívá v paralelním připojení ovladačů na jeden počítačový vstup, přičemž vždy jen právě 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 několik 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 (dataset, 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. 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 sepnutí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 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í. Na každý ovladač je potřeba 5 diod. Nejví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. Nám to sice při testování i tak fungovalo bezchybně, ale pak při vlastní stavbě MultiJoye jsme raději použili diody germaniové.

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. Z programátorského hlediska by také možná byl problém vymyslet hru skutečně hratelnou pro 16 účastníků zároveň. Proto náš elektronik Svatopluk Musil sestavil omezenou verzi MultiJoy8, v níž použil dekodér 1 z 8, tedy obvod 74ALS138, 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.

Poznámky:

Princip ovládání:
(R.Štěrba)

Nejprve je nutné inicializovat porty tak, aby bity JOY1 fungovaly jako výstupní a bity JOY0 jako vstupní. K tomu stačí:

    lda #0
    sta $d302  ;PACTL
    lda #$f0   ;4HORNI=OUT,4DOLNI=IN
    sta $d300  ;PORTA
    lda #$3c
    sta $d302  ;PACTL

V průběhu programu se pak čtení požadovaného joysticku provádí takto:

2005/10: Důležitá novinka - Prosím, dbejte na to, aby mezi zápisem do PORTA registru a následovným čtením PORTA (nebo TRIG0) registru byla prodleva minimálně 30 taktů.

    lda #N     ;N=číslo joysticku 0-7 (resp. 0-15 pro MultiJoy16)
    asl @      ;posun o 4 bity
    asl @
    asl @
    asl @
    sta $d300  ;PORTA
    ldx #$06   ;prodleva 30 taktů
WAI dex
    bne WAI
    lda $d300  ;PORTA
    and #$0f
    ;Nyní je v A stav páky

    lda $d010  ;TRIG0
    ;Nyní je v A stav tlačítka

    lda #$ff   ;inicializace všech
    sta $d300  ;PORTA výstupů na 1

    ;...Akce pro hráče N...

To je všechno. Teď už můžete začít vesele programovat hry pro současně "pařících" až 16 lidí.

Hry, které již pro interface Multijoy byly vyrobeny, najdete na této stránce.


Vyrobil Radek Štěrba, © RASTER