Tajemnice ATARI

MAPA PAMIĘCI


    Rozpoczynamy drukowanie stałego cyklu, który ogólnie można nazwać mapą pamięci. Opracowany został na podstawie książki "Mapping the Atari" oraz wieloletnich doświadczeń w programowaniu w asemblerze 6502 na komputerze Atari 800 XL. Będą tu opisywane wszystkie ważniejsze zmienne systemowe, wektory, i procedury znajdujące się w pamięci małego ATARI. Do niektórych lokacji będą podawane ciekawe przykłady wykorzystania w Basicu, a także w asemblerze.

   Zastosowano oznaczenia:

$ poprzedza liczbę zapisaną w notacji szesnastkowej;
% poprzedza liczbę zapisaną w notacji dwójkowej.

   Najogólniej rzecz biorąc, całą pamięć komputera tworzy 65536 ($10000) komórek ponumerowanych od 0 ($0000) do 65535 ($ffff). W każdej takiej komórce może być zapisany bajt danych. Bajt z kolei składa się z ośmiu bitów (bit jest to podstawowa jednostka Informacji 0 lub 1), co daje nam możliwość zapamiętania liczby od %00000000 do %11111111, lub jak kto woli 0-256 ($00-$ff). Tak więc na określenie ADRESU komórki potrzeba aż dwóch bajtów (256*256=65536). Jeden z tych bajtów - ten bardziej znaczący ("stojący z lewej" jak byśmy to określili przyzwyczajeni do pozycyjnego zapisu liczb) nazywamy starszym, a drugi młodszym. Np.: w adresie 255 ($00ff) bajt starszy = 0 ($00), a młodszy = 255($ff); w adresie 258 ($0102) starszy = 1 ($01), a młodszy = 2 ($02). Na marginesie, wystarczy spojrzeć na sposoby zapisu: szesnastkowy i dziesiętny, by przekonać się, który w tym wypadku jest wygodniejszy! Każdą grupę komórek, której starszy bajt adresu jest ten sam, nazywamy stroną pamięci. Każda strona zajmuje więc 256 kolejnych lokacji pamięci. Starszy bajt adresu określa numer strony. W komputerach ATARI XL/XE przyjęto zasadę, że w pamięci adresy dwubajtowe przechowywane są w kolejności starszeństwa bajtów (młodszy, starszy). Jeszcze mała repetycja na temat bajtu. Kolejne bity są ponumerowane w kolejności: najmniej znaczący jest bit zerowy (ten po prawej stronie w standardowym zapisie), a najbardziej znaczący to bit siódmy. Na przykład w liczbie %00100001 ustawione są bity zerowy (0) i piąty (5).

   W ATARI serii 130 (i więcej) XL pamięci jest trochę więcej, jednak z punktu widzenia mikroprocesora nic się nie zmienia. Dodatkowa pamięć zorganizowana jest w tzw. banki, które za pomocą układów elektronicznych mogą być włączane kolejno (według żądania) zawsze w ten sam obszar pamięci ($0000-$ffff). Szczegóły techniczne są teraz nieważne, zostaną omówione, gdy dojdziemy do opisu komórki odpowiadającej za przełączanie banków.

   Najogólniej pamięć można podzielić na RAM (pamięć zapisywalna) i ROM (pamięć stała). Jak same nazwy wskazują zawartość RAM-u może być dowolnie zmieniana, natomiast dane w ROM-ie zapisane są na stałe. RAM nazywamy też pamięcią operacyjną, gdyż w niej właśnie wykonują się nasze programy, trzymane są dane itp. W ROM-ie natomiast umieszczony jest system operacyjny komputera, rejestry WE/WY, słowem wszystkie niezbędne procedury potrzebne, by komputer w momencie włączenia go do prądu "ożył".

Parę słówek:

wektor
BOOT

flaga
ciepły
start
zimny start
maska
cień

timer
CIO
handler
timeout
bufor
- para komórek, które zawierają konkretny adres w pamięci.
- słowo nieprzetłumaczalne bezpośrednio. Opisowo znaczy proces automatycznego   ładowania programu (z dysku lub kasety) zaraz po włączeniu komputera.
- bajt przybierający różne (określone) wartości;
- proces ponownego ustawiania niektórych zmiennych systemowych i wektorów (np.   naciśnięcie RESET -u);
- procedura startowa systemu;
- bajt w którym każdy bit ma odrębne znaczenie.
- komórka RAM-u, która odpowiada rejestrowi w ROM-ie (co 1/50 sek. cienie są   przepisywane do rejestrów odpowiednich układów).
- licznik rewersyjny. Po odliczeniu do zera wysyła przerwanie.
- centralna procedura obsługi urządzeń WEjścia/WYjścia.
- zespół procedur obsługujących konkretne urządzenie WE/WY.
- czas w jakim urządzenie WE/WY musi odpowiedzieć na komendę do niego wysłaną.
- obszar pamięci przeznaczony do chwilowego przechowywania danych.
   Komórki o adresach 0-255 ($00-$ff) (a więc strona zerowa) mają specjalne właściwości. Po pierwsze operacje na nich wykonują się szybciej, a po drugie mogą być wykorzystywane jako swoiste rejestry wspomagające mikroprocesora.

   Lokacje $00-$7f (0-127) używane są przez system operacyjny (OS).

   Lokacje $80-$ff (128-255) zarezerwowane są dla BASIC-u jeżeli jest on włączony.

