ANTIC

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 10:35, 30 gru 2004
Dracon (Dyskusja | wkład)

← Previous diff
Wersja z dnia 13:16, 1 mar 2005
Krap (Dyskusja | wkład)

Next diff →
Linia 1: Linia 1:
{{grafr|ANTIC.gif}} {{grafr|ANTIC.gif}}
-'''ANTIC''' (''Alphanumeric Television Interface Controller'') - specjalnie zaprojektowany dla Atari XE/XL układ odpowiedzialny za generowanie grafiki. Nowocześniejszym układem jest [[MARIA]] montowana w konsoli Atari [[7800]].+'''ANTIC''' - ang. Alpha-Numeric Television Interface Controller - układ wizyjny montowany w ośmiobitowych komputerach [[Atari (informatyka)|Atari]], zaprojektowany w 1978 roku. Nowocześniejszym układem jest [[MARIA]] montowana w konsoli Atari [[7800]].
-cyt. Tajemnice Atari nr 2/92+Antic jest jedynym chyba układem graficznym montowanym w komputerach ośmiobitowych, który zasługuje na miano mikroprocesora graficznego; dysponuje bowiem własnym, wykonywanym pięćdziesiąt razy na sekundę programem, który definiuje obraz wyświetlany przez komputer na monitorze. Na czas pobierania instrukcji tego programu, w celu zapobieżenia zakłoceniom obrazu, Antic wstrzymuje działanie centralnego procesora i przejmuje kontrolę nad magistralami systemu.
-<pre>+Szerokość generowanego obrazu określa "rejestr kontroli dostępu do pamięci" (DMACTL); może ona wynosić 0, 256, 320 lub 384 piksele trybu najwyższej rozdzielczości, czyli odpowiednio 0, 32, 40 lub 48 kolumn w trybie znakowym używanym przez systemowy edytor ekranowy.
-Jednym z ciekawych układów elektronicznych, jakie można znaleźć wewnątrz komputera ATARI XL/XE+
-jest procesor graficzny ANTIC. Jest to układ scalony, którego zadaniem jest obrazowanie danych+
-z pewnego obszaru pamięci komputera. To, co widzimy na ekranie monitora, kiedy siadamy przed+
-komputerem jest efektem pracy ANTIC-u. Sedno działania procesora graficznego tkwi w tzw.+
-bezpośrednim dostępie do pamięci, zwanym krótko DMA (z ang. Direct Memory Access). Po prostu,+
-ANTIC pobiera dane do wyświetlenia z pamięci bez pośrednictwa głównego procesora, "podkradając"+
-mu jednak nieco czasu, czyli zwalniając jego tempo pracy. Jak napisałem powyżej, ANTIC jest+
-prawdziwym procesorem z własnym dwunastobitowym licznikiem rozkazów i zestawem instrukcji.+
-Wykonuje on program, którego adres zapisany jest w słowie SDLSTL, zajmującym komórki pamięci o+
-adresach 560 i 561, czyli $0230 i $0231.+
- W wyniku działalności ANTIC-u widzimy obraz, którego podstawowym składnikiem jest tzw. pole+Wysokość obrazu definiuje wspomniany wyżej program, zwany ''Display List''. Wysokość ta może wahać się w zakresie od zera do 240 linii skaningowych (pikseli) trybu najwyższej rozdzielczości, czyli do 30 wierszy trybu znakowego używanego przez systemowy edytor ekranowy. Powyżej tej wartości następuje zerwanie synchronizacji pionowej.
-gry (ang. playfield). Dodatkowo, może on wyświetlać niezależne obiekty graficzne, które łatwo+
-animować, tzw. graczy (ang. players) i pociski (ang. missiles)+
 +Antic generuje zarówno tryby tekstowe, jak i graficzne. Tryby tekstowe wymagają zdefiniowania zestawu 64 lub 128 znaków w matrycy 8x8 pikseli, druga połowa zestawu (z całości 256 znaków) jest automatycznie generowana jako powtórzenie pierwszej z odwróceniem kolorów (czarne znaki na białym tle). Układ sprzętowo realizuje takie funkcje jak np. tłumienie znaków w inverse video (stają się niewidoczne), odwracanie kolorów (są wyświetlane jak znaki "normalne") oraz lustrzane odbicie wszystkich znaków w pionie.
