Joystick illesztése

A személyi számítógépek napjainkban tapasztalható rohamos elterjedésének talán egyik legdöntőbb oka az, hogy ezekhez a gépekhez számtalan játékprogramot árusítanak, és ezek választéka folyamatosan bővül. Így a számítógép azoknak is kitűnő időtöltést biztosít, akik a programozását még el sem sajátították. Nagyon sok játékprogramban a játék során valamilyen karaktert, vagy alakzatot kell a képernyőn különböző irányokban elmozdítani. A programtól függ, hogy ez a klaviatúra kijelölt gombjainak működtetésével, vagy egy erre a célra szolgáló speciális perifériális egységgel, a botkormánnyal (joystick) történik-e. Aki már játszott gyors reflexeket, vagy szerteágazó figyelmet igénylő computeres játékot, az tapasztalta, hogy a billentyűzet kezelése ilyenkor milyen sok tévesztéssel jár. Egyes gépekbe - pl. a közismert Commodore-64-be - a gyártó eleve beépítette azokat a portokat és szabványos csatlakozóikat, melyek a joystick illesztését lehetővé teszik. Sajnos a ZX Spectrum ilyenekkel nem rendelkezik. Lehetőség van ugyan botkormány illesztésére pl. a méregdrága Interface-2-on keresztül, de ezt a luxust nem mindenki engedheti meg magának. A kereskedelemben kapható botkormányok gyenge kivitelük miatt hamar tönkremennek, ráadásul szintén indokolatlanul drágák.
A következőkben egy olyan illesztőáramkörből és botkormányból álló rendszert mutatunk be, ill. részletes építési leírását közöljük, mely nagyon egyszerű eszközökkel kivitelezhető, és a teljes anyagköltsége nem haladja meg a 400.- Ft-ot.

A botkormány működési elve
Működési elvük szerint kétféle botkormány létezik, a potenciométeres és a kontaktusos. A potenciométeres joystick gyakorlatilag tetszőleges irányú, és változó sebességű képelem-mozgatást tesz lehetővé, de illesztése körülményes, többek között A/D konverter is szükséges hozzá (Analóg/Digitális átalakító). A játékprogramok többsége a kontaktusos változatra épült, melynek géphez illesztése kevesebb fáradtsággal és lényegesen kevesebb költséggel megvalósítható.
A kontaktusos joystick általában öt kapcsolóérintkezőt (pl. membránkontaktust) tartalmaz, melyek közül négy egymástól 90 fokos szögben helyezkedik el, egy pedig a kormánybot tetején lévő nyomógombban van. Nyugalmi helyzetben - a kormánybot középállásában - mindegyik kapcsoló nyitott. Ha a kart előre, hátra, jobbra vagy balra elmozdítjuk, a négy kontaktus egyike záródik. Ha az elmozdulás 45 fokos szögben történik, egyszerre két érintkezőpár záródik. A kormánybot tetején elhelyezett nyomógomb ("tűz"-gomb) funkciója a játékprogramtól függően a legkülönbözőbb lehet. Megjegyezzük, hogy sok gyári joystick még egy, a talprészbe épített gombot is tartalmaz, amely a "tűz" gombbal van párhuzamosan kötve. Ez a botkormány ugyan csak nyolc irányba történő mozgást tesz lehetővé, de a legtöbb, eredetileg billentyűzetre írt játékprogram ennyit sem igényel.

Az illesztés lehetőségei, a perifériacím meghatározása
A különböző perifériák ZX gépekhez történő illesztése azért kellemes feladat, mert ezen gépek buszcsatlakozó felületére magának a Z80A CPU-nak az adat, cím- és vezérlővonalait vezették ki, de megjelennek rajta a gépben előforduló összes tápfeszültségek, az órajel, az összetett video-jel, és a Sinclair gyári perifériákhoz szükséges speciális jelek is. A felhasználó szinte mindent megtehet a géppel, ami csak a Z80A-val megtehető.
(A ZX-eknek ez egyben hátrányuk is: mivel ez a csatlakozó nyilván nem felel meg semmilyen nemzetközi csatornaszabványnak, így ahhoz közvetlenül - különleges illesztőegység és az azt kiszolgáló gépi, vagy BASIC nyelvű csatornaprogram nélkül - semmiféle szabványos periféria nem illeszthető.)
A Z80A buszrendszerét ezen a helyen nem célunk részletezni, leírását az érdeklődők a témával foglalkozó szakirodalomban - pl. Krizsán: Zilog mikroprocesszor családok, ill. Ipari Informatikai Központ: Tervezési segédlet a Z80 típusú mikroprocesszor alkalmazásához - megtalálhatják. Itt most csak a perifériáról történő adatbeolvasás gépi ciklusát mutatjuk be.