adres adres nazwa

szesnastkowo dziesiętnie komórki
$0000,$0001 00000,00001 LINZBS

W praktyce nie spotkałem się z przypadkiem, by były kiedykolwiek zmieniane lub ich zmiana wpływała na pracę systemu.

$0002,$0003 00002,00003 CASINI

Wektor inicjalizacji kasetowej. OS skacze przez ten wektor po udanym procesie BOOT z kasety.

$0004,$0005 00004,00005 RAMLO

1. Wskaźnik testu pamięci używany w czasie procedury startowej (przy włączaniu komputera).
2. Używane także do przechowywania adresu pod jaki wczytują się dane w procesie BOOT z dysku.

$0006 00006 TRAMSZ

Pomocniczy rejestr używany do określania wielkości pamięci RAM w czasie procedury startowej. Zawiera 1 gdy jest włączony basic lub cartridge A.

$0007 00007 TSTDAT

Rejestr procedury testującej RAM. Zawiera 1 gdy włożony jest cartridge B.

$0008 00008 WARMST

Flaga "ciepłego startu".
0 oznacza proces startowy;
$ff (255) oznacza, że został naciśnięty RESET.

$0009 00009 BOOT?

Flaga powodzenia procedury BOOT.
1. udał się BOOT z dysku;
2. udał się BOOT z kasety.

$000a,$000b 00010,00011 DOSVEC

Wektor powrotu do załadowanego oprogramowania Przez ten adres skacze BASIC po komendzie DOS, tudzież porządnie napisane programy wracają do DOS-u (COS-u) też skacząc przez ten wektor

$000c,$000d 00011,00012 DOSINI

Wektor inicjalizacji dyskowej. Jeżeli wykonany był BOOT dyskowy, to naciśnięcie RESET-u spowoduje skok przez ten adres.

$000e,$000f 00014,00015 APPMHI

Wskaźnik końca programu w BASICU. Komórki o adresach 08-01 są zerowane tylko przy "zimnym starcie"

$0010 00016 POKMSK

Maska przerwań układu POKEY. Cień lokacji $d20e (53774).

Ustawione poszczególne bity oznaczają:
bit 0 ($01)(1)
bit 1 ($02)(2)
bit 2 ($04)(4)
bit 3 ($08)(8)
bit 4 ($10)(16)
bit 5 ($20)(32)
bit 6 ($40)(64)
bit 7 ($80)(128)
-dozwolone przerwanie timera 1 układu POKEY
-dozwolone przerwanie timera 2 układu POKEY
-dozwolone przerwanie timera 4 układu POKEY
-dozwolone przerwanie końca transmisji szeregowej
-dozwolone przerwanie żądania szeregowego wysyłania danych
-dozwolone przerwanie gotowości szeregowego odczytu danych.
-dozwolone przerwania klawiatury
-dozwolone działanie klawisza BREAK
$0011 00017 BRKKEY

Flaga oznaczająca, czy został naciśnięty klawisz BREAK. Zero oznacza; naciśnięcie, każda inna wartość (standardowo $80) wskazuje, że nie był naciskany. Uwaga: gdy używamy tej komórki do obsługi klawisza BREAK musimy ją sami kasować po wykryciu naciśnięcia.

$0012-$0014 00017-00020 RTCLOK

Wewnętrzny zegar czasu rzeczywistego. Przy włączaniu komputera jest on zerowany, tak jak i przy ciepłym starcie. Zawartość komórki $0014 (20) jest zwiększana co 1/50 sekundy przez standardowe przerwanie synchronizacji pionowej. Gdy osiągnie 0 (256) zwiększana jest zawartość $0013 (19). Analogicznie po 256 zwiększeniach komórki 19, do 18 dodawane jest 1.

$0015,$0016 00021,00022 BUFADR

Pomocniczy wskaźnik adresu aktualnego bufora dyskowego.

$0017 00023 ICCOMT

Numer komendy CIO. Używany przez CIO do wyszukiwania właściwego rozkazu w tabeli komend konkretnego handlera.

$0018,0019 00024,00025 DSKFMS

Wektor programu dyskowego zarządzania plikami. Nie wszystkie DOS-y go używają.

$001a,$001b 00026,00027 DSKUTL

Wektor miejsca pamięci zarezerwowanego dla dyskowych programów użytkowych. Nie wszystkie DOS-y go używają.

$001c 00028 PTIMOT

Timeout drukarki. Standardowo ustawiany na wartość 30 (ok. 32 sekund). Jeżeli po tym czasie drukarka nie odpowie, to występuje bląd 138.

$001d 00029 PBPNT

Wskaźnik aktualnej pozycji (bajtu) w buforze drukarki. Przyjmuje wartości od zera do wartości komórki $1e (30).

$001e 00030 PBUFSZ

Rozmiar bufora drukarki. Standardowo ustawiany na 40.

$001f 00031 PTEMP

Pomocniczy rejestr handlera drukarki.

cdn.



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

Pixel 2001