MAPA PAMIĘCINie wdając się w szczegóły techniczne, należy zaznaczyć jedynie, że ANTIC nie jest jedynym układem wyświetlania w małym ATARI. Podczas pracy spełnia on jedynie funkcję zarządzającą, przesyłając polecenia, dotyczące tworzenia obrazu do układu GTIA. GTIA dodaje jeszcze informacje o kolorze oraz o tzw. duszkach i dopiero wtedy na ekranie może pojawić się obraz. Jak każdy porządny procesor, także i ANTIC ma własny zestaw rozkazów, przy pomocy których możliwe jest napisanie programu wyświetlania obrazu. Taki program nazywa się z angielska Display List (w wolnym tłumaczeniu "lista wyświetlania"). Kiedy restartujemy nasz komputer, system operacyjny tworzy podstawowy program wyświetlania, umożliwiając nam kontakt wizualny z maszyną. Kiedy napiszemy w BASIC-u np. GR.8, dajemy komputerowi (czytaj - ANTIC-owi) znać, że pragniemy zmienić sposób prezentacji danych z pamięci; zgodnie z życzeniem będziemy teraz mieć do czynienia nie z trybem tekstowym, jak zaraz po włączeniu, lecz z trybem graficznym. Oczywiście, taką reakcję zapewnia praca interpretera BASIC-u i systemu operacyjnego, który tworzy odpowiedni program dla procesora graficznego. Wszyscy wiemy, jakie efekty można uzyskać, stosując BASIC-owe instrukcje graficzne i często okazuje się, że ten język programowania nie daje nam zbyt dużych możliwości. Zdarza się, że przestaje nam wystarczać to, co możemy zobaczyć, a marzy się nam np. wyświetlenie obrazu, na którym zmieszano kilka trybów graficznych. I w tym miejscu warto omówić dokładniej program ANTIC-u! Program dla tego mikroprocesora stanowi "przepis" na wygląd ekranu. Przy pomocy pewnych rozkazów, które zaraz opiszę, należy taki przepis utworzyć, umieścić go w pamięci, a następnie poinformować wykonawcę zadania, czyli ANTIC o położeniu programu wyświetlania w pamięci. Podczas pisania programu dla procesora graficznego trzeba pamiętać o kilku rzeczach, które z punktu widzenia sprzętu są bardzo ważne. Po pierwsze: licznik rozkazów ANTIC-u jest tylko 10-bitowy. W praktyce oznacza to że próba napisania programu wyświetlania, którego długość jest większa od 1 kilobajta, jest z góry skazana na niepowodzenie. Oczywiście mam tu na myśli jedynie takie programy wyświetlania, które nie zawierają rozkazów skoków, poprzez skok bowiem możemy zmienić licznik rozkazów tak, aby przekroczyć granicę jednego kllobajta. Z doświadczenia mogę powiedzieć, że raczej nie spotyka się programów ANTIC-u, dłuższych niż 1024 bajty. Po drugie: licznik pamięci obrazu jest jedynie 12-bitowy, co, jak łatwo się domyślić, ogranicza naszą działalność do 4-kllobajtowego bloku pamięci, i tu jednak przychodzi nam z pomocą rozkaz ustawiania licznika pamięci obrazu, dzięki któremu można czerpać dane kolejno z kilku bloków. Żeby powyższe rozważania nie pozostały jedynie teorią, powrócę do nich później, kiedy już zapoznamy się z rozkazami procesora graficznego. Mamy do dyspozycji trzy grupy rozkazów: Rozkazy tworzące puste linie.bity 0-3 muszą mieć wartość 0, bity 4-6 - liczba pustych linii, zmniejszona o jeden, bit 7 - żądanie przerwania (nieobowiązkowe). Ustawienie siódmego bitu w dowolnym rozkazie powoduje przerwanie programu ANTIC-u i wykonanie procedury, której adres wskazuje wektor VDSLST (patrz 512, czyli 80200). Oto kilka przykładów rozkazów tworzących puste linie (% oznacza liczbę dwójkową): %00100000 - wyświetlenie trzech pustych linii %01000000 - wyświetlenie pięciu pustych linii Rozkazy skoków.bity 0-5 muszą mieć wartość %000001, bit 6 równy zero powoduje wykonanie skoku natychmiastowego, równy jeden - zmusza ANTIC do oczekiwania na przerwanie synchronizacji pionowe) przed wykonaniem następnego po skoku rozkazu, bit 7 - żądanie przerwania. Przykłady rozkazów skoków: %00000001 adres1 - ładowanie licznika rozkazów wartością adres1 i natychmiastowe wykonanie znajdującego się tam rozkazu; %01000001 adres2 - ładowanie licznika rozkazów wartością adres2 i oczekiwanie na przerwanie synchronizacji pionowej. Rozkazy tworzące linie obrazu.bity 0-3 numer trybu wyświetlania, bit 4 równy jeden powoduje włączenie poziomego przewijania obrazu, bit 5 równy jeden powoduje włączenie pionowego przewijania obrazu, bit 6 równy jeden powoduje załadowanie licznika pamięci obrazu adresem, zawartym w następnym słowie pamięci i wyświetlenie danych z nowego miejsca, bit 7 żądanie przerwania. W zależności od wybranego trybu wyświetlania dane mogą być prezentowane jako wiersze tekstu lub linie grafiki o różnej rozdzielczości poziomej i pionowej oraz liczbie kolorów. Oto zestawienie trybów wyświetlania: Tryby tekstowe.Tryb 3. Nie ma odpowiednika w BASIC-u. Wiersz danych to 40 znaków, z których każdy składa się z 10 linii po 8 pikseli. Wyświetlany tekst jest dwukolorowy. Tryb 4. Nie ma odpowiednika w BASIC-u. Wiersz danych to 40 znaków, z których każdy składa się z 8 linii po 4 piksele. Wyświetlany tekst jest pięciokolorowy. Tryb 5. Jak wyżej, lecz każdy znak ma 16 linii wysokości, ponieważ każdy piksel jest dwukrotnie rozciągnięty w pionie. Wyświetlany tekst jest pięciokolorowy. Tryb 6. Odpowiada trybowi 1 BASIC-u. Wiersz danych to 20 znaków, z których każdy składa się z 8 linii po 8 pikseli o podwójnej szerokości. Wyświetlany tekst jest czterokolorowy. Tryb 7. Odpowiada trybowi 2 BASIC-u. Wiersz danych to 20 znaków, z których każdy składa się z 8 linii po 8 pikseli, lecz piksele mają podwójną wysokość i szerokość. Wyświetlany tekst jest czterokolorowy. Wypada jeszcze dodać, że teksty do wyświetlania powinny być kodowane nie jako znaki ATASCII, lecz tzw. Internal, co łatwo osiągnąć w asemblerze, stosując definicje typu: tekst dta d'To jest tekst'(przykład w konwencji Quick Assemblera). Tryby graficzne.Tryb 9. Odpowiada trybowi 4 BASIC-u. 80 pikseli w linii. Każdy piksel ma wysokość 4 linii obrazu i szerokość 2 cykli koloru. Tryb dwukolorowy. Tryb 10. Odpowiada trybowi 5 BASIC-u. 80 pikseli w linii. Każdy piksel ma wysokość 4 linii obrazu i szerokość 2 cykli koloru. Tryb czterokolorowy. Tryb 11. Odpowiada trybowi 6 BASIC-u. 160 pikseli w linii. Każdy piksel ma wysokość 2 linii obrazu i szerokość 1 cyklu koloru. Tryb dwukolorowy. Tryb 12. Nie ma odpowiednika w BASIC-u. 160 pikseli w linii. Każdy piksel ma wysokość 1 linii obrazu i szerokość 1 cyklu koloru. Tryb dwukolorowy. Tryb 13. Odpowiada trybowi 7 BASIC-u. 160 piksell w linii. Każdy piksel ma wysokość 2 linii obrazu i szerokość 1 cyklu koloru. Tryb czterokolorowy. Tryb 14. Nie ma odpowiednika w BASIC-u. 160 pikseli w linii. Każdy piksel ma wysokość 1 linii obrazu i szerokość 1 cyklu koloru. Tryb czterokolorowy. Tryb 15. Odpowiada trybowi 8 BASIC-u. 320 pikseli w linii. Każdy piksel ma wysokość 1 linii obrazu i szerokość pół cyklu koloru. Tryb dwukolorowy. Napisałem już wcześniej, że licznik pamięci obrazu jest 12-bitowy. Niedogodność tę odczuwa się podczas używania jednego z dwu ostatnich trybów graficznych. Kiedy tworzymy obraz z dużą liczbą linii o wysokiej rozdzielczości, pamięć obrazu jest większa niż 4 kilobajty. W takim wypadku należy pamiętać o ponownym załadowaniu licznika pamięci obrazu w środku programu ANTIC-u. Najlepiej zaplanować wyświetlanie tak, aby obie części obrazu były umieszczone na granicy czterokilobajtowego bloku pamięci. Nie zapomnijmy o ustawieniu szóstego bitu rozkazu wyświetlania linii obrazu i o podaniu adresu danych w następnym słowie programu! Poziome i pionowe przewijanie obrazu jest nieco zbyt skomplikowane, aby dało się w tym miejscu opisać szczegółowo, stąd odsyłam zainteresowanych do odpowiedniej literatury. bity 0-3 numer trybu wyświetlania, bit 4 równy jeden powoduje włączenie poziomego przewijania obrazu, bit 5 równy jeden powoduje włączenie pionowego przewijania obrazu, bit 6 równy jeden powoduje załadowanie licznika pamięci obrazu adresem, zawartym w następnym słowie pamięci i wyświetlenie danych z nowego miejsca, bit 7 żądanie przerwania. Oto kilka przykładów rozkazów tworzących linie obrazu: %00000010 wyświetlenie wiersza tekstu w trybie 2 ANTIC-u, %01000010 adresl załadowanie licznika pamięci obrazu wartością adres1 i wyświetlenie znajdujących się tam danych jako wiersza tekstu w trybie 2 ANTIC-u, % %0000111l wyświetlenie wiersza grafiki w trybie 15 ANTIC-u.
Jarosław Syrylak
|