Chrobák WURMI x52

Nostalcompova TV karta a x51 GAME SYSTEM



Když jsem jako školák dosloval hltal zelené stránky Mikroelektronika v amárech 80. let 20. století, kromě zapojení počítačů mě fascinovala také zapojení tzv. televizních displejů. Připadalo mi prostě neskutečné, že někdo dokáže vykoumat obvod, který umí kreslit na obrazovku televizoru. Já vím, že dnes je to samozřejmost a obrazovkové displeje jsou všude kolem nás, ale tehdy to samozřejmost prostě nebyla. A tak jsem vždy snil, že si jednou dokážu navrhnout a postavit nejen vlastní procesor a počítač, ale také televizní displej. Procesory a počítače jsem postavil, viz Claudia-1 a později i Claudia Lite. Zbýval televizní displej. Ten měl být sestaven z diskrétních obvodů řady TTL 74xx, tedy žádné kontroléry typu 8275 či 6845. Původní idea byla postavit jej jako přídavnou kartu pro nejlepší školní jednodeskáč všech dob: PMI-80 :-)

Začal jsem tedy studovat základy generování PAL videa a nakonec jsem si vlastní zobrazovací obvody nejen navrhl ale opravdu i postavil. Jenže jak už to bývá, samotné videoobvody nestačí. PMI-80 má malou kapacitu pamětí, čili to chtělo přidat i paměti (Eprom, RAM) a k nim příslušný adresový dekodér. To by si vyžádalo použití adresových budičů (data a řídící signály naštěstí dostatečně budí 8228). Také by to chtělo zvukový výstup a jelikož PMI-80 nemá žádný časovač, tak alespoň nějak využít časovou základnu displeje k vyvolávání přerušení. A to jsem v té době ještě uvažoval o sériáku s 8251, protože nějak se ty programy do PMI dostat musí. Zkrátka i po dokončení TV displeje zbývalo udělat hromadu práce. A mě se do ní už nechtělo. Takže jsem displej "provizorně" připojil k procesoru řady x51/52 a už tam zůstal... :-) Vznikla tak "herní konzole" x51 GAME SYSTEM. Abych displej nějak smysluplně otestoval, napsal jsem pro tuto sestavu i jednoduchou hru. Mého oblíbeného Chrobáka Wurmiho.

X52 GAME SYSTEM X52 GAME SYSTEM



TV karta z obvodů TTL 74xx

Vlastní videokarta obsahuje celkem 25 integrovaných obvodů, což je vzhledem k jejím možnostem opravdu málo. Drtivá většina v AR popisovaných zapojení obsahuje kolem 30 obvodů a zdaleka neumějí to, co moje. Deska AND-1 ze SAPI-1 jich má třeba 33. Později se mi podařilo ještě další 4 pouzdra v zapojení ušetřit, ale tato verze ještě v době psaní tohoto článku existuje jen na papíře. Přitom používám jen klasické obvody řady TTL 74xx a nepomáhám si žádnými PROM či GAL obvody. Všechny mnou použité obvody byly na trhu běžně dostupné i v době, kdy vznikaly konstrukce popisované v AR. Ale myslí se tím normální kapitalistický trh. Tady bylo hovno. Významné úspory jsem třeba dosáhl použitím dvojitých čítačů 74393. Ty u nás běžné nebyly, takže se musel dávat dvojnásobný počet pouzder 7493. Totéž platí o posuvných registrech 74166 versus 2x 7496, o statické RAM 6116 (=4x 2114), registrech 74175 apod. Tyto obvody výrazně snížily celkový počet IO v návrhu.

