CMOS-TOS: Das Betriebssystem im akkugepufferten RAM

Wen hätte es noch nicht verdrossen, daß ein bestimmtes Programm nur mit einer dazu passenden Version des Betriebssystems läuft oder eine Änderung des TOS im EPROM zuviel Zeit in Anspruch nehmen würde? Dieser Ärger gehört mit CMOSTOS der Vergangenheit an. Die zugehörige Software ermöglicht das Laden von beliebigen Versionen des Betriebssystems in das auf der Karte enthaltene akkugepufferte CMOS-RAM, das nach dem Ladevorgang vor unbeabsichtigtem Überschreiben geschützt ist. Der Rechner selbst braucht dafür keine EPROMs bzw. ROMs mehr zu enthalten! Darüber hinaus besteht die Möglichkeit, Rechner des Typs 260ST, 520ST oder 1040ST mit einem fast vollwertigen Slot nach Art des MEGA ST auszurüsten.

Seit Erscheinen des ATARI ST auf dem Markt ist die Beseitigung von Software-Fehlern im Betriebssystem Gegenstand von zahlreichen Zeitungsartikeln gewesen. Engagierte und fachkundige Benutzer haben Merkwürdigkeiten und Abstürze analysiert, sind tage- und nächtelang den Wanzen auf der Spur gewesen, um diese possierlichen Tierchen dann nach erfolgreicher Jagd der wißbegierigen Öffentlichkeit vorzuführen. Auch in diesem Magazin werden dem interessierten Publikum Einsichten, Fehlerursachen und Verbesserungsvorschläge mitgeteilt. Dies wiederholt sich mit Freigabe jeder neuen Version des Betriebssystems. Interessierte stehen dann stets vor der Wahl, ob sie eine Änderung durchführen wollen und können. Anfänglich wares noch möglich, den Code direkt anzupassen, weil sich das gute alte RAMTOS im Arbeitsspeicher einnistet. Ab der ersten Version des ROMTOS muß jedoch anders verfahren werden. Seit eh und je geht ATARI selbst den Weg, beim Hochfahren des Rechners externe Programme zu starten, um die vorhandenen Fehler zu umgehen bzw. zu beseitigen. Diese Software kann von Diskette, Harddisk oder ROM-Port geladen werden. Ein eleganterer Weg, der sich den gut ausgerüsteten Bastlern zur Beseitigung mancher Fehler anbietet, ist der Einsatz von EPROMs, die das Betriebssystem mit den gewünschten Anpassungen enthalten. Neben den so behebbaren Fehlern tragen Unverträglichkeiten von bereits existierenden Anwenderprogrammen mit neueren Versionen des TOS zum Frust der geplagten ATARIaner bei. Hier hilft gegebenenfalls die Beschaffung einer neueren Version der Benutzer-Software, die aber üblicherweise mit gehörigen Kosten verbunden ist. Ein anderer ebenfalls unattraktiver Weg ist das Austauschen der ROMs bzw. EPROMs. Eventuell besteht auch noch die Möglichkeit, das Betriebssystem in den Arbeitsspeicher zu laden.

Der Schaltplan

RAM-Lust?