A Z-80 adatbeolvasási gépi ciklusának ütemdiagramja
(beolvasás perifériáról)

A ZX Spectrumnál ez a ciklus közvetve azIN A formájú BASIC utasítás hatására lép működésbe, ahol 'A' a beolvasni kívánt periféria decimális címét jelenti. Az első óraperiódusban megjelenik az érvényes perifériacím, majd a T2-ben aktiválódik az IORQ, perifériakezelést engedélyező vezérlővonal, és az RD vonal, mely jelzi, hogy a CPU a megcímzett perifériáról adatot kíván beolvasni. Az adatbeolvasás a pontvonalak mintavételezésével a T3 óraperiódusban történik meg, ekkor a DATA BUS Input állapotban van. A beolvasás befejezése után mind az IORQ, mind az RD a nyugalmi H szintre ugrik vissza, a címbusz pedig a PC új tartalmát veszi fel.
A mikroprocesszor címbusza 16 bites, de ebből az első öt bitet (A0 ... A4) az ULA használja a perifériaként értelmezett billentyűzet, az Ear és Mic csatlakozók, a hangszóró és a speciális külső perifériás egységek portjainak címzésére. Az A8 ... A16 vonalak szintén speciális célra vannak fenntartva, így a felhasználó csak az A5...A7 vonalakat választhatja külső periféria címzésére.

A SPECTRUM buszcsatlakozójának csatlakozókiosztása, a hátlap felől nézve

Az ábrán a Spectrum csatlakozó sávjának kiosztása látható, ahol csak a számunkra érdekes kivezetések funkcióját tüntettük fel.

Tekintsük át a kapcsolási rajzot!

Az ütemdiagramból és az előzőekből kiderül, hogy az illesztőegység feladata az, hogy a bemeneti portvonalakat (P0 ... P7) akkor kapcsolja rá az adatbuszra, ha mind a IORQ, mind az RD és az A6 vonalak "L" szinten vannak. Lényeges, hogy a perifériabeolvasási cikluson kívüli időben az illesztőegység az adatbusz állapotát ne befolyásolja. Ezek a feltételek célszerűen open-kollektoros NAND-kapukkal, mint kapcsolóelemekkel, és a kapukat vezérlő GATE-jelet előállító egyszerű logikai hálózattal teljesíthetők. A logikai hálózat a következő függvény szerint kell. hogy működjön:

Ezt a függvényt a G9 ... G12 LSTL NOR kapukból és a T2 tranzisztoros inverterből álló vezérlőrész realizálja. (A low-power áramkör használata azért célszerű, mert így a vezérlővonalakat nem terheljük feleslegesen, viszont a 8 db normál TTL terhelést jelentő kapubemenetet csak a tranzisztoros fokozat tudja meghajtani.)
He az illesztőegységet pl. az IN 31 utasítással megcímezték, a GATE jel az ütemdiagram szerint a T2 ... T3 óraperiódusok alatt H szinten van, és az összes bemeneti kaput kinyitja. Az adatbuszra ekkor a P0 ... P7 inverzei, azaz a P0 ... P7 értékek kerülnek. Miután a beolvasási ciklus véget ért, a GATE ismét "L" lesz, a kapuk lezárnak, tehát az összes kimenet "leszakad" az adatbuszról, melyet ezután csak az R14 ... R21, viszonylag nagy értékű felhúzóellenállások terhelnek. Az R6 ...R13 felhúzóellenállások a kapuk bemeneteinek korrekt "H" szintjét biztosítják akkor, he a vezérlőkontaktusok nyitva vannak.
Az egész logika) rendszert +5V-os feszültségről tápláljuk, melyet a T2-vel, Z1-gyel és R3-mal felépített egyszerű soros áteresztő stabilizátor állít elő a csatlakozófelületen jelen lévő névlegesen +9V, a valóságban kb. +13V értékű stabilizálatlan tápfeszültségből. Bár áramkörünket a Spectrum +5V-os stabilizátora is elláthatná tápfeszültséggel, mégsem használtuk ki azt a lehetőséget az amúgy is igénybe vett, és rossz hűtési viszonyok között üzemelő stabilizátor IC kímélése érdekében. (Az illesztőáramkör áramfelvétele ugyan csak legfeljebb 30 mA, de különösen a 48K-s gépeknél már ez a többletterhelés is megizzasztja a stabilizátort.)
He valaki hozzá tud jutni 74 LS 01 tokokhoz, az áramkört a lehető legegyszerűbb formában építheti meg:

