# RAM Expansion Unit

Unter RAM Expansion Unit (REU) versteht man im weitesten Sinn eine Speichererweiterung in Form einer Erweiterungskarte oder eines Moduls. Hauptsächlich verwendet wird der Begriff aber für Speichererweiterungen von Commodore für deren Heimcomputer C64 und C128.

## Die Commodore-REUs für die Heimcomputer C64 und C128
### Einführung

Die von Commodore für den C64 und C128 hergestellten Speichererweiterungen ("RAM Expansion Units", kurz "REUs") sind Steckmodule, die in den sogenannten "Expansions Port" dieser Heimcomputer eingesteckt werden können.
Im Jahr 1985 wurden die REUs auf der Consumer Electronics Show (CES) in Chicago vorgestellt. Ursprünglich für den C128 entwickelt, können alle REUs jedoch ohne Einschränkungen auch am C64 betrieben werden (auch wenn auf der Platine dieser Steckmodule ausdrücklich "C128 RAM EXPANSION" zu lesen ist). Da es am "kleineren" C64 aufgrund des im Vergleich zu normalen Steckmodulen etwas höheren Stromverbrauchs Probleme beim Betrieb geben kann, wurde für den Betrieb ein etwas stärkeres C64-Netzteil empfohlen und mit dem Modell 1764 auch mitgeliefert. Dieses Netzteil ist keineswegs, wie oftmals vermutet, selten. Praktisch bekommt man es auf jedem Trödelmarkt oder gar auf bekannten Online-Auktionsplattformen massenhaft angeboten. Das Netzteil des C128 hingegen ist bereits ausreichend groß dimensioniert, so dass damit normalerweise keine Probleme auftreten.
Bei der REU handelt es sich um eine Art externe RAM-Disk, die zwar vom Computer aus angesprochen werden kann, jedoch nicht direkt. Dies liegt einerseits daran, dass der C64 nur 64 KiB Adressraum besitzt, andererseits an der fehlenden Unterstützung der REU im BASIC V2.0 bzw. Kernal des C64. Insbesondere wird der freie BASIC-Speicher des Computers nicht automatisch erweitert. Demzufolge kann die REU nur von Programmen genutzt werden, die ausdrücklich Speicherzugriffsroutinen für die REU implementieren.

### Technische Daten und Funktionsweise

Die drei Speichererweiterungen unterscheiden sich, oberflächlich gesehen, lediglich in ihrer Speicherkapazität. Es gibt drei verschiedene REUs:
* die Commodore 1700 mit 128 KB (enthält sechzehn 64-KBit-RAM-Chips)
* die Commodore 1764 mit 256 KB (enthält acht 256-KBit-RAM-Chips)
* die Commodore 1750 mit 512 KB (enthält sechzehn 256-KBit-RAM-Chips)
Bei den RAM-Chips handelt es sich um sogenannte dynamische RAMs (DRAMs), die typischerweise in regelmäßigen Abständen aufgefrischt werden müssen, damit sie ihren Inhalt nicht verlieren. Dies geschieht automatisch vom Computer aus. Schaltet man den Computer aus, gehen auch alle in der REU gespeicherten Daten verloren. Da der externe Speicher nicht direkt vom Computer aus angesprochen werden kann, muss eine Schnittstelle existieren, über die man vom Speicher lesen und in den Speicher schreiben kann. Diese Schnittstelle bildet ein von MOS Technologies hergestellter DMA-Chip, der MOS 8726, auch REC genannt (RAM Expansion Controller). Über spezielle Register ($DF00-$DF0A), die in den Hauptspeicher des C64/128 eingeblendet sind und auf die somit vom C64/C128 aus direkt zugegriffen werden kann, teilt man dem REC mit, welchen Bereich des Hauptspeichers er in welchen Bereich der REU (und umgekehrt) zu verschieben hat.
Dank dieses DMA-Chips muss die CPU nicht jedes Byte einzeln von oder zur REU übertragen werden (was bei einem Kopiervorgang mehrere Zyklen zum Lesen, Schreiben und Inkrement/Vergleich der Endadresse benötigt), sondern es brauchen nur zwei Adressen (Quelladresse und Zieladresse) und die Größe des zu übertragenden Bereichs (in Byte) angegeben werden (Speicherdirektzugriff). Den Rest erledigt der DMA-Chip der REU ganz von alleine: die Anzahl der Taktzyklen für die Operation entspricht (abgesehen von speziellen Buszyklen des VIC II, wo der DMA Controller auch warten muss) dem angegebenen Bereich (maximal 64 KB) ist somit auch vielfach so schnell wie die Ausführung über CPU. Im Vergleich zum Bank-Switching-Verfahren anderer Speichererweiterungen (z. B. GeoRAM), wo der Speicher sofort nach dem Auswählen über ein Bank-Select-Register zur Verfügung steht, ist das zwar noch immer langsamer, um an Speicherdaten zu kommen – für gewisse Anwendungen (siehe unten) ist das aber kein Nachteil, weil man die Daten ohnehin im Speicher verschoben oder verglichen hätte und dies somit der DMA-Controller übernehmen kann.
Der DMA-Chip beherrscht 4 Funktionen:
* Fetch: Daten-Transfer von der REU in den Computer
* Stash: Daten-Transfer vom Computer in die REU
* Swap: Vertauschung von Speicherinhalten zwischen Computer und REU
* Verify: Vergleich von Speicherinhalten zwischen Computer und REU
Der Datentransfer erfolgt mit ca. 1 MB pro Sekunde. Durch Fixieren von Quell- und/oder Zieladresse sind noch weitere Funktionen möglich, u. a. das schnelle Füllen von Speicherbereichen (nützlich für Grafikfunktionen) oder spezielle Grafik-Effekte.
Der MOS 8726 wurde in mindestens zwei Gehäuseformen hergestellt. Es existieren REUs mit MOS 8726 in PLCC- oder DIP64-Bauform.

