+-- - - -- --   -             -  ---- -  - . .
                |                           
                                             
                |                                              
                                                             
                |                                            
                                                             
                                                             
                |                                            
                                                               
                |                                           
                |                                             


          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ň