Tydzień temu rozpocząłem prezentację artykułów
Roberta
"Synthpopalooza" Clarka na temat programowych trybów znakowych.
Przedstawione zostały tryby
Super IRG,
Super IRG 2,
Super 0. Warto się z nimi zapoznać przed przeczytaniem
dzisiejszego odcinka o trybie DIN. Warto też pamiętać, że Bobby
pracuje na komputerach NTSC, które w zakresie omawianych w artykule
kolorów i artefaktów różnią się od komputerów PAL.
autor cyklu - Bobby Clark
Robert "Synthpopalooza" Clark napisał:
Tryb DIN
W trakcie eksperymentów z trybami znakowymi zaintrygowało mnie
kolejne pytanie. Co by się stało, gdybym co przerwanie VBLANK
przełączał obraz między trybami ANTIC 2 (GRAPHICS 0) i ANTIC 4
(GRAPHICS 12)? Rezultaty okazały się interesujące.
Pierwszy problem, jaki musiałem przezwyciężyć przy realizacji
takiego trybu było wymyślenie sposobu, jak przełączać ANTIC 2 i
ANTIC 4 co każde przerwanie VBLANK. Kluczem do rozwiązania jest
wskaźnik początku Display List, mieszczący się w komórkach 560 i
561. Jak wiadomo, Display List (DL) jest serią instrukcji mówiącą
Atari, jak ma wyglądać obraz w każdej linii ekranu, gdzie w pamięci
mieszczą się dane obrazu, etc. Kiedy używasz komendy GRAPHICS, na
przykład żeby włączyć tryb GRAPHICS 0, system operacyjny
automatycznie utworzy odpowiednią Display List dla GRAPHICS 0, a
wskaźnik (560, 561) będzie ją wskazywał.
Aby przełączać się między trybami co każde przerwanie VBLANK
potrzebujemy dwóch Display List, które będą przechowywane w
pamięci. - jedną dla trybu GRAPHICS 0 i drugą dla GRAPHICS 12
(ANTIC 4), a wskaźnik początku Display List musi być zmieniany co
VBLANK. W moim przykładzie na końcu tego artykułu przechowuję
Display List na końcu strony 6 (1536), która nie jest używana przez
system operacyjny. W komórce 561 ustawiłem 6 (strona 6), a
procedura VBI przełącza w komórce 560 początek każdej Display List
co przerwanie VBLANK. Ponieważ tryb ten działa na zasadzie
interlejsu nazwałem go DIN (od Display Interlace).
Znak w trybie DIN jest bardzo interesujący. Mamy zwykły znak
GRAPHICS 0 (siatka 8 na 8 pikseli w dwóch kolorach) z nałożonym
znakiem ANTIC 4 (siatka 4x8 w czterech kolorach i jednym dodatkowym
kolorem po inwersji). Oznacza to, że na każdy pojedynczy piksel
ANTIC 4 wpływa jeden z dwóch kolorów pikseli trybu GRAPHICS 0
(piksele mogą być włączone lub wyłączone) oraz że każde dwa piksele
trybu GRAPHICS 0 nadadzą nowy kolor pikselowi znaku w trybie ANTIC
4. Następujący rysunek wyjaśni jak to działa:
Można spojrzeć też inaczej – dostajemy 8 kolorów w rozdzielczości
GRAPHICS 0 plus alternatywne dwa kolory jeżeli użyjemy inwersji
wideo – łącznie 10 kolorów. Jeżeli dorzucimy artefakty jak w trybie
Super 0 to możemy otrzymać do 20 kolorów, a znaki projektujemy
używając pary bitów, podobnie jak w trybie Super IRG 2.
Trzeba pokonać pewne trudności, żeby poprawnie wyświetlić obraz w
trybie DIN. Największym problemem jest to, że rejestr tła w
GRAPHICS 0 jest ustawiany w komórce 710, podczas gdy w ANTIC 4 w
komórce 712. Aby zapobiec nadmiarowemu mruganiu ekranu należy w obu
rejestrach ustawić ten sam kolor tła, ale jednocześnie zapobiec
wyświetlaniu koloru z rejestru 710 w trybie ANTIC 4 (jako, że jest
to w tym trybie rejestr jednego z kolorów grafiki, a nie tła). Tak
więc procedura VBI musi przełączać co każde przerwanie VBLANK kolor
w rejestrze 710 - między kolorem tła i kolorem, który używasz w
ANTIC 4.
Podobny problem występuje w rejestrze 709. W trybie GRAPHICS 0 jest
on używany do kontroli jasności tekstu, a w ANTIC 4 zawiera jeden z
kolorów grafiki. Dlatego procedura VBI musi zmieniać zawartość
także tego rejestru, aby oba kolory były od siebie niezależne.
Ostatnim problemem jest inwersja wideo. W tym trybie znaki GRAPHICS
0 w inwersji wyglądałyby okropnie, a dodatkowo utracilibyśmy
możliwość korzystania z piątego koloru w ANTIC 4. Rozwiązaniem tego
problemu jest dodanie w procedurze VBI przełączania rejestru CHACT
(755) między 0 i 2 – tak, aby wyłączyć inwersję wideo w GRAPHICS 0,
a włączyć w ANTIC 4, aby chcemy uzyskać piąty kolor.
Przy projektowaniu miłego dla oka obrazu składającego się z kolorów
trybu ANTIC 4 oraz artefaktów w GRAPHICS 0 należy pamiętać, że
Atari i emulatory inaczej wyświetlają artefakty i przez to końcowy
efekt może być różny.
Załączam
listing programu (PROGRAM7.BAS), który zapisze zestaw fontów na
dysk oraz programu (DIN.BAS), który wyświetla ekran w trybie DIN -
oba w Atari Basic.
Opis programu
Linie 1020 do 1070 ustawiają dwie Display List (dla ANTIC 2 i ANTIC
4) i przechowują obie na szóstej stronie pamięci. Dzięki takiemu
rozwiązaniu wystarczy modyfikować zawartość komórki 560 (młodszy
bajt wskaźnika miejsca początku Display Lisy), aby przełączać się
między trybem ANTIC 2 i ANTIC 4 co przerwanie VBLANK i otrzymać
pożądaną Display List. Następujące rejestry są modyfikowane przez
procedurę VBI do uzyskania prawidłowych kolorów:
- 708 – kolor rejestru PF0 (para bitów 01)
- 1043 – jasność tekstu w GRAPHICS 0 (wartości parzyste z zakresu
0-14)
- 1042 – kolor rejestru PF1 (para bitów 10 – rejestr
709)
- 1044 – kolor rejestru PF2 (para bitów 11 – rejestr
710)
- 711 – kolor rejestru PF3 (para bitów 11 w inwersji)
- 712 i 1045 – kolor tła (powinna być ta sama wartość, aby
zapobiec uciążliwemu migotaniu obrazu).
Dodatkowo – modyfikowany jest rejestr CHACT, aby wyłączyć inwersję
wideo, gdy wyświetlany jest tryb ANTIC 2. Redukuje to migotanie
obrazu i czyni wyraźniejszym piąty kolor w trybie ANTIC 4 (tutaj:
żółty), co poprawia obraz.
Jako piątego koloru ANTIC 4 użyłem jasnego żółtego, a odcieni
niebieskiego dla innych rejestrów PF. Te kolory dobrze mieszają się
z zielonymi i fioletowymi artefaktami trybu ANTIC 2. Można także
wybrać na piąty kolor fioletowy i odcienie zieleni w ANTIC 4, które
w połączeniu z artefaktami w ANTIC 2 dadzą bardzo delikatne
przejścia kolorów. Jak widać w przykładzie, dzięki artefaktom
naprawdę można uzyskać bardzo subtelne kombinacje kolorów i
gradienty. Trzeba jednak pamiętać o tym, że różne modele Atari
wyświetlają artefakty w różny sposób, więc efekt czasem może być
nieprzewidywalny. Wygląda na to, że także emulatory mają problemy z
prawidłowym odtworzeniem tego efektu.
Co następne?
To co przeczytaliście dotychczas to dopiero początek podróży w
świat nowych programowych trybów znakowych na 8-bitowym Atari.
Następnym razem wyjaśnię sposób użycia trybów znakowych GTIA w
trybie GRAPHICS 0, aby uzyskać 16 kolorów na piksel w znaku.
Zaprezentuję również 6 nowych trybów znakowych opartych na GTIA,
które pozwalają wyświetlić do 256 kolorów na ekranie na raz.