-$022f 00559 SDMCTL +Trzeba zaznaczyć, że Antic jest w stanie generować jedynie obraz monochromatyczny, za dodanie kolorów odpowiedzialny jest układ [[CTIA]] (w Atari 400/800) lub [[GTIA]] (w Atari 800XL i następnych).
 +==Tryby znakowe==
- Ta komórka pamięci steruje bezpośrednim dostępem do pamięci procesora graficznego. Jest ona+Dostępnych jest sześć trybów tekstowych:
-cieniem sprzętowego rejestru DMACTL (54272, czyli $d400) i jej zawartość traktowana jest+
-bitowo. Znaczenie bitów SDMCTL jest następujące:+
-bit 0, 1 rodzaj pola gry+* tryb $02: tryb monochromatyczny o szerokości 32, 40 lub 48 znaków, przy czym każdy znak ma wysokość ośmiu pikseli. Trybu tego używa system operacyjny jako trybu wyświetlania systemowej konsoli tekstowej o wielkości 40x24 znaki.
-bit 2 DMA dla pocisków+* tryb $03: odmiana trybu powyższego. Wszystko jest tak samo, z wyjątkiem tego, że znaki wyświetlane są w matrycy 8x10 pikseli. Układ sprzętowo dodaje dwie puste linie do wszystkich znaków, za wyjątkiem ostatniej ćwiartki zestawu znaków (w wewnętrznej organizacji Antic-a ostatnia ćwiartka generatora znaków to małe litery alfabetu angielskiego); w tym wypadku dwie pierwsze linie matrycy znaku wyświetlane są jako dwie ostatnie linie znaku. Tryb ten jest przydatny dla edytorów tekstu (i w istocie jest przez nie wykorzystywany), bo pozwala na wyświetlanie małych liter z "wyrazistymi" ogonkami.
-bit 3 DMA dla graczy+* tryb $04: odpowiednik trybu $02, ale matryca znaków interpretowana jest graficznie tak, by każde dwa bity tworzyły jeden piksel. Piksel ten może być w jednym z czterech kolorów, przy czym jeśli oba bity piksela są zapalone, to wybór rejestru koloru dodatkowo zależy od tego, czy bit 7 znaku jest zapalony czy nie. Kolory wybierane są z palety 128 barw przez pięć rejestrów kolorów. Jest to tryb 12 systemu operacyjnego o wielkości 40x24 znaki w pięciu kolorach. Tryb ten jest bardzo często wykorzystywany w grach ze względu na stosunkowo dużą liczbę kolorów i niewielkie przy tym zapotrzbowanie na pamięć (ekran o rozdzielczości 160x192 piksele w 5 kolorach zajmuje tylko 960 bajtów, plus generator znaków).
-bit 4 rozdzielczość pionowa gracza+* tryb $05: odmiana trybu $04 o dwukrotnie mniejszej rozdzielczości pionowej; w systemie operacyjnym jest to tryb 13 o wielkości 40x12 znaków w pięciu kolorach.
-bit 5 DMA dla obrazu.+* tryb $06: jest to tryb znakowy, w którym znak ma rozmiary 8x8 pikseli, ale jeden piksel tego trybu ma wielkość dwóch pikseli trybu najwyższej rozdzielczości. W efekcie w jednej linii mieszczą się (w zależności od wybranej szerokości obrazu) 16, 20 lub 24 znaki. Każdy znak może być wyświetlony w jednym z czterech kolorów, które wybierają dwa najstarsze bity jego wartości. Kolory te są wybierane z palety 128 barw przez cztery rejestry kolorów. Dodatkowo do dyspozycji jest oddzielny kolor tła wybierany przez osobny rejestr koloru, również z palety 128. Jest to tryb 1 systemu operacyjnego.
 +* tryb $07: odmiana trybu $06 o dwukrotnie mniejszej rozdzielczości pionowej. Jest to tryb 2 systemu operacyjnego.
