Obsah
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
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.
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.
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).
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ší).
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.
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í.
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 |
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.
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í).
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ý.
Obrázek 10: Obrázek, který je vykreslený v módu Extra Half-Brite.
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).
Obrázek 12: Na tomto obrázku vykresleném s využitím módu HAM, je celkem 327 barev.
9. Odkazy na Internetu
- Hold-And-Modify
http://en.wikipedia.org/…d-And-Modify - Amiga Halfbrite mode
http://en.wikipedia.org/…d-And-Modify - HAM8 Explained
http://www.amigans.net/…/article.php?… - Amiga FAQ (Frequently asked questions) (Part 1 of 4)
http://www.faqs.org/…ction/part1/ - Amiga FAQ (Frequently asked questions) (Part 2 of 4)
http://www.faqs.org/…ction/part2/ - Amiga FAQ (Frequently asked questions) (Part 3 of 4)
http://www.faqs.org/…ction/part3/ - Amiga FAQ (Frequently asked questions) (Part 4 of 4)
http://www.faqs.org/…ction/part4/ - Amiga Coding Wiki
http://www.amigacoding.com/…hp/Main_Page - Amiga screen
http://amigadev.elowar.com/…ode0061.html - Amiga HAM mode
http://amigadev.elowar.com/…ode008F.html - Copper WAIT instruction
http://amigadev.elowar.com/…ode004B.html - Copper MOVE instruction
http://amigadev.elowar.com/…ode004A.html - Amiga
http://en.wikipedia.org/wiki/Amiga - GalaxSIM: Solutions for Digital Living
http://www.amiga.com/ - Denise Pin Assignment
http://www.ntrautanen.fi/…c/denise.htm - Motorola 68000
http://en.wikipedia.org/wiki/68000 - Motorola 68008
http://en.wikipedia.org/…torola_68008 - Motorola 68020
http://en.wikipedia.org/…torola_68020 - Motorola 68030
http://en.wikipedia.org/…torola_68030 - Great Microprocessors Past and Present
http://www.microprocessor.sscc.ru/great - Custom Chips: Paula
http://www.amiga-hardware.com/…hardware.cgi?… - Big Book of Amiga Hardware
http://www.amiga-resistance.info/bboahfaq/ - Amiga Hardware Database
http://amiga.resource.cx/ - ExoticA
http://www.exotica.org.uk/wiki/Main_Page - The absolute basics of Amiga audio
http://www.sufo.estates.co.uk/…/amimus.html