ZSDOS - Das neue Betriebssystem für den KC

von Mario Leubner

Mit dem erfolgreichen Anschluß der Festplatte am KC bestand nun das weitaus größere Problem der Einbindung in das Betriebssystem. Da bis zum heutigen Tag die Quelltexte des KC-MicroDOS 2.6 nicht vorliegen, blieb mir keine andere Wahl als MicroDOS komplett zu reassemblieren. Das Ergebnis bestätigte meine Vermutungen:

  • Das System wurde bis auf wenige BIOS-Funktionen im 8080-Code programmiert.
  • CCP, BDOS und BIOS sind derart verknüpft, daß ein Ersetzen einzelner Komponenten nicht ohne weiteres möglich ist.
  • Die Verwaltung von Spur und Sektor erfolgt durchweg mit 8 Bit, was die Einbindung großer Laufwerke (Festplatte) nicht gestattet
  • Es ist sehr viel Code enthalten, der an CP/M 3 angelehnt ist, obwohl MicroDOS nicht dazu kompatibel ist.
  • Es sind weiterhin Programmreste enthalten, die auf die Entwicklungsphase in der ehemaligen Sowjetunion schließen lassen.

Fazit: Neben vielen nicht benötigten Programmteilen (die ohnehin nur wertvollen Speicherplatz verbrauchen) bietet MicroDOS nicht die Voraussetzungen, die Festplatte einzubinden.

Aus diesem Grund mußte über ein neues Systemkonzept für den KC nachgedacht werden. Bisher sollte davon ausgegangen werden, sinnvolle Funktionen von MicroDOS in das neue System zu übernehmen. Ich denke da z. B. an die BDOS-Funktion 47, die schon mehrfach benutzt wurde. Durch das unzureichende Konzept von MicroDOS mußte diese Forderung jedoch vernachlässigt werden, da eine Überarbeitung von MicroDOS nicht mehr sinnvoll ist. Nur das KC-spezifische BIOS-Segment habe ich letztlich von MicroDOS übernommen, jedoch stark überarbeitet und für die Anforderungen der Festplatte vorbereitet.

Ein völlig neues System mußte her!

Das neu zum Einsatz kommende Paket von DOS und Kommandoprozessor bestimmt im wesentlichen die Eigenschaften des neuen KC-Systems. Die Verwendung fertiger Systeme, die bereits erprobt sind erspart uns viel Entwicklungsaufwand. Es ist somit auch nicht nötig, das berühmte "Fahrrad neu zu erfinden". Der Vergleich mehrerer zur Verfügung stehender BDOS-Varianten ließ meine Wahl schließlich auf ZSDOS 1.0 fallen.

ZSDOS bedeutet soviel wie 'Z-System-DOS', ist kompatibel zu CP/M 2.2 und bestens als DOS-Segment für das Z-System geeignet. ZSDOS 1.0 unterstützt Laufwerke bis zu 1 Gigabyte, Dateigrößen bis zu 32 Megabyte und 262.144 logische Sektoren beim wahlfreien Dateizugriff. Das ist mehr als genug für die am KC einzusetzenden Festplatten! Außerdem bietet ZSDOS die Möglichkeit zur Verwaltung von Datum und Uhrzeit sowie die direkte Einbindung von DateStamper (Datumsstempel von Dateien), was der Echtzeituhr auf dem GIDE- Interface entgegenkommt.

ZSDOS/ZDDOS ist jedoch keine frei kopierbare Software, dafür ist etwas zu bezahlen. Jörg Linder hat schon Kontakt aufgenommen und für eine Gruppenlizenz für den KC-Klub einen Rabatt ausgehandelt; im Preis ist neben der Lizenz auch ein deutsches (!) Handbuch mit der Beschreibung der Utilities enthalten.

Inzwischen sind einige Dateien entstanden, die zur Einbindung von ZSDOS und des neuen BIOS benötigt werden. Die Entwicklung des Betriebssystems ist damit jedoch noch nicht abgeschlossen. Geplant ist noch ein neuer Bootlader, damit das System auch direkt geladen werden kann und eine spezielle CAOS-Version des Systems. Ich will jedoch hiermit zunächst einmal den momentanen Stand meiner Entwicklungsarbeit bekanntgeben, damit sich jeder eine Vorstellung machen kann, was sich in Zukunft auf dem KC für Möglichkeiten ergeben.

Benötigte Software

Alle Programme und Quelltexte, die zur Erstellung des neuen KC- Betriebssystems erforderlich sind, habe ich in ein Archiv gepackt. Es wird beim Erwerb der Lizenz für das ZSDOS/ZDDOS mitgeliefert. Zu den Dateien gehören unter anderem:

POWER.COM universelles Dienstprogramm
GIDETEST.COM Testprogramm für das GIDE-Interface
DIMA.COM Disketten-Monitor (für KC-System!)
TIME.COM Testprogramm für RTC-Schaltkreis
FORMAT.COM FORMAT V3.0, Diskettenformatierung
MODF.COM Einstellung der Diskettenlaufwerke
HDPARK.COM Parken der Festplatte in der letzten Spur
CPM.COM fertiges System für Festplatte ST157A
START.MAC Quelltext des Startprogramms
START.DMP Speicherabzug Startprogramm (100H-6FFH)
MODUL.INC CAOS-Unterprogramm zum Aufbau der Modultabelle
CCP.MAC Quelltext des Minimal-CCP
CCP.REL REL-Code des Minimal-CCP
ZSDOS.ZRL REL-Code des BDOS (ZSDOS V1.0)
ZBIOS.MAC Quelltext des neuen BIOS
OPTION.INC USER-Definitionen zu GIDE und Festplatte
DEFDPB.INC 8 DPB-Definitionen für Laufwerk 1.6
GIDE.TXT Hardwarebeschreibung
NEWSYS.TXT Softwarebeschreibung