Ha sem 7401-es, sem 74LS01-es nem áll rendelkezésre, de van 7403, vagy 74LS03, ezek is felhasználhatók, mert elektromos paramétereik megfelelnek a kapcsolási rajzon szereplő tokokénak, de lábkiosztásuk a 7400-val megegyező, tehát alkalmazásuk esetén a következő pontban bemutatott panelt át kell tervezni.
A 74LS02-vel megvalósított vezérlőáramkör helyett számtalan más variáció is elképzelhető, a lényeg csak az, hogy a hálózat az [a] logikai függvény szerint működjön.

A kapcsolási vázlatnak megfelelő, kétoldalon huzalozott panel rajza, valamint a beültetési rajz a következőkben látható!

Ha a NYÁK elkészült, a vezetősávokat ónozzuk be, közben ellenőrizzük, nincs-e szakadás, vagy a gépre még veszélyesebb rövidzárlat! Ha mindent rendben találtunk, forrasszuk be a huzal-áthidalásokat. A sokpólusú csatlakozó bármilyen kétsoros, 2,54 mm osztású, wreppelhető NYÁK csatlakozósáv lehet, melyből kivágunk egy 20 csatlakozópárt tartalmazó darabot. Megfelelő típus pl. a Kontakta DS 2582-296-5, a SOCAPEX C261, de alkalmasak a SECUREX ill. ITT típusok is. (A 20 póluspór az adott feladathoz elegendő: a csatlakozósáv rajzán is látható 2x28 pólusú csatlakozófelület számunkra hasznos szakaszát partvonalak határolják.)
A csatlakozósorból eltávolítjuk a harmadik kapocspárt, és helyére 1,5 mm vastag műanyaglemezt ragasztunk, majd a kivezetéseket kb. 12 mm-re lerövidítve a csatlakozót mindkét oldalon a panelhez forrasztjuk. A következő lépésben forrasszuk be a stabilizátor alkatrészeit, majd ideiglenes huzaldarabkákkal kössük össze a 0 V-os és a +9 V-os pontokat a ZX hálózati tápegységével. Ügyeljünk a helyes polaritásra: a tápegység-csatlakozó dugasz belső érintkezője a negatív, a köpeny a pozitív pólus!
A stabilizátort egy 270 Ohm-os ellenállással terhelve ellenőrizzük a kimenőfeszültséget, amely semmilyen körülmények között sem haladhatja meg a +5,1V-ot, de ne legyen kevesebb 4,8V-nál sem. Ha a mért feszültség nem esik a fenti határok közé, úgy a Z1-et cseréljük ki.
Ha a stabilizátor rendben van, forrasszuk be a többi alkatrészt is, majd újra ellenőrizzük a stabilizátort, és újból alaposan nézzük át az egész panelt.

Egy zárlatot okozó hibás forrasztás, vagy figyelmetlenségből származó elkötés a számítógép életébe kerülhet!

Az élesztést is ennek figyelembevételével, rendkívüli körültekintéssel végezzük! Egy hibátlannak látszó, de még kipróbálásra nem került illesztőegység esetében a helyes sorrend a következő:

  1. Csatlakoztassuk a ZX-et a bekapcsolt TV-hez, és hálózati tápegységhez. Ha a gép jó, rövid időn belül megjelenik a copyright felirat.
  2. Húzzuk ki a tápfeszültség csatlakozót, és dugaszoljuk a gépbe az illesztőkártyát.
  3. Csatlakoztassuk ismét a tápegységet! Ha a gép nem úgy viselkedik, mint ahogy szokott, azonnal szüntessük meg a tápellátást!

Méréseket, javításokat csak a számítógéphez nem csatlakoztatott kártyán végezzünk. Az illesztőegység csatlakoztatása, illetve eltávolítása előtt a gépet minden esetben áramtalanítani kell! Amennyiben a Spectrum az illesztőegységgel is normálisan működik, gépeljük be a következő programot:

10 PRINT IN 31: PAUSE 10: CLS: RUN