Derartige Schwierigkeiten tauchen nicht auf bei Rechnern, die die System-Software (MS-DOS, CP/M, UNIX etc.) von lokal vorhandenen oder per Netz angeschlossenen Speichermedien (Diskette, Harddisk, CD,...) laden. Möchte man hier eine andere Version des Betriebssystems verwenden, kann man zum Booten ein anderes File benutzen - ein sehr simples und sicheres Verfahren und in diesem Punkt ein Vorteil für derartige Rechner. Die File-Bezeichnung TOS.IMG erinnert uns nun an die gute alte Zeit, als es auch bei ATARI noch üblich war, das Betriebssystem von einer Magnetplatte in den Arbeitsspeicher zu laden. Die damals verkaufte Version besteht aus einem ungefähr 197 KB langen Binär-File, bei dem es sich um das direkte Abbild des TOS im Arbeitsspeicher eines Prototypen handeln dürfte. Das vorgegebene Maß von 192 KB - der Inhalt von 6 EPROMs mit jeweils 32 KB Speicher - konnte damit nicht eingehalten werden. Jedoch hatte diese Lösung für die Firma ATARI den Vorteil, bis zur Vorstellung der neuen Modellreihe mit der Bezeichnung ST auch noch die letzte Sekunde für die Entwicklung des TOS nutzen und die dann aktuelle Fassung freigeben zu können. Die ‚Speicherriesen‘ (256 KB bzw. 512 KB RAM) von ATARI enthielten deshalb anfänglich anstelle von 6 EPROMs nur 2 Boot-ROMs, die das System initialisierten und von Diskette bzw. Festplatte booten konnten. Die beiden schwerwiegenden Nachteile bei dieser ersten Version des TOS waren aber der für die damaligen Verhältnisse enorme Bedarf an Arbeitsspeicher und die daraus resultierende lange Zeit, die der Rechner beim Kaltstart benötigte. Es lag deshalb nahe, die Vorteile des heute bei ATARI üblichen ROM-residenten Betriebssystems mit denen eines diskgestützten zu kombinieren. Gebraucht wird dafür eine Schaltung, die einerseits bei Bedarf mit Software von einer Diskette geladen werden kann, andererseits den laufenden Programmen gegenüber ein ROMTOS simuliert. Mindestens vier verschiedene Betriebsarten sollten vorgesehen werden (siehe Tabelle 1). Das Laden des Betriebssystems von einer Diskette (Load) bzw. das Speichern darauf (Save), die normale Funktion wie mit ROM-residentem TOS (Run) und das Verändern des TOS’ während des Betriebs (Patch) müssen möglich sein.

Der Bestückungsplan

Versionen & Adressen

Um die gewünschte Schaltung entwerfen zu können, muß zunächst die Adressierung der verschiedenen ROMTOS-Versionen betrachtet werden. Das RAMTOS bleibt unberücksichtigt, da es ja sowieso in den Arbeitsspeicher geladen wird und deshalb hier nicht interessiert. Das ROMTOS für die ST-Modelle liegt entweder zwischen $FC0000 und SFEFFFF (TOS 1.0x) oder nach Einbau einer TOS2.06-Erweiterungskarte zwischen $E00000 und $E3FFFF. Bei Lesezugriffen auf eine in diesen Bereichen liegende Adresse spricht die im GLUE-Chip bzw. in der Erweiterung enthaltene Adreßlogik die entsprechenden Speicherbausteine an und erzeugt das Quittungssignal /DTACK. Der Prozessor übernimmt dann die Daten. Bei Leseoperationen an den Adressen $000000 bis $000007 werden dieselben Chips selektiert wie beim Lesen in den Bereichen $FC0000 bis $FC0007 bzw. $E00000 bis $E00007. Dies hat besondere Bedeutung, da der Prozessor nach einem Reset von diesen Speicherstellen nacheinander die Anfangswerte für System-Stackpointer und Program-Counter liest. Ab den Adressen $000004 und $E00004 bzw. $FC0004 ist deshalb ein Zeiger auf den ersten Befehl, der nach einem Reset ausgeführt werden muß, im (EP)ROM abgespeichert. Bei Schreibzugriffen an den aufgezählten Adressen wird kein /DTACK erzeugt. Die ebenfalls im GLUE-Chip implementierte Überwachung (Watchdog) detektiert nach mehreren Systemtakten das Ausbleiben von /DTACK und signalisiert dem Prozessor einen Busfehler. Der Busfehler wird dann seinerseits vom TOS durch Abwurf von zwei Bomben bestraft.

TOS mit Akku

Die gewünschte Funktion der zu entwerfenden Schaltung kann eine über Batterie oder Akku gepufferte statische RAM-Erweiterung gewährleisten. Der zusätzliche Speicher muß das gewünschte, eventuell geänderte TOS aufnehmen. Ein hardwareseitiger Schutz gegen unerlaubtes Beschreiben verhindert dann nach dem Laden des Betriebssystems (Load) unkontrollierte Schreibzugriffe auf die Karte. Das TOS kann nun aus dem RAM heraus laufen (Run). Bei allen folgenden Lesezugriffen auf Adressen im Bereich des Betriebssystems muß jedoch anstelle des ROMTOS auf der Rechnerplatine der Speicher auf der Karte selektiert werden.

TOS-Loader, die zweite