Diverse Dateien für ein Z-System (z. B. TCAP, spezieller RCP).

Dateien für die CAOS-Diskette

Momentan ist die Entwicklung zwar noch nicht abgeschlossen, jedoch werden Lizenznehmer auf dem aktuellen Stand gehalten. Eine Verbreitung des Grundpaketes über die KC-News wird nicht möglich sein, da ZSDOS/ZDDOS Lizenzrechten unterliegen.

Erstellen des Startprogramms

(Die Angaben des folgenden Abschnittes geben den momentanen Stand wieder und können sich noch ändern. Wie heißt es so schön: Änderungen im Sinne des technischen Fortschritts vorbehalten!)

Wer sich die im weiteren beschriebenen Schritte nicht zutraut, dem unterbreite ich folgendes Angebot:

  • Der erfolgreiche Einbau der Festplatte muß abgeschlossen sein, d. h. GIDETEST.COM muß fehlerfrei laufen.
  • Die Lizenz von ZSDOS muß vorliegen.
  • Die Daten der Festplatte mit dem Menüpunkt 'Read ID' von GIDETEST.COM anzeigen lassen und aufschreiben/ausdrucken.

Dieses zusammen mit den Vorstellungen zur Belegung der Laufwerke notieren und mir zuschicken. Ich erstelle danach das Startprogramm CPM.COM, welches von MicroDOS aufgerufen werden kann und das neue System einstellt. Hier jedoch erst mal eine Anleitung für alle, die ihr System selbst erstellen wollen:

Zum Starten des Systems ist vorerst noch ein 'Startprogramm' erforderlich. Später soll diesen Ladevorgang wieder ein Bootlader übernehmen und das System direkt aus den Systemspuren der Diskette bzw. Festplatte laden. Zur Zeit ist jedoch noch der Umweg über MicroDOS erforderlich. Ich habe mir eine Startdiskette eingerichtet, die MicroDOS mit allen benötigten Treibern (Druckertreiber, Koppeltreiber, ZAS...) startet. Der letzte Befehl in der INITIAL.SUB startet dann das Startprogramm CPM.COM und lädt das neue System in den Speicher.

Das Startprogramm CPM.COM enthält schon eine Art Bootlader, welcher mehrere Arbeitsschritte ausführt:

  1. Stoppen der laufenden Interrupts von MicroDOS
  2. Kopieren des neuen Systems (CCP, BDOS, BIOS)
  3. RAM-Floppy neu berechnen, ein 256K-EPROM-Modul mit Strukturbyte 73H wird dabei als EPROM-Floppy eingebunden. Das RAM-Floppy muß mindestens 2 Spuren (32K) besitzen, da Spur 0 als Systemspur und Spur 1 für das Directory benötigt wird.
  4. Directory für RAM-Floppy wird gelöscht und eventuell mit den Einträgen des EPROM-Floppy belegt.
  5. CCP und BDOS wird in Systemspur des RAM-Floppy übertragen.
  6. IDE-Festplatte initialisieren nach Angaben des DPB von Laufwerk C: (bei Fehler werden DPHC und DPHD gelöscht).
  7. Test, ob RTC-Uhr arbeitet, eventuell Neustart mit 1.1.1996.
  8. Übergabe der Steuerung an das neue System mit BIOS-Kaltstart.

Das Startprogramm enthält im Anschluß an den Bootlader (0700H) einen Speicherabzug des neuen Betriebssystems, also CCP, BDOS und BIOS. Zur Anpassung des BIOS an das eigene System, speziell die verwendete Festplatte, sind in der Datei OPTION.INC einige Parameter einzutragen und die Systembestandteile neu zu übersetzen. Im Quelltext des Startprogramms muß noch die CCP-Anfangsadresse eingetragen werden, damit das System an die richtige Zielposition kopiert wird. Dann können alle Systembestandteile zum Programm CPM.COM verbunden werden. Wer wie ich eine ST157A benutzt, kann das fertige CPM.COM aus dem Archiv direkt verwenden.

Folgende Parameter sind in der Datei OPTION.INC für die Festplatte einzutragen:

HARD   EQU 1           ; 0, wenn ohne Festplatte
GIDE EQU 0 ; GIDE-Basisadresse
CYLS EQU 560 ; Anzahl Zylinder
HEADS EQU 6 ; Anzahl Köpfe
SECS EQU 26 ; Anzahl Sektoren
PARTC EQU 141 ; Partition C: ca. 10 MByte
OFFC EQU 1 ; Anzahl Systemspuren in C:
PARTD EQU CYLS-PARTC ; Partition D: ca. 32 MByte

Die angegebenen Werte entsprechen meiner Festplatte. Diese ist in zwei Partitionen unterteilt. Partition C: ist mit 1024, Partition D: mit 2048 Verzeichniseinträgen definiert, die Blockgröße für beide Partitionen ist mit 4 KByte definiert. Die Platte sollte deshalb in zwei unterschiedlich große Partitionen aufgeteilt werden. Ob 2048 Einträge für 32 MByte ausreichen, wird jedoch erst die Erfahrung zeigen.

