Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Autor artykułu: mgr Jerzy Wałaszek

©2024 mgr Jerzy Wałaszek
I LO w Tarnowie

Dodatek E

GTIA

GTIA


Układ GTIA

GTIA jest nowym układem wyświetlania, który zastąpił CTIA w nowych komputerach ATARI XL/XE. W zasadzie nie jest on niczym więcej jak CTIA z kilkoma nowymi funkcjami. GTIA po prostu udostępnia trzy dodatkowe tryby interpretacji informacji nadchodzących z układu ANTIC. ANTIC nie potrzebuje nowego trybu do porozumiewania się z GTIA; zamiast tego używa on trybu $F o wysokiej rozdzielczości. GTIA jest zupełnie kompatybilny wstecznie z CTIA. Dalej podajemy krótkie podsumowanie funkcji CTIA, aby można było zaprezentować różnice pomiędzy CTIA i GTIA.


Tryb graficzny GTIA

Układ CTIA został zaprojektowany do wyświetlania danych na ekranie telewizora. Wyświetla on pole gry, graczy i pociski oraz wykrywa nakładanie się lub kolizje pomiędzy obiektami na ekranie. CTIA interpretuje dane dostarczane przez ANTIC zgodnie z sześcioma trybami tekstowymi i ośmioma trybami graficznymi. Na statycznym obrazie używa on danych z układu ANTIC do wyświetlania barwy i luminancji wg zawartości czterech rejestrów koloru. Na statycznym obrazie układ GTIA rozszerza to na używanie wszystkich dziewięciu rejestrów kolorów lub 16 barw z jedną luminancją, albo 16 luminancji jednej barwy.

Trzy tryby graficzne GTIA są po prostu trzema nowymi interpretacjami trybu $F układu ANTIC, trybu wysokiej rozdzielczości. Wszystkie trzy tryby wpływają tylko na pole gry. Graczy i pociski wciąż można dodawać, aby wprowadzać nowe barwy lub luminancje albo używać tych samych kolorów i luminancji w więcej niż jeden sposób. Wyświetlanie barw i luminancji dalej może być zmieniane w locie za pomocą przerwań listy wyświetlania. Na każdy piksel GTIA używa czterech bitów z układu ANTIC, zwanych danymi pikselowymi. Każdy piksel jest szeroki na dwa punkty koloru i wysoki na jedną linię skanowania. Stąd piksele te są w przybliżeniu cztery razy szersze od swojej wysokości. Ekran ma rozdzielczość 80 pikseli w poziomie i 192 w pionie. Każda linia wymaga zatem 320 bitów lub 40 bajtów pamięci, tak samo jak w trybie ANTIC'a $F. Dlatego praca programu w trybie GTIA wymaga co najmniej 8KB wolnej pamięci RAM na ekran.

Tryby graficzne GTIA są wybierane za pomocą rejestru priorytetów, PRIOR [$D01B], który posiada swoją kopię w pamięci RAM pod adresem $26F. Bity D6 i D7 są bitami sterującymi. Jeśli żaden z nich nie jest ustawiony, nie ma trybów GTIA i układ ten pracuje dokładnie tak samo jak CTIA.  Gdy D7 ma stan 0, a D6 1, zostaje określony tryb 9, który pozwala na 16 różnych luminancji tej samej barwy. Pamiętaj, iż dane pikselowe dostarczane przez ANTIC mają szerokość 4 bitów, co oznacza, iż mogą one reprezentować 16 różnych wartości. W tym trybie można używać graczy i pociski, aby wprowadzić dodatkowe barwy. Gdy D7 ma stan 1, a D6 ma stan 0, określony zostaje tryb 10. Tryb ten daje dziewięć kolorów na ekranie przez wykorzystanie czterech rejestrów koloru pola gry plus cztery rejestry koloru graczy/pocisków plus jeden rejestr koloru tła. Gdy w tym trybie używani są gracze, to te cztery rejestry koloru graczy/pocisków są również używane dla nich. Gdy D7 i  D6 są w stanie 1, zostaje określony tryb 11. Tryb ten daje 16 barw o tej samej luminancji, ponieważ ponownie 16 różnych wartości może być reprezentowane przez cztery bity. Gracze i pociski mogą być używane w tym trybie do wprowadzenia innych luminancji.

Rejestr PRIOR
D7 D6            
D7 D6 OPCJA
0 0 Bez trybów GTIA (praca jako CTIA) (Tryby 0-8)
0 1 1 barwa, 16 luminancji (Tryb 9)
1 0 9 barw/luminancji (Tryb 10)
0 0 16 barw, 1 luminancja (Tryb 11)

Rys.E-1 Kombinacje bitów w rejestrze PRIOR wybierają tryby GTIA

Ustawienie nowych trybów GTIA jest tak samo proste, jak ustawienie trybów używanych w CTIA. Aby zaimplementować te tryby z poziomu języka BASIC, użyj po prostu rozkazów GRAPHICS 9, GRAPHICS 10 i GRAPHICS 11 odpowiednio dla trybu 9, trybu 10 i trybu 11. W języku asemblera wybór jednego z tych trybów jest identyczny z otwieraniem ekranu dla dowolnych innych trybów. Jeśli uzywasz własnej listy wyświetlania, to rejestr PRIOR należy ustawić na właściwy tryb zgodnie z rys.E-1.

