Rozdział 11
ZARZĄDZANIE PAMIĘCIĄ
Druga połówka układu PIA - port B - wykorzystywana była w
starych modelach do obsługi gniazd joysticków 2 i 3. Usunięcie
tych joysticków nie zostało podyktowane nadmiarem
manipulatorów.
Podczas kolejnych modernizacji systemu komputerowego przede
wszystkim przybywało pamięci:
Atari 400 - 16 KB RAM i 10 KB ROM, razem 26 KB
Atari 800 - 48 KB RAM i 10 KB ROM, razem 64 KB
Atari 600XL - 16 KB RAM i 24 KB ROM, razem 40 KB
Atari 800XL - 64 KB RAM i 24 KB ROM, razem 88 KB
Atari 65XE - 64 KB RAM i 24 KB ROM, razem 88 KB
Atari 130XE - 128 KB RAM i 24 KB ROM, razem 152 KB
Początkowo planowano jeszcze model 260XE z pamięcią 256 KB RAM
i 24 KB ROM.
Niestety przestrzeń adresowa (możliwy do zaadresowania
obszar pamięci) mikroprocesorów 6502 i ANTIC wynosi tylko 64 KB
i w żaden sposób nie można jej zwiększyć. Jedynym sposobem
umożliwienia dostępu do zwiększonej przestrzeni jest
podzielenie jej na części (tzw. banki) i dołączanie ich w miarę
potrzeby. Funkcję takiego przełącznika banków pełni specjalny
układ logiczny MMU (Memory Management Unit).
Do sterowania MMU potrzebny jest jednak rejestr w już
istniejącej strukturze komputera. Do tego celu wykorzystano
właśnie PORTB (Port B - $D302) układu PIA, co wymusiło
rezygnację z dwóch gniazd joysticków.
Rejestr PBCTL (Port B ConTroL - $D303) sterujący między
innymi pracą PORTB jest teraz w tym zakresie nieużyteczny. Przy
wykorzystywaniu innych jego funkcji należy jednak uważać, aby
nie zmieniać wartości bitu 2. Spowoduje to bowiem nieuchronne
zawieszenie systemu operacyjnego.
Ponadto niektóre operacje przełączania pamięci są
wykonywane sprzętowo na podstawie sygnałów doprowadzanych do
odpowiednich styków zewnętrznych złączy komputera. Umożliwia to
dołączenie cartridge'ów i nowych urządzeń.
W rodzinie komputerów Atari jest jeszcze jeden (niezbyt
udany) model - 1200XL. W tym modelu bity 2 i 3 portu B zostały
użyte do sterowania diodami elektroluminescencyjnymi. Gdy jeden
z tych bitów jest skasowany, to dioda LED świeci się, w
przeciwnym razie jest zgaszona. Dioda LED 1 sterowana bitem 2
oznacza zablokowanie klawiatury. Dioda LED 2 (bit 3) oznacza
korzystanie z międzynarodowego zestawu znaków.
11.1. Atari 65XE/800XL
Modele 800XL i 65XE mają po 64 KB pamięci RAM. Obszar
pamięci ROM musi się więc pokrywać z częścią RAM (ma takie same
adresy). Cały obszar ROM można podzielić funkcjonalnie na trzy
podstawowe zespoły: system operacyjny, interpreter Atari Basic
i program testujący (selftest).
Dla przełączania trzech obszarów wystarczą trzy bity, więc
tylko taka część PORTB jest wykorzystywana. Normalna
konfiguracja systemu komputerowego jest następująca: program
testujący wyłączony, interpreter Atari Basic wyłączony, system
operacyjny włączony. Natomiast normalną zawartością rejestru
PORTB jest $FF - wszystkie bity ustawione. Od razu widać, że
sterowanie obszarem ROM zawierającym OS musi być odwrotne niż
pozostałymi częściami ROM.
Czas już na szczegóły. W rejestrze PORTB wykorzystywane są
tylko bity 0, 1 i 7. Ich przyporządkowanie jest następujące:
Bit 0 steruje obszarem ROM zawierającym system operacyjny
(adresy $C000-$CFFF oraz $D800-$FFFF). Jego skasowanie powoduje
odłączenie OS. Jeśli w tym obszarze RAM nie ma innego systemu
operacyjnego, to komputer zawiesi się podczas najbliższego
przerwania synchronizacji pionowej. Aby tego uniknąć, trzeba
zablokować przerwania NMI i IRQ w odpowiednich rejestrach. Z
tej możliwości korzysta wiele programów. Używają one własnego
systemu operacyjnego lub modyfikują istniejący system po
uprzednim przepisaniu go do pamięci RAM. Ponadto obszar pamietu
procedur zmiennoprzecinkowych ($D800-$DFFF) może zostać
odłączony na drodze sprzętowej i w to miejsce podstawiany jest
obszar pamięci przyłączony do szyny równoległej. Trzeba w tym
celu podać sygnał niski (zewrzeć do masy) styk MPD szyny
równoległej (800XL - styk 43 w Parallel Bus, 130XE - styk 4 w
Enhanced Cartridge Interface, w 65XE jest to niemożliwe).
Bit 1 steruje obszarem ROM zawierającym interpreter Atari
Basic ($A000-$BFFF). Jego skasowanie powoduje dołączenie
interpretera. W przeciwnym przypadku w tym obszarze adresowym
znajduje się blok 8 KB RAM. Podanie wysokiego sygnału (5 V) na
styk En5 w szczelinie cartridge'a (styk 14) powoduje odłączenie
zarówno interpretera, jak i pamięci RAM oraz umieszczenie w tym
obszarze adresowym pamięci cartridge'a. Analogicznie sygnał
wysoki podany na styk En4 (styk A) odłącza RAM w obszarze
$8000-$9FFF.
Bit 7 steruje obszarem ROM zawierającym program testujący.
Fizycznie zajmuje on obszar od $D000 do $D7FF. Po skasowaniu
bitu 7,oprócz uaktywnienia tego obszaru,przełączane są jeszcze
linie adresowe. W ten sposób program testujący jest przenoszony
do obszaru adresowego od $5000 do $57FF.
11.2. Atari 130XE
W modelu 130XE został podwojony obszar pamięci RAM.
Dodatkowe 64 KB RAM są podzielone na cztery banki (0-3) po 16
KB każdy. Można je dołączyć w miejsce bloku 16 KB standardowej
pamięci RAM ($4000-$7FFF). Ponieważ fizycznie nie zwiększa to
dostępnego obszaru pamięci zastosowano jeszcze możliwość
indywidualnego przełączania banków pamięci dla obu procesorów
(CPU i ANTIC). Do realizacji tych funkcji wykorzystywane są
cztery dalsze bity PORTB (bity 0, 1 i 7 mają znaczenie takie
jak w 800XL i 65XE).
Bity 2 i 3 służą do wyboru banku dodatkowej pamięci, który
będzie umieszczony w obszarze $4000-$7FFF. Wszystkie dodatkowe
banki mają te same adresy, choć niektóre źródła podają to
inaczej. Wartość tej pary bitów odpowiada numerowi
przyłączonego banku:
para bitów 00 - bank 0
para bitów 01 - bank 1
para bitów 10 - bank 2
para bitów 11 - bank 3
Jednak sama zmiana numeru banku nic jeszcze nie zmienia w
konfiguracji systemu. Aby umożliwić dostęp do dodatkowej
pamięci trzeba wykorzystać dwa następne bity w PORTB.
Bity 4 i 5 służą do ustalenia dostępu do dodatkowej
pamięci. Bit 4 steruje dostępem CPU, a bit 5 dostępem ANTIC-a.
Jeżeli bit jest ustawiony, to procesor, któremu bit ten
odpowiada, korzysta z pamięci podstawowej. Po skasowaniu bitu
część przestrzeni adresowej procesora jest ustawiana na
dodatkowy bank RAM o numerze określonym przez bity 2 i 3. Gdy
bity 4 i 5 są ustawione, to niezależnie od wartości bitów 2 i 3
oba procesory korzystają z pamięci podstawowej. W tym trybie
pracy 130XE jest w pełni zgodny z 65XE i 800XL.
bit 4 bit 5 pamięć CPU pamięć ANTIC-a
0 0 dodatkowa dodatkowa
0 1 dodatkowa główna
1 0 główna dodatkowa
1 1 główna główna
Korzystanie z dodatkowej pamięci 130XE jest możliwe z
poziomu dowolnego języka programowania. Najczęściej jednak jest
ona wykorzystywana jako ramdysk. Prawie wszystkie dyskowe
systemy operacyjne zawierają programy automatycznie zakładające
ramdysk podczas inicjowania systemu. Ponadto wiele programów
istnieje w dwóch wersjach: pełnej dla 130XE oraz nieco
okrojonej dla pozostałych modeli.
Przy wykorzystaniu dodatkowych banków pamięci dla ANTIC-a
bardzo łatwo można uzyskać wiele interesujących efektów.
Na przykład szybkie przełączanie banków ułatwia tworzenie
animacji. Wykorzystanie wszystkich możliwości zależy tylko od
inwencji programisty.
11.3. Rozszerzenia pamięci
Jak mówi jedno z popularnych praw Murphy'ego, każdy
komputer ma zbyt mało pamięci. Wychodząc naprzeciw
zapotrzebowaniu użytkowników wiele firm opracowało rozszerzenia
pamięci RAM dla komputerów XL/XE do 256 i 512 KB, a nawet do 1
MB. Zarządzanie takim dużym obszarem pamięci jest rozwiązywane
na wiele różnych sposobów.
Najprostszym sposobem jest inne wykorzystanie bitów 2-6
rejestru PORTB. Cała pamięć RAM komputera jest w takim
przypadku dzielona na banki po 16 KB. Przy pojemności 256 KB
daje to 16 banków, a przy 512 KB - 32 banki. Do wyboru banku
potrzeba więc odpowiednio cztery lub pięć bitów. Liczba ta nie
przekracza ilości niewykorzystanych bitów rejestru PORTB.
Wybrany bank pamięci jest ustawiany w obszarze $4000-$7FFF.
Ponieważ normalnie wszystkie bity w PORTB są ustawione, to po
zainicjowaniu systemu jest to zawsze bank o najwyższym numerze.
Trzy z pozostałych banków tworzą resztę podstawowej pamięci RAM
komputera. Pozostaje do zagospodarowania jeszcze 192 (12
banków) lub 448 KB (28 banków), a właściwie o 16 KB więcej,
gdyż jeden bank podstawowy zajmuje obszar ROM i można go bez
obaw wykorzystać. W tym przypadku nie ma możliwości oddzielnego
adresowania banków przez ANTIC i CPU.
Dwie najpopularniejsze na Zachodzie wersje rozszerzeń
pamięci działają na nieco innej zasadzie. Są one bowiem
dostosowane do wszystkich wersji Atari, co uniemożliwia użycie
rejestru PORTB. W rozszerzeniu firmy Axlon do wyboru banków
pamięci służy rejestr umieszczony pod adresem $CFFF, a firma
Mosaic umieściła ten rejestr w $FFC0. Zastosowanie oddzielnego
rejestru oddaje do dyspozycji układu zarządzania pamięcią aż
osiem bitów.
W obu przypadkach rejestry znajdują się w przestrzeni
zajmowanej normalnie przez pamięć ROM. Rozwiązanie to zmusza do
użycia dodatkowych układów logicznych, które rozwiązują ten
problem. Ponieważ w Polsce takie rozwiązania nie są spotykane,
to ich opis pominiemy.
|