Der Nachteil der Lösung besteht darin, daß das TOS bereits im Rechner vorhanden sein muß, bevor es von einem externen Speichermedium geladen werden kann. Beim Gebrauch der so eingelesenen Version dürfen aber die (EP)ROMs, die die Bootsoftware (RAMTOS) oder das Betriebssystem (ROMTOS) enthalten, nicht mehr angesprochen werden. Die entsprechenden Speicherbausteine bei jedem Ladevorgang einzustecken und danach wieder herauszunehmen, ist sehr zeitaufwendig. Sie nur bei Bedarf selektierbar zu machen, kommt ebenfalls nicht in Frage; Eingriffe auf der Hauptplatine sollten nach Möglichkeit vermieden werden, und die Vielzahl von verschiedenen Hardware-Ausführungen des ROMTOS (2 oder 6 ROMs bzw. EPROMs mit unterschiedlichen Zugriffszeiten) läßt eine Unterbringungsmöglichkeit für alle Versionen auf der Zusatzkarte nicht zu. In Anlehnung an die ersten Rechner des Typs ATARI ST wird die Lösung deshalb um auf der Karte zu installierende Bootsoftware erweitert, die das Laden des TOS nach einem Reset ermöglicht.

RAMs und EPROMs

Nach diesen grundsätzlichen Überlegungen war die vorliegende Schaltung schnell entworfen. Sie besteht im wesentlichen aus Steuerlogik, Boot-EPROMs und akkugepufferten CMOS-RAMs. Die beiden Boot-EPROMs beherbergen die Software für einen eiskalten Start, d.h. für das Laden (Load) einer eventuell geänderten TOS-Version von der Diskette in das CMOS-RAM und einen anschließenden Kaltstart. Das RAM enthält während des normalen Betriebs die gewünschte Version des TOS (Run). Dort kann man es nach dem Rücksetzen des Schreibschutzes, z.B. mittels eines Debuggers, modifizieren (Patch) und danach gegebenenfalls sichern. Das Sichern des CMOS-RAM durch ein von Diskette bzw. Festplatte ladbares Programm erfolgt während des normalen Betriebes (Run). Deshalb braucht diese Funktion (Save) in der Hardware nicht berücksichtigt zu werden. Die Steuerlogik besteht aus einem Adreßdekoder für RAM bzw. EPROM und erzeugt das bei Zugriffen auf den interessierenden Adreßbereich notwendige Quittungssignal (/DTACK). Die bei der Verwendung von zwei Schaltern abfallende zusätzliche Betriebsart ermöglicht das Ankoppeln der Schaltung, ohne daß eine Funktion von ihr ausgeführt wird (Null).

Schreibzugriff „leGALisiert“

Um das Betriebssystem im CMOS-RAM verfügbar zu haben, muß es zuerst einmal hineingeschrieben werden können. Dafür sorgt ein Teil der Logik in zwei GALs in Abhängigkeit von den beiden Schaltern, mit denen die Betriebsart gewählt wird (Tabelle 2). Durch die Aktivierung eines der zugehörigen Signale (Modus: Load oder Patch) erreicht man, daß bei Schreiboperationen an den Adressen $E00000 bis $E3FFFF einerseits/DTA CK erzeugt wird, andererseits die RAM-Bausteine selektiert werden und sie die Daten vom Datenbus übernehmen.

Lies ein(!)mal

Bei Lesezugriffen auf die Adressen $000000 bis $000007, $E00000 bis $E3FFFF und $FC0000 bis $FEFFFF wird je nach Zustand der Schalter entweder das RAM (Run bzw. Patch), das EPROM (Load) oder keins von beiden (Null) selektiert und das Signal /DTACK entsprechend erzeugt. Dies ist die zweite Aufgabe der beiden GALs. Um eine eindeutige Zuordnung von Daten zu Adressen zu erhalten, brauchen Boot-ROMs (RAMTOS) oder ROMTOS (TOS 1.0x bis 2.0x) nur dann nicht von der Hauptplatine entfernt zu werden, wenn die Karte im Modus ‚Null‘ arbeitet (denn genau dann arbeitet sie ja nicht).

Modus Funktion
Load TOS wird in das CMOS-RAM geladen
Run TOS läuft im CMOS-RAM und ist schreibgeschützt
Save TOS befindet sich im CMOS-RAM und wird gesichert
Patch TOS läuft im CMOS-RAM und ist nicht schreibgeschützt

