Ing. Antonín Hofmann ml.
V článku je popsáno obvodové a programové řešení inteligentního programovatelného křížového ovladače (Joystick) pro mikropočítač ZX-Spectrum. Je určen především těm uživatelům, kteří si chtějí vylepšit svůj domácí systém, může však být užitečný všem zájemcům o mikropočítačovou techniku podrobnějším pohledem na některé vlastnosti počítače, zejména při návrhu spolupracujících stykových jednotek.
Inteligentní programovatelný křížový ovladač je další zdokonalení ovladače her. Jeho inteligence spočívá v tom, že se bez zásahu obsluhy dokáže předvolit na ovládání, které vyžaduje nahraná hra. Nositelem informace o způsobu ovládání je krátký programový úsek, který po zavedení do počítače obstará všechny činnosti spojené s programováním stykové jednotky ovládače. Uživatel se potom nemusí zabývat volbou a přepojováním spínačů či kolíčkové matice stykové jednotky a hra je okamžitě připravena ke spuštění. Úprava vlastního programu hry je přitom velice jednoduchá a spočívá ve vložení pěti ovládacích kláves do komunikačního programu obsluhy. Ten potom umožní vygenerování krátkého programového úseku, který jednou pro vždy nahrajeme na začátek příslušné hry.
Jestliže je hra řízena klávesnicí, což je mnohdy jediný možný způsob, je zpravidla využíván firemní podprogram, uložený v paměti ROM, který zprostředkovává komunikaci uživatele s počítačem známým způsobem. Tlačítka jsou podle obr. 1 seřazena do matice o pěti sloupcích a osmi řádcích. Sloupce jsou přes odpory připojeny na napájecí napětí +5 V a mají pasivní úrovně H, řádky jsou přes diody napojeny na adresovou sběrnici A8-A15. Podprogram čtení klávesnice aktivuje vždy jeden z adresových vodičů A8-A15 do úrovně L a současně přečte datové signály na D0-D4. Bylo-li stisknuto některé tlačítko klávesnice, pasivní úroveň H je potlačena aktivní úrovní L adresových vodičů a podprogram se tak snadno (přečtením D0-D4) může dozvědět o stisku klávesy. Je zřejmé, že při cyklickém opakování pro všechny řádky lze stisknutou klávesu jednoznačně dekódovat.
Jak se dá z předchozího vytušit, popisované stykové zařízení pracuje na principu elektrické simulace stisku libovolné klávesy tlačítka klávesnice. Lze předvolit pět nezávislých klíčových kláves, které jsou neustále uchovány ve vnitřní paměti stykového obvodu a zůstávají v pohotovosti i po vynulování mikropočítače. Z principu komunikace klávesnice s počítačem vyplývá, že simulátor stisku musí ve vhodný okamžik (počítač se dotazuje na klávesnici) přiložit data, odpovídající aktivované klávese na datovou sběrnici. Blokové schéma takového zařízení je na. obr. 2 s následujícím významem jednotlivých bloků:
Kodér | transformuje kód 1 z 8 na binární tříbitové slovo; |
Paměť RAM | vnitřní paměť stykové jednotky, obsahuje kódy klíčových kláves; |
Oddělovač | jednosměrně odděluje datovou sběrnici s možností přechodu do třetího stavu; |
Logika | generuje řídící signály pro různé režimy činnosti. |
Zařízení pracuje ve třech odlišných funkčních stavech:
Zapojení stykové jednotky na ob.3 vychází přímo z blokového schématu. Spínače křížového ovladače jsou připojeny mezi společný vodič a adresovou sběrnici A0-A4 paměti RAM. Obvod MH 748287, naprogramovaný podle tab. 1 jako dvojkový kodér (lze použít 74148), transformuje informaci o aktivované řadě klávesníce v kódu l z 8 na tříbitové slovo. Tím byl počet nutných adresových vodičů paměti RAM omezen do únosné velikosti. Styk vnitřní paměti stykové jednotky s řídicí jednotkou zajištuje programovatelný vstupně-výstupni obvod 8255. Brána A je aktivována pouze v režimu programování paměti a přenáší programovací data. Brána B je připojena na adresovací vstupy paměti a vybírá paměťovou buňku, s kterou řídicí jednotka komunikuje. Z brány C jsou použity pouze dva bity jako signály bezprostředního řízení. Kterýkoli ze signálů PC 0-3 slouží jako /CS RAM a stejně tak kterýkoli bit horní poloviny brány C PC 4-7 může být použit jako aktivační pro funkci simulace stisku klávesy. Napojení obvodu 8255 je zcela standardní. K vynulování dochází pouze při zapnutí napájecího napětí nebo při ručním požadavku tlačítkem Tl, které není v konečné verzi nutné, ale ve stadiu oživení je jeho přítomnost vhodná.
Úplný výpis programového vybavení je v tab. 2 a v tab. 3. Komunikační program s uživatelem je naprogramován v jazyce ZX-Basic (tab. 2). Po spuštění je uživatel dotazován na klíčové klávesy a jejich obsah je zpracováván strojovými podprogramy STARTUK a LL. Adresa volání v řádcích 2 a 38 musí odpovídat adresám START UK - start ukládání a LL- další položka k ukládání. Podprogram LL rozkóduje stásknutou klávesu a informaci o sloupci a řádku tlačítka v matici klávesnice ukládá do zásobníku LBUF podle obr. 4. Poznamenejme, že firemní podprogram čtení klávesnice KEY-SCAN, který je využíván (CALL 654), pracuje tak, že po návratu registr E obsahuje informaci o stisknuté klávese v osmibitovém slově podle obr. 5. Nebylo-li žádné tlačítko aktivováno, obsahuje FFH. Řádek 940 Assembleru ukončuje podprogram LL a vrací řízení do Basicu.
1 PRINT : PRINT : PRINT DOLEVA = "; 2 RANDDNIZE USR BIN 0101111100001100 2 PRINT INKEY$ 4 BEEP 1,1 5 PRINT "DOPRAVA = "; 6 GO SUB 35 7 PRINT NAHORU = "; 8 GO SUB 35 9 PRINT "DOLU = "; 10 GO SUB 35 11 PRINT "PAL = "; 12 GO SUB 35 13 RANDOMIZE USR BIN 0101111011001110 14 PRINT SCHOVAT HA MGF ? (A/N)" 15 IF INKEY$="N" THEN GO TO 24 16 IF INKEy$<>"A THEN GO TO 15 17 SAVE "JOYSTICK" LINE 38 24 PRINT : PRINT : PRINT "NAHRAJ HRU" : LOAD "" 35 RANDOMIZE USR BIN 0101111100010100 36 PRINT INKEy$ 37 BEEP 1,1: RETURN 38 RANDOMIZE USR BIN 0101111011001110 39 GO TO 24 40 REM >X OPEN #_> COPY OPEN #]! CLEAR F STEP STR$ ^-CHR$ TAN ^>P OPEN #_<>] OPEN #[X OPEN #YCODE OPEN #J= OPEN #J<>! CLEAR 6-CHR$ MOVE ^XACHR$ RANDOMIZE ^ INVERSE ^ INVERSE V THEN
Po zadání všech klíčových kláves je uživatel dotázán, zda se má vygenerovat samospustitelný program pro pozdější použití, který můžeme nahrát před zvolenou hru (řádek 17). Vlastní procedura programování křížového ovladače je volána řádkou 38, ve strojovém programu to odpovídá návěští START. V úklidové oblasti BUF jsou vytvořena data odpovídající stiskům klíčových kláves a všech jejich kombinací. Sekce PRENOS potom překopíruje BUF do vnitřní paměti stykového obvodu a konečně segment JOY zakončí režim programování a přejde k módu simulace stisku klávesy. Strojové podprogramy jsou pro lepší orientaci uloženy od adresy E000, ale v konečné verzi je nutné je fyzicky umístit do falešných komentářových řádku (REM) do programu Basicu. Získáme tak kompaktní programový celek, u kterého doba nahrávání z magnetofonu nepřesáhne 15 s. Stačí vymezit místo pro REM, např. REM 0000000...., kde počet nul odpovídá počtu bajtů strojového programu zvětšený o paměťový prostor potřebný na LBUF. Změnou ORG nasmčrujeme začátek strojového kódu na první položku v REM a po přeložení upravíme volací příkazy podle návěští STRTUK, LL, START. V hlavním programu (řádek 40) je vidět, jak se překladač ZX-Basic pokusil dekódovat takto vytvořené REM.
Na závěr je dobré upozornit, že stavba a oživení stykové jednotky vyžaduje určité základní zkušenosti v mikropočítačové technice. Přesto věřím, že článek bude užitečný širokému okruhu uživatelů počítačů ZX-Spectrum či Spectrum plus a poslouží k další inspiraci při řešení podobných problémů. Autor je ochoten vážným zájemcům překopírovat konečnou verzi programového vybavení.
Stránka byla už zobrazena: 938 ×
Aktualizováno: 3. 5. 2018, 16:52
Stránka načtena za 0.00174 sekund.