Für die Partition C: sollte außerdem eine Systemspur definiert werden, die später einmal den Systemstart von Festplatte vornehmen soll, 32 KByte dürften dabei ausreichen. Bei großen Partitionen ab 32 MByte ist der DPB manuell im BIOS einzutragen, da der Assembler dann wegen Arithmetiküberlauf die Werte nicht mehr korrekt berechnen kann. Meine Partition D: ist deshalb auch nur knapp 32 MByte: genau 33.466.368 Byte oder 32.682 KByte oder 31,92 MByte.

Die Laufwerke E: bis H: können frei definiert werden. In der Datei OPTION.INC wird mit 3 weiteren Parametern für jedes Laufwerk festgelegt, welches Diskettenformat erzeugt werden soll. Die Macros zur Erzeugung der DPB's stehen in DEFDPB.INC und brauchen nicht geändert werden. Definiert sind zur Zeit folgende 8 Formate für doppelseitige Laufwerke mit 80 Spuren:

1   16 *  256 * 40 * 1 => 160k
2 5 * 1024 * 40 * 1 => 200k
3 8 * 512 * 40 * 2 => 320k
4 16 * 256 * 80 * 1 => 320k
5 5 * 1024 * 80 * 1 => 400k
6 16 * 256 * 80 * 2 => 640k
7 9 * 512 * 80 * 2 => 720k
8 5 * 1024 * 80 * 2 => 800k

Als Beispiel sei ein 780K-Laufwerk als logisches Laufwerk E: im physischen Laufwerk 1 zu definieren, dazu sind die Parameter wie folgt zu belegen:

FORME  EQU 8           ; Format 5*1024*80*2
OFFE EQU 2 ; 2 Systemspuren => 780K
UNITE EQU 1 ; physisches Laufwerk 1

Wer es sich zutraut, kann die DPB's auch im BIOS direkt eintragen oder in DEFDPB.INC weitere DPB-Grundtypen definieren. Selbstverständlich können auch weitere Laufwerke definiert werden, jedes Diskettenlaufwerk benötigt jedoch einen eigenen Eintrag in der DPH-Tabelle (2 Byte), einen DPH (16 Byte), einen DPB (28 Byte), Verzeichnisprüfvektor (32 Byte) und Belegungstabelle (50 Byte). Das sind zusammen 128 Byte, die für jedes zusätzliche Diskettenlaufwerk zu reservieren sind. Dieser Speicher muß im BIOS bereitgestellt werden und geht beim TPA verloren.

In Abhängigkeit von der verwendeten Festplatte und den zur Verfügung stehenden Laufwerken wird jeder selbst die für ihn beste Lösung erarbeiten und ausprobieren müssen. Auch kann der Wunsch auftreten, die Festplatte in mehr als 2 Partitionen zu unterteilen oder Blockgrößen von 8 KByte und damit 4096 Verzeichniseinträge zu ermöglichen. Prinzipiell ist dies alles möglich, ich habe es jedoch bisher nicht geschafft, den BIOS-Quelltext so universell zu gestalten, daß diese Angaben alle in der Datei OPTION.INC gemacht werden können. Für den 'Normalverbraucher' wird meine Vorgabe wahrscheinlich ausreichen, im Einzelfall bin ich auch bereit die entsprechenden Anpassungen vorzunehmen.

Die Größe des BIOS-Segmentes ergibt sich im also wesentlichen aus der Größe der verwendeten Festplatte und der Anzahl der installierten Diskettenlaufwerke. Für jeden Block der Festplatte ist ein Bit im Belegungsvektor des BIOS erforderlich, also 32 Byte je MByte Kapazität bei 4K-Blöcken. Die Endadresse des BIOS ist vom Koppel-RAM begrenzt, der im KC-System spezielle Aufgaben bei der Kopplung mit dem Grundgerät erfüllt. In der folgenden Zusammenstellung ist die Lage der Systembestandteile unter MicroDOS und CP/M 2.2 mit und ohne Z-System zu sehen:

Aus dieser Darstellung läßt sich besonders gut erkennen, daß mein neues System mit Festplatten-BIOS, ZSDOS 1.0, ZCPR 3.4 und den residenten Bestandteilen des Z-Systems noch mehr TPA zur Verfügung stellt als bisher MicroDOS 2.6. Die Größe des BIOS-Segmentes entspricht dabei einer Belegung mit 8 logischen Laufwerken und einer maximal 43 MByte großen Festplatte.

Zu beachten ist noch, daß das CCP-Segment jetzt wie beim Original-CP/M von Anwenderprogrammen überschrieben werden kann, mit MicroDOS war das nicht möglich! Der TPA-Bereich ist damit also bis zum Beginn des DOS-Segmentes nutzbar. Das TPA-Ende sollte nach Möglichkeit C900H nicht unterschreiten, damit alle von MicroDOS 2.6 vorhandenen Programme auch weiterhin laufen.

Die Größe der residenten Z-Systembestandteile kann je nach den geforderten Leistungen variieren und unter Umständen auch verändert werden. Es gibt also in Zukunft keine festen Adresszuordnungen mehr. Für die Programmierer gilt damit stärker als bisher, sich an die CP/M-Konventionen zu halten. Programme, die speziell für das Z-System geschrieben wurden, können außerdem noch auf die residenten Teile des Z-Systems zurückgreifen.

