Grafický subsystém počítačů Amiga II

1. 10. 2009
Doba čtení: 12 minut

Sdílet

V dnešní části seriálu o architekturách počítačů se budeme zabývat popisem podporovaných grafických režimů a grafických efektů, které je možné využít na všech typech počítačů Amiga, tj. i na modelech vybavených originálním čipsetem. Kromě funkce koprocesorů Copper a Blitter si popíšeme i způsob generování obrazu v různých režimech.

Obsah

1. Koprocesor Copper

2. Koprocesor Blitter

3. Generování video signálu

4. Standardní rozlišení grafických režimů podporovaná originálním čipsetem

5. Standardní grafické režimy využívající 1 až 5 bitových rovin

6. Mód Dual playfield

7. Mód EHB (Extra Half-Brite)

8. Mód HAM (Hold-And-Modify)

9. Odkazy na Internetu

1. Koprocesor Copper

Jedním z koprocesorů, které mohou pracovat relativně nezávisle na hlavním procesoru (Motorola 680×0) i dalších zákaznických čipech obsažených v Amigách, je Copper. Tento koprocesor je zabudován do minule popsaného čipu Agnus. Koprocesor Copper lze při jeho vhodné konfiguraci využít pro řízení celého grafického subsystému bez zatížení (popř. jen s nepatrným zpomalením) hlavního mikroprocesoru, protože dokáže načítat data i instrukce pomocí přímého přístupu do paměti (DMA), který je prováděn v lichých cyklech, takže nedochází ke kolizím s vykreslováním spritů, ovladačem disku či zvukovým subsystémem. Copper je možné naprogramovat tak, aby čekal na určitou pozici elektronového paprsku při vykreslování, přičemž ve chvíli, kdy paprsek této pozice dosáhne, může Copper zapsat data z nějaké paměťové buňky do určeného řídicího registru, čímž je možné například změnit grafický režim, modifikovat barvy v barvové paletě, posunout sprity na obrazovce, řídit dále popsaný Blitter atd.

pc81

Obrázek 1: Na této obrazovce ze hry Chaos Engine (fa Pixel Brothers) je na systémech podporujících televizní normu NTSC využit grafický režim s rozlišením 320×200 pixelů s 32 barvami (tj. je využito pět bitových rovin).

Pozice paprsku, na kterou Copper „číhá“, mohou být specifikovány jak ve vertikálním směru, tak i směru horizontálním, což představuje poměrně významné vylepšení oproti starším grafickým čipům, které dokázaly například generovat přerušení na určitém obrazovém řádku. Příkladem může být již dříve popsaný čip Antic použitý u osmibitových počítačů Atari, který ve své instrukční sadě obsahoval i příznaky generování přerušení na zvoleném řádku či řádcích, toto přerušení se však vyvolalo vždy před vykreslením tohoto řádku, nehledě na to, že zpracování přerušení mikroprocesorem je relativně pomalé, takže nebylo možné provádět operace s přesností na jednotky pixelů, což Copper řeší tak, že provede zápis do registrů sám, bez nutnosti volat přerušovací rutinu (Copper pracuje s přesností čtyř pixelů v režimech s nízkým horizontálním rozlišením a osmi pixelů v režimech s rozlišením vysokým). Vlastní detekce pozice paprsku je ve své podstatě poměrně jednoduchá, protože Copper porovnává programátorem zapsanou hodnotu s aktuálními hodnotami čítače obrazových řádků a čítače pozice vykreslovaného pixelu na řádku.

pc81

Obrázek 2: Barvová paleta použitá při vykreslení prvního obrázku.

2. Koprocesor Blitter

Druhý koprocesor, který je součástí čipu Agnus, se jmenuje Blitter. Již jméno tohoto koprocesoru naznačuje, kterou operaci s ním lze provádět – jedná se o přesun obdélníkových bloků paměti (neboli bit block transfer – bit blt – bit blit). Ovšem Amigácký Blitter umožňuje provádění i několika dalších sofistikovanějších operací, například aplikaci logické operace při přenášení dat, bitový posun dat při jejich přenosu, vyplňování oblastí a dokonce i vykreslování úseček. Tyto operace dokáže Blitter provádět většinou rychleji než v případě, že by byly vykonávané přímo mikroprocesorem; například blokový přesun dat je cca dvakrát rychlejší. Navíc je možné při kopírování dat provést vyplnění oblastí, což znamená, že v případě bitmapových obrázků dokáže Blitter vykreslit horizontální úsečku mezi dvojicí pixelů ležících na jednom obrazovém řádku (hranice se nejdříve určí například pomocí úsečky vykreslené samotným Blitterem).

