CP/M

Aus C64-Wiki
Zur Navigation springenZur Suche springen
CP/M 3.0 auf einem C128 im 40-Zeichenmodus, virtuelle 80-Zeichen möglich.

Das Betriebssystem CP/M wurde im Jahre 1976 von Gary Kildall für Digital Research für PCs entwickelt. Die Abkürzung steht für Control Programm for Microcomputers und wurde entwickelt für die 8-Bit-Prozessoren von Intel 8080 und 8085, sowie für den Z80 von Zilog. Es gibt verschiedene weitere CP/M-Portierungen und Weiterentwicklungen. Für die Intel-Mikroprozessoren mit 16-Bit 8086 und 8088 gibt es eine angepasste Version namens CP/M-86, für das Motorola-Lager mit der 68000-Architektur CP/M-68K.
Bis 1988 lief CP/M auf rund 250 unterschiedlichen Computersystemen.


Geschichte[Bearbeiten | Quelltext bearbeiten]

Das Betriebssystem war in den 1970er- und 1980er-Jahren weit verbreitet und vor allem in den USA sehr dominierend.[1] Nicht nur, dass es als Betriebssystem ein einheitliches Disk Operating System mitbrachte, womit Medien zu einem gewissen Grad zwischen Systemen unterschiedlicher Hardware austauschbar wurden, war genau das Konzept der Hardware-Unabhängigkeit ein wesentlicher Punkt für die Verbreitung und Akzeptanz. Die Trennung der Ein- und Ausgabeschicht (dem sogenannten BIOS, Basic Input Output System) von der eigentlichen Betriebssystemkomponente (dem BDOS, Basic Disk Operating System) kann als ausschlaggebenden Punkt den Einsatz auf unterschiedlichster Hardware angesehen werden. Die Benutzerschnittstelle war rein textuell und hatte ihren Ursprung noch in Zeiten als Terminals dominierten. Die Flexibilität erlangte CP/M dann mit einem Kommandozeileninterpreter (CCP, Console Command Processor), der das Ausführen von Anwendungen und Hilfsprogrammen von Diskette erlaubte und danach wieder die Kontrolle übernahm.

Allerdings schaffte es CP/M nicht, im Bereich der IBM-kompatiblen PCs Fuß zu fassen. Zum Zeitpunkt konnte sich auf IBMs PC-Hardware nämlich Microsofts PC-DOS gegenüber CP/M-86 preislich und lizenzpolitisch durchzusetzen, obgleich der Aufbau und der Funktionsumfang vergleichbar war. Für CP/M gibt es zwar eine große Softwarevielfalt (u.a. dBASE II, Wordstar, Multiplan), die aber primär im 8080-Bereich angesiedelt ist und da spielte es damals für einen Anwendungshersteller kaum eine Rolle, ob nun der Portierungsaufwand für CP/M-86 oder etwa MS-DOS zu investieren war.

Mit der Version CP/M-Plus 3.0 (1983) war die letzte auf 8080-Basis veröffentlichte Version noch in breiter Front, besonders als standardmäßig mitgelieferte Software bzw. Alternativbetriebssystem beim Commodore 128 in Umlauf.

Aufbau[Bearbeiten | Quelltext bearbeiten]

CP/M besteht aus den drei Schichten

  1. BIOS (Basic Input Output System),
  2. BDOS (Basic Disk Operating System) und
  3. CCP (Console Command Processor).

Das BIOS kapselt die hardware-spezifischen Besonderheiten eines Systems, sodass der CP/M-Kern bzw. BDOS hardware-unabhängig auf Geräte, wie Terminals, Druckerschnittstellen, Diskettenlaufwerke etc. zugreifen kann. Ein einheitliches Gerätekonzept sorgt dafür, dass Gerätenamen Bestandteil von Dateinamen und diese einheitlich von allen Kommandos angesprochen werden können. Genau genommen, sind Dateinamen eine spezielle Form einer einheitlichen Objektbezeichnung bezogen auf Geräte, die sich automatisch auf Diskettenlaufwerke beziehen.
Dateien können mit entsprechenden Platzhaltersymbolen ausgewählt werden. Ein Dateiname ist nach 8.3-Konvention aufgebaut, wobei der Namensteil 8 Zeichen und der durch Punkt getrennte Typteil 3 Zeichen umfassen darf.

Üblicherweise wird die Kontrolle an den CCP übergeben, der die textuelle Benutzerschnittstelle und damit das Command-Line-Interface (CLI) darstellt. Neben den internen Befehlen des CCP (built-ins) können auch externe Kommandos aufgerufen werden, die auf Diskette mit Endung ".COM" vorliegen müssen.