Sind alle Vorstellungen vom gewünschten System vorhanden, geht es nun an das Erzeugen des Startprogramms CPM.COM. Dazu sind prinzipiell drei Arbeitsschritte erforderlich: Assemblieren, Linken und Zusammenfügen. Das klingt zwar etwas umständlich, mir ist es aber bisher noch nicht gelungen, alle Systembestandteile mit einem einzigen LINK-Lauf zu einem COM-File zu verbinden. Es bleibt zumindest der Vorteil, daß alle Systembestandteile unabhängig voneinander entwickelt werden können. Der zusätzliche Schritt mit POWER.COM ist jedoch leicht nachvollziehbar.

1. Editieren:
Datei OPTION.INC mit Daten des eigenen Systems.
2. Assemblieren:
A>ASM ZBIOS=ZBIOS
* ZBIOS fuer Betriebsart: -CP/M- *
* Festplatte Partition C: 10 MByte *
* System enthaelt: 78 KByte *
* Festplatte Partition D: 31 MByte *
* ZBIOS-Speicherbedarf : 1300H *
* 12 Bytes frei (dezimal) *


So könnte der Assemblerlauf des BIOS aussehen. Das Ergebnis dieses Arbeitsschrittes ist ZBIOS.REL. Zur Kontrolle werden die Festplattengrößen angegeben. Wichtig für die nächsten Arbeitsschritte ist der Speicherbedarf (1300H im Beispiel).
3. Linken:
A>LINK131 ZBIOS.DMP=ZBIOS.REL [LE900]

Das Ergebnis dieses Arbeitsschrittes ist eine Datei ZBIOS.DMP, die einen Speicherabzug des BIOS-Segmentes enthält. Im Parameter ist die BIOS-Adresse (FC00H - BIOS-Größe) anzugeben, damit der Linker die korrekten absoluten Adressen einträgt.

A>LINK131 ZSDOS.DMP=ZSDOS.ZRL [LDB00]
A>LINK131 CCP.DMP=CCP.REL [LD300]

oder

A>LINK131 SYSTEM.DMP=CCP.REL,ZSDOS.ZRL [LD300]

CCP und BDOS kann in einem Schritt gelinkt werden. Das CCP-Segment belegt 2 KByte (800H) und BDOS 3,5 KByte (0E00H). Daraus ergibt sich die Ladeadresse D300H. Nach ZSDOS kann kein weiteres Modul gelinkt werden, da sonst der für die BIOS-Rufe definierte COMMON-Bereich nicht direkt nach das BDOS gelegt wird.
Die CCP-Adresse (im Beispiel D300H) muß nun noch im Startprogramm START.MAC eingetragen werden. Das Startprogramm wird mit folgenden Befehlen übersetzt:

A>ASM START=START
A>LINK131 START.DMP=START.REL
4. Zusammenfügen der Teilprogramme:
A>POWER
A0=LOAD START.DMP 4100 (12 Sektoren belegt)
A0=LOAD CCP.DMP 4700 (16 Sektoren belegt)
A0=LOAD ZSDOS.DMP 4F00 (28 Sektoren belegt)
A0=LOAD ZBIOS.DMP 5D00 (38 Sektoren belegt)
A0=SAVE CPM.COM 4100 94 (alles zusammen abspeichern)
A0=EXIT


Die angegebenen Sektoren beziehen sich auf die im Beispiel verwendete Konfiguration. Bei ZBIOS.DMP kann es zu Abweichungen kommen. Die korrekte Zahl wird beim Laden mit POWER.COM angezeigt und kann auch rechnerisch überprüft werden:

Anzahl Sektoren = BIOS-Größe / 128

Die beim Abspeichern anzugebende Sektoranzahl ist dann ebenfalls neu aus den einzelnen Teilbereichen zu berechnen!

Start des neuen Systems

Nachdem das an das eigene System angepaßte CPM.COM erzeugt wurde, kann ein Startversuch unternommen werden. Der Bildschirm wird gelöscht und sollte in etwa folgendes anzeigen:

Neues System wird installiert:
RAM-Floppy...1872K
ROM-Floppy...OK.
Festplatte...OK.
RTC-Uhr......OK.

54K CP/KC 2.2 (beta-Version!)
Copyright by ML-Soft 08.02.96
A>_

  • In der Zeile RAM-Floppy wird die erreichte Kapazität angezeigt, ist ein EPROM-Floppy-Modul vorhanden, dann sind diese zusätzlichen 256K bereits enthalten.
  • Die Zeile ROM-Floppy erscheint nur, wenn ein EPROM-Floppy-Modul eingebunden wird.
  • Ist die Festplatte nicht ansprechbar, so erscheint 'nicht bereit' und die DPH's von C: und D: werden entfernt. Ein erneuter Startversuch mit dem CCP-Kommando G ist möglich.
  • Arbeitet die Uhr nicht, dann wird sie mit dem Datum 01.01.1996 neu gestartet.

Das so gestartete System enthält bereits eine arbeitsfähige CP/M-Umgebung, mit der die Festplatte getestet werden kann. Der CCP dieses Minimalsystems wurde dem MicroDOS 2.6 angelehnt und ist nur mit den nötigsten Befehlen ausgerüstet worden. Für eine effektive Festplattenarbeit empfiehlt sich ein Z-System wie z.B. NZ-COM mit ZCPR 3.4., dazu später noch ein paar Anmerkungen.