- Dwa najmłodsze bity definiują rodzaj wyświetlanego pola gry tworząc kombinacje:+==Tryby bitowe==
-0 0 pole gry nie jest wyświetlane+Oprócz trybów znakowych dostępnych jest osiem trybów graficznych:
-0 1 wąskie pole gry (32 znaki w trybie 0)+
-1 0 normalne pole gry (40 znaków w trybie 0)+
-1 1 szerokie pole gry (48 znaków w trybie 0)+
- Podane wyżej ilości znaków dość dobrze określają szerokości odpowiednich pól gry, chociaż+* tryb $08: jest to tryb graficzny, w którym jeden piksel ma rozmiary 8x8 pikseli trybu najwyższej rozdzielczości. Dostępne sa cztery kolory z palety 128. Jest to tryb 3 systemu operacyjnego, o rozdzielczości 40x24 piksele w 4 kolorach.
-ten sposób określania rozmiaru ekranu nie jest w pełni zgodny z terminologią, zalecaną przez+* tryb $09: jest to tryb graficzny, w którym piksel ma rozmiary 4x4 piksele trybu najwyższej rozdzielczości. Dostępne są dwa kolory z palety 128. Jest to tryb 4 systemu operacyjnego, o rozdzielczości 80x48 pikseli w 2 kolorach.
-firmę ATARI. Gwoli ścisłości warto więc zaznaczyć, że powinno się w tym wypadku mówić o tzw.+* tryb $0a: jest to odpowiednik trybu $09, lecz dostępne są 4 kolory z palety 128. Jest to tryb 5 systemu operacyjnego.
-cyklach koloru (ang. color clocks), których liczba dla odpowiednich pól gry przedstawia się+* tryb $0b: w tym trybie piksel ma rozmiar 2x2 piksele trybu najwyższej rozdzielczości. Dostępne są dwa kolory. Jest to tryb 6 systemu operacyjnego.
-następująco:+* tryb $0c: w tym trybie piksel ma szerokość dwóch pikseli trybu najwyższej rozdzielczości i wysokość jednej linii skaningowej. Jest to tryb 1 systemu operacyjnego, 160x192 piksele w dwóch kolorach z palety 128.
 +* tryb $0d: jest to odpowiednik trybu $0b w 4 kolorach, czyli tryb 7 systemu operacyjnego o rozdzielczości 160x96 w 4 kolorach.
 +* tryb $0e: jest to kolorowy odpowiednik trybu $0c, czyli tryb 15 systemu operacyjnego, 160x192 piksele w 4 kolorach.
 +* tryb $0f: jest to monochromatyczny tryb najwyższej rozdzielczości, tryb 8 systemu operacyjnego, 320x192 piksele w jednym z dwóch odcieni tego samego koloru z palety 128.