Tryb 9 produkuje do 16 różnych luminancji tej samej barwy. ANTIC dostarcza danych pikselowych, które wybierają jedną z 16 różnych luminancji. Rejestr koloru tła dostarcza barwę. W języku BASIC wykonywane jest to za pomocą rozkazu SETCOLOR do ustawieniu wartości barwy w górnej czwórce bitów rejestru koloru tła oraz ustawienia wartości luminancji w dolnej czwórce bitów na zero. Format rozkazu jest następujący:

SETCOLOR 4,barwa,0

gdzie 4 odnosi się do rejestru koloru tła, "barwa" ustawia barwę i może mieć dowolną wartość od 0 do 15, a 0 ustawia bity luminancji tego rejestru na  zero. Musi to być zrobione, ponieważ dane pikselowe z układu ANTIC będą poddawane logicznej operacji LUB z dolną czwórką bitów rejestru koloru tła, aby ustalić luminancję pojawiającą się na ekranie. Następnie rozkaz COLOR jest używany do wyboru luminancji rysunku na ekranie za pomocą wartości od 0 do 15 jako jego parametr. Zatem program w języku BASIC będzie zawierał przynajmniej poniższe polecenia przy korzystaniu z trybu 9:

GRAPHICS 9      Do określenia trybu 9
SETCOLOR 4,12,0 Do zainicjowania rejestru koloru
                tła na jakąś barwę, w tym przypadku na zieleń.
FOR I=0 TO 15   Przykładowa metoda, w której używa się
COLOR I         rozkazu COLOR do zmiany luminancji
PLOT 4,I+10
NEXT I


Efekt pracy programu

W asemblerze używaj kopii w pamięci RAM rejestru koloru tła pod adresem  $2C8 do ustawienia barwy w czterech górnych bitach o wartości of $0 do $F. Jeśli używane są wywołania CIO, umieszczaj dane pikselowe w systemowym rejestrze ATACHR pod adresem $2FB. Wybierze to wartości luminancji od $0 do $F. Jeśli utrzymujesz swoje własne dane ekranowe, to dane pikselowe idą bezpośrednio do lewej lub prawej połówki bajtu ekranu w RAM.

Rys.E-2 Rejestr koloru tła poddawany operacji LUB w celu otrzymania ostatecznego koloru

Tryb 11 jest podobny do trybu 9 z wyjątkiem tego, iż dostarcza on 16 różnych barw o tej samej luminancji. Ponownie układ ANTIC będzie dostarczał dane pikselowe do wyboru jednej z 16 różnych barw. W języku BASIC rozkaz SETCOLOR używany jest do ustawiania wspólnej wartości luminancji w dolnej czwórce bitów rejestru koloru tła, natomiast bity w górnej czwórce ustawiane są na zero. Rozkaz ma następujący format:

SETCOLOR 4,0,wartość luminancji

gdzie 4 określa rejestr koloru tła, 0 ustawia górną czwórkę bitów tego rejestru na zero, a "wartość luminancji" ustawia wspólną wartość luminancji, która może być z zakresu od 0 do 15. Jak z innymi trybami graficznymi (z wyjątkiem trybu 9), najmłodszy bit luminancji nie jest używany, co w wyniku powoduje, iż tylko parzyste liczby dają różną luminancję i dostajemy w tym trybie osiem stopni luminancji. Rozkaz COLOR jest tu używany do wyboru różnych barw za pomocą wartości od 0 do 15 w jego parametrze. Dane pikselowe z układu ANTIC są poddawane operacji logicznej LUB z górną czwórką bitów rejestru koloru tła w celu ustawienia barwy wynikowej piksela na ekranie. Zatem program w języku BASIC wykorzystujący tryb 11 będzie zawierał co najmniej poniższe polecenia:

GRAPHICS 11      Do określenia trybu 11 
SETCOLOR 4,0,12  Do zainicjowania rejestru koloru
                 tła na jakąś luminancję,
                 w tym przypadku bardzo jasną 
FOR I=0 TO 15    Pewna metoda, w której
COLOR I          używany jest rozkaz COLOR
PLOT 4,I+10      do zmiany barwy
NEXT I


Wynik pracy programu

W języku asemblera używaj kopię rejestru koloru tła w pamięci RAM pod adresem $2C8 do ustawiania luminancji w czterech dolnych bitach za pomocą wartości od $0 do $F. Jeśli używane są wywołania CIO, umieszczaj dane pikselowe w rejestrze ATACHR [$2FB]. Będą one wybierały barwę o wartości od $0 do $F. Jeśli utrzymujesz swoją własną listę wyświetlania, to dane pikselowe idą bezpośrednio do lewej lub prawej połówki bajtu z pamięci ekranu w RAM.