Der CCP des Startsystems enthält folgende Kommandos:

0 Rückkehr zum CAOS
1 Bildschirm löschen
D <maske> Directory auflisten
U <user> USER-Bereich wechseln
K <nr> F-Tasten auflisten, wenn nr nicht angegeben bzw. F-Taste belegen, wenn nr angegeben ist
G Sprung zu 100H (Wiederstart von Programmen)
T Datum und Uhrzeit anzeigen
T C kontinuierliche Zeitanzeige bis irgendeine Taste gedrückt wird
T S Uhr stellen (Eingaben entsprechend Aufforderung)

Testen des Festplattentreibers im BIOS

Als erstes sollte das Programm DIMA.COM von Diskette gestartet werden. Es ist die Weiterentwicklung von DIMAKC.COM und vielleicht einigen bekannt. DIMA wurde speziell für die Arbeit mit der Festplatte weiterentwickelt und kann einzelne Sektoren aller Bereiche eines Laufwerks lesen, modifizieren und schreiben.

Zunächst sollten die Partitionen C: und D: angewählt werden und die im rechten Bildschirmteil angezeigten Parameter kontrolliert werden. Wenn diese mit den errechneten übereinstimmen, ist mit dem Kommando 'R' der Zugriff auf jeden Sektor der Platte möglich. Sollten die Parameter nicht stimmen, dann ist in ZBIOS.MAC bzw. OPTION.INC die Festplattendefinition nicht richtig erfolgt und die Angabe der Werte nochmal zu kontrollieren.

Zur Erläuterung:

  • Spuranzahl ist die Zylinderanzahl, die für die jeweilige Partition festgelegt wurde.
  • Sektoren/Spur ergeben sich aus den physischen Parametern der Platte wie folgt: HEADS * SECS * 4. Der Faktor 4 ergibt sich aus der physischen Sektorgröße der Festplatte von 512 Byte und der im CP/M verwendeten logischen Sektorgröße von 128 Byte.

Ich gehe davon aus, daß die Festplatte bereits in einem PC betrieben wurde und demnach formatiert ist. Sollte dies nicht der Fall sein, bleibt nur der Weg zu einem PC und die Platte dort erst mal zu formatieren - ein FORMAT.COM für die Festplatte gibt es (noch) nicht.

Da die Festplatte nicht für CP/M-Systeme vorgesehen war, kann man zwar alle Sektoren lesen, aber im Directory werden sich keine gültigen Informationen befinden. Wer Kenntnis vom MS-DOS-Dateisystem besitzt, kann zwar Bootsektor, die FAT's und das Hauptverzeichnis finden, für die Anwendung im CP/M-System können diese Daten aber nicht weiterverwendet werden. Als Alternative zu einer Neuformatierung der Festplatte, zu der es kein Programm gibt, verwende ich wieder POWER.COM. Folgende Befehle löschen das gesamte Directory:

A>POWER
A0=C:
C0=FILL 4000 BFFF E5
C0=WRITE 1 1 4000 256
C0=D:
D0=WRITE 0 1 4000 256
D0=WRITE 0 257 4000 256

Dabei geschieht folgendes: Als erstes wird der RAM-Bereich von 4000H bis BFFFH mit E5H gefüllt. Der WRITE-Befehl schreibt diese 32K in Spur 1 von Partition C: und löscht somit den gesamten Directory-Bereich mit 1024 Einträgen. Spur 1 ist deshalb zu verwenden, da Spur 0 als Systemspur definiert wurde. Für Partition D: sind zwei WRITE-Befehle erforderlich, damit 64K für 2048 Einträge gelöscht werden. Spur 0 wird verwendet, da D: keine Systemspur besitzt.

Die so vorbereitete Festplatte ist jetzt bereit, Daten aufzunehmen. Damit der Belegungsvektor der Festplattenpartitionen gelöscht wird, sollte an dieser Stelle das ganze System erneut hochgefahren werden. Die STAT-Meldung von POWER sollte danach auch anzeigen, daß 0K belegt sind.

Noch ein Hinweis: Obwohl ich sehr oft mit POWER.COM arbeite und auch alle oben beschriebenen Funktionen ordnungsgemäß ausgeführt habe, sollte man vorsichtig sein mit dem Programm wenn es um die Laufwerksparameter geht. POWER berechnet bei großen Laufwerken die Spuranzahl nicht korrekt. Fehler treten dann z.B. auch bei READGR auf.

EPROM-Floppy

Das neue Startprogramm, das in ähnlicher Form später im Bootlader untergebracht werden soll, initialisiert automatisch ein (!) EPROM-Modul mit dem Strukturbyte 73H im RAM-Floppy. Diese Funktion wird zum einen Teil im CAOS-Programmteil MODUL.INC ausgeführt, was die Modulsuche betrifft. Der zweite Teil, die Directory-Erzeugung geschieht im Startprogramm selbst. Mehrere EPROM-Module können zur Zeit noch nicht eingebunden werden. Es sollte auch nur ein einziges Modul mit dem Kennbyte 73H stecken, damit es zu keinem Programmfehler kommt. Für den Bootlader ist eine Lösung geplant, die auch mehrere EPROM-Module zuläßt.

Das EPROM-Modul muß natürlich gültige Dateien enthalten und ein dazugehöriges Verzeichnis. Zunächst ist jedoch ein 256K-EPROM-Modul mit einer Organisation von 16 mal 16 KByte analog dem 256K-RAM-Modul M032 herzustellen. Dazu sind am besten die segmented-ROM-Module (M033, M037, M045, M046, M047) geeignet. Das neue Modul habe ich analog der bekannten Module M048 genannt:

Modul Kennbyte Steuerbyte

Bezeichnung

Blöcke Bestückung

M033 01H AA0SxxxM TYPESTAR 2*8K 2 * 2764
M037 - Grundmodul, bestückbar als M045, M046 oder M047
M045 70H AASSxxxM 32K seg. ROM 4*8K 4 * 2764
M046 71H AASSxSxM 64K seg. ROM 8*8K 4 * 27128
M047 72H AASSSSxM 128K seg. ROM 16*8K 4 * 27256
M048 73H AASSSSxM 256K seg. ROM 16*16K 4 * 27512

Das umgebaute und mit 4 EPROM's 27512 bestückte Modul ist funktionskompatibel zum 256K-RAM-Modul M032. Folgende Änderung sind erforderlich und können an den Schaltungsunterlagen nachvollzogen werden:

1. Strukturbyte 73H ergibt sich bei folgender Brückenbelegung:

RB01 = geschlossen
RB06 = offen
RB07 = offen
RB08 = offen

2. AB13 wird direkt zum EPROM geführt (für 16K-Blockgröße):

AB13 -> D05-Pin8
D05-Pin9 -> EPROM's-Pin26
D02-Pin6 -> auf Masse legen (Pin7)

3. Blockauswahl im EPROM auf A14/A15 umlegen:

EPROM-Pin27 -> RB03/RB04 (Adresse A14), Brücke RB04 gesetzt
EPROM-Pin1 -> RB02/RB05 (Adresse A15), Brücke RB05 gesetzt

Nun noch ein paar Worte zum Erstellen der EPROM's. Zunächst sollte man sich 256K der Dateien heraussuchen, die man am häufigsten benötigt und ständig verfügbar haben möchte. Die tatsächlichen Dateigrößen sind dabei auf volle 4K-Gruppen aufzurunden, da bei RAM-Floppy's ab 1 MByte 4K-Gruppen verwendet werden. Da im EPROM-Modul auch ein Verzeichnis untergebracht werden soll, muß die letzte im Modul befindliche Datei mindestens 4 freie Sektoren in der letzten 4K-Gruppe enthalten.

Eine der zu verwendenden Dateien erfüllt sicher diese Bedingung und kann an das Ende des Moduls geschrieben werden. In diese 4 Sektoren ist das Modulverzeichnis einzutragen, das vom Startprogramm gelesen und in das Verzeichnis des RAM-Floppys übertragen wird.

Das Modulverzeichnis habe ich ähnlich dem Verzeichnis im CP/M-System gewählt, mit dem Unterschied, daß noch keine Blocknummern vergeben wurden. Die Blocknummern sind ja abhängig von der RAM-Floppy-Größe und vom Steckplatz des Moduls. Im Modulverzeichnis steht neben dem Dateinamen nur der relative Dateibeginn (zum Modulanfang) und die Dateigröße. Ein Verzeichniseintrag belegt 16 Byte, somit sind in den 4 Sektoren insgesamt 64 Einträge möglich. Jeder Eintrag hat den folgenden Aufbau:

Byte 0 USER-Bereich der Datei (E5H, wenn nicht belegt!)
Byte 1-11 Dateiname (mit entsprechend gesetzten Attributen)
Byte 12 letzte Extentnummer (Anzahl 16K-Blöcke)
Byte 13,14 Startsektor im Modul
Byte 15 Anzahl Sektoren im letzten Extent

Auch bei Dateien größer als 16 KByte ist nur ein Eintrag erforderlich, im Byte 12 steht die letzte Extentnummer und im Byte 15 wieviele Sektoren der letzte Extent belegt. Mit diesen Angaben berechnet das Startprogramm den vollständigen Directory-Eintrag für das Laufwerk A:. Als Beispiel hier die ersten vier Einträge meines Modulverzeichnisses:

00 41 53 4D 20 20 20 20 20 C3 CF 4D 01 00 00 20  .ASM_____COM...
00 43 4F 50 59 20 20 20 20 C3 CF 4D 00 A0 00 20 .COPY____COM...
00 44 55 20 20 20 20 20 20 C3 CF 4D 00 C0 00 50 .DU______COM...
00 4C 4E 4B 20 20 20 20 20 C3 CF 4D 00 20 01 60 .LINK____COM...
  • Der erste Eintrag gehört der Datei ASM.COM, Extent 0 ist voll und belegt 128 Sektoren, im Extent 1 sind weitere 32 Sektoren. Insgesamt ist die Datei also 160 Sektoren groß und belegt genau 20 KByte. Als letzte Datei ist diese somit nicht geeignet.
  • Der zweite Eintrag gehört der Datei COPY.COM. Startsektor im Modul ist 00A0H, also direkt nach ASM.COM. Auch diese Datei ist mit 32 Sektoren und genau 4 KByte nicht als letzte Datei geeignet.
  • Die dritte Datei im Modul heißt DU.COM, beginnt im Sektor 00C0H im Modul und ist 80 Sektoren groß. Das entspricht einer Dateigröße von 10 KByte, da aber auf volle 4K-Gruppen aufgerundet werden muß, sind 12 KByte zu reservieren. Wenn diese Datei am Modulende untergebracht würde, könnte hier das Modulverzeichnis eingetragen werden.
  • Die vierte Datei LINK.COM beginnt also jetzt nach den vollen 12 KByte, die für DU.COM reserviert wurden. Startsektor ist somit 0120H. Bei der Dateigröße mit 96 Sektoren und genau 12 KByte wäre kein Platz für das Modulverzeichnis.