Od počátku jsem chtěl, aby displej byl autonomní a měl vlastní videoram. Aby se k hostitelskému systému dal připojit jako klasická statická RAM, do které může procesor kdykoliv zapisovat i z ní číst. Chtěl jsem, aby procesor hostitelského systému nebyl zobrazovacími obvody nijak omezován (třeba DMA přístupem do paměti) a už vůbec se nemusel podílet na zobrazování jako v ZX80/81. Chtěl jsem, aby procesor mohl číst stav zatemňovacích signálů displeje, aby mohl do videoram přistupovat jen v době probíhajícího zatemění (tzv. zobrazování borderu). Tím se eliminují poruchy v obraze při přístupu CPU do videoram. Také jsem chtěl, aby časování všech signálů bylo přímo z krystalem řízené časové základny (8 MHz), tedy bez MKO a dolaďovacích prvků. Měl jsem s rozlaďováním MKO špatnou zkušenost z hrátek se zobrazovacím kontrolérem Intel 8275. Díky tomu jsem sice musel trochu "znásilňovat" normu PAL, ale to dělali všichni a jak se ukazuje, televizorům tyto odchylky v časování nevadí. Ani starým, ani novým. Jediným problémem bylo to, že jsem podcenil různá zpoždění signálů při průchodu různými obvody a zejména jsem podcenil parazitní mezistavy vznikající při čítání asynchronních čítačů typu 93. Vše se ale podařilo v prototypu vyřešit a v upraveném návrhu je již vše synchronizováno na hrany hodin a tyto problémy odpadají.

X52 GAME SYSTEM X52 GAME SYSTEM


Původní rozlišení displeje se během vývoje několikrát měnilo, až jsem skončil na 320x208 bodech. Displej měl být grafický. Poté, co jsem si uvědomil, kolik práce mě čeká s programováním třeba jen hloupého textového režimu a kolik by takový displej zabral v paměťovém rozsahu třeba toho PMIčka, přestavěl jsem displej na semigrafický 40x26 znaků v rastru 8x8. Stačilo přidat generátor znaků v podobě EPROM se znaky. Ty jsem komplet převzal z ROM ZX Spectra (alfanumerické znaky) a ZX81 (semigrafické znaky) a nějaké jsem si i vytvořil vlastní (pro Wurmiho). Znakové rastry na sebe přímo navazují. Meziznakové a meziřádkové mezery nejsou "tvrdě" zatemňovány obvody zobrazení a tudíž lze sestavovat i složité "jemnografické" obrazce. Stačí jen nadefinovat příslušené znaky a umístit je do generátoru znaků. Ten používám v podobě EPROM 2732 a jedním bitem z konfiguračního registru mohu přepínat mezi 2 bankami znaků po 256 znacích. Celkově mohu mít k dispozici 512 různých znaků. Zatím mám obsazenu jen jednu banku a v ní 128 znaků normálních a stejných 128 znaků invertovaných. Bitem D7 tak mohu přepínat mezi normálním a invertovaným zobrazením daného znaku (ideální pro kurzor).

Videoram je tvořena 2KB pamětí 6116. Ze 2048 dostupných bajtů je 1040 využito pro zobrazování a zbytek je k dispozici hostitelskému procesoru. Lze je použít pro ukládání dat. Nehodí se pro program, protože je vhodné do RAM přistupovat jen v době probíhajícího zatemění. Pokud tam spustíme program a jeho zpracování se přehoupne do viditelné části obrazu, budou v obraze vznikat poruchy. Ačkoliv nějaká rutinka by v době vertikálního zatemění proběhnout mohla. Je tam k dispozici cca 6 ms času. Volná RAM tvoří souvislý celek až od 1640 byte. Jinak jsou k dispozici jen 24 bajtové úseky za každým znakovým řádkem.

X52 GAME SYSTEM X52 GAME SYSTEM


Displej obsahuje 4-bitový konfigurační registr 74175, jehož prostřednictvím lze měnit některé parametry. Je možné povolit či zakázat zobrazování. To je super pro rychlé mazání obrazovky. Prostě zakážeme zobrazování, nasypeme do videoram znaky mezera a opět povolíme zobrazování. Z pohledu uživatele se obrazovka smaže ihned a my můžeme mazat RAM a nemusíme čekat na zatemňovací signály. Dále je možné celý obraz přepínat mezi normálním (bílá na černé) a inverzním (černá na bílém) zobrazením a to kdykoliv během provozu. Displej pochopitelně generuje Back-Porch signál. Jelikož jsem pro vertikální adresování použil separátní čítač, mohu přepínat mezi režimem 40x26 znaků a 40x13 znaků. Znaky jsou vždy v rastru 8x8, ale ve druhém režimu mají dvojnásobnou výšku (zdvojení TV řádků). To měl být takový "retro" režim pro PMI, ale nakonec jsem to nikdy nepoužil a v novém návrhu již tato možnost není. Poslední konfigurační bit přepíná 2 banky znaků (nejvyšší bit generátoru znaků EPROM 2732). Při použití 6 či 8 bitového registru (74174 či 74273) by bylo možné konfigurovat více parametrů a přepínat více znakových sad (např. EPROM 2764 = 1024 znaků!). Jeden bit by mohl být využit jako zvukový výstup.

