Autor: Gallica
Techniczna podróż w głąb sprzętu Amiga 500, aby zrozumieć, jak układ Denise i Copper pozwalają wyświetlać znacznie więcej niż 32 kolory lub 8 sprite’ów, przekraczając wszystkie graficzne ograniczenia maszyny.
Somaire
I. Graficzne serce Amigi: Denise & Copper
- Denise to główny układ wideo: zarządza bitplanami (do 6 na A500), multipleksacją sprzętowych sprite’ów (8 jednocześnie na linię), priorytetami, przewijaniem oraz końcową kompozycją obrazu.
- Copper (współprocesor „współprocesor wideo” zintegrowany z Agnusem): działa równolegle z CPU. Jego zadaniem jest zapisywanie, w określonych momentach generowania obrazu (przez „raster”), do rejestrów chipsetu, aby na bieżąco zmieniać kolory, tryby wideo, adresy bitplanów itd.
Klucz do mocy Amigi: przy każdej linii skanowania, a nawet pikselu, Copper może zmieniać paletę, tryb, wywoływać przerwania… oferując niemal nieograniczoną ekspresję przy wolnym CPU.

II. Mnożenie kolorów na ekranie: triki Copper & podzielona paleta
1. Działanie palety na Denise
W standardowym trybie 5 bitplanów (32 kolory jednocześnie spośród 4096), Denise wyświetla obraz z RAM według indeksu w tabeli 32 kolorów („Color00” do „Color31”).
Normalne ograniczenie: każdy piksel może odnosić się do 1 koloru spośród 32.
Ale…
2. Wykorzystanie Copper do „raster color changing”
- Copper może wykonywać listę instrukcji („Copperlist”) zsynchronizowaną z przebiegiem skanowania ekranu (wiązka rastra).
- Przy każdej linii skanowania (a nawet jej części) może nadpisać rejestry kolorów (
$DFF180do$DFF1BE). - Konsekwencja: ten sam „Color 01” wyświetli różny odcień na górze, w środku i na dole ekranu…
- Jeśli zmienimy całą lub część palety co linię, każda pozioma strefa ekranu może mieć własne kolory.
Przykład: zmieniając 16 kolorów co 4 linie na ekranie o 256 liniach, można wyświetlić setki rzeczywistych kolorów („efekt tęczy”, gradienty, „gradienty nieba” w Shadow of the Beast lub Lionheart).

3. „Copperbars” i efekty rastrowe
- Zmiana palety co x linii = kolorowe paski („copperbars” klasyczne dla dem)
- Dynamiczna zmiana palety na podstawie wstępnie obliczonej tabeli = efekty „ogień”, plazma, gradienty tęczowe (State of the Art, Arte…)
- Można łączyć copper z blitterem dla efektów zniekształcenia lub animowanego podziału ekranu (przykład: gradienty nieba w Agony, Enigma)
4. Tryb HAM (Hold-And-Modify) i Copper
- Tryb HAM pozwala na jednoczesne wyświetlanie 4096 kolorów (ograniczone przez artefakty).
- Można w nim łączyć copper do zmiany kolejności bitów lub bazowych palet w locie (zaawansowane triki demomakerów).
5. Przykład copperlisty
CWAIT $2C, $20 ; Attend la ligne 44, colonne 32
CMOVE COLOR01, $F00 ; Change la couleur 1 (rouge)
CWAIT $34, $20
CMOVE COLOR01, $0F0 ; Change la couleur 1 (vert)
CWAIT $3C, $20
CMOVE COLOR01, $00F ; Change la couleur 1 (bleu)
Ten kod zmienia kolor nr 1 w trzech różnych pionowych miejscach, aby wyświetlić czerwone, zielone i niebieskie pasy.
III. Przekraczanie limitu 8 sprzętowych sprite’ów: multipleksowanie i triki
1. Oficjalny limit
Denise obsługuje 8 sprzętowych sprite’ów na linię, każdy do 16×256 px (tryb 4 kolorów, możliwe łączenie dla 16 kolorów, ale mniej sprite’ów).
2. Techniki multipleksowania
- Zmienianie adresu sprite’a „w locie” (przez Copper lub przerwanie): gdy raster zakończy wyświetlanie sprite’a na linii, Copper przepisuje jego adres, aby wyświetlić inny obraz niżej, na innej linii („sprite multiplexing” w stylu C64, ale sprzętowo na Amidze!).
- Obiekty blittera: oprócz 8 sprite’ów, blitter może kopiować grafiki w bitplanach w locie, symulując sprite’y programowe przy bardzo niskim obciążeniu CPU (używane w Ruff’n’Tumble, Uridium 2, Agony…)
- Animowane bitplany: niektóre gry używają całych bitplanów do symulacji „dużych” sprite’ów lub efektów (chmury w Shadow of the Beast, bossowie w Lionheart…)
Konkretny przykład: w Agony Copper służy do multipleksowania sprite’ów, aby wyświetlić 16 różnych ptaków, blitter kopiuje strzały, a podzielona paleta ożywia tło.

