![]() |
|
Start | Super Packer | Atari Graphics Studio | Graph2Font | Mads | MadPascal | YouTube | http://madteam.atari8.info |
Voy/SSG^Dial
Sercem Atari 7800 jest układ graficzny o nazwie MARIA. Obsługuje on całą grafikę i wyświetlanie obrazu, korzystając między innymi z sygnałów VSYNC i VBLANK. GRAFIKA
MARIA nie stosuje w swym działaniu
koncepcji graczy, pocisków i pola gry,
jak to ma miejsce w 2600 i 5200. Rozwiązaniem stosowanym przez nią jest
technika zbliżona do obecnej w nieco
starszych automatach. Każdy wyświetlany raster jest jak gdyby bitmapą; mapa
ta przechowywana jest w jednym z obszarów układu MARIA, zwanym RAM liniową (Line RAM). Zatem nim coś zostanie
wyświetlone, trafia najpierw do owego
obszaru i dopiero później jest odczytywane i przekazywane na ekran.
WYŚWIETLANIE
Istnieją w sumie 262 rastry na ramkę
(1/60 sekundy -> w systemie NTSC).
"Widzialny" ekran (podczas którego MARIA próbuje coś wyświetlić) zaczyna
się na 16 rastrze i kończy się na 258.
Obszar widzialny na wszystkich telewizorach zaczyna się na 41 rastrze
i kończy się na 232, 192 linie później. Rastry wyświetlane poza tym obszarem nie będą widziane na większości
odbiorników TV.
Display ListDMA dotyczy głównie odczytu Display Listy. DL to lista instrukcji wskazujących, gdzie odnaleźć dane grafiki, w jakie miejsce na ekranie należy je przenieść i inne szczegółowe dane pomocne w konstruowanie wyświetlanej linii. Display List tworzy wiele tzw. "nagłówków". Większość z nich stanowi ciąg złożony z czterech bajtów (wyjątki zostaną omówione później). Jeśli drugi bajt równy jest zeru, wskazuje koniec Display Listy, a DMA zostaje zatrzymany, pozwalając tym samym 6502 na kontynuowanie pracy. Format nagłówka jest następujący: ________________________________ | | | | | | | | | | A7| A6| A5| A4| A3| A2| A1| A0| |___|___|___|___|___|___|___|___| | | | | | | | | | | P2| P1| P0| W4| W3| W2| W1| W0| |___|___|___|___|___|___|___|___| | | | | | | | | | |A15|A14|A13|A12|A11|A10| A9| A8| |___|___|___|___|___|___|___|___| | | | | | | | | | | H7| H6| H5| H4| H3| H2| H1| H0| |___|___|___|___|___|___|___|___| lub _______________________________ | | | N I Ż S Z Y A D R E S | |___|___|___|___|___|___|___|___| | | | | P A L E T A | SZEROKOŚĆ | |___|___|___|___|___|___|___|___| | | | W Y Ż S Z Y A D R E S | |___|___|___|___|___|___|___|___| | | | P O Z Y C J A P O Z I O M A | |___|___|___|___|___|___|___|___| gdzie: ADRES (A15-A0) - adres danych grafiki PALETA (P2-P0) - dotyczy numeru palety kolorów 0-7 SZEROKOŚĆ (W4-W0) - uzupełnienie szerokości. Zawiera liczbę bajtów danych grafiki do pobrania: wartości 1 do 31 POZYCJA POZIOMA (H7-H0) - pozycja X na ekranie, gdzie będzie umieszczana lewa krawędź grafiki. 0-159 => Widzialna 160-255 => Niewidzialna. Zawijanie ekranu występuje na granicy 255/0.
Każdy nagłówek dotyczy jednego elementu graficznego, który posiadać może
dowolną szerokość. Jeśli na linii powinno się pojawić dziesięć obiektów,
Display List dla tej jednej linii rysowanej przez strumień elektronów powinno mieć długość dziesięciu (10)
nagłówków, poprzedzonych przez dwa (2)
bajty, z których pierwszy jest ignorowany, a drugi winien wynosić 0, by zakończyć DMA.
Lista Display List
MARIA ma dostęp do konkretnej Display
Listy poprzez wcześniejsze odczytanie
tzw. Display List List :) (czyli Lista
Display List; umówmy się, że będziemy
używać skrótu DLL, oki ^.^?) Lista ta
jest serią 3-bajtowych wpisów. Każdy
z tych wpisów wskazuje na daną Display
Listę; w każdym z nich jest wartość
zwana OFFSET, wskazująca na liczbę
rastrów, których powinna używać dana
Display List. OFFSET zmniejszana jest
na końcu każdego rastra aż do osiągnięcia wartości ujemnej, informującej,
że teraz powinny być odczytywane
i używane wpisy następnej DLL. Za każdym razem, gdy pobierane są dane graficzne, wartość OFFSET dodawana jest
do starszego bajtu adresu (w tabelce
powyżej określonego jako starszy adres), określającego aktualny adres,
pod jakim można znaleźć interesujące
nas dane. Umożliwia to jednej Display
Liście na określenie wiele rastrów
grafiki. Bez OFFSETu by "dobrać się"
;) do danych grafiki, trzeba by było
dla każdego rastra tworzyć oddzielną
Display List, a DLL dla każdej Display
Listy. Nie tyle, że zużywałoby to masę
pamięci, ale również i czasu, który
zabrałaby każda manipulacja tymi Display Listami podczas przemieszczania
obiektów. Przez to, że wartość OFFSET
dodawana jest do STARSZEGO bajtu adresu, każdy z rastrów grafiki dla danego
obiektu musi być oddzielony przez $100
(256) bajtów lub jedną stronę.
_______________________________ | | | | | | |DLI|H16| H8| 0 | O F F S E T | |___|___|___|___|___|___|___|___| | | | S T A R S Z Y B A J T D L | |___|___|___|___|___|___|___|___| | | | M Ł O D S Z Y B A J T D L | |___|___|___|___|___|___|___|___| gdzie: DLI - Znacznik przerwania DLI: 0 => brak DLI 1 => przerwanie po DMA na ostatniej linii poprzed- nieh strefy H16 - 16 wyższych stref, gdzie dziu- rawe DMA może być włączone: 0 => nie włączone 1 => włączone; DMA interpretuje nieparzyste 4kB bloki jako zera (A12 wysokie => dane=0) H8 - 8 wyższych stref, gdzie dziu- rawe DMA może być włączone: 0 => nie włączone 1 => włączone; DMA interpretuje nieparzyste 2kB bloki jako zera (A11 wysokie => dane=0) OFFSET - początkowa wartość OFFSET, tylko 4 bity ADRES DL - adres Display Listy dla tej strefy DLL może przekroczyć tylko jedną granicę łączącą dwie strony pamięci, więc jej maksymalna długość wynosić może maksymalnie 512 bajtów. Dodatkowo DLL muszą być w pamięci RAM, a to z powodu wymaganego czasu dostępu. Tryby DMADo określania danych graficznych służą dwa tryby. Pierwszy, zwany trybem bezpośrednim, został już wyjaśniony, gdzie nagłówek (w Display Liście) wskazuje bezpośrednio na dane grafiki. Drugi z trybów zwany jest trybem pośrednim lub znakowym i różni się nieco od porzednika tym, że nagłówek wskazuje tu na mapę znaków. Tryb pośredni zostaje wybrany przez każdy z nagłówków, który tego wymaga, poprzez poszerzony (5 bajtów) nagłówek. Format tego nagłówka jest następujący: _______________________________ | | | | | | | | | | A7| A6| A5| A4| A3| A2| A1| A0| |___|___|___|___|___|___|___|___| | | | | | | | | | | WM| 1|IND| 0 | 0 | 0 | 0 | 0 | |___|___|___|___|___|___|___|___| | | | | | | | | | |A15|A14|A13|A12|A11|A10| A9| A8| |___|___|___|___|___|___|___|___| | | | | | | | | | | P2| P1| P0| W4| W3| W2| W1| W0| |___|___|___|___|___|___|___|___| | | | | | | | | | | H7| H6| H5| H4| H3| H2| H1| H0| |___|___|___|___|___|___|___|___| lub _______________________________ | | | M Ł O D S Z Y B A J T | |___|___|___|___|___|___|___|___| | | | B A J T T R Y B U | |___|___|___|___|___|___|___|___| | | | S T A R S Z Y B A J T | |___|___|___|___|___|___|___|___| | | | | P A L E T A | SZEROKOŚĆ | |___|___|___|___|___|___|___|___| | | | P O Z Y C J A P O Z I O M A | |___|___|___|___|___|___|___|___| gdzie: MŁODSZY, STARSZY BAJT - adres danych (A15-A0) graficznych BAJT TRYBU - bit trybu zapisu. 0 => 160x2 lub 320x1 1 => 160x4 lub 320x2 IND - 0 => tryb bezpośredni - 1 => tryb pośredni PALETA (P2-P0) - dotyczy numeru palety kolorów 0-7 SZEROKOŚĆ (W4-W0) - uzupełnienie szerokości. Zawiera liczbę bajtów danych grafiki do pobrania: wartości 1 do 32 POZYCJA POZIOMA (H7-H0) - pozycja X na ekranie, gdzie będzie umieszczana lewa krawędź grafiki. 0-159 => Widzialna 160-255 => Niewidzialna. Zawijanie ekranu występuje na granicy 255/0.
Należy wspomnieć o jednej ważnej rzeczy, wynikłej z poszerzenia nagłówka.
Z powodu tego, że koniec DMA wskazywany jest przez obecność zera w drugim
bajcie nagłówka i w 5-bajtowym nagłówku bajt szerokości nie jest drugi,
lecz czwarty, szerokość wynosząca 0
w tak poszerzonym nagłówku jest poprawna i będzie interpretowana jako
32.
Tryby graficzne
Normalnym trybem graficznym jest tryb
160, gdzie ekran podzielony jest poziomo na 160 pikseli. Zwykle grafika
tworzona jest w trybie 160x2, gdzie są
dwa bity koloru opisujące każdy piksel
i te dwa bity odnoszą się do jednej
z ośmiu palet. Jeden może też opisywać
grafikę w trybie 160x4, gdzie są cztery bity koloru na piksel. W trybie tym
każdy bajt danych graficznych określa
tylko dwa (2) piksele grafiki. Jeśli
preferowana jest wyższa rozdzielczość,
to dobrym rozwiązaniem jest tryb
320x1, gdzie ekran dzielony jest poziomo na 320 pikseli i każdy piksel
posiada jeden bit koloru. Dostępny
jest również tryb 320x2, posiadający
największą ilość kolorów - w nim na
każdy piksel przypada dwa bity koloru.
REJESTRYAdresy rejestrów MARII kontrolujących wyświetlanie zostały omówione w po- przednim numerze "Seriousa" w artykule pod nazwą "Mapa pamięci Atari 7800". PaletyRejestry palet używane są do określenia kolorów dla grafiki. W sumie jest ich osiem (8), każda zawiera trzy kolory. Kolory jako takie występują w następującej formie: _______________________________ | | | | | | | | | | C3| C2| C1| C0| L3| L2| L1| L0| |___|___|___|___|___|___|___|___| gdzie C3-C0 to kolor, a L3-L0 jego jasność - w sumie 256 różnych odcieni. Rejestry palet mają następujące nazwy: P0C1, P0C2, P0C3, P1C1, P1C2, P1C3, P2C1, P2C2, P2C3, aż do P7C1, P7C2, P7C3. Piksel, którego dwa bity koloru wynoszą "10" i który dotyczy palety nr 3, będzie wypełniany kolorem bazującym na wartości P3C2. Kolor zerowy każdej z palet jest przeźroczysty. Dodatkowo istnieje rejestr zwany BACKGRND, używany do określania koloru tła. Wszystkie palety i BACKGRND są typu ODCZYT/ZAPIS, lecz muszą być one odczytywane przy użyciu adresowania abolutnego indeksowego 6502. OFFSET
Rejestr OFFSET jest 4-bitową wartością
dodawaną automatycznie do starszego
bajtu adresu przy każdym pobraniu danych graficznych, zarówno w trybie
bezpośrednim, jak i pośrednim. Rejestr
ten jest wewnętrznym rejestrem MARII
i ustawiany przez każdy wpis DLL.
CHARBASERejestr CHARBASE służy określaniu starszego bajtu adresu dla każdego pobierania danych graficznych w trybie znakowym (pośrednim). Jak pamiętasz, mapa znaków (wskazująca na nagłówek w Display Liście) określa młodszy bajt adresu danych graficznych. Każdy z tych młodszych bajtów złożony jest z sumy CHARBASE i OFFSET, by móc poprzez pełny 16-bitowy adres pokazać, gdzie można znaleźć dane graficzne. Rejestr CHARBASE jest TYLKO DO ZAPISU. DPPHDPPH oznacza Display list Pointer Pointer High (starszy bajt wskaźnika Display Listy) i zawiera starszy bajt adresu DLL. Rejestr ten jest TYLKO DO ZAPISU. DLL może przekroczyć tylko jedną granicę łączącą dwie strony pamięci, w którym to wypadku DPPH jest wewnętrznie zwiększany, następnie resetowany na końcu widzialnego ekranu; w ten sposób staje się poprawny dla następnej ramki. Rejestr ten (oraz DPPL) powinien być zapisywany przed włączeniem DMA. Gdy DMA jest już włączone, DPPH i DPPL mogą być zapisywane w każdym czasie, jako że odczytywane są one tylko na początku ekranu. DPPLRejestr też używany jest do określania młodszego bajtu adresu DLL. Jest TYLKO DO ZAPISU. MSTATMSTAT jest rejestrem przeznaczonym TYLKO DO ODCZYTU, komunikującym się ze statusem wygaszania pionowego poprzez bit 7 (MSB). Gdy bit ten zostaje ustawiony, VBLANK jest włączane. Gdy VBLANK zostanie wyłączone, DMA rozpocznie się zgodnie z wytycznymi twojej Display Listy. Tranzycja ta występuje przy szesnastym (16) rastrze ramki. CTRL
Rejestr CTRL jest rejestrem TYLKO DO
ZAPISU używanym do kontroli wielu trybów MARII. Poprzez rejestr ten kontrolować można, czy kolor tła poszerzy
krawędź ekranu TV (poziomo) poza obszar, na którym może być umiejscawiana
grafika, czy też kolor tła zatrzymuje
się na poziomych krańcach grafiki
i granica ta widoczna jako czarny obszar. Ten obszar graniczny jest obszarem, który widoczny jest niezależnie
od różnych odbiorników telewizyjnych.
TRYB WM RM1 RM0 160A 0 0 0 160B 1 0 0 320A 0 1 1 320B 1 1 0 320C 1 1 1 320D 0 1 0 gdzie: - WM - tryb zapisu - RM1,RM0 - tryb odczytu 1 i 0.
Tryb 320A to prawdziwy tryb 320x1.
Piksele, które są "włączone" odnoszą
się do koloru drugiego (2) określonej
palety. Piksele, które są "wyłączone",
są przezroczyste (lub przybierają kolor tła, jeśli włączony jest tryb
"Kangaroo"). W trybie 320B, będącym
trybem wyświetlania 320x2, odczytywany
jest tylko bardziej znaczący bit palety. Oznacza to, że używane są obie palety: zerowa (0) i czwarta (4). Jeśli
tryb "Kangaroo" jest wyłączony, przezroczystość dla trybów będzie działać
nieco odmiennie. Weź pod uwagę, że para pikseli 320 stanowi jeden 160, więc
jeśli wyłączone są oba piksele z pary,
nie będą przezroczyste, lecz przyjmą
zamiast tego kolor tła. Jeśli oba piksele są wyłączone, będą przezroczyste.
Z włączonym trybem "Kangaroo" działają
tak, jak powinny działać w tym trybie.
Innym czynnikiem dotyczącym trybów 320
jest to, że pozycjonowanie poziome
wciąż działa tak jak w trybie 160.
Oznacza to, że w trybach 320 obiekty
mogą być pozycjonowane tylko co 2 piksele.
_______________________________ | | | | | | | | | | CK|DM1|DM0| CW| BC| KM|RM1|RM0| |___|___|___|___|___|___|___|___| gdzie: CK - wyłączanie kolorów (Color Kill) 0 => normalny kolor 1 => brak rozdzielania koloru DM1, DM2 - kontrola DMA 0 => Test A (NIE UŻYWAJ) 1 => Test B (NIE UŻYWAJ) 2 => normalne DMA 3 => brak DMA CW - szerokość znaku (Character Width) 0 => znaki 2-bajtowe 1 => znaki 1-bajtowe BC - kontrola ramki (Border Control) 0 => ramka o kolorze tła 1 => czarna ramka KM - przełącznik trybu "Kangaroo" 0 => przezroczystość 1 => tryb "Kangaroo": bez prze- zroczystości RM1, RM0 - Tryb Odczytu 0 => 160x2 lub 160x4 1 => nie używany 2 => 320B lub 320D 3 => 320A lub 320C
(UWAGA: TEST A (DM=0) i TEST B (DM=1)
NIE POWINNY być używane! Zostały wprowadzone na etapie projektowania i testów i mogą spowodować nieodwracalne
szkody, jak i również USZKODZIĆ MARIĘ!)
160x2 76 54 32 10 bity ___ ___ ___ ___ | | | | | | | | |___| |___| |___| |___| | | | | | | | | | p i | k s | e l e | | | | | | | | | / \ / \ / \ / \ _______________________________ | | | | | | | | | |___|___|___|___|___|___|___|___| b a j t g r a f i k i W trybie 160x4 dane odczytywane są w następujący sposób: kolor lewego piksela określany jest przez bity 3, 2, 7, 6 (gdzie 3 to MSB, 6 to LSB). Prawy piksel określany jest przez bity 1, 0, 5, 4 (gdzie 1 to MSB, 4 to LSB). 160x4 3276 bity 1054 ___ ___ | | piksele | | |___| |___| | | +---------------+ | | | | | +---------------+ | | | | / \ / \ / \ / \ _______________________________ | | | | | | | | | |___|___|___|___|___|___|___|___| b a j t g r a f i k i Tryb 320A to mapowanie bezpośrednie takie jak w 160x2, poza tym, że każdy z bitów określa kolor jednego piksela. 320A(x1) bity 7 6 5 4 3 2 1 0 piksele _______________________________ | | | | | | | | | |___|___|___|___|___|___|___|___| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | _______________________________ | | | | | | | | | |___|___|___|___|___|___|___|___| b a j t g r a f i k i Tryb 320B działa następująco: 320B(x2) bity 73 62 51 40 piksele ___ ___ ___ ___ | | | | | | | | |___| |___| |___| |___| |\ / \ / \ /| | \ / \ / \ / | | \ / \ / \ / | | \ / \ \ / | | / / \ \ | | | \ / \ / | | | | \ / \ / | | | | \ / \ / | | | | / \ | | | | | \ / | | | | | | \ / | | | | | | \ / | | | | | | \ / | | | | | | / | | | | | | / \ | | | _______________________________ | | | | | | | | | |___|___|___|___|___|___|___|___| b a j t g r a f i k i Tryb 320C oferuje więcej kolorów niż 320A, lecz nie może być po prostu nazywany 320x2. W tym trybie niektóre z danych graficznych odnoszą się do trochę niestandardowych palet. Jeśli piksel jest ustawiony, przybiera kolor drugi (2) i - jeśli jest skasowany - jest przezroczysty lub ma kolor tła (tak jak w 320A i 320B). Paleta ustalana jest przez kombinowanie bardziej znaczącej palety. Paleta dla skrajnego lewego piksela jest określana przez P2, D3 i D2 (gdzie P oznacza bit palety, a D bit danych graficznych), a grafika określana jest przez D7. Piksel zaraz po prawej używa tej samej palety, określanej przez P2, D1 i D0 i dla danych używa D5. Skrajny prawy piksel używa tej samej palety, lecz D4 dla danych. Mapowanie dla trybu 320C jest następujące: 320C bity palety [P2][D3][D2] \__________/ | [P2][D1][D0] D7 D6 D5 D4 | \__________/ bity koloru | / | / piksele | / _ _ _ _ | / | | | | | | | | | / |_| |_| |_| |_| | / | | | | | | | | | | | | | | | | / \ / \ _____________________________ | | | | | | | | | |__|___|___|___|___|___|___|__| b a j t g r a f i k i
(tu mała uwaga: bity palety, tzn. ich
rozpiska, miały być obok siebie, ale
niestety, trza ;) było upchać schemat
na 38 kolumnach :-( - przyp. Voy)
320D bity palety P2 P2 P2 P2 P2 P2 P2 P2 bity koloru DP DP DP DP DP DP DP DP 71 60 51 40 31 20 11 00 piksele _______________________________ | | | | | | | | | |___|___|___|___|___|___|___|___| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | _______________________________ | | | | | | | | | |___|___|___|___|___|___|___|___| b a j t g r a f i k i To wszystko! Jeśli spodobała się Wam seria o Atari 7800 ProSystem i chcielibyście się dowiedzieć czegoś więcej, to nie krępujcie się i piszcie. Odpowiem na każdy list i na każdego maila... Voy/SSG^Dial |