+-- - - -- -- - - ---- - - . .
|
|
|
|
|
|
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ň