Rys.E-3 Rejestr koloru tła poddany operacji logicznej LUB w celu otrzymania ostatecznego koloru.

Tryb 10 pozwoli używać wszystkich dziewięciu rejestrów koloru jednocześnie na polu gry. Każdy z tych rejestrów musi zostać ustawiony na jakąś kombinację barwy i luminancji. Dane pikselowe z układu ANTIC są używane w tym trybie do wyboru jednego z rejestrów koloru do wyświetlenia. W języku BASIC rozkaz SETCOLOR może być użyty zgodnie z instrukcją BASIC Reference Manual do ustawienia kolorów tła oraz czterech rejestrów kolorów pól gry. Można je również ustawić instrukcją POKE zapisującą komórki pod adresami 708-712, gdzie znajdują się kopie w RAM tych rejestrów koloru. Instrukcja POKE musi zostać użyta do ustawienia rejestrów koloru graczy/pocisków pod adresami 704-707. Rozkaz COLOR jest używany do wyboru pożądanego rejestru koloru. Znaczące wartości jego parametru zawierają się w przedziale od 0 do 8. Z tym trybem powstaje pewien problem. ANTIC dostarcza czterech bitów danych na piksel, jak robi to w trybach 9 i 11. Pozwala to wybrać 16 rejestrów koloru. Jednakże komputer posiada tylko dziewięć z nich. Nieprawidłowe wartości danych pomiędzy 9 a 15 wybierają jeden z niższych rejestrów koloru. Program w języku BASIC używający trybu 10 będzie zawierał:

  1. Rozkaz GRAPHICS 10 do określenia trybu 10.
  2. Ciąg rozkazów POKE do wstawienia wartości barw i luminancji do rejestrów koloru lub kombinację rozkazów SETCOLOR z rozkazami POKE w celu wykonania tego zadania.
  3. Rozkaz COLOR do wyboru pożądanego rejestru koloru.

W języku asemblera umieszczaj dane pikselowe w ATACHR [$2FB] lub bezpośrednio w bajcie pamięci RAM ekranu jak w trybach 9 i 11. W tym trybie dane pikselowe mogą przyjmować wartości z zakresu od 0 do 8 i wybierają jeden z dziewięciu rejestrów koloru.

Argument rozkazu
COLOR
Używany
rejestr koloru
Adres kopii
w RAM
0
1
2
3
4
5
6
7
8
$D012
$D013
$D014
$D015
$D016
$D017
$D018
$D019
$D01A
$2C0
$2C1
$2C2
$2C3
$2C4
$2C5
$2C6
$2C7
$2C8

Rys.E-4 Numery rejestrów kolorów oraz ich adresy dla argumentów rozkazu COLOR.

Pojawia się ważna kwestia związana z układem GTIA dotycząca kompatybilności. Układ GTIA jest w pełni wstecznie kompatybilny z układem CTIA i każdy program działający w systemie z CTIA będzie działać w identyczny sposób w systemie z GTIA. Oznacza to, iż wciąż możesz w pełni korzystać z graczy i pocisków, wciąż masz wykrywanie kolizji i pokrywania się obiektów oraz wciąż masz przerwania z listy wyświetlania. Tryby graficzne GTIA są całkowicie wspierane przez system operacyjny i wszystkie rozkazy graficzne, a programy narzędziowe pracujące w trybach CTIA mogą być używane w trybach GTIA.

Jest naraz dostępne więcej kolorów do wyświetlenia na ekranie. W jednej linii może pojawić się szesnaście zmian koloru zupełnie niezależnie od interwencji procesora. Jest to właściwie lepsze od efektów osiąganych za pomocą przerwań listy wyświetlania, które oferują co najwyżej 12 zmian kolorów na linię. Używając cieniowania dostępnego w trybie 9 można uzyskać bardziej wyraziste kontury i większą głębię barw. Oznacza to możliwość realistycznego wyświetlania grafiki trójwymiarowej.

Z drugiej strony istnieją pewne wady. Tryby GTIA są trybami mapowanymi, tekst nie może być w nich wyświetlany. Przełączenie na tryb obsługujący wyświetlanie znaków musi być dokonywane przy pomocy własnej listy wyświetlania. Piksel GTIA jest długim, rozciągniętym poziomo prostokątem (stosunek szerokości do wysokości wynosi 4:1) i nienajlepiej przedstawia linie zakrzywione. Ponieważ każdy piksel używa czterech bitów informacji, GTIA wymaga prawie 8KB pamięci RAM do pracy. Chociaż jest kompatybilny wstecznie z układem CTIA, to jednak brak kompatybilności w drugą stronę. Stąd programy używające trybów GTIA nie dadzą poprawnie wyglądających ekranów na komputerach wyposażonych w układy CTIA. Być może będą one mniej więcej czytelne, lecz nie będzie na nich tylu kolorów. Obecnie nie ma żadnego sposobu, aby program mógł rozpoznać obecność układu GTIA w systemie. Na koniec artefakty koloru wytwarzane przez system z GTIA nie są identyczne z artefaktami tworzonymi na tym samym telewizorze przez system z CTIA.


Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2024 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.