Tajemnice ATARI

MAPA PAMIĘCI


562, $0232 SSKCTL
   Rejestr sterujący portu szeregowego, cień komórki o adresie 53775 ($d20f). Ponieważ korzystanie z tego rejestru ma sens tylko w trybie zapisu, podam jakie efekty wywołuje ustawienie poszczególnych bitów w tej komórce:

0 Włącza układ eliminujący drgania klawiatury.
1 Włącza układ odczytu klawiatury.
2 Zwiększa częstotliwość odczytu potencjometrów. Zamiast co jeden VBLANK, pomiar będzie się odbywał co dwie linie obrazu.
3 Włącza dwutonową, zamiast zero-jedynkowej, transmisję szeregową.
4-6 Odpowiednia kombincja służy do wyboru trybu pracy portu szeregowego.
7 Wymuszenie przerwania; wyzerowanie wyjścia portu szeregowego.

   Standardowo system wpisuje tutaj 19, czyli $13.

563, $0233 SPARE
   Pojedynczy bajt, nie używany przez system operacyjny. Firma ATARI nie zaleca jednak korzystania we własnych programach z żadnej spośród tego typu komórek, przewidując ewentualne wykorzystanie ich w późniejszych wersjach systemu.

   Tak się składa, że opis kolejnych dwóch komórek pamięci sprawia mi pewne trudności, wynikające z faktu wykorzystania przez hardware ATARI lokacji 564 i 565 ($0234, $0235) do przechowywania pozycji poziomej i pionowej pióra świetlnego. Niestety, nie zetknąłem się jeszcze bezpośrednio z piórem świetlnym, przeznaczonym dla naszego komputera, stąd opieram się jedynie na książce "Mapping the ATARI" I. Chadwicka.

564, $0234 LPENH
   Pozioma pozycja pióra świetlnego. Liczona w cyklach koloru. Zakres wartości od 0 do 227.

565, $0235 LPENV
   Pionowa pozycja pióra świetlnego. Zakres wartości od 0 do 95.

   Zawartość obu tych komórek jest modyfikowana za każdym razem, gdy użytkownik naciska guzik na piórze świetlnym.

   Pełny opis współpracy komputera z piórem można znaleźć w książce "Hardware Manual" na stronie 11-32.

566, 567, $0236, $0237 BRKKY
   Wektor przerwania wywoływanego naciśnięciem klawisza BREAK. Standardowo ustawiany na 59220 ($e754). Zmiana tego wektora umożliwia dołączenie do systemu własnej procedury obsługi klawisza BREAK.

568, 569, $0238, $0239 ...
   Są to dwie komórki pamięci, które nie mają oficjalnej etykiety i nie są używane przez system operacyjny komputera.

   W tym miejscu zaczyna się czterobajtowy bufor komendy używany przez SIO podczas transmisji szeregowej. Użytkownik nie powinien modyfikować zawartości tych komórek, ponieważ może to spowodować nieprzewidziane efekty.

570, $023a CDEVIC
   Numer identyfikacyjny szyny, używany przez SIO.

571, $023b CCOMND
   Kod rozkazu szyny, ustawiany przez SIO.

572, $023c CAUX1
   Bajt pomocniczy dla komendy, przenoszony z lokacji 778($030a).

573, $023d CAUX2
    Bajt pomocniczy dla komendy, przenoszony z lokacji 779 ($030b). I jeszcze kilka innych komórek używanych przez procedury transmisji szeregowej.

574, $023e TEMP
   Rejestr pomocniczy, używany przez SIO.

575, $023f ERRFLG
   Flaga błędu transmisji szeregowej.

576, $0240 DFLAGS
   Flaga dysku, odczytana z pierwszego bajtu pierwszego sektora dysku.

577, $0241 DBSECT
   Ilość tzw. "boot sectors", czyli sektorów zawierających kod procedury odczytu potrzebnych po włączeniu komputera plików. Odczytana z pierwszego sektora dysku.

578, 579, $0242, $0243 BOOTAD
   Adres ładowania kodu, przeprowadzającego odczyt potrzebnych po włączeniu komputera plików. Ten sam adres bywa także chwilowo wpisywany do komórki RAMLO (4, 5). Po odczytaniu, zawartość "boot sectors" zostaje przeniesiona pod podany tutaj adres. Normalnie, np. DOS-y ładują ten swój fragment od adresu 1792 ($0700).

580, $0244 COLDST
   Flaga zimnego startu. W zależności od tego, jaka wartość jest wpisana do tej komórki system operacyjny komputera w różny sposób reaguje na naciśnięcie klawisza RESET. Normalnie ta komórka pamięci zawiera zero, dzięki czemu użycie klawisza RESET nie powoduje restartu systemu, połączonego z próbą odczytu wstępnego. Wpisanie do COLDST dowolnej wartości niezerowej zmusza system operacyjny do wykonania wszystkich akcji, zazwyczaj wykonywanych zaraz po włączeniu zasilania.

   Posiadaczom pakietu QA proponuję podejrzenie zawartości tej komórki pamięci przy pomocy programu XLF w sytuacji normalnej pracy i po wywołaniu komendy BYE interpretera BASIC-u. Wcale nie musimy zgodzić się na zimny start komputera! Wystarczy wyzerować COLDST oraz zmienić zawartość komórki 202 (to wymagania BASIC-u), aby powrócić do przerwanej pracy.

581, $0245 ...
   Kolejna komórka bez przydziału.

