512k SRAM Zusatzspeicher
512k SRAM Zusatzspeicher für den Atari 600/800/1200XL und 800/130XE
Als ich dieses Projekt begann sollte es nur eine einfache 512k Speichererweiterung werden. Schnell musste ich feststellen dass diese nicht von allen Programmen unterstützt wurde. So kam mir die Idee durch zwei Schalter vier verschiedene Betriebsarten zu aktivieren, als da wären "Speichererweiterung aus", "256k CompyShop Mode", "256k Rambo Mode" und 512k Rambo Mode.
Zuerst aber möchte ich die Fragen: „Wie arbeitet eine Speichererweiterung im XL/XE und warum kann ich nicht auf den kompletten Speicher zugreifen?“, beantworten.
Als Prozessor wird im Atari die 6502 CPU mit 16 Adress- und 8 Datenleitungen benutzt. 16 Adressleitungen können jedoch nur einen Bereich von 2^16 (2 hoch 16) = 65536 = $FFFF adressieren welches einen 64k Speicher entspricht. Um dennoch auf mehr Speicher zugreifen zu können hat Atari selbst einen Rechner entworfen, den 130XE, der durch einen Trick 4 zusätzliche Bänke a´ 16k in einem Speicherbereich einblenden kann. Als Besonderheit hat die CPU oder der Antic unabhängig voneinander die Möglichkeit den erweiterten Speicher anzusprechen. (Da diese Art des Zugriffs die Fa. CompyShop in ihrer Speichererweiterung mit übernommen hat, benutzt man deren Namen zur Identifizierung.) Beim zweiten Port des 6520 PIA-Bausteins (PB) werden die Bits PB2 und PB3 für die Seitenumschaltung, PB4 für den 6502 CPU Zugriff und PB5 für den Antic Zugriff benutzt. Der Port PB liegt an der Adresse $D301 – 54017.
Folgende Funktionen haben diese Bits:
PB0=0 | Schaltet das OS-Rom aus und aktiviert das dahinterliegende RAM |
PB0=1 | Basic ist eingeschaltet |
PB2=x | Angewählte Seite des externen Speicher – siehe Tabelle |
PB3=x | Angewählte Seite des externen Speicher – siehe Tabelle |
PB4=0 | 6502 CPU Zugriff auf den externen Speicher ein |
PB5=0 | Antic Zugriff aktiv auf den externen Speicher ein |
PB6 | Frei |
PB7=0 | Selbsttest wird aus dem OS in den Speicherbereich von $5000-$57FF gespiegelt |
Über PB2 und PB3 kann eine von 4 möglichen Seiten des Zusatzspeichers im Bereich $4000-$7FFF (16384-32767) eingeblendet werden.
PB2 | PB3 | Angewählte Seite |
0 | 0 | 1 |
1 | 0 | 2 |
0 | 1 | 3 |
1 | 1 | 4 |
Nach dem Einschalten des 130XE wird PB4 und PB5 vom OS auf „1“ gesetzt. Der Antic und die 6502 CPU teilen sich zusammen den 64k Arbeitsspeicher. Wird PB4 auf „0“ und z.B. PB2 und PB3 auf „1“ geändert arbeitet die CPU auf der Seite 4 des Zusatzspeichers im Bereich zwischen $4000-$7FFF während der Antic darin im normalen Arbeitsspeicher verbleibt. Bei PB5=0 greift auch der Antic auf die gleiche Seite zu. Dies zeigt eine Besonderheit des Grafikchips aus. Er hat einen eigenen Adressierungsbaustein und kann auch ohne die CPU den Arbeitsspeicher per DMA (direct memory access) auslesen. Leider wurde auch die Logik des Memory Refresh, der Speicher Auffrischung für das Dynamische RAM, ohne Abschaltmöglichkeit mit fest integriert.
In der groben Übersicht der Speicheraufteilung eines 800XL sind einige Eigenheiten des Atari Systems erkennbar. Das 16k OS (Operating System), heute eher unter dem Begriff BIOS zu finden, teilt sich im oberen Bereich den Speicher mit allen System IC´s (diese sind nicht abgebildet) und einem kleinem Ausschnitt zwischen $D500-$D5FF mit dem Modul Port (cartridge). Der Selbsttest (Selftest) wird durch PB7=0 aktiviert und im Bereich $5000-$57FF gespiegelt. Der erweiterte Speicher (extended Memory) liegt bei $4000-$7FFF. Man erkennt hier das erste Problem der Speicherüberschneidung. PB7 soll mit zur Seitenumschaltung benutzt werden ohne dass sich der Selbsttest einschaltet. Eine Logik im GAL unterbindet die Ausgabe „Selftest“ bei aktiviertem Zusatzspeicher. Folgende Ausgänge an PB werden für den 512k Mode der Erweiterung verwendet:
MODE 512K RAMBO – 64 Seiten a´16k
PB2=X | Angewählte Seite des externen Speicher – siehe Tabelle |
PB3=X | Angewählte Seite des externen Speicher – siehe Tabelle |
PB4=0 | 6502 CPU und Antic Zugriff auf den externen Speicher ein |
PB5=X | Angewählte Seite des externen Speicher – siehe Tabelle |
PB6=X | Angewählte Seite des externen Speicher – siehe Tabelle |
PB7=X | Angewählte Seite des externen Speicher – siehe Tabelle |
PB2 | PB3 | PB5 | PB6 | PB7 | Angewählte Seite |
0 | 0 | 0 | 0 | 0 | 1 |
1 | 0 | 0 | 0 | 0 | 2 |
0 | 1 | 0 | 0 | 0 | 3 |
1 | 1 | 0 | 0 | 0 | 4 |
* | * | * | * | * | **** |
1 | 1 | 1 | 1 | 1 | 64 |
PB4 schaltet den Zusatzspeicher für die CPU und Antic ein. Diese Art bezeichnet man auch als Rambo
PB4 schaltet die CPU, PB5 den Antic auf den zusätzlichen Speicher - genannt CompyShop Mode.
MODE 256K CompyShop – 32 Seiten a´16k
PB2=X | Angewählte Seite des externen Speicher – siehe Tabelle |
PB3=X | Angewählte Seite des externen Speicher – siehe Tabelle |
PB4=0 | 6502 CPU Zugriff auf den externen Speicher ein |
PB5=0 | Antic Zugriff aktiv auf den externen Speicher ein |
PB6=X | Angewählte Seite des externen Speicher – siehe Tabelle |
PB7=X | Angewählte Seite des externen Speicher – siehe Tabelle |
Die beiden Blockschaltbilder zeigen jeweils noch einmal den unterschiedlichen Zugriff auf den erweiterten Speicher.
Der Hardware- und Anschlussaufbau
Die Schaltung kommt mit einem GAL vom Typ 22V10 und einem 512k SRam vom Typ BS62LV4005PC-70 Speicherbaustein aus. Der Prototyp war direkt an der CPU angeschlossen - was sich als Fehler erwies. Das von der CPU erzeugte Phi2 Signal (der Takt, dem alle angeschlossenen Geräte folgen) wurde durch das GAL zusätzlich belastet. Es kam zu einer Signalverschleifung. Das Rechtecksignal glich eher einem Sägezahn mit dem Resultat, dass der Speicherzugriff nicht immer korrekt arbeitete. Daraufhin erfolgte der Anschluss am Antic. Hier kommt das PHI2 Signal verstärkt über ein TTL an. Zur Sicherheit kam PHI0 mit in die Verknüpfung und sorgt mit dem Write-Signal auch bei schlechten PHI2 Verlauf für eine stabile Funktion.
Das violette Signal zeigt den Phi2 Ausgang direkt an der CPU, das gelbe Signal nach der anschließenden TTL Auffrischung im Atari.
Wolfram (Mega-Hz ) hat die Schaltung erfolgreich in eine Platine umgesetzt. Vielen Dank nochmals dafür. Wer Interesse hat kann eine Erweiterung bei ihm erwerben. Er ist zur Zeit der einzige Anbieter.
An dieser Stelle sei auch Hias und Mathy für die erstklassige Hilfe beim Erstellen des GAL Codes gedankt.
Der Prototyp der 512k SRam Erweiterung mit 16V8Gal
1200XL inklusive 512k SRAM
Im 800XL eingebaute 512k SRam Erweiterung
Zu 1: Der Antic wird aus der 800XL Platine entfernt und in dem neuen Sockel der Erweiterung eingesetzt. Die Platine steckt im Antic Sockel des Boards.
Zu 2: MMU Anschlussplatine
Zu 3: PIA mit den Leitungsanschlüssen an PB2 bis PB7
Getestet wurde die Speichererweiterung im 600/800/1200XL und 800/130XE. Beim 130XE müssen die zusätzlichen 64k deaktiviert werden da es sonst zu fehlerhaften Speicherzugriffen durch Überschneidungen kommen kann. Die MMMU U3 wird entfernt und durch Brücken ersetzt.
Ob es sich um ein PAL oder NTSC Atari handelt kann durch den C0xxxxx Aufdruck am Antic festgestellt werden.
CO21698 PAL XL/XE - CO21697 NTSC XL/XE
Die Erweiterung läuft unabhängig vom System und ist in beiden Systemen einsetzbar.
Zum Abbuc Hardware Wettbewerb habe ich zusammen mit HardwareDoc (Christoph) einen 800XL mit allen Erweiterungen fertig gestellt. Durch sein Bios4Config entfallen beide Schalter für die Mode Einstellungen. Über das Display des Bios4Config kann die Speichererweiterung jetzt konfiguriert werden. Für den Betrieb der 512k SRam Erweiterung ist das Bios4Config aber nicht unbedingt erforderlich.
Im Display ist XRAM über die Menütaste ansprechbar und kann über UP und DOWN folgende Anzeige haben:
. XRAM=Off ------------------ Speicher ausgeschaltet.
· XRAM=256C ---------------- 256kbyte CompyShop aktiv
· XRAM=256R ---------------- 256kbyte Rambo aktiv
· XRAM=512k ---------------- 512kbyte Rambo aktiv
Alle Speicherbänke liegen im Bereich Hex $4000 bis $7FFF, Dezimal 16384 bis 32767 und werden mit der Speicheradresse Hex $D301, Dezimal 54017 umgeschaltet. Um im Basic auf die Rambo Speichererweiterung zuzugreifen sollte diese zuerst mittels Poke54017,237 aktiviert werden. Anschließend braucht man nur die jeweilige Dezimalzahl XXX mittels Poke 54017,XXX im Programm aufzurufen z.B. Poke54017,171 für die 9te Bank. Ausgeschaltet wird die Erweiterung durch Poke 54017,253. Bei der CompyShop Betriebsart wird der Antic Zugriff durch Poke 54017,221 , die CPU mit Poke 54017,237 und beide zusammen mit Poke 54017,205 eingeschaltet. ACHTUNG! Auch Basic verwendet ab einer gewissen Programmgröße den Speicherbereich $4000-$7FFF.
Liste der Speicherbänke bei der 512k Rambo Betrieb
Bank Nr. | HEX=$D301 | Dezimal=54017 |
0 | $EF | 237 |
1 | $EB | 233 |
2 | $E7 | 229 |
3 | $E3 | 225 |
4 | $CF | 207 |
5 | $CB | 203 |
6 | $C7 | 199 |
7 | $C3 | 195 |
8 | $AF | 175 |
9 | $AB | 171 |
10 | $A7 | 167 |
11 | $A3 | 163 |
12 | $8F | 143 |
13 | $8B | 139 |
14 | $87 | 135 |
15 | $83 | 131 |
16 | $6F | 111 |
17 | $6B | 107 |
18 | $67 | 103 |
19 | $63 | 99 |
20 | $4F | 79 |
21 | $4B | 75 |
22 | $47 | 71 |
23 | $43 | 67 |
24 | $2F | 47 |
25 | $2B | 43 |
26 | $27 | 39 |
27 | $23 | 35 |
28 | $F | 15 |
29 | $B | 11 |
30 | $7 | 7 |
31 | $3 | 3 |
Liste der Speicherbänke bei der 256k Rambo Betrieb
Bank Nr. | HEX=$D301 | Dezimal=54017 |
0 | $EF | 237 |
1 | $EB | 233 |
2 | $E7 | 229 |
3 | $E3 | 225 |
4 | $CF | 207 |
5 | $CB | 203 |
6 | $C7 | 199 |
7 | $C3 | 195 |
8 | $AF | 175 |
9 | $AB | 171 |
10 | $A7 | 167 |
11 | $A3 | 163 |
12 | $8F | 143 |
13 | $8B | 139 |
14 | $87 | 135 |
15 | $83 | 131 |
Liste der Speicherbänke im 256k CompyShop Betrieb
Bank Nr. | HEX=$D301 | Dezimal=54017 |
0 | $EF | 237 |
1 | $EB | 233 |
2 | $E7 | 229 |
3 | $E3 | 225 |
4 | $AF | 173 |
5 | $AB | 169 |
6 | $A7 | 165 |
7 | $A3 | 161 |
8 | $6F | 109 |
9 | $6B | 105 |
10 | $67 | 101 |
11 | $63 | 98 |
12 | $2F | 45 |
13 | $2B | 41 |
14 | $27 | 37 |
15 | $23 | 33 |
Anhang: Schaltplan inklusive Pinbelegung und GAL Listing.
Viel Erfolg beim Nachbau,
Bernd Herale