Dateien wie DU.COM, die bei 2K-Gruppen einen Block weniger belegen, also mehr als 15 freie Sektoren enthalten, lassen logischerweise einen freien Block im EPROM-Bereich offen. Das EPROM-Modul sollte deshalb auf dem höchsten Steckplatz stecken, da ein Beschreiben dieser Blöcke ist nicht gesperrt ist. Als Alternative könnte man diese Dateien auch um soviele Sektoren verlängern, damit kein freier Block mehr entsteht.

Es sollte jedoch vorher getestet werden, ob die Datei dann noch voll funktionsfähig ist! Alle Dateien des EPROM-Floppys befinden bei mir im USER-Bereich 0 und besitzen das R/O- und das SYS- Attribut. Das hat den Vorteil, daß die Dateien auch von anderen USER-Bereichen aufrufbar sind und nicht so einfach zu löschen sind.

Ausblick zum Z-System

Um alle Eigenschaften der Festplatte voll ausnutzen zu können, empfiehlt sich die Verwendung eines Z-Systems. Was sich darunter versteht, kann z.B. in den KC-News 4/94 nachgelesen werden. Dieses Z-System läßt sich auf einfache Art und Weise mit dem zur Verfügung stehenden Minimalsystem installieren. Es erkennt automatisch die Adressen des Systems und ersetzt CCP und BDOS. Die weiteren Systemkomponenten sind dabei in Grenzen frei definierbar. Mein System enthält zur Zeit folgende Belegung:

C400H Kommandoprozessor ZCPR 3.4
CC00H ZSDOS 1.0
DA00H BIOS-Erweiterung des Z-Systems
DB00H RCP (10 Sektoren, RCP09H + PORT + KEY + CAOS)
E000H FCP (4 Sektoren)
E200H 21 Directory-Namen
E380H Shell Stack (4 Einträge)
E400H Environmentbeschreibung ENV
E480H Terminaldefinition TCAP
E500H Message-Buffer
E550H Externer FCB (XFCB)
E574H Suchpfad (5 Elemente)
E57FH Wheel-Byte
E580H Kommandozeilenpuffer MCL
E650H System-Stack
E680H DateStamper (USER-Speicherbereich von NZ-COM)
E900H KC-BIOS (mit 42 MByte Festplatte)

An dieser Stelle werden sich einige fragen wozu diese Sachen alle gut sind. Man muß das auch nicht wissen: Die Programme, die für das Z-System geschrieben wurden, greifen darauf zu und passen sich dem eigenen System an ohne daß man etwas davon merkt. Einfacher geht es wirklich nicht.

Da man sich nicht merken kann, in welchen USER-Bereichen man welche Daten abgelegt hat, sind 21 Directory-Namen für Festplattensysteme mindestens zu empfehlen, eventuell wird diese Anzahl nicht mal ausreichen und ich werde bei Bedarf die nächsthöhere Anzahl einstellen müssen. Dann verschieben sich alle darunterliegenden Systemkomponenten zu Lasten des TPA um z. B. 100H Bytes.

Zur Installation von DateStamper(tm) habe ich bereits einen Uhrentreiber UHRKC.REL vorbereitet, der mit meinem ZBIOS zusammenarbeitet. Für NZ-COM ist das BIO-Modul durch die Version NZBIOKC.ZRL zu ersetzen, damit auch die BIOS-Sprünge mit Offset 33H und 36H korrekt weitergeleitet werden. DateStamper selbst habe ich im USER-Speicher des Z-Systems untergebracht, 5 Records (640 Bytes) sind dafür ausreichend.

Weiterhin ist für den KC85 bereits ein spezieller RCP entstanden. Dieser benötigt 10 Sektoren und basiert auf RCP09H.ZRL. Zusätzliche stehen in RCP10H.ZRL die Befehle CAOS, KEY und PORT zur Verfügung:

  • CAOS geht zurück zum CAOS-System und entspricht dem MicroDOS-Kommando 0. Wird mit ZAS gearbeitet kann man mit QUIT von dort sofort wieder zum Z-System zurück.
  • KEY ohne Argumente listet die F-Tasten auf, dies entspricht dem bisherigen Kommando 2.
  • KEY mit folgender Nummer belegt eine F-Taste entsprechend dem bisherigen Kommando 3, die Nummer der F-Taste ist jedoch dezimal anzugeben. KEY 0 löscht alle F-Tasten, jedoch nur unter CAOS 4.3
  • Das Kommando PORT fand ebenfalls noch Platz und ermöglicht direkte Port-ein/ausgaben. Dies kann unter Umständen zum Testen des GIDE-Interfaces bzw. der RTC-Uhr hilfreich sein.

Wer sich nicht das komplette NZ-COM zulegen will, hat noch die Möglichkeit, ein 'geblitztes' Z-System zu benutzen. Was ist darunter zu verstehen? Von einem laufenden Z-System wird ein Speicherabzug in Form einer ausführbaren COM-Datei erstellt. Diese COM-Datei geladen, erhält mann das Z-System mit den selben Eigenschaften wie vor dem Abspeichern zurück. Nachträglich ist es jetzt nur nicht mehr möglich, Speicherbereiche zu verändern um z.B. die Anzahl der Directorynamen weiter zu erhöhen oder neue Module einzubinden - die Flexibilität von NZ-COM fällt also weg und man müßte sich für ein System entscheiden.