Kromě obsahu videoram lze z displeje také číst tzv. stavové slovo. K tomu slouží 3-stavový oddělovač 74367. Slovo je 6-bitové a kromě obsahu konfiguračního registru obsahuje také signály horizontálního a vertikálního zatemění. Ty jsou využity k zápisu do videoram v době zatemění.

To je k TV videokartě vše. Pokud bych někdy stavěl její novou verzi, která je jednodušší (21 IO) a přitom odstraňuje některé nedostatky, zveřejním i její zapojení. Mám navržen i displej barevný, ale na jeho realizaci již asi nikdy nedojde a též mám nakreslen i "superjednoduchý" displej 128x128 bodů s 15 IO.

Pokud ohrnujete nos a říkáte si, že obraz lze generovat moderními procesory čistě softwarově, běžte raději pryč. Tohle opravdu nejsou stránky pro vás.



x51 GAME SYSTEM

K otestování videokarty jsem nakonec postavil malý kompjůtřík sestávající z patice pro procesor x51/52 (lze použít libovolný v DIL40) a několika tlačítky. Nechybí nutný záchytný latch adresy 74573, přizpůsobení jednoho výstupu pro Audio IN televizoru a konektor pro ISP programování. Celá sestava je pak napájena univerzálním síťovým adaptérem přes stabilík 7805, který je na desce taktéž. Propojení s videokartou obstarává dutinková a pinová lišta. Použitím procesoru x51/52 jsem se vyhnul nutnosti použít adresové dekodéry a budiče adres (byť TV karta má na pozicích obvodů jež jsou připojeny ke sběrnici hostitelského systému výhradně obvody HCT). Také jsem se vyhnul nutnosti použít nějaký zpožďovač signálu /WR za /CSRAM, neboť jejich současná aktivace není vhodná. Signál pro výběr videoram karty (/CSRAM) by měl předcházet signálu zápisu /WR, protože je nutné zajistit časovou prodlevu pro přepnutí multiplexerů adresových vstupů videoram. U x51/52 si generování /CSRAM (i /CSCFG pro konfigregistr) zajišťuji softwarově a tudíž s předstihem. Vlastní čtení/zápis je pak již zajištěn hardwarově instrukcemi MOVX. Celkové provedení je jasné z fotek. Mám osazen procesor AT89S52 s 8KB FLASH a jelikož je to celé určené pro jednoduché hry, odpovídá tomu i počet a rozložení tlačítek (Vlevo, Vpravo, Nahoru, Dolů a Start).

X52 GAME SYSTEM X52 GAME SYSTEM




hra Chrobák WURMI pro x52

Jako vzorovou aplikaci TV karty jsem si zvolil známou hru Had, kterou znám ještě z PMD-85 pod označením Chrobák WURMI. Na PMD byla v Basicu a jako autor byl uveden jakýsi František Fuka:-) Byla to ostatně snad první hra, ve které jsem se mohl rýpat, právě proto, že byla v Basicu. Hra se totiž velmi snadno implementuje, nevyžaduje žádný dramatický výpočetní výkon a přitom je velmi zábavná a dobře hratelná. A stačí jí jen znakový režim. Proto jsem si ji vybral jako svůj první samostaný počin při výuce Pascalu, a proto jsem si ji vybral i jako vzorovou aplikaci své TV karty. Kromě obvyklých entit potrava a jed, jsem přidal ještě polojed a imunitu. Sežráním polojedu se počet článků housenky zredukuje na polovinu, ale hráč může hrát dál. Teprve když máme pouze samotnou hlavičku, nastane po sežrání polojedu smrt (dolů zaokrouhlená půlka z jedničky je nula:-)). Pozřením znaku imunita získá WURMI imunitu a může beztrestně sníst jeden jed, nebo polojed bez ztráty bodů. Imunita platí vždy jen na jeden jed či polojed bez ohledu na to, kolik jich spořádámne:-)