Tabelle 1: Bedeutung der schaltbaren Modi

Modus SW1 SW2
Run aus aus
Patch aus ein
Load ein aus
Null ein ein

Tabelle 2: Schalterstellungen für die Modi

Blinkzeichen Operation Sektor und Spur gültig
1 Initialisieren nein
2 Spur suchen ja
3 Sektor lesen ja
4 unbekannt unbekannt

Tabelle 3: Anzeige der Floppy-Operation im Fehlerfall

Blinkzeichen Fehler
1 Floppycontroller antwortet nicht
2 Spur oder Sektor nicht gefunden
3 CRC-Fehler
4 Datenverlust
5 unbekannter Fehler

Tabelle 4: Anzeige der Fehlerart bei Auftreten eines Floppy-Fehlers

Schritt Modus Testprogramm/Arbeiten

1 Karte anschließen | Load | Spannung prüfen 2 GALs einsetzen | Load | TEST_GAL.TOS: /DTACK prüfen 3 RAM einsetzen | Load | COPY_TOS.TOS: RAMs testen 4 Akku einlöten | Load | COPY_TOS.TOS: ROMTOS kopieren 5 ROMTOS entfernen | Run | Kaltstart aus dem CMOSRAM testen 6 EPROMs einsetzen | Run | TEST_ROM.TOS: EPROMs testen 7 eiskalter Start | Load | ROMTOS laden und Kaltstart

Tabelle 5: Schrittweises Durchführen der Inbetriebnahme

Kälter als der Kaltstart

Wie geschildert, wird ROM-residenter Code benötigt, um das TOS ins CMOS-RAM bewegen zu können (Load). Die ersten achten Bytes werden für die oben genannten Zwecke verwendet. Das eigentliche Programm beginnt deshalb erst bei Adresse $000008 bzw. $E00008. Nach der Initialisierung des zum eiskalten Start notwendigen Teils der Hardware wird der eigentliche Lader in den Arbeitsspeicher kopiert und dort ausgeführt. Die zum Laufwerk A gehörende LED signalisiert schließlich den Programmstatus. Wurde der Ladevorgang korrekt beendet, blinkt die LED gleichmäßig im Sekundentakt; erkennt das Programm dann einen Wechsel der Betriebsart (Run), leitet es einen Neustart des Systems ein. Fehler bei der Initialisierung des Rechners bzw. beim Lesen der Diskette werden dem Benutzer über dieselbe LED angezeigt. Leuchtet sie über die Dauer von fünf Sekunden, folgen im Anschluß jeweils im Abstand von fünf Sekunden Meldungen durch Blinkzeichen über die Art der fehlerhaften Operation, den Fehler selbst sowie die Spur und den Sektor (siehe Tabellen 3 und 4). Durch Zählen kann der Fehler ermittelt werden. Der durch die Assemblierung entstandene Objektcode wird in zwei EPROMs vom Typ 27C256 abgelegt. Die Zugriffszeit richtet sich nach gegebenenfalls vorhandenen oder geplanten Hardware-Beschleunigern!

Lötseite CMOS-TOS (1:1)
Bestückungsseite CMOS-TOS (1:1)

Mit heißer Nadel stricken

Für den Zusammenbau wird in erster Linie ein feiner Lötkolben benötigt. Bis auf einen Steckverbinder finden alle Bauteile auf der Bestückungsseite ihren Platz. Zuerst werden Kondensatoren, Widerstände und die Diode, dann die Sockel für die integrierten Schaltungen festgelötet. Nun werden Kabel, Stecker und Buchsen für die Stromversorgung montiert. Ist die Karte für den Einbau in einen MEGA ST bestimmt, sollte jetzt die 64polige Federleiste (Lötseite), ansonsten der Pfostensteckverbinder oder das Flachbandkabel für den Anschluß zum Prozessorbus folgen (Lötseite oder Bestückungsseite, siehe Option Adapter). Dann kann die Stiftleiste für den MEGA-ST-Slot eingebaut werden; dies macht natürlich nur Sinn, wenn genügend Platz im Rechnergehäuse vorhanden ist, um eine weitere Karte einzubauen (z.B. Towergehäuse). Der Akku sollte erst dann eingelötet werden, wenn der Test für das CMOSRAM erfolgreich durchgeführt worden ist. Schließlich muß für die Schalter noch ein Platz gefunden werden, die jedoch bis zum endgültigen Einbau der Karte vorzugsweise nur lose montiert werden.

