5.1. Ako to funguje
Srdcom zobrazovania grafiky sú dva obvody i8253 (Progammable interval timer).
Tento obvod je zapojený "hore nohami" a jeho úlohou je generovať adresu grafickej časti RAM, ako aj synchronizačné signály. Na prvý pohľad je zapojenie dosť nepochopiteľné a sám autor ho komentoval slovami: "Ještě dnes se ale dívám na zapojení ONDRY s otázkou: jak na tohle mohl někdo přijít?" (pozri patenty v sekcii download).
Zápis stavového slova a stavu čítačov je vykonávaný signálom IORD a nie IOWR. Signály adresy A0 a A1 nepocházajú z mikroprocesora, ale sú nastavované cez výstupnú bránu D31. Signál RD je generovaný obvodom NAND z hodinových impulzov a signálu odovzdania zbernice BUSAK. Ďalšou zvláštnosťou (zámer alebo zbytočná komplikácia?) je posun bitov nižšieho bajtu adresy A7->D0, A0->D1, A1->D2...
Prvý z čítačov D33 generuje adresu pre vykreslenie bodov v riadku, ako aj horizontálny synchronizačný impulz.
Drúhý čítač D34 generuje adresu pre stĺpce a vertikálnu synchronizáciu.
Dátová zbernica čítačov je pripojená na adresovú zbernicu mikroprocesora. Všetky dáta sa teda zasielajú do čítača ako adresa pri IO operáciách. Pri inštrukcii IN A,(n) je na A0-A7 hodnota n, na A8-A15 je hodnota akumulátora. Pri inštrukcii IN r, (C) je v dolnej časti adresy hodnota registra C a v hornej časti hodnota registra B.
Mikroriadok znamená jeden zobrazovaný riadok podľa TV normy (nemýliť si s riadkom textu), tiež sa používa názov linka - horizontálna čiara o hrúbke jedného pixelu.
*/ Tieto hodnoty sú definované vo ViLi ROM na adrese 18D5h, okrem počtu mikroriadkov (1/256), ktoré sa nastavujú rutinou na 1EFDh.
**/ Vzhľadom na zámenu bitov na druhom čítači je hodnota zapisovaná do čítača uvedená v zátvorke.
***/ Hodnoty z ViLi ROM v. 16 pre rozlíšenie 50 znakov na riadok
****/ Znak navyše, nakoľko zatemnenie ukrojí z posledného znaku. Preto nasleduje ešte jeden prázdny znak.
Horizontálne čítače majú zdroj hodinových impulzov s frekvenciou 1MHz, tie sú získané delením základnej frekvencie oscilátora (8MHz). Čítač H0 funguje ako delič frekvencie hodnotou 64, čím vytvára signál so šírkou 64us zodpovedajúci riadku v TV norme. Zároveň slúži ako zdroj hodinových impulzov pre vertikálne čítače. Čítač H1 začína čítať od impulzu z H0, pričom jeho hodnota je počet hodinových cyklov do začiatku synchronizačného impulzu. Čítač H2 riadi pomer zatemnenia a zobrazenia, pričom hodnota je úmerná počtu zobrazených znakov, po ktorých dôjde k zatemneniu.
Vertikálne čítače pracujú obdobne (ich poradie je ale obrátené). Čítač V2 opäť funguje ako delič frekvencie, pričom hodnota 312 zodpovedá počtu riadkov v TV norme. Čítač V1 generuje začiatok vertikálneho synchronizačného impulzu, a keďže neriadi jeho dĺžku (tú vytvára monostabilný KO), v praxi zmenou jeho prednastavenej hodnoty možno docieliť posun obrazu vo vertikálnom smere. Nakoniec V0 delí riadky na viditeľné a skryté, hodnota ovplyvňuje počet zobrazených riadkov. V0 zároveň zapína mód DMA, teda počítač aktívne pracuje len v čase, kedy nie sú zobrazované riadky!
Čítače okrem generovania synchronizačných signálov vykonávajú ešte jednu dôležitú úlohu - generovanie adresy Video RAM. Hodnota je vyčítaná z čítačov podľa nastavenia hodnôt D4 (A0) a D5 (A1) na D31 (LS174). Štandardne sú nastevné na hodnotu 00, teda hodnota sa vyčítava z čítačov H0 a V0 (konieckoncov sú to jediné nastavené osembitové čítače z daného IO). V prípade vertikálneho čítača je teda generovaná hodnota od FF po 00 na dolnej časti adresovej zbernice (je to východzia hodnota a môže byť zmenšená). V horizontálnom čítači sa generuje hodnota od 3F po 00.
Ako hovorí patentová prihláška, parametre zobrazovania sú plne nastaviteľné a za behu zmeniteľné softvérovo zápisom hodnôt do jednotlivých čítačov. Ďalej sa uvádza možnosť využitia ktoréhokoľvek čítača ako generátora príslušnej časti adresy pamäte, čo by umožňovalo umiestnenie Video RAM v ľubovoľnej časti pamäte. Z neznámych dôvodov však táto črta nebola pri dizajne počítača Ondra dodržaná a VideoRAM musí byť v poslednej štvrtine pamäťového priestoru. Môžu za to dva nenápadné pull-up rezistory R42 a R43, ktoré v čase DMA nastavujú A15 a A14 na log. 1. Tým zásadne znemožnili presunúť Video RAM na úplne iné miesto. Prakticky teda Video RAM začína na hodnote FFFF (ľavý horný roh) a rozširuje sa smerom k nižším adresám, podľa nastavenia počtu znakov na riadok. Keďže TV riadky (alebo mikroriadky) sú ovplyvnené nižšou adresou RAM, ich redukcia má minimálny (prakticky žiadny) vplyv na veľkosť obsadenej pamäte. Výpočet obsadenia pamäte je jednoduchý:
65536 - (počet znakov v riadku * 256) - počet mikroriadkov .
Na druhej strane počet mikroriadkov má zásadný vplyv na výkon počítača, nakoľko ovplyvňuje čas, v ktorom procesor pracuje. Počas zobrazovanie riadkov je mikroprocesor v stave DMA, teda neaktívny, čo pri zobrazení všetkých 256 riadkoch znamená, že pracuje len necelých 18% (1-256/312) času.
Zobrazovanie je však možné pozastaviť. Zobrazovanie je ovládané 0. bitom na D31(LS174), ktorý cez D37 (LS193) riadi žiadosť o prístup DMA. Odvod D37, hoci je čítač, je v zapojení použitý ako klopný obvod (spínač), ktorý je ovládaný štyrmi signálmi (VIDEO_ON, V-SYNC, V_OUT2 a V_OUT0) .
Pozastavením však zanikne možnosť vizuálnej interakcie, preto je v prípadoch, kedy je potrebný výkon i zobrazenie vhodnejšie zredukovať počet zobrazovaných riadkov na minimum, napr. na jediný riadok (pozor, redukujú sa horné riadky, zostáva teda najnižší riadok).
320x256 bodov
Pri plnom zobrazení 256 mikroriadkov zostáva 8 mikroriadkov ako horný okraj a 8 mikroriadkov ako spodný okraj.
Použitá literatúra
1. Základné programové vybavení ROM-SSM pro mikropočítač Ondra ROM 87, uživatelská příručka (Vít Libovický, Petr Novák, Jan Mercl)- komentovaný výpis ROM v. 27
2. Patentová prihláška 53/1986 Smutný, Mercl
3. Schéma počítača Ondra