pc81

Obrázek 3: Titulní obrazovka hry Shadow of the Beast taktéž využívá (v případě televizní normy NTSC) grafický režim s rozlišením 320×200 pixelů a 32 barev.

V případě, že je Blitter nastavený do režimu vykreslování úseček, je možné s jeho pomocí vykreslovat úsečky s maximální délkou 1024 pixelů. Programátor, který potřebuje s využitím Blitteru vykreslit úsečku, ji nejdříve musí „natočit“ tak, aby ležela v prvním oktantu, tj. její směrnice byla v rozsahu 0°–45°. Posléze se Blitteru přes jeho řídicí registry zadá skutečný oktant, ve kterém úsečka leží (hodnota 0–7), horizontální i vertikální délka úsečky (obě délky jsou před zápisem do řídicích registrů zkombinovány pomocí jednoduchých vzorců obsahujících součty, rozdíly a bitové posuny), pozice počátečního pixelu úsečky a nakonec bitová maska, pomocí níž je možné definovat vzorek, se kterým je úsečka kreslena. Rychlost vykreslování úseček je na svoji dobu úctyhodná – dosahuje řádově milionů pixelů za sekundu (počet skutečně vykreslených úseček kolísá v závislosti na jejich délce, nastaveném grafickém režimu, operacích, které probíhají současně s vykreslením úsečky a v neposlední řadě i na použitém televizním systému, protože Amigy určené pro NTSC používaly hodinovou frekvenci 7,16 MHz, zatímco Amigy podporující normu PAL byly s 7,09 MHz nepatrně pomalejší).

pc81

Obrázek 4: Barvová paleta použitá při vykreslení třetího obrázku.

3. Generování video signálu

Počítače Amiga byly vybaveny FM modulátorem, takže je bylo možné připojit k běžnému televizoru, podobně jako většinu osmibitových počítačů i některých modelů Atari ST. Vzhledem k rozdílům mezi televizními normami PAL (Evropa a další regiony) a NTSC (především USA) se rozlišení i časování grafických režimů lišilo podle toho, pro jakou televizní normu byl daný stroj nakonfigurován. Na systémech podporujících televizní normu NTSC se generovalo 262 obrazových řádků v každém půlsnímku, z nichž viditelných bylo minimálně 200 a maximální počet obrazových řádků, které Amiga dokázala vybarvit (nebyly černé) byl 241. V případě normy PAL se generovalo 312 obrazových řádků v každém půlsnímku, z nichž 256 bylo zaručeně viditelných; v případě potřeby bylo možné počet viditelných řádků zvýšit na 283, ovšem bez záruky, že všechny řádky budou skutečně na stínítku obrazovky zobrazeny. I obnovovací frekvence (počet půlsnímků zobrazených za jednu sekundu) se lišila podle použité televizní normy – necelých 60 Hz v případě NTSC a 50 Hz u normy PAL.

pc81

Obrázek 5: Úvodní obrazovka Amigácké verze hry R-Type používá pouze čtyři bitové roviny, tj. maximálně šestnáct barev.

Standardní grafické režimy tedy využívaly 200 (NTSC) či 256 (PAL) obrazových řádků, přičemž vždy dva po sobě jdoucí půlsnímky byly shodné – právě tímto způsobem se televizní obraz generoval na prakticky všech osmibitových počítačích. Ovšem Amiga dokázala zdvojnásobit vertikální rozlišení tak, že se sudý a lichý půlsnímek lišily, podobně jako tomu je u reálného televizního vysílání. Jedná se o takzvané prokládání (interlace), protože v prvním půlsnímku jsou zobrazeny liché obrazové řádky a ve druhém půlsnímku řádky sudé. Tímto způsobem bylo možné zvýšit vertikální rozlišení na 400 řádků v případě normy NTSC (maximálně 483 řádků z 525), popř. 512 řádků v normě PAL (maximálně 567 řádků z 625). Mimochodem, grafické režimy s prokládáním půlsnímků byly použity i u některých grafických karet SVGA na počítačích PC, ovšem kvůli špatné kvalitě obrazu (de facto se obnovovací frekvence snižuje na polovinu a dívat se delší dobu na monitor s obnovovací frekvencí například 43 Hz není nic příjemného) se od jejich používání postupně upustilo a dnešní LCD ho pravděpodobně ani nepodporují.