Die Festplatte unter CAOS

Um auch im CAOS mit der Festplatte arbeiten zu können, ist ein neues DEP und eine CAOS-Startdiskette mit dem neuen System erforderlich. Zur Zeit erarbeite ich eine neue Version von DEP. Zwei Varianten teste ich gerade, bin jedoch noch nicht soweit daß eine Weitergabe sinnvoll ist. Ich gehe davon aus, daß DEP 3.0 fertig ist wenn es gebraucht wird - also dann wenn die ersten Festplatten laufen.

Ich möchte an dieser Stelle nur mal einen Ausblick geben, wie der momentane Stand ist. Alle Ausführungen haben nur informativen Charakter, mit der Fertigstellung wird an dieser Stelle sicher wieder etwas zu lesen sein.

DEP starte ich zur Zeit direkt vom laufenden CP/M oder Z-System aus. Dabei wird automatisch zur CAOS-Betriebsart gewechselt. Geplant habe ich, DEP+BDOS+BIOS in die Systemspuren der CAOS-Diskette zu schreiben. Damit fällt dann die INITIAL.UUU und DEP.COM auf der CAOS-Diskette weg. DEP ersetzt also den CCP des im Hintergrund laufenden CP/M-Systems. Für den Anwender und Programmierer unter CAOS bleibt (fast) alles wie gewohnt, alle alten Funktionen sind kompatibel zu den bisherigen DEP-Versionen.

DEP 3.0 paßt sich beim Start automatisch dem laufendem System an. Dies ist erforderlich, da es keine festgelegten Adressen mehr gibt. Je nachdem, wieviel freier TPA gefunden wird, ist die Kapazität des RAM-Laufwerkes A: auch unterschiedlich groß. Ich habe zwei Varianten von getestet: DEP3S.COM sortiert bis zu 255 Dateinamen, benötigt aber gegenüber DEP3N.COM 2.75K mehr Speicherplatz. Ich bevorzuge es, die Dateinamen alphabetisch sortiert zu erhalten, man findet die gesuchten Programme schneller.

Natürlich benötigt die Sortierung auch etwas Zeit, aber bis ca. 100 Dateinamen ist dies kaum zu spüren. Aus diesem Grund habe ich die Sortierung auch auf 255 Dateinamen begrenzt, die Dateinamen werden dann unsortiert angezeigt - verloren geht also nichts. Die Sortierung im D004 dürfte trotzdem aufgrund der höheren Taktfrequenz schneller ablaufen als im Grundgerät. Ich denke noch nach, die Sortierung über ein Optionsbyte im Koppel-RAM zu-/abzuschalten, der Grundzustand wird dabei mit Sortierung sein.

Um einen Vergleich zu haben, hier mal die erreichten RAM-Floppy-Kapazitäten bei meinem System mit 42MB-Festplatte in Gegenüberstellung zu DEP 2.2 und MicroDOS:

MicroDOS CP/M Z-System
TPA-Ende: C900H DB00H CC00H
DEP22.COM 46K frei - -
DEP3N.COM - 51K frei 47K frei
DEP3S.COM - 48K frei 44K frei

Mit dem neuen System ist also auch mit Sortieralgorithmus eine größere RAM-Floppy-Kapazität erreichbar als mit dem bisherigen DEP und MicroDOS. Das verdanken wir dem aufgeräumten System und der Möglichkeit, den CCP überschreiben zu können. Selbst wenn ich DEP3S.COM vom voll konfigurierten Z-System aus starte, stehen mir immerhin noch 44K zur freien Verfügung, was für die meisten Anwendungen ausreichen dürfte.

An dieser Stelle will ich noch kurz aufführen, was DEP 3.0 bereits von DEP 2.2 unterscheidet:

  • Größe des RAM-Floppy wird beim Start automatisch errechnet.

  • die USER-Bereiche im Dateinamen sind dezimal anzugeben
    Beispiel: D15:WORDPRO6 (bisher DF:WORDPRO6)

  • veränderte STAT-Meldung, damit die freie Kapazität großer Festplatten 5-stellig angezeigt werden kann. Laufwerk und USER-Bereich werden stets vorangestellt.
    Beispiel: C10> 10500K frei.

  • Im Fehlertext wird jetzt der Dateiname ebenfalls mit Laufwerk und USER-Bereich ergänzt.

  • Überprüfung der Dateinamen nach gültigen Konventionen unter CP/M, Kleinbuchstaben werden in Großbuchstaben umgewandelt, Steuerzeichen und Zeichen > 7EH sind ebenfalls verboten. Das Zeichen '*' wird als Jokerzeichen jeweils für den Rest des Dateinamen bzw. Dateityp interpretiert. Jokerzeichen sind im Kommando ERA und im 2. Name bei REN möglich.
    Beispiel:
    %ERA *.BAK (löscht alle BAK-Files)
    %REN
    alter Name: EDAS164.KCC
    neuer Name: EDAS.*
    (umbenennen in EDAS.KCC)

  • alphabetische Sortierung von bis zu 255 DIR-Einträgen.

  • Bereitstellung der Uhrzeit und des Systemdatums im Koppel-RAM.