MARIA
From Atariki
Wersja z dnia 14:29, 31 sie 2005 KMK (Dyskusja | wkład) ← Previous diff |
Aktualna wersja KMK (Dyskusja | wkład) (→Numery katalogowe) |
||
Linia 1: | Linia 1: | ||
- | cyt. [[Serious]] #8 | + | {{SDP}} |
- | Specjalnie opracowany na potrzeby konsoli ([[7800]]) układ MARIA (oznaczenie GCC1702), | + | Układ graficzny o nazwie MARIA jest sercem Atari [[7800]]. Obsługuje on całą grafikę i wyświetlanie obrazu, korzystając między innymi z sygnałów VSYNC i VBLANK. |
+ | |||
+ | == Numery katalogowe == | ||
+ | |||
+ | * MARIA-B NTSC: '''C024674''' | ||
+ | * MARIA-C NTSC?: '''C025349''' | ||
+ | * MARIA PAL: '''C025718''' | ||
+ | |||
+ | == Charakterystyka == | ||
+ | |||
+ | Specjalnie opracowany na potrzeby konsoli układ MARIA (oznaczenie GCC1702) jest | ||
taktowany wewnętrznym zegarem 7.16 MHz (!), nie zmieniającym swej częstotliwości w | taktowany wewnętrznym zegarem 7.16 MHz (!), nie zmieniającym swej częstotliwości w | ||
zależności od częstotliwości głównego procesora. Jest sercem konsoli i obsługuje całą grafikę | zależności od częstotliwości głównego procesora. Jest sercem konsoli i obsługuje całą grafikę | ||
Linia 8: | Linia 18: | ||
pospołu z [[TIA]]. | pospołu z [[TIA]]. | ||
- | {{stub}} | + | == Grafika == |
+ | |||
+ | MARIA nie stosuje w swym działaniu koncepcji [[Player/Missile Graphics|graczy, pocisków i pola gry]], jak to ma miejsce w [[2600]] i [[5200]] oraz komputerach [[400/800]] i [[XL]]/[[XE]]. 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. | ||
+ | |||
+ | Załóżmy, że zajmiemy się teraz pojedynczym rastrem i zechcemy skomponować przy jego użyciu obraz na ekranie. Przenosimy jego dane do Line RAM, wskazując jakie dane powinny zostać umieszczone na konkretnej pozycji poziomej. Grafika jako taka ma być przekazywana w małych kawałkach nachodzących na siebie. Kolejność fragmentów rastra określa priorytet obiektu umieszczonego na samej górze. | ||
+ | |||
+ | Gdy dane grafiki zostaną przekazane do Line RAM, określić trzeba, jakie jej fragmenty będą odnosić do którejś z ośmiu (8) palet. Każdy piksel może przyjąć jeden z trzech (3) kolorów danej palety lub być przezroczysty (wyłączony). Line RAM zawiera informację tylko o jednym rastrze; ma dwa bufory - gdy zawartość jednego jest przekazywana do wyświetlania, drugi przyjmuje dane kolejnego rastra. Oznacza to, że konstruowanie grafiki rastra trwa relatywnie długo, a sama grafika widoczna na ekranie jest przechowywana w Line RAM raster po rastrze. | ||
+ | |||
+ | Jedynym ograniczeniem co do liczby i rozmiaru obiektów wyświetlanych przez strumień elektronów w jednostce czasu (chodzi tu o pojęcie "scan line", co w języku angielskim oznacza wykreślenie przez w/w strumień na ekranie jednej linii) jest ilość czasu, jaki zajmie załadowanie każdego do Line RAM, przy założeniu, że każde ze wczytań odbędzie się podczas rysowania jednej linii. | ||
+ | |||
+ | == 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. | ||
+ | |||
+ | Wyświetlanie jest automatycznie podejmowane przez układ MARIA i realizowane w dwóch etapach: konstruowanie Line RAM i wyświetlanie grafiki. Konstruowanie Line RAM jest automatycznie inicjowane każdym rastrem przez MARIĘ i jako proces kierowane jest przez wcześniej określoną listę instrukcji zwaną [[MARIA Display List|Display List]]. Jako takie istnieje dzięki procesowi zwanemu DMA (Direct Memory Access - bezpośredni dostęp do pamięci). Oznacza to, że działanie 6502 zawieszane jest na czas, gdy MARIA bada, czy w pamięci RAM i ROM znajduje się Display List i informacja o grafice. DMA wystąpi podczas każdej "widzialnej" rysowanej przez strumień elektronów linii i potrwa nie dłużej niż potrzeba czasu na jej narysowanie. Skonstruowana Line RAM wyświetlana jest na każdej następującej po sobie linii i MARIA odczyta każdą Display Listę jedną linię przed aktualnie wyświetlaną. Cała Line RAM czyszczona jest linia po linii, a kolor BACKGRND będzie wyświetlany w przypadku braku zapisania danych. | ||
+ | |||
+ | == Rejestry == | ||
+ | |||
+ | {| border="1" | ||
+ | ! Adres | ||
+ | (Atari 7800) | ||
+ | ! Dostęp | ||
+ | ! Nazwa | ||
+ | ! Opis | ||
+ | |- | ||
+ | | $20 | ||
+ | | R/W | ||
+ | | BACKGRND | ||
+ | | BACKGRouND color | ||
+ | |- | ||
+ | | $21 | ||
+ | | R/W | ||
+ | | P0C1 | ||
+ | | Palette 0, Color 1 | ||
+ | |- | ||
+ | | $22 | ||
+ | | R/W | ||
+ | | P0C2 | ||
+ | | Palette 0, Color 2 | ||
+ | |- | ||
+ | | $23 | ||
+ | | R/W | ||
+ | | P0C3 | ||
+ | | Palette 0, Color 3 | ||
+ | |- | ||
+ | | $24 | ||
+ | | STROBE | ||
+ | | WSYNC | ||
+ | | Wait for SYNC | ||
+ | |- | ||
+ | | $25 | ||
+ | | R/W | ||
+ | | P1C1 | ||
+ | | Palette 1, Color 1 | ||
+ | |- | ||
+ | | $26 | ||
+ | | R/W | ||
+ | | P1C2 | ||
+ | | Palette 1, Color 2 | ||
+ | |- | ||
+ | | $27 | ||
+ | | R/W | ||
+ | | P1C3 | ||
+ | | Palette 1, Color 3 | ||
+ | |- | ||
+ | | $28 | ||
+ | | R | ||
+ | | MSTAT | ||
+ | | Maria STATus | ||
+ | |- | ||
+ | | $29 | ||
+ | | R/W | ||
+ | | P2C1 | ||
+ | | Palette 2, Color 1 | ||
+ | |- | ||
+ | | $2A | ||
+ | | R/W | ||
+ | | P2C2 | ||
+ | | Palette 2, Color 2 | ||
+ | |- | ||
+ | | $2B | ||
+ | | R/W | ||
+ | | P2C3 | ||
+ | | Palette 2, Color 3 | ||
+ | |- | ||
+ | | $2C | ||
+ | | W | ||
+ | | DPPH | ||
+ | | DisPlay list list Point High | ||
+ | |- | ||
+ | | $2D | ||
+ | | R/W | ||
+ | | P3C1 | ||
+ | | Palette 3, Color 1 | ||
+ | |- | ||
+ | | $2E | ||
+ | | R/W | ||
+ | | P3C2 | ||
+ | | Palette 3, Color 2 | ||
+ | |- | ||
+ | | $2F | ||
+ | | R/W | ||
+ | | P3C3 | ||
+ | | Palette 3, Color 3 | ||
+ | |- | ||
+ | | $30 | ||
+ | | W | ||
+ | | DPPL | ||
+ | | DisPlay list list Point Low | ||
+ | |- | ||
+ | | $31 | ||
+ | | R/W | ||
+ | | P4C1 | ||
+ | | Palette 4, Color 1 | ||
+ | |- | ||
+ | | $32 | ||
+ | | R/W | ||
+ | | P4C2 | ||
+ | | Palette 4, Color 2 | ||
+ | |- | ||
+ | | $33 | ||
+ | | R/W | ||
+ | | P4C3 | ||
+ | | Palette 4, Color 3 | ||
+ | |- | ||
+ | | $34 | ||
+ | | W | ||
+ | | CHARBASE | ||
+ | | CHARacter BASE address | ||
+ | |- | ||
+ | | $35 | ||
+ | | R/W | ||
+ | | P5C1 | ||
+ | | Palette 5, Color 1 | ||
+ | |- | ||
+ | | $36 | ||
+ | | R/W | ||
+ | | P5C2 | ||
+ | | Palette 5, Color 2 | ||
+ | |- | ||
+ | | $37 | ||
+ | | R/W | ||
+ | | P5C3 | ||
+ | | Palette 5, Color 3 | ||
+ | |- | ||
+ | | $38 | ||
+ | | R/W | ||
+ | | OFFSET | ||
+ | | dla przyszłych rozszerzeń (normalnie jest tu 0) | ||
+ | |- | ||
+ | | $39 | ||
+ | | R/W | ||
+ | | P6C1 | ||
+ | | Palette 6, Color 1 | ||
+ | |- | ||
+ | | $3A | ||
+ | | R/W | ||
+ | | P6C2 | ||
+ | | Palette 6, Color 2 | ||
+ | |- | ||
+ | | $3B | ||
+ | | R/W | ||
+ | | P6C3 | ||
+ | | Palette 6, Color 3 | ||
+ | |- | ||
+ | | $3C | ||
+ | | W | ||
+ | | CTRL | ||
+ | | MARIA ConTRoL register | ||
+ | |- | ||
+ | | $3D | ||
+ | | R/W | ||
+ | | P7C1 | ||
+ | | Palette 7, Color 1 | ||
+ | |- | ||
+ | | $3E | ||
+ | | R/W | ||
+ | | P7C2 | ||
+ | | Palette 7, Color 2 | ||
+ | |- | ||
+ | | $3F | ||
+ | | R/W | ||
+ | | P7C3 | ||
+ | | Palette 7, Color 3 | ||
+ | |} | ||
+ | ''Źródło: [http://madteam.atari8.info/index.php?undef=a7800 Voy/SSG^Dial, "Atari 7800 ProSystem... rządzi!"]'' | ||
+ | |||
+ | === Palety === | ||
+ | |||
+ | Rejestry 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 układu MARIA i ustawiany przez każdy wpis DLL. | ||
+ | |||
+ | W poprzednim wcieleniu rejestr OFFSET zajmował pewien adres pamięci. Adres ten jest teraz wolny, lecz powinno się tu WPISYWAĆ ZERO PRZY WŁĄCZANIU ZASILANIA, BY UMOŻLIWIĆ PRZYSZŁE ROZSZERZENIA. | ||
+ | |||
+ | === CHARBASE === | ||
+ | |||
+ | Rejestr 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. | ||
+ | |||
+ | === DPPH === | ||
+ | |||
+ | DPPH 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. | ||
+ | |||
+ | === DPPL === | ||
+ | |||
+ | Rejestr też używany jest do określania młodszego bajtu adresu DLL. Jest TYLKO DO ZAPISU. | ||
+ | |||
+ | === MSTAT === | ||
+ | |||
+ | MSTAT 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. | ||
+ | |||
+ | CTRL określa również, czy znaki (w trybie znakowym) mają szerokość jednego lub dwóch bajtów. To znaczy, czy z adresu wskazywanego przez wpis mapy znaków i CHARBASE powinien być pobrany jeden czy dwa bajty. Przewagą znaków dwubajtowych jest to, że określają taką samą liczbę pikseli, jaką może określić dwa razy więcej wpisów mapy znaków. Wadą natomiast jest ingerencja w ekran podczas zmiany jednego znaku. | ||
+ | |||
+ | Rejestr ten kontroluje również tworzenie sygnału rozdzielania koloru (w oryginale "color burst signal"). Brak sygnału oznacza wyświetlanie grafiki co prawda czarno-białej, lecz bardziej przejrzystej, niż w przypadku użycia odcieni szarości (wartości od $00 do $0F). | ||
+ | |||
+ | Kolejny bit CTRL włącza tryb "Kangaro- o", usuwający przezroczystość, co oznacza, że każdy piksel o kolorze "0" raczej będzie kolorem tła, aniżeli przezroczystym. Nazwa pochodzi od gry automatowej "Kangaroo" firmy Atari. | ||
+ | |||
+ | Poprzez rejestr CTRL może być również włączane i wyłączane DMA. Po włączeniu zasilania DMA jest wyłączone i powinno być włączane przez kartridż. Dokonywane powinno być to dopiero po zachowaniu zawartości DPPL i DPPH (dlatego więc DMA nie próbuje odczytywać DLL z nieokreślonej pozycji). DMA powinno być włączane PODCZAS VBLANK i nigdy w czasie tworzenia ekranu (rastry 16-258). Jeśli DMA jest wyłączone, ekran będzie kontynuował wyświetlanie koloru tła. | ||
+ | |||
+ | I w końcu, CTRL określa, gdzie wybrana jest część TRYBU ODCZYTU trybu graficznego (pamiętaj, że część TRYBU ZAPISU określana jest poprzez poszerzony nagłówek). TRYB ZAPISU kontroluje sposób zapisu danych do Line RAM, a TRYB ODCZYTU sposób interpretacji Line RAM i przenoszenia na ekran. Ponieważ TRYB ODCZYTU wpływa na rozpoczęcie wyświetlania pojedynczej linii, ewentualne zmiany TRYBU ODCZYTU powinny mieć miejsce na początku linii, na którą wpływa. | ||
+ | |||
+ | TRYB ZAPISU pozwala na wybór pomiędzy trybami: a) 160x2 lub 320x1, oraz b) 160x4 lub 320x2. TRYB ODCZYTU pozwala na wybór: a)320A lub 320C, b) 320B lub 320D i c) 160A(x2) lub 160B(x4). Poniższa tabela zawiera więcej informacji: | ||
+ | |||
+ | 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. | ||
+ | |||
+ | Tryby wyświetlania 320C i 320D poszczególnie są nieco podobne do 320B i 320A. Są takie, jakie byś otrzymał, gdybyś zmienił TRYB ZAPISU bez zmieniania TRYBU ODCZYTU (tak jak zmiany trybów podczas rysowania linii ekranu). Jeśli jesteś w trybie 320A i chcesz na linii umieścić znak z większą liczbą kolorów, poprzez zmianę trybów otrzynasz tryb 320C. Podobnie, poprzez zmianę z 320B "w locie" otrzymasz tryb 320D. Sposób, w jaki w trybach 320C i 320D interpretowane są dane, będzie wyjaśniony później. | ||
+ | |||
+ | W trybie 160x4 też odczytywany jest tylko bardziej znaczący bit palety (zauważ, że trybach 160x4 i 320B w ten sam sposób działa TRYB ZAPISU). Z powodu większej liczby bitów koloru, niż jest w stanie obsłużyć każda dana paleta, w trybie 160x4 palety są kombinowane, więc możesz wybrać pomiędzy kombinacjami 0-3 i 4-7. Wynikiem tego w trybie 160x4 dostępnych jest dwanaście (12) kolorów, gdzie kolor pierwszy (1) to P0C1 lub P4C1, drugi (2) to P0C2 lub P4C2, piąty (5) to P1C1 lub P5C1, szósty (6) to P1C2 lub P5C2 itd., a kolory 0, 4, 8 i 12 są przezroczyste. Rejestr CTRL zorganizowany jest w sposób następujący: | ||
+ | |||
+ | _______________________________ | ||
+ | | | | | | | | | | | ||
+ | | 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Ę!) | ||
+ | |||
+ | W większości powyższych trybów kodowanie danych graficznych jest proste. W trybie 160x2 każda para bitów zorganizowana jest tak, że kolor skrajnego lewego piksela określany jest przez bardziej znaczącą parę bitów, a skrajny prawy piksel przez mniej znaczącą parę bitów. | ||
+ | |||
+ | 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) | ||
+ | |||
+ | Tryb 320D jest również nieco skomplikowany. Każdy piksel odnosi się do tej samej palety, lecz bity palety oddziałują na kolor pikseli. Tylko bit palety - użyty w jej definicji - jest bitem bardziej znaczącym (tak samo jak w 320B), więc MARIA będzie odwoływać się tylko do palet zero (0) i cztery (4). Na jeden piksel przypada więcej, niż jeden bit, zatem wybór koloru jest większy. Bity danych graficznych wykorzystane są następująco: każdy z nich jest bardziej znaczącym bitem dwubitowej pary; mniej znaczący bit tej pary jest albo P0 albo P1 (gdzie P to bit palety). Jeśli dana paleta to 0 lub 4 (gdzie P1 i P0 to zero), to jest to normalny tryb 320x1, tak jak 320A. Lecz jeśli dana paleta to 5, będzie użyta paleta 4 i pewne piksele przyjmą albo kolor 1 albo 3, a inne 0 lub 2. Jako przykład więcej konkretów: | ||
+ | |||
+ | 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 | ||
+ | |||
+ | == Zobacz też == | ||
+ | * [http://atariarea.krap.pl/artykuly.php?akcja=pokaz_artykul&id=51] | ||
+ | |||
[[Kategoria:Atari - Konsole]] | [[Kategoria:Atari - Konsole]] |
Aktualna wersja
Układ graficzny o nazwie MARIA jest sercem Atari 7800. Obsługuje on całą grafikę i wyświetlanie obrazu, korzystając między innymi z sygnałów VSYNC i VBLANK.
Spis treści |
Numery katalogowe
- MARIA-B NTSC: C024674
- MARIA-C NTSC?: C025349
- MARIA PAL: C025718
Charakterystyka
Specjalnie opracowany na potrzeby konsoli układ MARIA (oznaczenie GCC1702) jest taktowany wewnętrznym zegarem 7.16 MHz (!), nie zmieniającym swej częstotliwości w zależności od częstotliwości głównego procesora. Jest sercem konsoli i obsługuje całą grafikę oraz jej wyświetlanie włączając obsługę sygnałów VSYNC i VBLANK. Jego rejestry znajdują się w obszarze $0020-$003F oraz w cieniu strony zerowej (adresy $0100-$013F), z której korzysta pospołu z TIA.
Grafika
MARIA nie stosuje w swym działaniu koncepcji graczy, pocisków i pola gry, jak to ma miejsce w 2600 i 5200 oraz komputerach 400/800 i XL/XE. 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.
Załóżmy, że zajmiemy się teraz pojedynczym rastrem i zechcemy skomponować przy jego użyciu obraz na ekranie. Przenosimy jego dane do Line RAM, wskazując jakie dane powinny zostać umieszczone na konkretnej pozycji poziomej. Grafika jako taka ma być przekazywana w małych kawałkach nachodzących na siebie. Kolejność fragmentów rastra określa priorytet obiektu umieszczonego na samej górze.
Gdy dane grafiki zostaną przekazane do Line RAM, określić trzeba, jakie jej fragmenty będą odnosić do którejś z ośmiu (8) palet. Każdy piksel może przyjąć jeden z trzech (3) kolorów danej palety lub być przezroczysty (wyłączony). Line RAM zawiera informację tylko o jednym rastrze; ma dwa bufory - gdy zawartość jednego jest przekazywana do wyświetlania, drugi przyjmuje dane kolejnego rastra. Oznacza to, że konstruowanie grafiki rastra trwa relatywnie długo, a sama grafika widoczna na ekranie jest przechowywana w Line RAM raster po rastrze.
Jedynym ograniczeniem co do liczby i rozmiaru obiektów wyświetlanych przez strumień elektronów w jednostce czasu (chodzi tu o pojęcie "scan line", co w języku angielskim oznacza wykreślenie przez w/w strumień na ekranie jednej linii) jest ilość czasu, jaki zajmie załadowanie każdego do Line RAM, przy założeniu, że każde ze wczytań odbędzie się podczas rysowania jednej linii.
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.
Wyświetlanie jest automatycznie podejmowane przez układ MARIA i realizowane w dwóch etapach: konstruowanie Line RAM i wyświetlanie grafiki. Konstruowanie Line RAM jest automatycznie inicjowane każdym rastrem przez MARIĘ i jako proces kierowane jest przez wcześniej określoną listę instrukcji zwaną Display List. Jako takie istnieje dzięki procesowi zwanemu DMA (Direct Memory Access - bezpośredni dostęp do pamięci). Oznacza to, że działanie 6502 zawieszane jest na czas, gdy MARIA bada, czy w pamięci RAM i ROM znajduje się Display List i informacja o grafice. DMA wystąpi podczas każdej "widzialnej" rysowanej przez strumień elektronów linii i potrwa nie dłużej niż potrzeba czasu na jej narysowanie. Skonstruowana Line RAM wyświetlana jest na każdej następującej po sobie linii i MARIA odczyta każdą Display Listę jedną linię przed aktualnie wyświetlaną. Cała Line RAM czyszczona jest linia po linii, a kolor BACKGRND będzie wyświetlany w przypadku braku zapisania danych.
Rejestry
Adres
(Atari 7800) | Dostęp | Nazwa | Opis |
---|---|---|---|
$20 | R/W | BACKGRND | BACKGRouND color |
$21 | R/W | P0C1 | Palette 0, Color 1 |
$22 | R/W | P0C2 | Palette 0, Color 2 |
$23 | R/W | P0C3 | Palette 0, Color 3 |
$24 | STROBE | WSYNC | Wait for SYNC |
$25 | R/W | P1C1 | Palette 1, Color 1 |
$26 | R/W | P1C2 | Palette 1, Color 2 |
$27 | R/W | P1C3 | Palette 1, Color 3 |
$28 | R | MSTAT | Maria STATus |
$29 | R/W | P2C1 | Palette 2, Color 1 |
$2A | R/W | P2C2 | Palette 2, Color 2 |
$2B | R/W | P2C3 | Palette 2, Color 3 |
$2C | W | DPPH | DisPlay list list Point High |
$2D | R/W | P3C1 | Palette 3, Color 1 |
$2E | R/W | P3C2 | Palette 3, Color 2 |
$2F | R/W | P3C3 | Palette 3, Color 3 |
$30 | W | DPPL | DisPlay list list Point Low |
$31 | R/W | P4C1 | Palette 4, Color 1 |
$32 | R/W | P4C2 | Palette 4, Color 2 |
$33 | R/W | P4C3 | Palette 4, Color 3 |
$34 | W | CHARBASE | CHARacter BASE address |
$35 | R/W | P5C1 | Palette 5, Color 1 |
$36 | R/W | P5C2 | Palette 5, Color 2 |
$37 | R/W | P5C3 | Palette 5, Color 3 |
$38 | R/W | OFFSET | dla przyszłych rozszerzeń (normalnie jest tu 0) |
$39 | R/W | P6C1 | Palette 6, Color 1 |
$3A | R/W | P6C2 | Palette 6, Color 2 |
$3B | R/W | P6C3 | Palette 6, Color 3 |
$3C | W | CTRL | MARIA ConTRoL register |
$3D | R/W | P7C1 | Palette 7, Color 1 |
$3E | R/W | P7C2 | Palette 7, Color 2 |
$3F | R/W | P7C3 | Palette 7, Color 3 |
Źródło: Voy/SSG^Dial, "Atari 7800 ProSystem... rządzi!"
Palety
Rejestry 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 układu MARIA i ustawiany przez każdy wpis DLL.
W poprzednim wcieleniu rejestr OFFSET zajmował pewien adres pamięci. Adres ten jest teraz wolny, lecz powinno się tu WPISYWAĆ ZERO PRZY WŁĄCZANIU ZASILANIA, BY UMOŻLIWIĆ PRZYSZŁE ROZSZERZENIA.
CHARBASE
Rejestr 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.
DPPH
DPPH 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.
DPPL
Rejestr też używany jest do określania młodszego bajtu adresu DLL. Jest TYLKO DO ZAPISU.
MSTAT
MSTAT 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.
CTRL określa również, czy znaki (w trybie znakowym) mają szerokość jednego lub dwóch bajtów. To znaczy, czy z adresu wskazywanego przez wpis mapy znaków i CHARBASE powinien być pobrany jeden czy dwa bajty. Przewagą znaków dwubajtowych jest to, że określają taką samą liczbę pikseli, jaką może określić dwa razy więcej wpisów mapy znaków. Wadą natomiast jest ingerencja w ekran podczas zmiany jednego znaku.
Rejestr ten kontroluje również tworzenie sygnału rozdzielania koloru (w oryginale "color burst signal"). Brak sygnału oznacza wyświetlanie grafiki co prawda czarno-białej, lecz bardziej przejrzystej, niż w przypadku użycia odcieni szarości (wartości od $00 do $0F).
Kolejny bit CTRL włącza tryb "Kangaro- o", usuwający przezroczystość, co oznacza, że każdy piksel o kolorze "0" raczej będzie kolorem tła, aniżeli przezroczystym. Nazwa pochodzi od gry automatowej "Kangaroo" firmy Atari.
Poprzez rejestr CTRL może być również włączane i wyłączane DMA. Po włączeniu zasilania DMA jest wyłączone i powinno być włączane przez kartridż. Dokonywane powinno być to dopiero po zachowaniu zawartości DPPL i DPPH (dlatego więc DMA nie próbuje odczytywać DLL z nieokreślonej pozycji). DMA powinno być włączane PODCZAS VBLANK i nigdy w czasie tworzenia ekranu (rastry 16-258). Jeśli DMA jest wyłączone, ekran będzie kontynuował wyświetlanie koloru tła.
I w końcu, CTRL określa, gdzie wybrana jest część TRYBU ODCZYTU trybu graficznego (pamiętaj, że część TRYBU ZAPISU określana jest poprzez poszerzony nagłówek). TRYB ZAPISU kontroluje sposób zapisu danych do Line RAM, a TRYB ODCZYTU sposób interpretacji Line RAM i przenoszenia na ekran. Ponieważ TRYB ODCZYTU wpływa na rozpoczęcie wyświetlania pojedynczej linii, ewentualne zmiany TRYBU ODCZYTU powinny mieć miejsce na początku linii, na którą wpływa.
TRYB ZAPISU pozwala na wybór pomiędzy trybami: a) 160x2 lub 320x1, oraz b) 160x4 lub 320x2. TRYB ODCZYTU pozwala na wybór: a)320A lub 320C, b) 320B lub 320D i c) 160A(x2) lub 160B(x4). Poniższa tabela zawiera więcej informacji:
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.
Tryby wyświetlania 320C i 320D poszczególnie są nieco podobne do 320B i 320A. Są takie, jakie byś otrzymał, gdybyś zmienił TRYB ZAPISU bez zmieniania TRYBU ODCZYTU (tak jak zmiany trybów podczas rysowania linii ekranu). Jeśli jesteś w trybie 320A i chcesz na linii umieścić znak z większą liczbą kolorów, poprzez zmianę trybów otrzynasz tryb 320C. Podobnie, poprzez zmianę z 320B "w locie" otrzymasz tryb 320D. Sposób, w jaki w trybach 320C i 320D interpretowane są dane, będzie wyjaśniony później.
W trybie 160x4 też odczytywany jest tylko bardziej znaczący bit palety (zauważ, że trybach 160x4 i 320B w ten sam sposób działa TRYB ZAPISU). Z powodu większej liczby bitów koloru, niż jest w stanie obsłużyć każda dana paleta, w trybie 160x4 palety są kombinowane, więc możesz wybrać pomiędzy kombinacjami 0-3 i 4-7. Wynikiem tego w trybie 160x4 dostępnych jest dwanaście (12) kolorów, gdzie kolor pierwszy (1) to P0C1 lub P4C1, drugi (2) to P0C2 lub P4C2, piąty (5) to P1C1 lub P5C1, szósty (6) to P1C2 lub P5C2 itd., a kolory 0, 4, 8 i 12 są przezroczyste. Rejestr CTRL zorganizowany jest w sposób następujący:
_______________________________ | | | | | | | | | | 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Ę!)
W większości powyższych trybów kodowanie danych graficznych jest proste. W trybie 160x2 każda para bitów zorganizowana jest tak, że kolor skrajnego lewego piksela określany jest przez bardziej znaczącą parę bitów, a skrajny prawy piksel przez mniej znaczącą parę bitów.
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)
Tryb 320D jest również nieco skomplikowany. Każdy piksel odnosi się do tej samej palety, lecz bity palety oddziałują na kolor pikseli. Tylko bit palety - użyty w jej definicji - jest bitem bardziej znaczącym (tak samo jak w 320B), więc MARIA będzie odwoływać się tylko do palet zero (0) i cztery (4). Na jeden piksel przypada więcej, niż jeden bit, zatem wybór koloru jest większy. Bity danych graficznych wykorzystane są następująco: każdy z nich jest bardziej znaczącym bitem dwubitowej pary; mniej znaczący bit tej pary jest albo P0 albo P1 (gdzie P to bit palety). Jeśli dana paleta to 0 lub 4 (gdzie P1 i P0 to zero), to jest to normalny tryb 320x1, tak jak 320A. Lecz jeśli dana paleta to 5, będzie użyta paleta 4 i pewne piksele przyjmą albo kolor 1 albo 3, a inne 0 lub 2. Jako przykład więcej konkretów:
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