3. Priorytety i triki, aby unikać konfliktów
- Dobre planowanie „slotów sprite’ów”, aby wrogowie i strzały nigdy nie pojawiały się na tej samej pionowej linii (lub użycie „ciętych”/multipleksowanych sprite’ów przez Copperlistę).
- Sprite’y używane także do HUD, efektów, nakładek, nie tylko do rozgrywki.
- W trybie EHB (Extra Half-Brite) niektóre gry symulują jeszcze więcej kolorów dla sprite’ów przez duplikację i automatyczne przyciemnianie.
IV. Ikoniczne dema i gry: co umożliwiają Copper i Denise
- Shadow of the Beast: gradienty nieba w copperze, multipleksowane sprite’y dla wrogów, paralaksa na 12 planach dzięki copperliście
- Lionheart: miedź do dzielenia palet (niebo, dekoracje, oddzielne sprite’y), dynamiczne bitplany, gigantyczni bossowie symulowani w bitplanach/obiektach blitter
- State of the Art: animowane paski miedzi, wideo w czasie rzeczywistym ze zmianą palety na każdej linii skanowania (ponad 600 kolorów wyświetlanych na ekranie)
- Demo „Enigma” (Phenomena): plazma, paski rasterowe, gradienty nieba, miedź używana do „migotania” efektów świetlnych, przekroczenie 256 kolorów
- Kid Chaos: dynamiczne tło, multipleksowane sprite’y, HUD jako nakładka przez sprite
Ważny fakt techniczny: na Amiga 500 najnowsze demosy przekraczają 1000 widocznych kolorów dzięki miedzi + zmianom palety w locie, z 8 multipleksowanymi sprite’ami tworzącymi efekty nigdy wcześniej nie widziane na konsolach 16-bitowych.

V. Kody, wskazówki i zasoby, aby iść dalej
- Zasoby kodu:
- Praktyczna rada: aby przekroczyć 32 kolory lub 8 sprite’ów, zawsze myśl o „czasie rastrowym” i planuj swoje copperlisty. Sztuczka to automatyzacja zmian za pomocą wstępnie obliczonych tabel oraz łączone użycie blittera i sprite’ów.
Podsumowanie
Amiga 500, dzięki Denise i Copperowi, jest w stanie wyświetlić znacznie więcej niż jej oficjalne specyfikacje. Dzięki programowaniu cyklicznie dokładnemu, zaawansowanym copperlistom i multipleksowaniu, rywalizuje z Megadrive/SNES pod wieloma względami – a czasem je przewyższa.
Prawdziwym ograniczeniem nie jest sprzęt: to kreatywność programisty. Scena demo to udowodniła, a nowoczesne narzędzia pozwalają każdemu z tego skorzystać.