pc81

Obrázek 6: Barvová paleta použitá při vykreslení pátého obrázku.

4. Standardní rozlišení grafických režimů podporovaná originálním čipsetem

V následující tabulce jsou vypsány standardní grafické režimy, které podporoval originální čipset počítačů Amiga. Změnou řídicích registrů je možné horizontální i vertikální rozlišení změnit, přičemž limity pro vertikální rozlišení jsou zmíněny v předchozí kapitole. Níže vypsané grafické režimy jsou podporovány i všemi dalšími čipsety počítačů Amiga, tj. jak ECS – Enhanced Chip Set, tak i AGA – Advanced Graphics Architecture. Ve sloupci „Počet barev“ je uveden jak maximální počet barev ve standardních grafických režimech, tak i to, zda lze použít módy EHB (Extra Half-Brite) či HAM (Hold-And-Modify), které jsou popsány níže. V posledním sloupci je uveden zaokrouhlený poměr výšky a šířky pixelu, ovšem zde je nutné říci, že například hodnota 1:1 nemusí na všech televizorech znamenat, že je pixel skutečně čtvercový (navíc je v případě normy PAL poměr roven spíše 15:16 než přesně 1:1). Z tabulky je mj. patrné i to, že u režimů s horizontálním rozlišením 640 pixelů se snižuje počet současně zobrazitelných barev a tím i počet použitých bitových rovin.

Video systém Jméno Rozlišení Počet barev Poměr stran pixelů
NTSC LowRes 320×200 2 – 32, EHB, HAM 1:1
NTSC LowRes interlaced 320×400 2 – 32, EHB, HAM 2:1
NTSC HiRes 640×200 2 – 16 1:2
NTSC HiRes interlaced 640×400 2 – 16 1:1
PAL LowRes 320×256 2 – 32, EHB, HAM 1:1
PAL LowRes interlaced 320×512 2 – 32, EHB, HAM 2:1
PAL HiRes 640×256 2 – 16 1:2
PAL HiRes interlaced 640×512 2 – 16 1:1
pc81

Obrázek 7: Amigácká verze hry R-Type je poněkud barevnější než původní verze naprogramovaná pro osmibitové počítače.

5. Standardní grafické režimy využívající 1 až 5 bitových rovin