Stückliste CMOS-TOS B1: Akku Z3A65 3,6V / 65mAh
C1 bis C7: 100ns
D1: 1N4148
IC1, IC2: M27C256
IC4, IC4: KM681000LP
IC5: GAL20V8
IC6: GAL16V8
R1: 1 KΩ
R2: 330 Ω
ST1: Pfostenstecker 1reihig, 6polig
ST2: Federleiste 2reihig, 64polig, AB-bestückt (entfällt gegebenenfalls)
ST3: Pfostenstecker 2reihig, 64-polig (entfällt gegebenenfalls)
SW1, SW2 Schalter 1 X UM
2 Sockel DIL28
2 Sockel DIL32
1 Sockel DIL24 schmal
1 Sockel DIL20 vieradriges Kabel für Anschluß der Schalter SW1 und SW2
dreiadriges Kabel für Stromversorgung (MEGA ST, sonst einadrig) Buchse zum Anschluß an Stromversorgung (MEGA ST)
Flachbandkabel (ca. 10cm) 64polig für 260ST, 520ST, 1040ST (entfällt gegebenenfalls)

Löten oder stecken?

„Nur nicht kleben bleiben“ heißt zunächst einmal die Devise. Und das kann sehr leicht passieren bei der Berührung von Spannung führenden Teilen im geöffneten Gehäuse von elektrischen Geräten! Höchste Vorsicht ist also stets angebracht, und deshalb sollten nur bei gezogenem Netzstecker die für den Betrieb der Karte notwendigen Installationsarbeiten durchgeführt werden. Die Besitzer eines Mega ST können sich die Sache nach Aufbau der Schaltung einfach machen. Zur mechanischen Unterstützung werden zwei Kunststoffschrauben (M3 x 25) in den beiden dafür vorgesehenen Löchern befestigt. Die Karte wird auf die allseits bekannte VG-Leiste gesteckt und an die Leitungen für die Versorgungsspannung angeschlossen. Im 260ST, 520ST und 1040ST muß stattdessen ein Flachbandkabel am Prozessor oder auf der Unterseite der Hauptplatine angelötet werden, es sei denn, der weiter unten gezeigte Adapter wird genutzt. Das Kabel wird dann mit der CMOSTOS-Karte entweder per Lötung oder Pfostenstecker verbunden. Dabei ist zu beachten, daß die Signale /NMI, /INT5, /INT3 des MEGA ST-Slots nicht verfügbar sind, d.h. die Prozessorleitungen /IPL0, /IPL1 und /IPL2 bleiben unbeschaltet. Die Anschlüsse für die positive Versorgungsspannung werden mit dem entsprechenden Potential auf der Zusatzkarte verbunden!

Option Adapter

Mit einer kleinen Zusatzplatine ist es möglich, auch für einen 260ST, 520ST bzw. 1040ST eine steckbare Lösung zu erhalten. Aus Platzgründen haben wir auf den Abdruck dieser Platine verzichtet. Sie ist aber ebenfalls beim Autor erhältlich.

So einfach die Unterbringung der Karte im MEGA ST ist, so schwierig kann sie sich in den anderen Rechnertypen gestalten. Da sehr unterschiedliche Versionen der Hauptplatine existieren, kann nicht mit Bestimmtheit gesagt werden, wie, wo und ob das CMOSTOS im Gehäuse Platz hat. Zur Sicherheit sollten die räumlichen Verhältnisse vor Beginn der Arbeiten besichtigt werden, gegebenenfalls hilft eine Blechschere bei der Platzbeschaffung. Ein nützliches Hilfsmittel bei der mechanischen Befestigung und elektrischen Isolation der Karte ist ein Stück Klebeband.

Salamitaktik

