Die "großen" RAM-Module des KC
von Ralf Kästner
Etwa 1988 bis 1990 wurde von den Schöpfern unseres geliebten KC aus Mühlhausen das Modulangebot durch größere RAM-Module erweitert. Die bis dato vorhandenen 16 kB und 64 kB reichten im Regelfall für CAOS-Anwendungen aus, mit der Floppy-Erweiterung und der RAM-Floppy im Laufwerk A: unter MikroDOS brauchte man schon etwas mehr, schnell sind die Modulschächte mit den 64-ern voll und behindern dann andere Aufgaben bzw. machen ein ständiges Umstecken notwendig. Die Informationen zu den damals neuen Modulen sickerten kaum durch, nur wer noch eines abbekam, konnte im Handbuch die notwendigen Info's finden. Ich möchte auf Grund einiger Anfragen mal versuchen, das Ganze zusammenfassend darzustellen.
Laut den Handbüchern sind diese Module vor allem für die automatische Erweiterung der MikroDOS-RAM-Floppy gedacht, was aber nicht bedeutet, daß man sie unter CAOS nicht auch ansprechen kann. Der Aufbau der RAM-Floppy-Verwaltungstabelle wird durch eine Routine im ROM des D004 bei Kaltstart des MikroDOS durchgeführt. Dieses Programm erkennt alle "offiziellen" Module von 16 kB bis 1 MB, leider nicht die bereits vorbereitete Aufrüstung des internen RAM auf 256 kB. Die verwendete Erkennung und Verwaltung der Module läßt sich problemlos auch unter CAOS nutzen.
Die folgende Übersicht beginnt mit dem 128 kB Modul, die Daten zu 16 und 64 kB Modul dürften wohl jedem bekannt sein. Unter MikroDOS wird das Laufwerk A: in Spuren zu je 16 kB, unabhängig vom verwendeten RAM (-Modul) aufgeteilt bzw. verwaltet. Dies ist zugleich die ansprechbare Speichergröße, wenn man die Module für andere Zwecke verwenden will. Da der Z80 (unser U880) nur 64 kB direkt adressieren kann, muß man den zusätzlichen RAM in kleine "Scheibchen" aufteilen, so wie unter MikroDOS. Diese 16 kB-Einheiten werden dann in den Handbüchern als SEGMENT bezeichnet, in anderen Literaturquellen wird auch der Begriff BANK bzw. BANK-SWITCHING verwendet, wir wollen mal beim Segment bleiben.
Alle nachfolgenden Module enthalten eine bestimmte Anzahl dieser Segmente, je nach Ausbaustufe. Es spielt dabei keine Rolle, welche physischen Speicherschaltkreise verwendet werden, man muß nur immer die Möglichkeit haben, die Segmente einzeln zu selektieren und ansprechen zu können. Die CAOS-Schnittstelle dafür ist die Modulverwaltung (Systemhandbuch, Abschnitt 3.3., S.59 ff.), wo über den Steckplatz im Gerät und die Ausgabe von Steuerbytes dorthin mit UP Nr. 26H geschaltet werden kann.
Bei der praktischen Anwendung sind einige Besonderheiten zu beachten. Prinzipiell stellen alle Module ab 128 kB ihren Speicher nur in diesen 16 kB-Segmenten zur Verfügung. Man muß sich das als einen Stapel dieser Segmente vorstellen, wobei das über das Steuerbyte geschaltete Segment ganz unten liegt und gelesen bzw. beschrieben werden kann.
Das 64 kB Modul liegt dagegen immer parallel mit seinen vier 16 kB Segmenten zum Grundgerätespeicher, es ist damit das einzige RAM-Modul dieser Art und blockiert dadurch im eingeschaltenen Zustand alle anderen RAM-Module mit beliebigen Basisadressen, die sich in höheren Steckplatzadressen (Modulschächten) befinden! Um auf das aktiv geschaltete Segment eines beliebigen RAM-Moduls auf einer bestimmten Basisadresse zugreifen zu können, muß alles, was darunter liegt, ausgeschalten werden (lt. Modulprioritätskette)! Der Grundgerätespeicher mit RAM0, RAM4 und RAM8 hat immer die höchste Priorität, da die Steckplatzadressen kleiner als 8 sind und damit vor extern gesteckten RAM-Modulen in der Prioritätskette stehen!
Den Speicherbereiches, wo die Segmente in den CPU-Adressbereich eingeblendet werden, muß man selbst bestimmen. Bis auf das 1 MB Modul kann man alle Module ab 04000H oder 08000H betreiben. Wenn man aber den gesamten zur Verfügung stehenden Speicher nutzen will, kommt im Prinzip nur 08000H-0BFFFH in Frage, nur dort lassen sich alle Module betreiben, der RAM8 liegt da auch fest. Insbesondere das 1 MB Modul (s.u.) läßt sich nicht per Software woanders hinschalten.
Will man jetzt dort auf ein Segment des RAM-Moduls zugreifen, muß der RAM8 (wird bei Initialisierung von CAOS zugeschaltet!) ausgeschaltet werden und der IRM über Rücksetzen von Bit 2 der System PIO Port A ebenfalls. Dann "rutscht" das aktiv geschaltete RAM-Segment des selektierten Moduls (Voraussetzung: alle anderen RAM-Module auf der gleichen Basisadresse in niedrigeren Modulschächten OFFLINE!) ganz nach unten und kann von der CPU angesprochen werden (vgl. Bild 12 Systemhandbuch, S.56/57). Jetzt sollte man CAOS möglichst nicht benutzen, da der IRM aus ist und viele UP's darauf angewiesen sind bzw. diesen Adressbereich auch beschreiben, diese ev. Schreibzugriffe können ins Auge gehen, da dann das selektierte RAM-Modul-Segment beschrieben und damit verändert wird!
So wie auch in der RAM-Floppy von MikroDOS dient der zusätzliche Speicher vor allem zur Zwischenspeicherung von Daten bzw. nicht benutzten Programmen bzw. Programmteilen. Der Zugriff sollte deshalb im eigenen Interesse über im Anwenderprogramm enthaltene spezielle Treiber/Programmroutinen erfolgen, welche man in Abhängigkeit von der Datenstruktur im Programm selbst schreiben muß. Nachdem die Transfers erledigt sind schaltet man den IRM wieder zu und ggf. den RAM8.
Die folgende Variante hat sich am besten bewährt, man umgeht damit alle Ein- und Ausschaltvorgänge nicht selektierter Module, so entsteht auch der "Lichtorgeleffekt" im MikroDOS bei RAM-Floppy-Zugriffen. Man schaltet einfach beim Programmstart des eigenen Programmes sämtliche RAM-Module und den RAM8 offline, wenn man das eigene Programm startet, dann laufen alle Zugriffe auf die Segmente nach dem gleichen Schema ab:
- RAM-Segment selektieren, einschalten, merken
- IRM off
- Speichertransfer
- IRM on
- RAM-Segment holen, ausschalten
Da sämtlicher RAM auf der Basisadresse 08000H immer aus ist, rutscht das selektierte Segment nach Ausschalten des IRM automatisch nach "ganz unten" und kann benutzt werden. Man benötigt dazu nur eine Tabelle aller Segmente, welche benutzt werden sollen, wo die Moduladresse (Schachtnummer) und das zugehörige Steuerbyte, welches das Segment auf 08000H online/ohne Schreibschutz schaltet, enthalten sind. So lassen sich alle RAM-Module und auch der RAM8 gleich behandeln, was die Sache erheblich vereinfacht. Es sei nochmals betont, daß der IRM zuletzt aus- und zuerst wieder eingeschaltet wird, da dort viele wichtige Arbeitszellen von CAOS liegen! Nun zum Aufbau der einzelnen Module:
M036 - 128 kB segmented RAM
Das Modul enthält 8 RAM-Segmente zu je 16 kB, welche einzeln ab Basisadresse 04000H oder 08000H in den Adressbereich des Prozessors eingeblendet werden können, die Anordnung ist hintereinander, es ist also immer nur ein Segment erreichbar.
Strukturbyte: 78 H Steuerbyte: Bit 7 6 5 4 3 2 1 0 A1 X X S2 S1 S0 W MA1 = 0 Basisadresse 4000H = 1 Basisadresse 8000H X nicht benutzt S2-S0 Segment-Nummer dual von 0...8 W Schreibschutz (=0 - eingeschaltet) M Aktivbit (=0 - Modul inaktiv)
M032 - 256 kB segmented RAM
Das Modul enthält 16 RAM-Segmente zu je 16 kB, welche einzeln ab Basisadresse 04000H oder 08000H in den Adressbereich des Prozessors eingeblendet werden können, die Anordnung ist hintereinander, es ist also immer nur ein Segment erreichbar.
Strukturbyte: 79 H Steuerbyte: Bit 7 6 5 4 3 2 1 0 A1 X S3 S2 S1 S0 W MA1 = 0 Basisadresse 4000H = 1 Basisadresse 8000H X nicht benutzt S3-S0 Segment-Nummer dual von 0...16 W Schreibschutz (=0 - eingeschaltet) M Aktivbit (=0 - Modul inaktiv)
M034 - 512 kB segmented RAM
Das Modul enthält wahrscheinlich 32 RAM-Segmente zu je 16 kB, welche einzeln ab Basisadresse 04000H oder 08000H in den Adressbereich des Prozessors eingeblendet werden können, die Anordnung ist hintereinander, es ist also immer nur ein Segment erreichbar.
Strukturbyte: 7A H Steuerbyte: Bit 7 6 5 4 3 2 1 0 A1 S4 S3 S2 S1 S0 W MA1 = 0 Basisadresse 4000H = 1 Basisadresse 8000H S4-S0 Segment-Nummer dual von 0...32 W Schreibschutz (=0 - eingeschaltet) M Aktivbit (=0 - Modul inaktiv)
Die Angaben zum M034 entnehme ich dem verwendeten Steuerbyte zur RAM-Floppy-Verwaltung unter MikroDOS, mir ist auch kein User bekannt, der ein solches Modul besitzt.
M035 - 1 MB segmented RAM
Das Modul enthält 64 RAM-Segmente zu je 16 kB, welche in der Regel ab Basisadresse 08000H in den Adressbereich des Prozessors eingeblendet werden können, die Anordnung ist hintereinander, es ist also immer nur ein Segment erreichbar.
Strukturbyte: 7B H Steuerbyte: Bit 7 6 5 4 3 2 1 0 S5 S4 S3 S2 S1 S0 W MS5-S0 Segment-Nummer dual von 0...64 W Schreibschutz (=0 - eingeschaltet) M Aktivbit (=0 - Modul inaktiv)
Vom legendären 1 MB Modul gab es einige Nullserienprodukte, mittlerweile sind wohl alle verteilt. Bei meiner Variante diente die Leiterplatte des M032 als Grundlage, es wurden nur andere RAM's (1 MB*1) gesteckt und das Strukturbyte neu verdrahtet. Ich habe bis jetzt verschiedene Ausführungen des Moduls gesehen, es gibt auch Varianten mit einem DIP-Schalter in der Frontplatte, wo man die Basisadresse von 04000H auf 08000H hardwaremäßig umschalten kann, das Steuerbyte wird ja komplett für die Adressierung der 64 Segmente verbraucht.
Zusammenfassend läßt sich sagen, daß mit diesen Informationen jeder Bastler und Tüftler eigene Varianten bauen kann. Wenn aber gleiche Strukturbytes verwendet werden, muß auch die Steuerbytedefinition eingehalten werden, damit die Software nicht verrückt spielt.
In den "KC-News" 3/93 (alte Variante) hatte Kai-Uwe Irrgang beispielsweise eine Umbauanleitung des 64 kB Moduls zu einem 1 MB Modul veröffentlicht, sehr gut an dieser Anleitung fand ich die Tatsache, daß man mittels DIP-Schalter, zwischen 64 kB und 1 MB Modul umschalten kann, so daß man quasi das M011 behält und ein M035 dazubekommt, es werden dort auch alle eben genannten Konventionen eingehalten. Vielleicht kann man diese Anleitung noch mal veröffentlichen, da diese letzte Ausgabe von Herrn Brünig fast niemand erhalten hat.
Sollte jemand vorhaben, größere Projekte unter CAOS zu entwickeln, bin ich gern zur Unterstützung bereit. Die oben angedeutete Speicherverwaltung bildet die Grundlage und Voraussetzung für die Leistungsfähigkeit von "UNIPIC". Im Programm befinden sich 2 Routinen, welche sich zum Einen um die Speicherverwaltung der Bilder und zum Zweiten um die Verwaltung der einzelnen Programmteile (MC-Code-Module) kümmern.
Speziell die Verwaltung der Programm-Module wurde mittlerweile so weiterentwickelt, daß sie sich gegenseitig aufrufen (ähnlich Task-Manager WINDOWS) und bis auf das letzte Byte mit in sich abgeschlossenen Unterprogrammen aufgefüllt werden können, was eine effektive und relativ einfache Programmierung erlaubt.
Zum Schluß noch eine Bitte an alle, in den Handbüchern zu den Modulen ist von einer Programmkassette C0127 RAMDOS die Rede. Darauf befindet sich das gleichnamige Programm für CAOS, welches dem Aufbau einer RAM-Floppy unter CAOS dienen soll, allerdings erfolgt die Ausgabe der Daten nur von/auf Kassette.
Ich weiß leider nicht, ob dieses Programm im Original von Mühlhausen auch für Diskette existiert, wenn jemand eine originale Variante auch für Diskette haben sollte, bitte ich mal um eine kurze Mitteilung per Brief oder Telefon zur Klärung der Bezugsmodalitäten (nur mit Kopie der Originalunterlagen bzw. Beschreibung).