582, $0246 DSKTIM
   Rejestr zawierający tzw. timeout dla operacji dyskowych. Procedury komunikacji ze stacją dysków zapisują tutaj maksymalny czas, w którym napęd musi zakończyć zleconą mu operację. Standardowo OS wpisuje tutaj wartość 224, co ma oznaczać, że sterownik dysku musi zakończyć pracę w ciągu siedmiu sekund od otrzymania polecenia. Wystarcza to do wykonania każdej operacji za wyjątkiem formatowania dyskietki, stąd programy, które to robią, same ustawiają odpowiednio dłuższy czas.

583-622, $0247-$026e LINBUF
   Czterdziestoznakowy bufor wiersza. Używany przez edytor do chwilowego przechowywania tekstu podczas przesuwania ekranu. Procedura przesuwająca zapisuje wektor tego bufora w komórkach 100 i 101 ($64, $65).

623, $026f GPRIOR
   Rejestr wyboru priorytetu, cień komórki 53275 ($d01b). Używany głównie do określenia, które z obiektów ekranowych mają być wysunięte przed inne, do tworzenia piątego gracza oraz do wybierania koloru nakładających się fragmentów graczy. Znaczenie poszczególnych bitów:

0 Gracze 0-3, pola gry 0-3, tło.
1 Gracze 0-1, pola gry 0-3, gracze 2-3, tło.
2 Pola gry 0-3, gracze 0-3, tło.
3 Pola gry 0-1, gracze 0-3, pola gry 2-3, tło.
4 Cztery pociski tworzą dodatkowego piątego gracza.
5 Nakładające się fragmenty graczy przyjmują trzeci kolor.
6,7 Tryby graficzne GTIA.

   Może się zdarzyć, że przypadkowo ustawimy bity GPRIOR tak, że wybierzemy dwa sprzeczne priorytety wyświetlania. W takim wypadku w miejscach, w których pokrywają się gracze pojawi się kolor czarny. Ten sam efekt otrzymamy jeśli nie ustawimy bitu piątego.

    Zapisanie jedynki do piątego bitu umożliwia stworzenie wielokolorowych graczy. W miejscach gdzie nakładają się obiekty 0 i 1 oraz 2 i 3 (tylko w tych kombinacjach) pojawi się trzeci kolor, utworzony z dwóch kolorów graczy.

   Więcej informacji o grafice graczy i pocisków w odpowiednim (jednym z przyszłych) odcinku cyklu.

   Na szczególną uwagę zasługują bity 6 oraz 7 opisywanego rejestru. Zezwalają one na włączenie dodatkowych trybów graficznych GTIA. Tryby te zostały wprowadzone jako rozszerzenie możliwości graficznych małego ATARI wraz z pojawieniem się układu GTIA, który zastąpił przestarzały CTIA.

   Sam ANTIC, o którym pisałem sporo w poprzednim odcinku mapy pamięci nie wystarczy do utworzenia na monitorze kompletnego obrazu. Nie generuje on bowiem kolorów, które często bywają bardzo potrzebne. ANTIC przesyła informacje o kolorach do wspomnianego już GTIA, który dopiero tworzy kolorowy wizerunek pewnego obszaru pamięci komputera. Odpowiednią kombinacją bitów 6 i 7 komórki GPRIOR można wybrać sposób przedstawiania danych przez GTIA. A oto zestawienie możliwych rodzajów wyświetlania.

00 Normalne wyświetlanie. Ta kombinacja bitów umożliwia uruchomienie starych programów dla ATARI XL/XE ponieważ jest właściwa dla układu CTIA.
01 Taka kombinacja bitów odpowiada trybowi graficznemu 9 BASIC-u. Dane obrazu zbierane są w czterobitowe kawałki interpretowane jako stopnie jasności koloru z rejestru COLBAK. Np. w trybie wysokiej rozdzielczości GTIA wyświetla paski o tej samej wysokości, lecz czterokrotnie szersze od normalnych punktów.
10 Taka kombinacja bitów odpowiada trybowi graficznemu 10 BASIC-u. Czterobitowe kawałki, na jakie podzielona zostaje pamięć obrazu są interpretowane jako numery rejestrów koloru. W teorii więc można by korzystać z 16 kolorów, lecz niestety GTIA dysponuje jedynie dziewięcioma.
11 Taka kombinacja bitów odpowiada trybowi graficznemu 11 BASIC-u. Czterobitowe kawałki, pobrane z pamięci obrazu są teraz interpretowane jako kody kolorów, których jasność jest pobierana z rejestru COLBAK.

   Przedstawiony poniżej maleńki programik pozwoli nam na obejrzenie opisanych przed chwilą trybów GTIA.
10 GRAPHICS 0:SCRMEM=PEEK(88)+256*PEEK
(89)
20 FOR I=0 TO 319:POKE SCRMEM+I,RND(0)
*255:NEXT I
30 GOSUB 100
40 POKE 623,128
50 GOSUB 100
60 GRAPHICS 0:END
100 IF PEEK(764)=255 THEN 100
110 POKE 764,255:RETURN
   W wierszu 40 wystarczy zmienić wartość 128 na 64 lub 192, aby zobaczyć pozostałe dwa tryby. Grafikę 0 w wierszu 10 również można zmienić na dowolną inną.

Jarosław Syrylak




Powrót na start | Powrót do spisu treści | Powrót na stronę główną

Pixel 2001