+-- - - -- -- - - ---- - - . . | | | | | | Grafický čip ANTIC je jedním z nejzajímavějších (ne-li zrovna ten nejzajímavější) v celém Atari. Mezi ostatními osmibity má právě Atari úplně specifické vlastnosti právě díky tomuto čipu, jehož koncepce se později přidrželo několik úspěšých systémů. Ještě než začnu s výkladem, chtěl bych upozornit lidi, kteří toho o malém Atari vědí daleko víc než já (a že jich není málo), že moje znalosti nejsou až tak na úrovni a že leccos zjednoduším nebo vypustím úplně. Zákaznický čip ANTIC má v hiearchii systému Atari stejnou prioritu jako CPU 6502. Znamená to, že oba procesory jsou napojeny přímo na datovou i adresní sběrnici, o které se dělí. Možná, že právě toto uspořádání je nevýhodou, protože pokud se ke slovu dostane ANTIC, nejdříve pošle HALT CPU, pak si vykoná svoje a teprve potom povolí opět činnost CPU. Jak se ale později v textu ukáže, výhody ANTICu daleko převáží tuto vlastnost a kromě toho se dá ANTIC prostě vypnout (a během náročných výpočtů tak může přenechat veškerý čas pro CPU). Dalším důvodem pro to, že je ANTIC naprosto rovnocenný s CPU je fakt, že jako správný procesor má nejen své registry, ale i svou instrukční sadu a navíc ke všemu má přímý přístup k CELÉ operační paměti -- přesně tak jako CPU. Veškeré ovládání grafiky -- tudíž grafického procesoru v Atari se děje prostřednictvím programu, jenž se zove Display List. A to je právě hlavní unikum -- ve všech klasických počítačích se grafika řídí jakýmisi primitivními zápisy do registrů graf. karty. Instrukce pro ANTIC by se daly kategorizovat do tří skupin. První typ instrukcí zobrazuje prázdné (mrtvé) scanlines (ty nenesou žádnou obrazovou informaci): 7 6 5 4 3 2 1 0 +-+-+-+-+-+-+-+-+ |I|n|n|n|0|0|0|0| +-+-+-+-+-+-+-+-+ | | | | | +-+-+------------ Počet prázdných scanlines (1..8) | +------------------ Povoluje DLI (Display List Interrupt) pro daný obrazový řádek (tento bit má stejnou fci u všech typů instrukcí) Druhý typ instrukcí jsou skokové instrukce (jsou vlastně jen 2): 7 6 5 4 3 2 1 0 +-+-+-+-+-+-+-+-+ |I|W|-|-|0|0|0|1| +-+-+-+-+-+-+-+-+ | +---------------- Typ skoku - 0 .. skoč ihned 1 .. skoč a počkej na vertikální zatemnění Skokové instrukce jsou 3bytové, jako operand se uvádí adresa, kam se má skočit. A poslední typ instrukcí zobrazuje platné obrazové řádky: 7 6 5 4 3 2 1 0 +-+-+-+-+-+-+-+-+ |I|R|H|V|m|m|m|m| +-+-+-+-+-+-+-+-+ | | | | | | | | | | +-+-+-+---- V jakém grafickém módu bude daná řádka [ANTIC má | | | 14 grafických módů, které se liší jednak typem | | | (text nebo bitmapa) a počtem bytů a scanlines na | | | jeden obrazový řádek -- můžeme zde tedy uvést | | | hodnoty 2 - F] | | | | | +------------ Pro daný obraz. řádek povoluje vertikální scroll. | +-------------- Povoluje horizontální scrolling | +---------------- Od tohoto řádku "začíná" nový úsek videopaměti (jako další dva byty po instrukci s nastaveným bitem 6 se musí udat adresa, od které se pro tuto řádku budou brát obrazová data. Pro další řádky platí naposledy definovaná videoram) Obrazových módů je, jak už bylo řečeno, 14 a mají tyto parametry: +---+--------+--------------------------------------------------------+ |mód| typ | popis | +---+--------+--------------------------------------------------------+ | 2|Textmód | znak 8x8 pixelů, 1 barva | +---+--------+--------------------------------------------------------+ | 3|Textmód | je to vlastně modifikovaný mód 2, který má znak o veli-| | | | kosti 8x10 pixelů, pro tento mód se musí nadefinovat | | | | zvláštní znaková sada | +---+--------+--------------------------------------------------------+ | 4|Textmód | znak 8x8 pixelů, ovšem bity v masce znaku jsou sdru-| | | | ženy do dvojic, a tím je umožněno rozlišit čtyři barvy.| | | | Znak má tedy faktickou velikost 4x8 pixelů, ale může | | | | být čtyřbarevný. | +---+--------+--------------------------------------------------------+ | 5|Textmód | modifikace módu 4. Rozdílem je, že znaky jsou zobrazeny| | | | jako 2x vyšší. | +---+--------+--------------------------------------------------------+ | 6|Textmód | znak 8x8 pixelů, ale je zobrazen jako 2x širší. Dá se | | | | zobrazit pouze část znakové sady (velká nebo malá pís- | | | | mena), protože pozice ve znak. sadě určuje navíc barvu | | | | znaku. Je možno použít 4 barev | +---+--------+--------------------------------------------------------+ | 7|Textmód | to samé jako mód 6, ale znaky jsou navíc zobrazeny jako| | | | 2x vyšší. | +---+--------+--------------------------------------------------------+ | 8|Bitmapa | 2 bity na bod - 4 barvy, bod o velikosti 8x8 pixelů | +---+--------+--------------------------------------------------------+ | 9|Bitmapa | 1 bit na bod - 1 barva, bod o velikosti 4x4 pixely | +---+--------+--------------------------------------------------------+ | A|Bitmapa | 2 bity na bod - 4 barvy, bod o velikosti 4x4 pixely | +---+--------+--------------------------------------------------------+ | B|Bitmapa | 1 bit na bod - 1 barva, bod o velikosti 2x2 pixely | +---+--------+--------------------------------------------------------+ | C|Bitmapa | 1 bit na bod - 1 barva, bod o velikosti 2x1 pixel | +---+--------+--------------------------------------------------------+ | D|Bitmapa | 2 bity na bod - 4 barvy, bod o velikosti 2x2 pixely | +---+--------+--------------------------------------------------------+ | E|Bitmapa | 2 bity na bod - 4 barvy, bod o velikosti 2x1 pixel | +---+--------+--------------------------------------------------------+ | F|Bitmapa | 1 bit na bod - 1 barva, bod o velikosti 1x1 pixel, | | | | tento mód se dá měnit ještě barvovým a "spritovým" | | | | čipem GTIA, kdy dostaneme 4 bity na bod - 16 barev. | +---+--------+--------------------------------------------------------+ Zde máte na ukázku příklad Display Listu: (Display list pro BASICový mód Graphics 0) Adr Instrukce Popis 9C20 70 -----+- Tři instrukce pro 8 prázdných scanlines 9C21 70 | 9C22 70 -----+ 9C23 42 ------- Řádek v ANTIC módu 2 s určením počátku videopaměti v následujících 2 bytech 9C24 40 -----+- Počátek videopaměti .. zde na adrese 9C40 9C -----+ 9C26 02 -----+- 22x řádek v ANTIC módu 2 | . | . | . | 9C36 02 ------- Poslední řádek ANTIC módu 2 9C37 41 ------- Skoč na adresu v následujících 2 bytech a počkej na vertikální zatemnění 9C38 20 -----+- Sem se bude skákat .. na adresu 9C20 (Start DL) 9C39 9C -----+ 9C40 ??? -----+- Videopaměť ??? | ??? | DLI (Display List Interrupt) je přerušení, které vyvolá ANTIC, pokud ve svém programu narazí na instrukci, která DLI povoluje. Ke správnému vykonání DLI je ještě potřeba nastavit některé hardwarové registry, jejichž adresy a názvy si však nepamatuji, a tak je zde neuvádím. DLI probíhá během horizontálního zatemnění (tj. když se paprsek vrací z pravého okraje obrazovky na levý, aby vykreslil další řádek), jeho doba trvání je tudíž na počítači s relativně pomalou CPU dosti krátká. Používá se hlavně ke změnám barvových registrů, takže je možno zobrazit více barev, než nám daný hardwarový ANTIC mód umožňuje. Postup je následující -> v barvovém registru 1 máme nastavenou nejsvětlejší modrou barvu. První řádek, který je celý v barvě 1 se vykreslí světle modrý. Během návratu paprsku na levý okraj obrazovky (v rámci DLI) změníme intenzitu modré v barvovém registru 1 na tmavší a další řádek se vykreslí již v této barvě. Pokud toto několikrát zopakujeme, na obrazovce máme modrý obdélník, který se směrem dolů ztmavuje a přitom jsme v módu, který nám svou podstatou povoluje třeba jen jednu barvu. Dále bych rád vysvětlil jak funguje skroling. Vezmu to na příkladu vertikálního scrollingu, protože je jednodušší. Tak zaprvé, na Atari neexistuje žádné omezení velikosti virtuální obrazovky -- tedy je tu omezení, které je dané velikostí operační paměti :). Tudíž problémy staré verze Výhně s velikostí článku by neexistovaly, pokud by grafika na PC fungovala na principu jako ANTIC [ale to nejde z různých důvodů -- např. protože PC se úzkostlivě drží modulární koncepce -- pokud tedy chcete výměnné grafické karty, tak prostě nemůžete mít grafický systém, který by mohl dostatečně rychle (stejně rychle jako CPU) šahat kamkoliv do operační paměti počítače, ale tuším, že VESA systém už přinesl nějaká zlepšení)]. Tak tedy, prvním krokem pro zdárné vertikální skrolování je vytvořit si patřičný Display List. Zde se fantazii meze nekladou, a tak můžete mít např. skrolující textové "okno" mezi statickými řádky různých bitmapových módů. Hlavně musíte u řádků, které mají skrolovat, povolit 4. bitem vertikální skrolování a u prvního řádku dané oblasti, která bude skrolovat, nadefinovat počátek obrazové paměti. Bude výhodné ho umístit na začátek textu, který bude předmětem skrolingu. Dále bychom měli nastavit hardwarový registr ANTICu VSCROL na 0. Nyní je vše připraveno a můžeme skrolovat. Při změně VSCROLu na nějakou hodnotu v intervalu 0..7 se u všech řádků, kde je nastaven vertikální skroling, obrazová data posunou o n scanlines, kde n je číslo v registru VSCROL. Jakmile dojdeme k hodnotě 7, jednoduše zvýšíme v Display Listu u řádku, který definuje počátek videoram pro skrolující okno, počátek videopaměti o příslušný počet bytů, a takhle pokračujeme do omrzení. Jak tedy vidíte, skrolování ve Výhni by s tímto systémem nebylo žádný problém. Na závěr tohoto bloku o grafice bych se rád zmínil, jak se na Atari zachází s barvami. Pro barvy (potažmo o převod obrazových dat do formy, kterou je schopen zobrazit monitor nebo TV) existuje obvod GTIA. To je obvod, se kterým se dá komunikovat přes několik jeho registrů a který pracuje úplně kontinuelně. GTIA nabízí pevnou paletu 16ti barev, z nichž každá existuje v 16ti intenzitách - na výběr je celkem 256 barev. Barvy se dají nabrat do jednoho z 5ti barvových registrů. Počet aktivních barvových registrů je ovlivněn tím kterým ANTIC módem, s výjimkou ANTIC módu F, kde může zasáhnout GTIA a nahodit jeden z extrémně barevných módů :). Čip GTIA se navíc stará o takzvanou PM grafiku (Player - Missile Graphics). Už z názvu je víceméně jasné, oč jde. Je to grafický systém objektů naprosto nezávislých na ostatních věcech na obrazovce, které se využívají hlavně pro různé hry (na jiných počítačích se tomuto jevu říká sprajty). Na Atari není tato záležitost řešena zrovna marnotratně, a tak máme k dispozici pouhé 4 sprity typu "player" (až trojbarevné, širší) a 4 sprity typu "missile" (jednobarevné, úzké), které se dají spojit do 5. playera. Ferda výheň