-wąskie pole gry 128 cykli koloru+Podane tu rozmiary ekranu dla poszczególnych trybów, np. 40x24 czy 320x192 to standardowe rozdzielczości wybierane przez system operacyjny. Trzeba jednak pamiętać, że ekran można wedle potrzeb zwęzić do 32 kolumn (256 pikseli) lub poszerzyć do 48 kolumn (384 pikseli) oraz regulować jego wysokość z dokładnością do jednej linii skaningowej (piksela) za pomocą Display List.
-normalne pole gry 160 cykli koloru+
-szerokie pole gry 192 cykle koloru.+
- Nie wszystkie telewizory i monitory pozwolą nam zobaczyć cały obraz, kiedy zażądamy+System operacyjny oferuje ponadto trzy tryby graficzne "wielokolorowe" o rozdzielczości 80x192 piksele. Dostępnych jest 16 kolorów wybieranych wartością piksela (4 bity na piksel). Pierwszy z tych trybów daje dostęp do 16 odcieni w jednym kolorze (z palety 16), drugi do 16 kolorów w jednym odcieniu, trzeci do 9 kolorów wybranych dowolnie z palety 128 - układ GTIA dysponuje niestety tylko dziewięcioma rejestrami kolorów, dlatego ten ostatni tryb nie pozwala na wybór 16 barw.
-wyświetlenia szerokiego pola gry, ale taka możliwość jest przydatna choćby wtedy, gdy irytują+
-nas ramki z lewej i prawej strony wyświetlanego obrazu.+
-Bity nr 2 i 3 uruchamiają (po wpisaniu do nich 1), lub blokują (po wpisaniu 0), odpowiednio DMA+Nie są to tryby układu Antic - z punktu widzenia tego układu wszystkie trzy to monochromatyczny tryb najwyższej rozdzielczości. Przekształcenie go w tryb wielokolorowy następuje przez ingerencję w rejestr kontroli układu GTIA (GTIACTL), co zmienia interpretację danych obrazu. Oczywiście w ten sam sposób można przekształcić dowolny inny tryb Antic-a.
-dla pocisków i dla graczy. Oznacza to w praktyce, że albo widać graczy i pociski, albo ich nie+
-widać. Oczywiście można włączyć np. tylko DMA dla graczy lub pocisków, są one niezależne.+
-Bit nr 4 definiuje sposób wyświetlania gracza. Więcej szczegółów na ten temat zamieszczę przy+Zmieszanie dwóch trybów wielokolorowych - tego z 16 stopniami szarości z tym z 16 kolorami - dzięki pewnej właściwości systemu telewizji PAL daje dostęp do trybu graficznego o rozdzielczości 80x96 pikseli w 256 kolorach (pełne osiem bitów na piksel).
-okazji opisu tej techniki.+
-Bit nr 5 włącza (po zapisaniu 1), lub wyłącza (po zapisaniu 0) bezpośredni dostęp ANTIC-a do+==Display List==
-pamięci, a co za tym idzie wyświetlanie obrazu. Jeśli czasem zdarza się, że program wykonuje+ 
-dużą ilość np. obliczeń, których wyniki nie dynamicznie prezentowane na ekranie, to warto na+Jak wspomniano powyżej, wygląd obrazu opisany jest za pomocą tzw. Display List, która jest w istocie programem odłożonym w pamięci komputera i wykonywanym przez mikroprocesor graficzny 50 razy na sekundę.
-ten czas wyłączyć DMA dla procesora graficznego. Przestanie on wtedy pracować równolegle z+ 
-6502, co zwiększy szybkość tęgo ostatniego o ok. 30 procent. Aby wyłączyć DMA dla ANTIC-a,+Rozkazy Display List dzielą się na następujące grupy:
-trzeba najpierw odczytać zawartość komórki SDMCTL i zapamiętać ją, później zaś wpisać do niej+ 
-zero. Po zakończeniu operacji, które chcemy przyspieszyć, należy zapisać na powrót zapamiętaną+* rozkazy tworzenia linii trybu graficznego
-wartość do tego rejestru. Często warto także zgasić ekran podczas ładowania do pamięci+* rozkazy tworzenia linii pustych
-obrazków, nie widać wtedy, jak są one rysowane, za to można obserwować końcowy efekt. Po+* rozkazy ładowania wskaźnika pamięci ekranu
-restarcie systemu do komórki SDMCTL zapisywana jest wartość 34, czyli bitowo %100010, co+* rozkazy skoków
-oznacza włączenie bezpośredniego dostępu ANTIC-a do pamięci i ustawienie standardowego pola gry.+ 
-</pre>+Czternaście rozkazów tworzenia linii trybu graficznego (lub znakowego) zostało pokrótce omówionych powyżej. Antic interpretuje rozkazy w trakcie tworzenia obrazu, rozkazy tworzenia linii trybu pobierane sukcesywnie pomiędzy generowaniem poszczególnych linii obrazu. Sprawia to, że mieszanie ze sobą różnych trybów wyświetlania nie sprawia żadnych trudności, póki jedna linia pozioma obrazu zajmowana jest przez 1 tryb graficzny. Umieściwszy w Display List kolejno wszystkie rozkazy tworzenia linii trybu uzyskuje się je wszystkie na raz, wyświetlane jeden pod drugim, w kolejnych liniach poziomych obrazu.
 + 
 +Nietrudno zauważyć, że numer trybu graficznego zakodowany jest w dolnych czterech bitach rozkazu. Starsze cztery bity wybierają - niezależnie od siebie nawzajem oraz niezależnie dla każdej linii obrazu - dodatkowe atrybuty obrazu, to jest:
 + 
 +* przesuw poziomy
 +* przesuw pionowy
 +* LMS
 +* DLI
 + 
 +DLI włącza występowanie przerwania NMI, LMS natomiast przekształca rozkaz w rozkaz ładowania wskaźnika pamięci ekranu.
 + 
 +$00, a ściślej $x0 jest to rozkaz tworzenia pustych linii obrazu. Liczba tych linii określana jest przez trzy pierwsze bity starszej połówki bajtu: $00 tworzy jedną pustą linię skaningową, $10 dwie, $20 trzy, $30 cztery, $40 pięć, $50 sześć, $60 siedem a $70 osiem. Najstarszy bit wybiera DLI, tak samo jak przy rozkazach linii trybu.
 + 
 +$01 jest to rozkaz skoku JMP pod adres podany w następnych dwóch bajtach Display List. Rozkaz ten tworzy oprócz tego - przed skokiem - jedną pustą linię obrazu. Ustawienie bitu 7 powoduje jeszcze wygenerowanie przerwania DLI, natomiast ustawienie bitu 6 sprawia, że przed wykonaniem skoku Antic czeka na impuls synchronizacji pionowej. Rozkaz taki - skoku z oczekiwaniem na synchronizację pionową - powinien kończyć Display List i jednocześnie "uruchamiać" ją od początku.
 + 
 +Rozkazem ładowania wskaźnika pamięci ekranu może być każdy z rozkazów tworzenia linii trybu. Uzyskuje się to przez ustawienie bitu 6 kodu rozkazu oraz podanie adresu danych obrazu w dwóch następnych bajtach. W efekcie dane dane obrazu nie muszą być odłożone w pamięci sekwencyjnie - wystarczy, żeby sekwencję stanowiły bajty składające się na pojedynczą linię obrazu. W efekcie uzyskanie organizacji pamięci obrazu takiej jak w ZX Spectrum albo wyświetlenie całości lub części obrazka do góry nogami to tylko kwestia napisania odpowiedniej Display List i podania Anticowi wskaźnika do niej.

