CP/M-80 und CPM-65 - eine kleine Einführung und ein Blick auf die Unterschiede
CP/M-80
CP/M-80 wurde 1974 von der Firma Digital Research entwickelt. CP/M steht dabei für 'Control Program for Microcomputers'. CP/M-80 läuft auf den Prozessoren 8080 und Z80. Das Betriebssystem besteht aus 3 aufeinander aufbauenden Schichten (BIOS, BDOS und CCP) sowie einer Reihe von Dienstprogrammen. Das logisch klare Schichtenmodell war damals nicht selbstverständlich. Es erlaubte die Anpassung an unterschiedliche Hardware ausschließlich durch Anpassung des BIOS zu erledigen. BDOS, CCP und alle praktisch Programme blieben unverändert.
Das BDOS bot eine standardisierte Schnittstelle zur I/O von Zeichen und zum blockweisen Zugriff auf Daten in Dateien auf einem Massenspeicher. DIes war die Basis für eine große Zahl von Programmen vor allem für den Bürobereich in kleinen und mittleren Firmen. Bis zum Aufkommen des IBM-PC und MS-DOS um 1983 war CP/M-80 vor allem in der Version 2.2 das dominierende Betriebssysten auf Büro-PCs.
CPM-65
In der 6502-Welt hat es ein standardisiertes Betriebssystem nie gegeben, obwohl die Vorteile doch erheblich sind. CPM-65 greift die nun Grundlogiken von CP/M-80 V2.2 auf und setzt sie auf 6502 Maschinen um. Dabei wurden auch einige Änderungen gemacht, die die spezifischen Eigenschaften der 6502 CPU zur Geltung bringen:
- Die Blockgröße beim Zugriff auf Dateien wurde von 128 Bytes auf 256 Bytes verdoppelt. Dabei erlaubt die indirekte, indizierte Adressierung einen sehr effizienten Datentransfer. Die Struktur der Verzeichniseinträge wurde aber beibehalten, damit man auf dem PC mit üblichen Tools, wie z.B. CIFE auf die Disketten (-image) zugreifen kann.
- Der Einsprung ins BDOS erfolgt über einen festen JMP-Befehl auf $00F0 statt über den Software-Interrupt des 8080
- Die Zeropage wird so weit als möglich für die Programme freigehalten. CPM-65 benötigt nur die Adressen $E0 - $FF
- Der Stack liegt fest auf $01FF und wächst abwärts
- Die Programme liegen beim JC ][ auf $2000 (Standard $200). Das liegt an der Speichernutzung des ROMs. Der für Programme nutzbare Speicher ist dann $2000 - $CC00, also 43 kB. Alle Programme müssen für diese Speicheradressen neu assembliert werden. Das ist in den fertigen Packages natürlich schon gemacht.
- Der CCP kennt keine eingebauten Commands. Er kann lediglich das Laufwerk wechseln und Programme aufrufen. Das hält ihn kompakt. Alle Funktionen, die man von CP/M-80 kennt stecken also in separaten Programmen und werden einfach durch Eingabe des Programmnamens aufgerufen
DAS CP/M-Dateisystem
CP/M-80 hat ein recht einfaches Dateisystem, das für die verfügbaren Massenspeicher der Zeit absolut adäquat war. Niemand konnte sich damals vorstellen, mit welchen Datenmengen man 50 Jahre später hantieren würde und die alten 8-Bit-Prozessoren wären damit auch heillos überfordert gewesen. CP/M-80 V2.2 führt also eine einfache Liste an Dateien mit deren Größe und Speicherort auf dem Massenspeicher. Die maximale Größe eines Laufwerks ist 16 MB. Es gibt nur ein Verzeichnis, keine Unterverzeichnisse. Die einzige Möglichkeit, Dateien auf einem Laufwerk zu strukturieren ist ein recht umständlicher Mechanismus mit bis zu 16 Userbereichen. CP/M führt eine Belegungstabelle der Dateien auf dem Speichermedium im Arbeitsspeicher. Diese Tabelle wird bei jedem Schreibzugriff dynamisch erzeugt. In dieser Architektur machen sehr große Massenspeicher keinen Sinn.
Die CPM-65 Disk Images
Der JC ][ bietet auf seine I/O-Card eine SD-Karte als Massenspeicher an. Die SD ist ja als FAT-Laufwerk mit einem MBR formatiert, also ganz normal. Mit diesem Dateisysten kann CPM nativ nicht arbeiten. Es wäre möglich, diese Fähigkeit im BIOS zu implementieren. Das BIOS würde dann aber ziemlich groß - etwa 12 kB - und die Performance würde leiden. Da unter CPM große Massenspeicher eh keinen Sinn machen, wurde im BIOS für den JC ][ eine Verwaltung von DISK Images mit 1 MB Größe implementiert. Diese Images können von einem Hilfsprogramm auf die verfügbaren Laufwerke gemountet werden. Derzeit beherrscht das BIOS 4 Laufwerke A: - D: . Das beim Booten ausgewählte Laufwerk ist immer A:.
Wenn ihr euch also nach erfolgreichem Booten mit D das Directory ausgeben lasst, seht ihr die Dateiattribute (derzeit nicht genutzt), den Dateinamen (immer 8 Zeichen Filename und 3 Zeichen Extension) und die Dateigröße in records (1 record = 128 Bytes, 2 records = 1 page) und die Dateigröße in kB. In CP/M 2.2 gab es leider keine Verwaltung von Zeitstempeln. Schade, der JC][ hätte ja eine Uhr....
Systemstatus
Nun wäre es vielleicht interessant, sich den aktuellen Systemstatus anzuzeigen. Dazu dient SYSINFO, ein compiliertes FORTH-Programm. Richtig gelesen - das FIG-FORTH in CPM-65 hat einen Mechanismus, jedes Forthprogramm als Standalone-Programm zu erzeugen.
Praktisch, wenn man wissen möchte, welche BIOS-Version man auf der Bootdisk hatte. Die Ausgabe für die PROM-Version ist übrigends ein Artefakt. Da muss ich für den JC ][ noch nacharbeiten.
Und nun die Belegung unserer Diskette mit dem Programm ALLOC
Interessant - schon ziemlich voll..
Der Versuch, nun mit 'D B:' den Inhalt von Drive B: auszugeben, scheitert mit einer Fehlermeldung.
Richtig - es ist ja auf B: noch kein Image gemountet. Dazu benötigt man das Programm SD-UTIL. Dazu mehr in der nächsten Folge.
Dietrich