Poprosiłem
Adama "Asal" Salamona, który zaprojektował
poprawione rozszerzenie pamięci Atari do 576kB i 1MB, aby podzielić
się swoją wiedzą i w sposób prosty i przejrzysty dla nas, laików,
wyłożył jakie są różnice, wady i zalety przeróżnych rozszerzeń
montowanych do Atari. Poniżej jego pouczający opisik:
Rozszerzenia pamięci w Atari
"Jak wiadomo, w Atari dodatkową pamięć włącza się w postaci
banku w obszarze $4000-$7fff. Ponieważ bank ten zajmuje 16kB, do
rozszerzenia Atari o dodatkowe 64kB (tak jak w 130XE) potrzeba 4
banków, dla 256kB - 16 banków, dla 512kB - 32 banki, a dla 1MB aż
64 banki.
Numer banku trzeba oczywiście zapisać na określonej liczbie bitów,
wynikającej z ogólnej liczby banków. I tak, dla dodatkowych 64kB
potrzebujemy tylko dwóch bitów, dla 256kB - czterech, dla 512kB -
pięciu a dla 1MB - sześciu. W Atari przyjęło się, że bity te
pochodzą z rejestru PortB.
Projektant rozszerzenia pamięci musi więc w jakiś sposób
przydzielić bity wybierające banki w rejestrze PortB licząc na to,
że programy użytkowe będą umiały to potem wykryć. Przyjęto
następujące przypisanie:
- dla dodatkowych 64kB w standardzie 130XE - bity 2 i 3
PortB
- dla dodatkowych 256kB w standardzie RAMBO - bity 2, 3, 5 i
6
- dla dodatkowych 256kB w standardzie COMPY - bity 2, 3, 6 i
7
- dla dodatkowych 512kB - bity 1, 2, 3, 6 i 7
- dla dodatkowego 1MB - bity 1, 2, 3, 5, 6 i 7
Banki włączane są wtedy, gdy bit 4 PortB jest ustawiony na 0. W
przeciwnym wypadku w obszarze $4000-$7fff włączana jest pamięć
podstawowa.
Kompatybilność, wady, zalety
Z powyższego przypisania bitów wynika kilka problemów. Po pierwsze,
nie wszystkie programy umieją wykryć całą dostępną pamięć, niektóre
ograniczają się tylko do sprawdzania niektórych bitów PortB,
skutkiem czego widziana przez nie pamięć jest mniejsza niż
fizycznie zamontowana.
Po drugie, bity 7 i 1 w rozszerzniach o 512KB i 1MB sterują zarówno
dostępem do SELF-TESTu (lub QMEG-a) i BASIC-a oraz wyborem banku
pamięci. Problem ten rozwiązuje się w ten sposób, że stan bitów 7 i
1 jest "zapamiętywany" gdy aktywna jest pamięć podstawowa (bit 4 ma
wartość 1) i ten zapamiętany stan steruje potem dostępem do
SELF-TESTu i BASIC-a gdy będzie aktywna pamięć rozszerzona.
Skutkiem tego, gdy włączona jest pamięć rozszerzona, stanu
SELF-TESTu i BASIC-a nie można zmienić, ale nie jest to dużym
problemem, gdyż programy na ogół tego nie robią.
Po trzecie i najważniejsze, w Atari 130XE przyjęto, że bit 5 będzie
umożliwiał dostęp Anticowi do rozszerzonej pamięci. W skrócie
chodzi o to, że gdy bit 5 PortB przyjmuje wartość 0 i Antic
odczytuje pamięć obrazu z zakresu $4000-$7fff, zezwala mu się na
dostęp do pamięci rozszerzonej. Gdy natomiast bit 5 ma wartość 1,
przydziela się pamięć podstawową. Bit 4 PortB pełni w Atari 130XE
podobną funkcję w odniesieniu do CPU.

rozszerzenie Asala: 576kB
Jak widać zatem, w rozszerzeniach RAMBO oraz 1MB bezpowrotnie
tracimy możliwość niezależnego przydzielania pamięci Anticowi i
CPU, gdyż bit 5 jest użyty do adresowania banku pamięci. W
rozszerzeniach tych pamięć Anticowi i CPU przydziela się tylko na
podstawie bitu 4. Niestety, fakt ten oznacza niższą kompatybilność,
ponieważ są programy (np. "Atari Planetarium" oraz emulator Apple
II), które wymagają niezależnego sterowania przydziałem pamięci
rozszerzonej dla Antica i CPU. Skutkiem tego, w trybach RAMBO i 1MB
na ekranie po uruchomieniu tych programów zobaczymy "krzaki". Aby
temu zapobiec, w rozszerzeniu SIMM_EXPANSION (oraz w
moim :) przewidziano przełącznik, zmniejszający o połowę pamięć
rozszerzoną, ale za to przywracający kompatybilność.