Wersja z dnia 13:16, 1 mar 2005

Grafika:ANTIC.gif

ANTIC - ang. Alpha-Numeric Television Interface Controller - układ wizyjny montowany w ośmiobitowych komputerach Atari, zaprojektowany w 1978 roku. Nowocześniejszym układem jest MARIA montowana w konsoli Atari 7800.

Antic jest jedynym chyba układem graficznym montowanym w komputerach ośmiobitowych, który zasługuje na miano mikroprocesora graficznego; dysponuje bowiem własnym, wykonywanym pięćdziesiąt razy na sekundę programem, który definiuje obraz wyświetlany przez komputer na monitorze. Na czas pobierania instrukcji tego programu, w celu zapobieżenia zakłoceniom obrazu, Antic wstrzymuje działanie centralnego procesora i przejmuje kontrolę nad magistralami systemu.

Szerokość generowanego obrazu określa "rejestr kontroli dostępu do pamięci" (DMACTL); może ona wynosić 0, 256, 320 lub 384 piksele trybu najwyższej rozdzielczości, czyli odpowiednio 0, 32, 40 lub 48 kolumn w trybie znakowym używanym przez systemowy edytor ekranowy.

Wysokość obrazu definiuje wspomniany wyżej program, zwany Display List. Wysokość ta może wahać się w zakresie od zera do 240 linii skaningowych (pikseli) trybu najwyższej rozdzielczości, czyli do 30 wierszy trybu znakowego używanego przez systemowy edytor ekranowy. Powyżej tej wartości następuje zerwanie synchronizacji pionowej.

