Powrót do spisu treści

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.
Zientara Wojciech: Mapa pamięci Atari XL/XE. Procedury wejścia-wyjścia, SOETO, Warszawa, 1988.