A program indítása után egy villogó 0 jelenik meg a képernyőn. A P0 ... P7 portvonalakat rendre a testpontra kötve a képernyőn ezek decimális értékei jelennek meg (1,2,4...128). A port vonalainak és a joystick egyes funkcióinak egymáshoz rendelését a következő ábra mutatja:

A P0 ... P3 a négy elmozdítási irányt jelzi, a P4 a"tűz".
Ez a vonalkiosztás talán önkényesnek tűnhet, de azokhoz a gépi kódban megírt, kereskedelmi forgalomban, kazettán beszerezhető játékprogramokhoz, melyekben választási lehetőségünk van a billentyűzet vagy a joystick használata között, az előbbiek szerint kódolt rendszer a program minden átalakítása nélkül közvetlenül
használható. (Ilyen játékok pl. az ULTIMATE szárnyai alatt megjelent ARMAGEDDON, a TRANZ AM, a JETPAC, stb.)

Az 1., 2., 3. gombok a P5 ... P7 vonalakat aktiválják, és a gyári botkormányokhoz képest többletszolgáltatást jelentenek. Funkciójukat a felhasználó szabja meg a programban. Alkalmasak pl. a program újraindítására, nehézségi fokozatának váltására, stb. Aki úgy gondolja, hogy nincs rájuk szüksége, nyugodtan el is hagyhatja ezeket.

A kész illesztőkártya panelján 4 db M2,5 szegecselhető anyát is beültetünk, melyek segítségével az egy műanyag lemezből ragasztott dobozba csavarokkal rögzíthető. Mivel az áramkör az illesztőkártyát és a botkormányt elektromosan összekötő vezeték minőségére és hosszára egyáltalán nem kényes, a kábel bármilyen hajlékony, kilenc egymástól elszigetelt vezetéket tartalmazó típus lehet. A mintakészülékben a legegyszerűbbnek látszó - és a legelegánsabb - megoldást választottuk: a két egységet egy kilenceres szalagkábellel kapcsoltuk össze. A szalagkábelt kihúzódás ellen úgy biztosítottuk, hogy beforrasztás előtt a panelen kialakított két hosszúkás nyíláson bújtattuk át. A botkormány felöli kábelvégződés is hasonló kialakítású.

A botkormány mechanikus felépítése
A K1 ... K5 kapcsolók botkormánnyal történő működtetésére számtalan megoldás kínálkozik. Az általunk megvalósított, és az alábbiakban bemutatásra kerülő szerkezet ugyan nem az elképzelhető legegyszerűbb, de minden bizonnyal az egyik leghosszabb élettartamú változat. A joystick lényegesebb elemét a következő ábrán szemléltetjük.