X52 GAME SYSTEM X52 GAME SYSTEM


Dalším vylepšením hry jsou levely 0 a 1. Nultý level je klasická "zahrádka". Ve dalším levelu (1) je uvnitř ještě jedna zeď s průchody. Přechod z levelu 0 do levelu 1 je možný pouze po dosažení 50 bodů v levelu nula, přičemž tyto body se nezapočítávají do výsledného skóre! Nultý level je tedy jen na zahřátí a pořádně se začíná hrát až v levelu 1:-) Teprve skóre dosažené v levelu 1 se případně zapisuje do tabulky nejlepších. Vždy po 20 dosažených bodech se hra zrychluje. Můj rekord je něco přes 120 bodů a to už je docela hukot:-)

X52 GAME SYSTEM X52 GAME SYSTEM


Zápis nicku do tabulky nejlepších skóre je inspirován hracími automaty z marintgotek z 80. let minulého století:-)

X52 GAME SYSTEM X52 GAME SYSTEM


Měl jsem v hlavě i další vylepšení původního konceptu hry a další levely, ale už mě to dál nebavilo programovat.

X52 GAME SYSTEM X52 GAME SYSTEM


Hra je pochopitelně ozvučena (zvuk je veden do TV audio vstupu), ale zvuk lze vypnout. Na úvodní obrazovce hraje v přerušení jakási skladba (nalezeno na netu) a zároveň se dokola kolem obrazovky plazí WURMI.

X52 GAME SYSTEM X52 GAME SYSTEM


Máte-li možnost číst z videoram, může se v podstatě celá hra odehrávat jen ve videoram. Mimo stačí jen mít souřadnice článků hada a pár stavových registrů. Jelikož má CPU x 51/52 jen málo paměti RAM (128, resp 256 byte), používám k uložení souřadnic článků hada taktéž volnou část videoram.

X52 GAME SYSTEM X52 GAME SYSTEM


Přestože jsem měl připravené i další hry (auto, teris, houbař, sudoku), nakonec jsem realizoval jen tuto jednu. Už mě to opravdu nebavilo. Chrobák má totiž přes 50 stran A4 zdrojového ASM kódu (bohatě komentovaného). Ale je fakt, že velkou část zabírají univerzální rutiny pro práci s TV displejem z nichž ani všechny nejsou chrobákem využity. Tyto univerzální rutiny by se v dalších hrách již neopakovaly, jen používaly. Nedokončil jsem ani možnost umístění tabulky rekordů do interní EEPROM CPU. Současná verze má tabulku v RAM a po resertu se tudíž maže. Není bez zajímavosti, že všechny soubory chrobáka mají stále název "pokus" (asm, lst, hex). Původně to měl být jen takový pokus o práci s videokartou. Že z toho nakonec bude 50-stránková hra jsem netušil:-)

Pro více her by to chtělo více paměti v CPU. Ideální by byl třeba typ 89C51RD2 (ED2) se 64KB interní FLASH a sériovým bootloaderem. Pak by se po restartu objevilo nějaké menu pro výběr konkrétní hry. Každá z her by mohla mít vlastní tabulku nejlepších skóre v EEPROM. Jó, to by bylo žůžo. Škoda, že život je tak krátkej a nabízí tolik jiných lákadel... :-)


Stavba: 2014    
Publikováno: 6/2020    



« RET          ↑ TOP ↑          HOME


Odladěno na MS IE 8.0 a Firefoxu při rozlišení min. 1024 x 768 pixelů
www.NOSTALCOMP.cz    2010  -  2020