Antic generuje zarówno tryby tekstowe, jak i graficzne. Tryby tekstowe wymagają zdefiniowania zestawu 64 lub 128 znaków w matrycy 8x8 pikseli, druga połowa zestawu (z całości 256 znaków) jest automatycznie generowana jako powtórzenie pierwszej z odwróceniem kolorów (czarne znaki na białym tle). Układ sprzętowo realizuje takie funkcje jak np. tłumienie znaków w inverse video (stają się niewidoczne), odwracanie kolorów (są wyświetlane jak znaki "normalne") oraz lustrzane odbicie wszystkich znaków w pionie.

Trzeba zaznaczyć, że Antic jest w stanie generować jedynie obraz monochromatyczny, za dodanie kolorów odpowiedzialny jest układ CTIA (w Atari 400/800) lub GTIA (w Atari 800XL i następnych).

Tryby znakowe

Dostępnych jest sześć trybów tekstowych:

  • tryb $02: tryb monochromatyczny o szerokości 32, 40 lub 48 znaków, przy czym każdy znak ma wysokość ośmiu pikseli. Trybu tego używa system operacyjny jako trybu wyświetlania systemowej konsoli tekstowej o wielkości 40x24 znaki.
  • tryb $03: odmiana trybu powyższego. Wszystko jest tak samo, z wyjątkiem tego, że znaki wyświetlane są w matrycy 8x10 pikseli. Układ sprzętowo dodaje dwie puste linie do wszystkich znaków, za wyjątkiem ostatniej ćwiartki zestawu znaków (w wewnętrznej organizacji Antic-a ostatnia ćwiartka generatora znaków to małe litery alfabetu angielskiego); w tym wypadku dwie pierwsze linie matrycy znaku wyświetlane są jako dwie ostatnie linie znaku. Tryb ten jest przydatny dla edytorów tekstu (i w istocie jest przez nie wykorzystywany), bo pozwala na wyświetlanie małych liter z "wyrazistymi" ogonkami.
  • tryb $04: odpowiednik trybu $02, ale matryca znaków interpretowana jest graficznie tak, by każde dwa bity tworzyły jeden piksel. Piksel ten może być w jednym z czterech kolorów, przy czym jeśli oba bity piksela są zapalone, to wybór rejestru koloru dodatkowo zależy od tego, czy bit 7 znaku jest zapalony czy nie. Kolory wybierane są z palety 128 barw przez pięć rejestrów kolorów. Jest to tryb 12 systemu operacyjnego o wielkości 40x24 znaki w pięciu kolorach. Tryb ten jest bardzo często wykorzystywany w grach ze względu na stosunkowo dużą liczbę kolorów i niewielkie przy tym zapotrzbowanie na pamięć (ekran o rozdzielczości 160x192 piksele w 5 kolorach zajmuje tylko 960 bajtów, plus generator znaków).
  • tryb $05: odmiana trybu $04 o dwukrotnie mniejszej rozdzielczości pionowej; w systemie operacyjnym jest to tryb 13 o wielkości 40x12 znaków w pięciu kolorach.
  • tryb $06: jest to tryb znakowy, w którym znak ma rozmiary 8x8 pikseli, ale jeden piksel tego trybu ma wielkość dwóch pikseli trybu najwyższej rozdzielczości. W efekcie w jednej linii mieszczą się (w zależności od wybranej szerokości obrazu) 16, 20 lub 24 znaki. Każdy znak może być wyświetlony w jednym z czterech kolorów, które wybierają dwa najstarsze bity jego wartości. Kolory te są wybierane z palety 128 barw przez cztery rejestry kolorów. Dodatkowo do dyspozycji jest oddzielny kolor tła wybierany przez osobny rejestr koloru, również z palety 128. Jest to tryb 1 systemu operacyjnego.
  • tryb $07: odmiana trybu $06 o dwukrotnie mniejszej rozdzielczości pionowej. Jest to tryb 2 systemu operacyjnego.