V předchozí části tohoto seriálu jsme si řekli, že čip Denise, který se v počítačích Amiga stará o generování grafického obrazu, podporuje několik typů grafických režimů. Základní režimy využívají jednu až pět bitových rovin z maximálního počtu šesti rovin, tj. bez použití dalších triků (například změny barvové palety) je v těchto režimech možné zobrazit dvě (21) až 32 (25) barev. Barva každého pixelu je určena na základě bitových hodnot přečtených z jednotlivých bitových rovin (každému pixelu odpovídá jeden bit v každé bitové rovině – viz též osmý obrázek). Zkombinováním jednoho až pěti bitů vznikne hodnota v rozsahu 0–31, která je použita při přístupu do barvové palety, jenž je na Amigách s původním čipsetem představována 32 řídicími registry. V každém z těchto registrů je uložen jeden z 4096 podporovaných barvových odstínů (každá barvová složka je představována čtyřmi bity, tj. celkový počet barev je roven 24×24×24=163=­4096. Rozměry bitových rovin je možné měnit, což znamená, že bitová rovina může být ve skutečnosti větší, než zobrazená část (výřez). Tím je umožněn horizontální i vertikální scrolling (posun obrazu), který lze provádět bez nutnosti přesunu obrazových dat.

pc81

Obrázek 8: Příklad konfigurace grafického režimu se třemi bitovými rovinami. Hodnota pixelu je „rozložena“ mezi jednotlivé bitové roviny (v každé rovině je uložen jen jeden bit pro daný pixel). Přečtené bity jsou zkombinovány (jednoduše seřazeny za sebe) a výsledná hodnota je použita při přístupu do barvové palety.

6. Mód Dual playfield

V předchozí kapitole jsme si řekli, že čip Denise dokáže současně pracovat až se šesti bitovými rovinami. Ve standardních grafických režimech se však využívá jen pět bitových rovin a to především z toho důvodu, že originální čipset má pro uložení barvové palety rezervováno pouze 32 řídicích registrů. Ovšem i šestou bitovou rovinu lze využít a to dokonce několika navzájem zcela odlišnými způsoby. Jedním z módů grafického subsystému počítačů Amiga, který dokáže se šestou bitovou rovinou pracovat, je takzvaný režim Dual playfield. Při zapnutí tohoto režimu jsou pro vytvoření obrazu použity dva relativně nezávislé playfieldy (v podstatě rastrové obrázky), přičemž každý se může skládat až ze tří bitových rovin. V každém playfieldu lze zobrazit maximálně sedm barev, zbývající osmá barva je průhledná (takže přes pixely, které jsou takto „obarveny“, lze vidět druhý playfield popř. barvu pozadí).

pc81

Obrázek 9: Tento obrázek využívá (i když to na první pohled nevypadá) pouze jednu bitovou rovinu, takže se rozlišují jen dvě barvy pixelů (černá a tmavě modrá). Ovšem hodnota jednoho z řídicích registrů barvové palety (který na začátku vykreslování obsahuje modrou barvu) je postupně měněna, čímž dochází i ke změně barev příslušných pixelů.

Pro určení barev pixelů prvního playfieldu lze použít barvové registry 0–7 (ve skutečnosti index 0 představuje průhledný pixel) a pro barvy pixelů druhého playfieldu se používají barvové registry 8–15 (a index 8 mají průhledné pixely). Tento mód se používá například v některých hrách, v nichž jeden playfield může představovat ovládací panel přes který lze vidět (díky průhledným pixelům) vlastní prostředí hry vykreslené do druhého playfieldu. Možné konfigurace bitových rovin v módu Dual playfield jsou zobrazeny níže:

 Počet zapnutých
 bitových rovin   Plafield 1 *            Playfield 2 *
------------------------------------------------------
     0              none                     none
                ____________
               |            |
     1         | 1          |
               |            |
               |____________|
                ____________            ____________
               |            |          |            |
     2         | 1          |          | 2          |
               |            |          |            |
               |____________|          |____________|
                ____________            ____________
               |            |          |            |
     3         | 1 _________|__        | 2          |
               |  |            |       |            |
               |__| 3          |       |____________|
                  |            |
                  |____________|
                ____________            ____________
               |            |          |            |
     4         | 1 _________|__        | 2 _________|__
               |  |            |       |  |            |
               |__| 3          |       |__| 4          |
                  |            |          |            |
                  |____________|          |____________|
                ____________            ____________
               |            |          |            |
     5         | 1 _________|__        | 2 _________|__
               |  |            |       |  |            |
               |__| 3 _________|__     |__| 4          |
                  |  |            |       |            |
                  |__| 5          |       |____________|
                     |            |
                     |____________|
                ____________            ____________
               |            |          |            |
     6         | 1 _________|__        | 2 _________|__
               |  |            |       |  |            |
               |__| 3 _________|__     |__| 4 _________|__
                  |  |            |       |  |            |
                  |__| 5          |       |__| 6          |
                     |            |          |            |
                     |____________|          |____________|

7. Mód EHB (Extra Half-Brite)

Dalším módem, ve kterém se využívá všech šesti bitových rovin, je mód označovaný EHB neboli Extra Half-Brite. Při zapnutí tohoto módu se prvních pět bitových rovin chová prakticky stejně jako u standardních grafických režimů popsaných v páté kapitole, tj. barva každého pixelu je představována pěti bity, přičemž každý bit leží v jedné bitové rovině. Takto uložená hodnota představuje index do barvové palety, což znamená, že každý pixel může být obarvený jednou z 32 barev uložených v barvové paletě (jak již víme, existuje v originálním čipsetu pouze 32 řídicích registrů představujících barvovou paletu, což je jeden z hlavních důvodů existence módu EHB). Pomocí logických hodnot uložených v šesté bitové rovině se určuje, zda se má intenzita daného pixelu snížit na polovinu či nikoli. To tedy znamená, že na obrazovce lze zobrazit 64 různých barevných odstínů, ovšem pouze polovina z nich se přímo vybírá přes barvovou paletu a druhá polovina je z nich odvozena. Poměrně velké množství obrázků obsahuje barevné přechody (změna intenzity pixelů), takže je pro ně mód EHB použitelný.

pc81

Obrázek 10: Obrázek, který je vykreslený v módu Extra Half-Brite.

pc81

Obrázek 11: Barvová paleta obrázku číslo 10. Povšimněte si, že prvních 32 barev se opakuje, ovšem se sníženou intenzitou.

8. Mód HAM (Hold-And-Modify)

Posledním režimem, kterým se dnes budeme zabývat, je režim označovaný zkratkou HAM, neboli Hold-And-Modify. I v tomto režimu je, podobně jako v režimu předchozím, (většinou) využito všech šesti bitových rovin, které však mají rozdílný význam. V prvních čtyřech rovinách jsou uloženy hodnoty pixelů použité při výběru barev pomocí barvové palety (což znamená, že je využito pouze 16 řídicích registrů), popř. pro změnu jedné z barvových složek (viz další text). V páté a šesté bitové rovině jsou uloženy řídicí bity (vždy dva bity pro každý pixel), které určují, zda hodnota uložená v prvních čtyřech bitových rovinách bude považována za index do barvové palety či zda se jedná o hodnotu jedné ze tří barvových složek modelu RGB – viz následující tabulka:

Bit b6 Bit b5 Význam
výběr barvy z palety stejným způsobem, jako ve standardním grafickém režimu
1 změna modré složky (čtyř bitů) podle hodnot načtených z rovin 1–4
1 změna červené složky (čtyř bitů) podle hodnot načtených z rovin 1–4
1 1 změna zelené složky (čtyř bitů) podle hodnot načtených z rovin 1–4

V tomto režimu lze současně zobrazit všech 4096 barevných odstínů (Amiga v tomto ohledu předběhla možnosti PCček o několik let), ovšem – jak je ostatně patrné i z předchozího textu – hodnoty sousedních pixelů nemohou být vždy zcela libovolné, neboť mezi nimi existuje závislost. I z tohoto důvodu se jedná o režim používaný především pro statické obrázky, neboť u nich může grafik provést jejich optimalizaci přímo v grafickém editoru (mnoho grafických editorů pro Amigu režim HAM přímo podporovalo).

bitcoin_skoleni

pc81

Obrázek 12: Na tomto obrázku vykresleném s využitím módu HAM, je celkem 327 barev.

9. Odkazy na Internetu

  1. Hold-And-Modify
    http://en.wikipedia.org/…d-And-Modify
  2. Amiga Halfbrite mode
    http://en.wikipedia.org/…d-And-Modify
  3. HAM8 Explained
    http://www.amigans.net/…/article.php?…
  4. Amiga FAQ (Frequently asked questions) (Part 1 of 4)
     http://www.faqs.org/…ction/part1/
  5. Amiga FAQ (Frequently asked questions) (Part 2 of 4)
     http://www.faqs.org/…ction/part2/
  6. Amiga FAQ (Frequently asked questions) (Part 3 of 4)
     http://www.faqs.org/…ction/part3/
  7. Amiga FAQ (Frequently asked questions) (Part 4 of 4)
     http://www.faqs.org/…ction/part4/
  8. Amiga Coding Wiki
    http://www.amigacoding.com/…hp/Main_Page
  9. Amiga screen
    http://amigadev.elowar.com/…ode0061.html
  10. Amiga HAM mode
    http://amigadev.elowar.com/…ode008F.html
  11. Copper WAIT instruction
    http://amigadev.elowar.com/…ode004B.html
  12. Copper MOVE instruction
    http://amigadev.elowar.com/…ode004A.html
  13. Amiga
    http://en.wikipedia.org/wiki/Amiga
  14. GalaxSIM: Solutions for Digital Living
    http://www.amiga.com/
  15. Denise Pin Assignment
    http://www.ntrautanen.fi/…c/denise.htm
  16. Motorola 68000
    http://en.wikipedia.org/wiki/68000
  17. Motorola 68008
    http://en.wikipedia.org/…torola_68008
  18. Motorola 68020
    http://en.wikipedia.org/…torola_68020
  19. Motorola 68030
    http://en.wikipedia.org/…torola_68030
  20. Great Microprocessors Past and Present
    http://www.microprocessor.sscc.ru/great
  21. Custom Chips: Paula
    http://www.amiga-hardware.com/…hardware.cgi?…
  22. Big Book of Amiga Hardware
    http://www.amiga-resistance.info/bboahfaq/
  23. Amiga Hardware Database
    http://amiga.resource.cx/
  24. ExoticA
    http://www.exotica.org.uk/wiki/Main_Page
  25. The absolute basics of Amiga audio
    http://www.sufo.estates.co.uk/…/amimus.html

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.