ANTIC
From Atariki
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.
cyt. Tajemnice Atari nr 2/92
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 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) $022f 00559 SDMCTL Ta komórka pamięci steruje bezpośrednim dostępem do pamięci procesora graficznego. Jest ona 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 bit 2 DMA dla pocisków bit 3 DMA dla graczy bit 4 rozdzielczość pionowa gracza bit 5 DMA dla obrazu. Dwa najmłodsze bity definiują rodzaj wyświetlanego pola gry tworząc kombinacje: 0 0 pole gry nie jest wyświetlane 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ż ten sposób określania rozmiaru ekranu nie jest w pełni zgodny z terminologią, zalecaną przez firmę ATARI. Gwoli ścisłości warto więc zaznaczyć, że powinno się w tym wypadku mówić o tzw. cyklach koloru (ang. color clocks), których liczba dla odpowiednich pól gry przedstawia się następująco: wąskie pole gry 128 cykli koloru 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 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 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 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 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 są dynamicznie prezentowane na ekranie, to warto na 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, 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ą wartość do tego rejestru. Często warto także zgasić ekran podczas ładowania do pamięci obrazków, nie widać wtedy, jak są one rysowane, za to można obserwować końcowy efekt. Po restarcie systemu do komórki SDMCTL zapisywana jest wartość 34, czyli bitowo %100010, co oznacza włączenie bezpośredniego dostępu ANTIC-a do pamięci i ustawienie standardowego pola gry.