Tryby bitowe

Oprócz trybów znakowych dostępnych jest osiem trybów graficznych:

  • tryb $08: jest to tryb graficzny, w którym jeden piksel ma rozmiary 8x8 pikseli trybu najwyższej rozdzielczości. Dostępne sa cztery kolory z palety 128. Jest to tryb 3 systemu operacyjnego, o rozdzielczości 40x24 piksele w 4 kolorach.
  • tryb $09: jest to tryb graficzny, w którym piksel ma rozmiary 4x4 piksele trybu najwyższej rozdzielczości. Dostępne są dwa kolory z palety 128. Jest to tryb 4 systemu operacyjnego, o rozdzielczości 80x48 pikseli w 2 kolorach.
  • tryb $0a: jest to odpowiednik trybu $09, lecz dostępne są 4 kolory z palety 128. Jest to tryb 5 systemu operacyjnego.
  • tryb $0b: w tym trybie piksel ma rozmiar 2x2 piksele trybu najwyższej rozdzielczości. Dostępne są dwa kolory. Jest to tryb 6 systemu operacyjnego.
  • tryb $0c: w tym trybie piksel ma szerokość dwóch pikseli trybu najwyższej rozdzielczości i wysokość jednej linii skaningowej. Jest to tryb 1 systemu operacyjnego, 160x192 piksele w dwóch kolorach z palety 128.
  • tryb $0d: jest to odpowiednik trybu $0b w 4 kolorach, czyli tryb 7 systemu operacyjnego o rozdzielczości 160x96 w 4 kolorach.
  • tryb $0e: jest to kolorowy odpowiednik trybu $0c, czyli tryb 15 systemu operacyjnego, 160x192 piksele w 4 kolorach.
  • tryb $0f: jest to monochromatyczny tryb najwyższej rozdzielczości, tryb 8 systemu operacyjnego, 320x192 piksele w jednym z dwóch odcieni tego samego koloru z palety 128.

Podane tu rozmiary ekranu dla poszczególnych trybów, np. 40x24 czy 320x192 to standardowe rozdzielczości wybierane przez system operacyjny. Trzeba jednak pamiętać, że ekran można wedle potrzeb zwęzić do 32 kolumn (256 pikseli) lub poszerzyć do 48 kolumn (384 pikseli) oraz regulować jego wysokość z dokładnością do jednej linii skaningowej (piksela) za pomocą Display List.

System operacyjny oferuje ponadto trzy tryby graficzne "wielokolorowe" o rozdzielczości 80x192 piksele. Dostępnych jest 16 kolorów wybieranych wartością piksela (4 bity na piksel). Pierwszy z tych trybów daje dostęp do 16 odcieni w jednym kolorze (z palety 16), drugi do 16 kolorów w jednym odcieniu, trzeci do 9 kolorów wybranych dowolnie z palety 128 - układ GTIA dysponuje niestety tylko dziewięcioma rejestrami kolorów, dlatego ten ostatni tryb nie pozwala na wybór 16 barw.

Nie są to tryby układu Antic - z punktu widzenia tego układu wszystkie trzy to monochromatyczny tryb najwyższej rozdzielczości. Przekształcenie go w tryb wielokolorowy następuje przez ingerencję w rejestr kontroli układu GTIA (GTIACTL), co zmienia interpretację danych obrazu. Oczywiście w ten sam sposób można przekształcić dowolny inny tryb Antic-a.