### Erhöhung der Speicherkapazität

Theoretisch können die REUs auf 16 MB RAM aufgerüstet werden, in der Praxis sind, mit einigem Bastelaufwand, 2 MB realistisch.
* ... auf 512 KB:
Eine 1700- oder 1764-REU lässt sich mit etwas Aufwand auf 512 KB aufstocken. Man besitzt dann eine Speichererweiterung, die (anders als bei der unten erwähnten 2-MB-REU) zu 100 % kompatibel zu einer 1750 ist:
Bei der 1764 benötigt man lediglich 8 ICs vom Typ '41256'. Diese lötet man in die auf der Platine noch nicht belegten acht Steckplätze ein.
Bei der 1700 benötigt man 16 ICs vom Typ '41256', durch die man die bereits vorhandenen ICs vom Typ 4164 ersetzt. Zusätzlich muss der Jumper (J1) auf der Rückseite der REU-Platine durchtrennt werden. (Dies ist bei der 1764 nicht notwendig, da dies dort bereits werksmäßig so eingestellt ist.)
* ... auf 2 MB:
Mit relativ hohem Bastelaufwand kann man eine REU auch auf 2 MB erweitern: Man benötigt dazu eine 1750 mit 512 KB oder eine 1700 bzw. 1764, die mit Hilfe obenstehender Anleitung auf 512 KB erweitert wurde. Die REU ist dann zwar im 2-MB-Modus nicht mehr hundertprozentig kompatibel zu einer Original-REU, kann aber per Schalter in den Original-1750-Modus (512 KB) zurückgesetzt werden, falls Probleme entstehen.

### Software für die REU

Im Gegensatz zum BASIC V2.0 des C64 enthält das BASIC V7.0 des C128 bereits einigermaßen komfortable Befehle zum Auslesen bzw. Beschreiben des externen RAM. Es handelt sich hierbei um die Befehle FETCH, STASH und SWAP, die Daten aus der REU holen, in die REU schreiben und Daten zwischen REU und normalem C128-RAM austauschen. Allerdings arbeiten diese Befehle immer noch mit rohen Speicheradressen, eine direkte Nutzung des REU-Speichers etwa für die Ablage von BASIC-Programmen oder -Variablen ist damit nicht ohne weiteres möglich.
Beim C64 müssen stattdessen POKE bzw. PEEK verwendet oder gleich Maschinenprogramme geschrieben werden, was ungleich aufwändiger und vor allem unkomfortabel ist.
Abgesehen von den im BASIC des C128 schon eingebauten Befehlen gibt es auch Programme, die die besonderen Fähigkeiten der REU nutzen, wie z. B. Disketten-Kopierprogramme (Disketten brauchen dann z. B. nur einmal zum Lesen und einmal zum Schreiben eingelegt werden), Assembler (Programme können ohne Umweg über das Speichern auf einer Diskette sofort getestet werden), eine ganze 1541- bzw. 1571-Diskette kann im Speicher einer entsprechend großen REU Platz finden usw.
Das Betriebssystem GEOS kann von sich aus eine REU nutzen, ohne dass zusätzliche Software erforderlich wäre. Spätere GEOS-Versionen ermöglichten auch die Verwendung als Disketten-Cache. Das beim C128 mitgelieferte CP/M-Betriebssystem verwendet die REU als Ramdisk.
Außerdem lieferte Commodore mit ihren REUs eine Test/Demodiskette mit. Darauf war das Programm "RAMDOS" enthalten, mit dem die REU von BASIC aus wie ein extrem schnelles Diskettenlaufwerk angesprochen werden kann. Sie enthält daneben Programme, mit denen die REU getestet werden kann. Dazu zählt auch die damals technisch verblüffende "Globe"-Demonstration, die eine große, rotierende Weltkugel auf dem Bildschirm des C64 zeigt. Eine ganze Umdrehung der Weltkugel dauert etwas länger als eine Sekunde. Die Animation besteht aus 36 "hochauflösenden" Grafiken (300×200 Pixel), die zu Beginn der Demonstration einzeln von Diskette geladen und dann in der REU zwischengespeichert werden (zusammen würden sie nicht komplett in den Hauptspeicher des C64 passen). Von dort werden sie mit Hilfe der REU so schnell direkt in den Grafikspeicher des C64 kopiert, dass der Eindruck einer rotierenden Weltkugel entsteht.
Auf der REU-Platine befindet sich eine ungenutzte Einbaustelle für einen ROM-Chip. Es wird vermutet, dass dort eine Variante des oben erwähnten RAMDOS-Programms direkt eingebaut werden sollte (hypothetisch als "ROMDOS" bezeichnet), so dass kein Einladen von Diskette nötig gewesen wäre. Warum man letztlich davon absah, ist unklar.