Die Inbetriebnahme der Karte erfolgt in Abschnitten. Vor deren Einbau muß mittels des Programms SAVE_TOS.TOS das ROMTOS auf eine neu formatierte Diskette geschrieben werden. Diese Diskette sollte unbedingt schreibgeschützt und nicht für andere Zwecke genutzt werden, da sie einerseits eventuell zum Nachladen des TOS ins CMOS-RAM gebraucht werden könnte, andererseits die Aufzeichnung nicht als File kompatibel zum GEMDOS vorliegt. Mit jedem weiteren Schritt wird nun jeweils der Rechner ausgeschaltet, die entsprechende Änderung an der Hardware vorgenommen und anschließend die Funktion nach Einschalten der Stromversorgung geprüft (siehe Tabelle 5). Zuerst wird die Karte ohne aktive Bauteile angeschlossen, dann werden nacheinander GALs, RAMs, Akku und EPROMs eingesetzt.

Aus Platzgründen sind die Listings aller Programme nur auf der Monatsdisk enthalten. Wer nicht die Möglichkeit hat, doppelseitige Platinen selbst herzustellen, kann die Platine auch beim Autor beziehen. Sie kostet 42,- DM ohne bzw. 65,-DM inkl. EPROMs und GALs zuzüglich Nachnahmegebühr.

; GAL2 für CMOSTOS 
; (c)1992 by MAXON-Computer
; Autor: Stephan Simson

%TYP
GAL16V8

%ID
CMOSTOS2

%PINS

A15 A13 NC A11 A9  A8 NC  A3  A4 GND
A5  A6  A7 NC  A00 NC A10 A12 A14 VCC

%LOGIC
A00 = !A15 * !A14 * !A13 * !A12 * !A11 * !A10 * !A9 * !A8
* !A7 *
      !A6  * !A5  * !A3  * !A4 ;

%END
; GAL1 für CMOSTOS
; (c)1992 by MAXON-Computer
; Autor: Stephan Simson

%TYP
GAL20V8

%ID
CMOSTOS1

%PINS
NC  !AS R/W A23 A22 A21 A20  A19  A18  A17 A16 gnd
A00 SW2 NC  SWX NC  RAM !DTE !DTR !EPR NC  NC  vcc

%LOGIC

EPR = SW1 * !SW2 * AS * R/W * A00 * !A23 * !A22 * !A21 * 
      !A20 * !A19 * !A18 * !A17 * !A16 + SW1 * !SW2
      * AS * R/W * A23 * A22 * A21 * A20 * A19 * A18 *
      !A17 * !A16 + SW1 * !SW2 * AS * R/W * A23 * A22 * 
      A21 * !A20 * !A19 * !A18 * !A17 * !A16 ;

RAM = SWX * !SW2 * AS * !R/W * A23 * A22 * A2X * !A20 *
      !A19 * !A18 + SW1 * !SW2 * AS * !R/W * A23 * A22 * 
      A21 * A20 * A19 * A18 * !A17 * !A16 + !SW1 * AS *
      R/W * A00 * !A23 * !A22 * !A21 * !A20 * !A19 *
      !A18 * !A17 * !A16 + !SW1 * AS * R/W * A23 * A22 * 
      A21 * !A20 * !A19 * !A18 + !SW1 * SW2 * AS *
      A23 * A22 * A21 * !A20 * !A19 * !A18 + !SW1 * AS *
      R/W * A23 * A22 * A21 * A20 * A19 * A18 * !A17 *
      !A16 + !SW1 * AS * R/W * A23 * A22 * A2X * A20 *
      A19 * A18 * !A17 * A16 + !SW1 * AS * R/W *
      A23 * A22 * A21 * A20 * A19 * A18 * A17 * !A16 ;

DTE     = EPR ;

DTE.0E  = EPR ;

DTR     = RAM ;

DTR.0E  = RAM ;

%END

Bezugsadresse
für Platinen, GALs und EPROMs:

Stephan Simson
Rütscherstraße 66
W-5100 Aachen

Literatur:

[1] Service Manual Mega 1, ATARI Corp.

[2] Service Manual 1040ST, ATARI Corp.

[3] Brückmann, Englisch, Gerits, ATARI ST Intern, Data Becker GmbH, Düsseldorf

[4] ST Computer-Sonderheft 1/1990, Verlag Heim

[5] mein Datenlexikon, ECA München

[6] J. Koch, Der 16bit-Mikroprozessor SC68000 Eigenschaften, VALVO Hamburg


Stephan Simson
Aus: ST-Computer 11 / 1992, Seite 120

Links

Copyright-Bestimmungen: siehe Über diese Seite