Typische CP/M-Befehle als

  • interne CCP-Kommandos (built-in commands):
    • ERA Datei löschen
    • DIR Verzeichnis einer Diskette anzeigen
    • REN Datei umbenennen
    • TYPE Inhalt einer Textdatei am anzeigen
  • externe Programme (transient commands):
    • ASM Standard-Makro-Assembler
    • DDT Debugger
    • DUMP gibt den Inhalt einer Datei in hexadezimaler Form aus
    • ED zeilenorientierter Texteditor
    • LINK sogenannter Linker, der aus RMACs relozierbaren Modulen und Bibliotheken Programmmodule erstellt (.COM)
    • LIB erstellt und organisiert Bibliotheken (liberaries) aus relozierbaren Modulen (von RMAC oder anderen Programmiersprachen)
    • PIP transferiert Daten zwischen Geräten, z.B. als Diskettenkopierprogramm
    • RMAC Aufruf des Relocatable Macro-Assemblers, der relozierbare Module erstellt
    • STAT liefert statistische Informationen und sonstige Details zu Dateien
    • SUBMIT verarbeitet Stapelverarbeitungsprogramme

CP/M für den C64[Bearbeiten | Quelltext bearbeiten]

In der klassischen Variante dient eine Hardware in Form einer Z80-Karte oder eines Z80-Steckmoduls als Grundlage für den CP/M-Betrieb auf einem C64. Es gab von Commodore ein solches Modul, aber auch von anderen Herstellern.

Allerdings gibt es bei diesen Umsetzungen so manche Einschränkungen, wie etwa den fehlenden 80-Zeichen-Modus (der aber mit einer Software-Emulation SOFT80[4] für Commodore-64 CP/M notdürftig behoben werden kann) oder das zu anderen CP/M-Systemen völlig inkompatible Disk-Format der Commodore-Floppy-Laufwerke (sofern das Laufwerk nicht MFM-Formate unterstützt), welche dann geschwindigkeitsmäßig weit hinter dem gewohnten CP/M-Standard liegt (zumindest in der Grundausstattung ohne Schnelllader). Dazu kommt auch noch, dass die Z80-Integration zumindest beim Commodore-Modul so aufgebaut ist, dass dynamisch zwischen den CPUs 6510 und Z80 hin- und hergeschaltet wird, um auf die C64-internen Ressourcen zuzugreifen. Auch die Taktfrequenz der Z80-CPU liegt in der Commmodore-Implementierung unter der typischer CP/M-Systeme, was in Summe deutliche Leistungseinbußen mit sich bringt und die tendenziell mit CP/M einhergehende "professionelle" Nutzung stark in Frage stellt.
Auch experimentelle Ansätze und Bastellösungen finden sich hin und wieder, wie z.B. "Radio Shack Word Pak"-Modul an einem einem Slot Xpander 3 zusammen mit dem Commodore-64 CP/M-Modul, wobei die Hardware etwas verändert wurde und auch das BIOS entsprechend angepasst werden musste.[5]

Ein völlig anderer Ansatz ist die Software-Emulation, wobei die Z80-CPU per Software emuliert wird. Grundlage dafür sind Turbo-Karten (Turbo Chameleon 64, SuperCPU, ...), die eine hinsichtlich Geschwindigkeit halbwegs brauchbare Emulation ermöglichen. Das geht sogar so weit, dass beispielsweise auch auf einem 6510 ein Z80 bzw. 8080 emuliert werden kann, allerdings nur in einer beschleunigten Umgebung eines C64-Emulators, bei dem sich dann nur mit hoher Emulationsgeschwindigkeit ein praktikabler Betrieb einstellt.[6]

CP/M für den C128[Bearbeiten | Quelltext bearbeiten]

Mit dem C128 ist eine eigens von Commodore stammende Variante mitgeliefert worden.

Es gibt noch mindestens zwei weitere Varianten:[7]

  • CP/M fast
    Schneller als die Commodore-Variante, weil z.B. im 80-Zeichen-Modus der VIC-Chip deaktiviert wird bzw. in einer weiteren Optimierung die BIOS-Routinen verschlankt werden (da der BIOS-Code von Commodore veröffentlicht ist).[8]
  • ZPM3[9][10]
    Große Teile des BDOS sind neu und effizienter in Z80-Assembler codiert worden, mit entsprechendem Geschwindigkeitsgewinn. Beiliegend ist auch eine für das Swiftlink-Modem gepatchte Version von QTerm.

Vorteil:

  • Beide oben genannte Versionen könnten dabei helfen, generell höhere Baudraten bei der Kommunikation mit Modems zu erreichen.

Programmierung[Bearbeiten | Quelltext bearbeiten]

Zumindest folgende Programmiersprachen werden unter CP/M unterstützt: COBOL, PL/1, Algol, Fortran, LISP, sowie:

  • BASIC
  • C
    • Aztec C
    • BDS-C (verbreitet in den USA)
    • C/80
    • Small-C (Public Domain)
    • Hi-Tech C (Freeware)
    • Mix C (unter MS-DOS als Mix Power C)
  • Forth
    • FORTH83 (Public Domain; SIG/M Nr.204)
  • Pascal
    • Turbo Pascal
    • Nevada Pascal bzw. JRT Pascal (Public Domain; SIG/M Nr.82 ) mit Linker, Assembler, Debugger, Hilfsprogramme
  • Prolog
    • E-Prolog


Weblinks[Bearbeiten | Quelltext bearbeiten]

WP-W11.png Wikipedia: CP/M
WP-W11.png Wikipedia: Gary Kildall

Quellen[Bearbeiten | Quelltext bearbeiten]