Zmieszanie dwóch trybów wielokolorowych - tego z 16 stopniami szarości z tym z 16 kolorami - dzięki pewnej właściwości systemu telewizji PAL daje dostęp do trybu graficznego o rozdzielczości 80x96 pikseli w 256 kolorach (pełne osiem bitów na piksel).

Display List

Jak wspomniano powyżej, wygląd obrazu opisany jest za pomocą tzw. Display List, która jest w istocie programem odłożonym w pamięci komputera i wykonywanym przez mikroprocesor graficzny 50 razy na sekundę.

Rozkazy Display List dzielą się na następujące grupy:

  • rozkazy tworzenia linii trybu graficznego
  • rozkazy tworzenia linii pustych
  • rozkazy ładowania wskaźnika pamięci ekranu
  • rozkazy skoków

Czternaście rozkazów tworzenia linii trybu graficznego (lub znakowego) zostało pokrótce omówionych powyżej. Antic interpretuje rozkazy w trakcie tworzenia obrazu, rozkazy tworzenia linii trybu pobierane są sukcesywnie pomiędzy generowaniem poszczególnych linii obrazu. Sprawia to, że mieszanie ze sobą różnych trybów wyświetlania nie sprawia żadnych trudności, póki jedna linia pozioma obrazu zajmowana jest przez 1 tryb graficzny. Umieściwszy w Display List kolejno wszystkie rozkazy tworzenia linii trybu uzyskuje się je wszystkie na raz, wyświetlane jeden pod drugim, w kolejnych liniach poziomych obrazu.

Nietrudno zauważyć, że numer trybu graficznego zakodowany jest w dolnych czterech bitach rozkazu. Starsze cztery bity wybierają - niezależnie od siebie nawzajem oraz niezależnie dla każdej linii obrazu - dodatkowe atrybuty obrazu, to jest:

  • przesuw poziomy
  • przesuw pionowy
  • LMS
  • DLI

DLI włącza występowanie przerwania NMI, LMS natomiast przekształca rozkaz w rozkaz ładowania wskaźnika pamięci ekranu.

$00, a ściślej $x0 jest to rozkaz tworzenia pustych linii obrazu. Liczba tych linii określana jest przez trzy pierwsze bity starszej połówki bajtu: $00 tworzy jedną pustą linię skaningową, $10 dwie, $20 trzy, $30 cztery, $40 pięć, $50 sześć, $60 siedem a $70 osiem. Najstarszy bit wybiera DLI, tak samo jak przy rozkazach linii trybu.

$01 jest to rozkaz skoku JMP pod adres podany w następnych dwóch bajtach Display List. Rozkaz ten tworzy oprócz tego - przed skokiem - jedną pustą linię obrazu. Ustawienie bitu 7 powoduje jeszcze wygenerowanie przerwania DLI, natomiast ustawienie bitu 6 sprawia, że przed wykonaniem skoku Antic czeka na impuls synchronizacji pionowej. Rozkaz taki - skoku z oczekiwaniem na synchronizację pionową - powinien kończyć Display List i jednocześnie "uruchamiać" ją od początku.

Rozkazem ładowania wskaźnika pamięci ekranu może być każdy z rozkazów tworzenia linii trybu. Uzyskuje się to przez ustawienie bitu 6 kodu rozkazu oraz podanie adresu danych obrazu w dwóch następnych bajtach. W efekcie dane dane obrazu nie muszą być odłożone w pamięci sekwencyjnie - wystarczy, żeby sekwencję stanowiły bajty składające się na pojedynczą linię obrazu. W efekcie uzyskanie organizacji pamięci obrazu takiej jak w ZX Spectrum albo wyświetlenie całości lub części obrazka do góry nogami to tylko kwestia napisania odpowiedniej Display List i podania Anticowi wskaźnika do niej.

Personal tools