A P0 ... P3 vonalakra kapcsolódó iránymeghatározó kontaktusokat 4 db mikrokapcsolóval realizáltuk, melyeket egy alaplemezre szereltünk fel (a). Az alaplemezen hosszúkás kivágásokat készítettünk, hogy a mikrokapcsolók elmozdításával és a megfelelő helyzetben való rögzítésével a legoptimálisabb előfeszítés beállítható legyen. A mikrokapcsolók kiválasztásánál törekedjünk arra, hogy azok működtetéséhez minél nagyobb nyomóerőre legyen szükség.
A mikrokapcsolókat kétcsapos, négyzetkeresztmetszetű, kardanikus csukló (b) működteti. Ez az elem három, megfelelően megmunkált 15x15 mm keresztmetszetű, AIMgSI anyagból készült alkatrészből áll, melyek csuklós kapcsolatát 2 db 3 mm átmérőjű csapszeg biztosítja. A baloldalt látható alsó rész a joystick alaplemezéhez van erősítve, a felső rész pedig a közdarab és a csapok közbeiktatásával az alsóhoz képest két, egymásra merőleges tengely körül kismértékben elfordítható, így az bármelyik mikrokapcsolót egyenként, vagy bármelyik két, egymáshoz képest 90 fokban elhelyezett mikrokapcsolót egyidejűleg is működtetni képes.A működtető elem felső részére kemény, tükörsima felületű műanyaglemezkéket ragasztottunk, hogy az elmozdítás közben minél kedvezőbbek legyenek a súrlódási viszonyok.
Szintén a felső részben található az a menetes furat, melybe a (c) hüvely csavarható be. A hüvelyre kívülről illeszkedik a (d) nyél, melyet egy autósboltban beszerzett, fából készült sebességváltó-fogantyúból készítettünk. (Ez nem a legmegfelelőbb megoldás: egy kisebb tömegű fogantyú talán jobb lenne.) A hüvely furatában tengelyirányban mozdulhat el az (e) kapcsolószár, melynek felső részén a nyomórugó és a műanyag nyomógomb, az oldalsó, bemunkált részén pedig a hüvellyel stabil elektromos kontaktust teremtő érintkezőrugó található.
Bár az ábrán nem látszik, de a kapcsolószár alsó végébe sajtoltuk a "tűz" gomb mozgó kontaktusát képező érintkezőszegecset. Az álló kontaktust - szintén egy érintkezőszegecset - egy szigetelőgyűrűbe sajtoltuk (f). Összeszereléskor először a hüvelyt rögzítjük a fogantyúban - csavarozással vagy ragasztással - majd beszereljük a mozgó kapcsolószárat. A szigetelőgyűrűt az álló érintkezővel behelyezzük a kardáncsukló menetes furatába, az érintkezőszegecshez forrasztott szigetelt huzalt a csukló oldalsó furatán vezetjük ki. A kardáncsuklót az alsó elembe készített menetes furatokon keresztül csavarokkal rögzítjük az alaplemezhez. A mikrokapcsolókat hordozó lemez szintén az alaplemezhez van erősítve 4 db, megfelelő hosszúságú menetes távtartó csövecske segítségével.
A "tűz" gombbal párhuzamosan kapcsolt nyomógomb, valamint az 1., 2., és 3. gombok szintén lehetnek mikrokapcsolók, melyeket vagy az alaplemezhez, vagy a joystick dobozához erősítünk, de felhasználhatók egy meghibásodott zsebszámológép gombjai is. Ez utóbbira láthatunk példát az előző ábrán is: a nyomógombokat az eredeti konstrukcióhoz hasonló módon építhetjük be.  A (g) ábrán az erre a célra készült kontaktuspanel az eredeti gombokkal, a (h) ábrán a fémből készült tasztatúra-maszk, mellette szintén eredeti érintkezőrugók láthatók. A négygombos tasztatúrát a botkormány műanyag dobozának felső lapjára szereltük. A műanyag dobozt csavarokkal erősítettük az alaplemezhez, és a tetején kiképzett nyitáson keresztül becsavartuk a szerelt fogantyút.

BASIC programok átírása joystick-re
A program átírását célszerű egy konkrét példával illusztrálni. Mintaprogramunk a legtöbb Spectrum-tulajdonos rendelkezésére áll, a gyári és egyben a 48K-s gépekhez mellékelt 'HORIZONS' "Software starter pack" programkazettán. A kazetta "B" oldalán található a "Wall" nevű játékprogram, melyben egy visszaverő felületet kell jobbra, ill. balra elmozdítani úgy, hogy arról a falbontó "labda" visszapattanhasson. A normál sebességű mozgatás az "O" és "P" billentyűkkel, a gyors mozgatás pedig az előbbi gombokkal egyidejűleg megnyomott 'CAPS SHIFT' billentyűvel lehetséges. ('0' és 'P` karakterek) A programnak a billentyűk működtetését figyelő részlete jellegzetes, minden BASIC játékprogramban többé-kevésbé hasonlóan van megoldva:

80 PAUSE 1: LET a$=INKEY$: IF a$="o" THEN GO SUB 220
81 IF a$= "0" THEN GO SUB 224
85 IF a$="p" THEN GO SUB 230
86 IF a$= "P" THEN GO SUB 234
90 GOTO 60

Joystick-re átírva:

80 IF IN 31=2 THEN GO SUB 220
81 IF IN 31=18 THEN GO SUB 224
85 IF IN 31=1 THEN GO SUB 230
86 IF IN 31=17 THEN GO SUB 234
90 GOTO 60

A 80. sor a normál sebességű balra mozgatás, a 85. sor pedig a normál sebességű jobbra mozgatás szubrutinját hívja meg. A gyors mozgatás szubrutinjait a 81., ill. 86. sorok aktiválják. Látható, hogy a botkormánnyal egyidőben működtetett kontaktusok eredő decimális kódját úgy kapjuk meg, hogy az egyes érintkezők decimális kódjait összeadjuk. Ha pl. egy programban jobbra-felfelé (45 fokban) akarunk elmozdulást létrehozni, és közben tüzelünk is, az ennek megfelelő decimális adat:
D =1 + 8 + 16 = 25.

Spectrum Világ 18-19. rész

Vissza