CP/M
CP/M () ist eine Reihe von Betriebssystemen, die ab etwa 1974 von Digital Research Inc. unter Gary Kildall entwickelt wurden. CP/M war (neben dem für leistungsstärkere Rechner konzipierten Unix) das erste plattformunabhängige Betriebssystem. Eine Multiuser-Variante wurde unter dem Namen MP/M entwickelt. Mit dem Aufkommen von MS-DOS bzw. dessen IBM-Variante PC-DOS verlor CP/M seine Bedeutung.

CP/M ohne nähere Bezeichnung steht meist für CP/M-80, die ursprüngliche, ab 1974 entwickelte Version für die Mikroprozessoren Intel 8080 und Zilog Z80. Die letzte Version von CP/M-80 wurde CP/M-Plus genannt. CP/M-86 war eine Portierung auf die Prozessoren Intel 8086/8088. Mit CP/M-68K folgte eine weniger erfolgreiche Variante für den Motorola 68000.

Die Abkürzung CP/M stand ursprünglich für Control Program/Monitor (englisch für Steuerungsprogramm/Überwacher). Das ursprüngliche Akronym wurde später in Control Program for Microcomputers umgedeutet.

Aufbau 

Die Entwicklung des Betriebssystems geschah zeitgleich mit Kildalls Arbeit bei Intel. Er nutzte die ebenfalls von ihm entworfene Programmiersprache PL/M sowie das Betriebssystem ISIS, an dem er gerade mitarbeitete, mit welchem sich CP/M die Befehle und grundlegende Funktionsweisen teilt. 

Die unterste Ebene von CP/M bildet als Hardwareabstraktionsschicht das , kurz BIOS, welches eine standardisierte Schnittstelle für die hardwarenahen Aufgaben zur Verfügung stellt, vor allem zur Ein- und Ausgabe. Lediglich dieser Teil des Betriebssystems musste an den jeweiligen Computertyp angepasst werden, was normalerweise durch den Hersteller geschah. Die restlichen Teile konnten ohne große Veränderungen übernommen werden, da sie lediglich auf den Funktionen des CP/M-BIOS aufbauen.

Die standardisierten Funktionen des BIOS werden vom eigentlichen Systemkern, dem hardwareunabhängigen BDOS (), verwendet, das höhere Funktionen zur Verfügung stellt, vor allem zur Dateiverwaltung. Dieses greift auf die Hardware nur indirekt über das BIOS zu, wodurch die Hardwareunabhängigkeit realisiert wird.

Das BDOS wiederum wird vom CCP (Console Command Processor) verwendet, einem Kommandozeileninterpreter, der die Befehle des Benutzers entgegennimmt. Einige einfache Befehle werden vom CCP selbst ausgeführt (Beispiele: dir (Disketten-Inhaltsverzeichnis anzeigen), rename (Umbenennen von Datei[en]) und weitere). Andernfalls wird ein entsprechendes Programm mit der Namensendung .com (bei CP/M-68k .68k) geladen und gestartet. Beispiele: pip.com (Kopierprogramm), stat.com (Informationen über verschiedene Systemeinstellungen) usw.

Anwendungsprogramme kommunizieren mit der Hardware meist nur über das gleichbleibende BDOS sowie über die standardisierten Einsprungspunkte des BIOS – und sind somit portabel. Allerdings sind die Anwendungsprogramme für CP/M aus Geschwindigkeits- und Speicherplatzgründen oft in Assembler geschrieben und wurden nur selten im Quelltext veröffentlicht, so dass Portabilität in der Praxis nur innerhalb einer Prozessorfamilie gegeben war. Der Assembler-Quellcode von CP/M wurde zusammen mit dem Assemblerprogramm asm.com mitgeliefert. Somit konnte in Assembler das Betriebssystem nach eigenem Bedarf verändert und erweitert werden. Dennoch war CP/M kein „Open Source“ im heutigen Sinne, da die Weitergabe modifizierter Versionen nicht erlaubt war.

Der Aufbau von CP/M wurde später auch durch MS-DOS übernommen: Hier heißen die oben beschriebenen Teile (Bootdateien) nun IO.SYS statt BIOS, MSDOS.SYS statt BDOS und (der Kommandointerpreter) COMMAND.COM statt CCP. Überhaupt lehnte sich die erste Version von MS-DOS sehr stark an CP/M an, die hauptsächliche Änderung war das verbesserte FAT-Dateisystem.

Schwachpunkte 
Ein Schwachpunkt von CP/M war, dass es kein einheitliches Diskettenformat für 5¼″-Disketten gab. Das einzige offizielle (IBM-Industriestandard)-Format war ein 8″-Format, so dass nach dem weitgehenden Verschwinden der 8″-Laufwerke der Austausch von Disketten zwischen CP/M-Rechnern verschiedener Hersteller sehr schwierig bis unmöglich wurde. Auch die Bildschirm- und Druckersteuerung war in CP/M-Systemen nicht einheitlich, denn CP/M war ursprünglich für bildschirmlose, Fernschreiber-basierte Systeme (TTY) entwickelt worden. Spätere Systeme, auf denen CP/M lief, emulierten häufig weitverbreitete Bildschirmtypen, beispielsweise VT100, damit möglichst viel Software unverändert darauf eingesetzt werden konnte. Kommerzielle Programme mussten auf das jeweilige Zielsystem angepasst werden. Im günstigen Fall war die Auswahl über ein vordefiniertes Installationsprogramm (setup) möglich. Nicht selten musste der Anwender allerdings die notwendigen Steuerzeichen für z. B. „Bildschirm löschen“ oder Cursor-Positionierung sowie auch Steuercodes für den verwendeten Drucker in Erfahrung bringen und in den Programmcode integrieren. In solchen Fällen war meist ein Patch im Anwendungsprogramm mittels Debugger erforderlich. Einige professionelle Programme, wie die Textverarbeitungssoftware WordStar, waren durch vorbereitete Patch-Bereiche bereits konzeptionell darauf eingerichtet.

Auf der anderen Seite war das nur eine Folge der Flexibilität von CP/M: Es legte als Hardware nur den Prozessor und eine Mindestspeichergröße fest. Dadurch konnte es auf sehr verschiedenen Computern von Heimcomputern wie dem CPC 664 bis hin zu Rechnern wie dem Epson QX 10 mit 256 kB RAM laufen. Der Hersteller musste in seiner CP/M-Version nur den BIOS-Teil an die verwendete Hardware anpassen.

Mit dem raschen Verfall der Speicherpreise ab etwa 1981 wurde auch die Beschränkung auf 64 Kilobyte direkt nutzbaren Speichers ein Problem – schuld war hier allerdings nicht CP/M selbst, sondern die 8-Bit-Prozessoren, auf denen es hauptsächlich eingesetzt wurde. Auch die schlechte Eignung für Festplatten bremste CP/M ab etwa 1982 zunehmend aus. Das Hauptproblem war dabei die Unfähigkeit von CP/M-80, Unterverzeichnisse zu verwalten, was für größere Datenträger fast unerlässlich ist. CP/Ms eigenes Unterteilungskonzept für Datenträger mittels sogenannter „Benutzernummern“ war zu beschränkt, da es nur 16 Bereiche und keine hierarchischen Strukturen ermöglichte. Allerdings erhielt MS-DOS diese Fähigkeit auch erst im Jahr 1983.

Bei Festplatten nutzte man diese Benutzernummern, um mit dem Befehl USER mehrere Bereiche auf einem Datenträger zu verwalten und nur die Daten anzuzeigen, die zu dem jeweiligen Benutzer gehören.

CP/M-Plus 
1983 erschien mit CP/M-Plus (3.0) die letzte Version des klassischen 8080er-CP/M, welche nun mittels Bank Switching auch mehr als 64 kB Speicher unterstützte. Außerdem wurde bei CP/M-Plus eine Reihe von Aufgaben, die bisher das herstellerspezifische BIOS erledigen musste, ins herstellerunabhängige BDOS verlegt und somit die Portierung weiter vereinfacht. Vor allem brauchte die codetechnisch nicht ganz einfache und daher fehleranfällige Umwandlung zwischen der bei CP/M grundlegenden Datenblockgröße von 128 Bytes und der eigentlich von der Hardware verwendeten, bei den neueren Disketten- und Festplattenformaten fast immer größeren Blockgröße, nicht mehr im BIOS von jedem Hersteller neu implementiert zu werden, sondern fand jetzt im BDOS statt. Jedoch war diese CP/M-Version zugleich auch langsamer und verbrauchte mehr Speicher für sich selbst. Diese Version ist zwar dank des Commodore 128 und des Schneider/Amstrad CPC 6128, bei denen sie mitgeliefert wurde, die weltweit meistverkaufte, konnte allerdings, was die tatsächliche Nutzung betrifft, nicht mehr an die Popularität des kleineren und schnelleren CP/M 2.2 anknüpfen.

CP/M 3.0 konnte auch eine Erweiterung namens Graphics System Extension (GSX, vgl. Graphical Kernel System) enthalten, die das Problem, dass Drucker und Bildschirm je nach Hersteller unterschiedlich angesteuert werden, beseitigte. Es stellte eine zusätzliche Schnittstelle für Text- und Grafikausgabe (u. a. Balken- und Kreisdiagramme) zur Verfügung. GSX nutzte dazu Druckertreiber, die der Hersteller des Druckers bereitstellen musste.

Typische Hardware 

Typische Rechner aus den frühen 1980er Jahren, auf denen CP/M eingesetzt wurde, hatten einen Zilog-Z80-Prozessor (Codekompatibel zum Intel 8080) mit 2 bis 4 MHz, 64 oder 128 kB Hauptspeicher, einen einfarbigen Bildschirm, der 80×24 Zeichen Text (aber keine Grafik) darstellen konnte, ein oder zwei Floppylaufwerke mit 8-Zoll- oder 5¼-Zoll-Disketten, selten auch eine Festplatte mit etwa 5 MB. Dies leitete sich von der Ausstattung des Intel MDS-800 Entwicklungssystems ab, auf dem CP/M entworfen wurde.

CP/M wurde auch von vielen Bastlern auf ihren selbstgebauten Computern verwendet. Dominierten in der Frühzeit noch S-100-Bus-Systeme wie etwa der IMSAI, so waren bekannte kommerzielle CP/M-Computer der späteren Jahre der Osborne 1 und die Kaypro-Modelle; auf dem Apple II wurde CP/M häufig mittels einer zusätzlichen Z80-Prozessorkarte (Apple CP/M) genutzt. Weiterhin auf den Commodore-Bürorechnern 3032 und 4032 (PET-Nachfolger).

Auch auf vielen Heimcomputern konnte CP/M genutzt werden, beispielsweise auf dem Schneider/Amstrad CPC, Commodore 64 (mit Zusatzmodul) und dem Commodore 128; in der Praxis wurde es auf diesen aber eher selten eingesetzt, da sie zusätzlich jeweils noch ein eigenes Betriebssystem mitbrachten, das besser auf die jeweilige Hardware abgestimmt war und somit vor allem für grafische Computerspiele besser geeignet war.

Auch der Amstrad PCW 8256/8512 – in Deutschland vertrieben als „Schneider Joyce“ – hatte neben dem aus Marketinggründen als kombiniertes Betriebs- und Textverarbeitungssystem konzipiertem LocoScript als zweites, davon unabhängiges Betriebssystem CP/M an Bord. Der PC war ausgestattet mit einem Z80-Prozessor mit 4 MHz und 256 bzw. 512 Kilobyte Arbeitsspeicher. Das gestartete CP/M-Betriebssystem war in dieser Konfiguration auf drei „Speicherbänke“ zu je 64 Kilobyte verteilt, mit einem gemeinsamen „Common“-Bereich ab Adresse HxC000 (z. B. Kernel in Bank 1, Tastatur und Bildschirm in Bank 0, Drucker in Bank 2). Diese Versionen waren an der Dateibezeichnung *.EMS erkennbar.

Portierungen von CP/M

CP/M in der DDR 
In der DDR wurde CP/M meist unter der Bezeichnung SCP auf U880-basierter Hardware eingesetzt. Die Abkürzung „SCP“ steht dabei für „Single User Control Program“, weist also darauf hin, dass es sich um ein Einbenutzer-Betriebssystem handelt. Für allgemeine Büroarbeiten auf den 8-Bit-Mikrorechnern des P8000 und des P8000 compact entstand mit OS/M ein zu CP/M kompatibles Betriebssystem. Die Kleincomputer KC 85 konnten mit einem Aufsatz um 5¼″-Diskettenlaufwerke erweitert werden und so ebenfalls CP/M ausführen, welches in der Variante MicroDOS verwendet wurde. Innerhalb der Akademie der Wissenschaften der DDR wurde in den 1980er Jahren für die Rechner auf Basis der Z80/U880-Prozessoren (wie z. B. PC 1715, A 5110/A 5120/A 5130) das Betriebssystem CP/A genutzt. Es hatte gegenüber CP/M bzw. SCP den Vorteil, dass z. B. 5¼″-Disketten mit der vollen Speicherkapazität von 800 kB für Daten genutzt werden konnten, während CP/M nur 720 kB Daten erlaubte und 80 kB für das System reservierte. Vom VEB Mansfeld Kombinat wurden für deren Bürocomputerserie MPC 1 bis 4 CP/M-Versionen unter dem Namen SCP/M 2 entwickelt. Bei Carl-Zeiss Jena wurde das „CP/Z“ System entwickelt, das besonders wenig, dafür aber sehr effizienten Programmcode hatte. Es entstand ein reger Softwareaustausch zwischen den DDR-Firmen, da Verletzungen des Urheberrechts ausländischer Firmen in der DDR nicht verfolgt wurden. Nur ab und zu gab es auf internationalen Messen böse Überraschungen. Die Firma Ashton-Tate machte nach dem Ende der DDR allen dBase-Nutzern ein vergünstigtes Angebot.

CP/M-86 
Neben der 8080/Z80-Version von CP/M erlangte vor allem CP/M-86 praktische Bedeutung, eine CP/M-Version für 8086- und 8088-CPUs von Intel.

CP/M-86 hatte ab Januar 1982 durchaus die Chance, zum Standardbetriebssystem des IBM PC, dem ersten Personal Computer von IBM, zu werden. Unter bis heute umstrittenen Umständen bekam CP/M aber MS-DOS von Microsoft, welches konzeptionell stark an CP/M-80 angelehnt war, als Konkurrenten. Obwohl IBM anfangs dem Kunden die Wahl des Betriebssystems überließ, setzte sich MS-DOS – das in der von IBM ausgelieferten Variante PC DOS hieß – aufgrund seines niedrigeren Preises von 40 Dollar recht schnell gegen das wesentlich teurere CP/M-86 durch, wobei Software zunächst für beide Plattformen entwickelt wurde.

Das aus CP/M-86 abgeleitete, dazu weitgehend kompatible Betriebssystem SCP1700 wurde auf i8086/K1810WM86-basierten Bürocomputern des Kombinat Robotron eingesetzt. Auf dem 1985 vorgestellten Robotron A 7100 war SCP1700 das empfohlene Standardbetriebssystem.

CP/M-68K 
Die Portierung auf den Motorola 68000, genannt CP/M-68k, war kein großer kommerzieller Erfolg.

MP/M 
MP/M war ein Mehrbenutzersystem-Version () von CP/M. Mehrere Benutzer konnten gleichzeitig über ASCII-Terminals an einem Rechner arbeiten.

CP/NET 
Eine in den späten 1980ern entstandene Betriebssystemerweiterung zur Kommunikation zwischen CP/M-Systemen wurde CP/NET genannt. Als Server diente ein MP/M-System, auf den Clients lief CP/NET. Die Clients konnten auch festplattenlos betrieben werden. Neben der gemeinsamen Nutzung von Dateisystemen waren auch elektronische Nachrichten implementiert.

CCP/M-86 
Später wurde aus CP/M-86 und MP/M-86 eine neue Variante Concurrent CP/M (CCP/M-86) entwickelt. Diese vereinigte die Mehrbenutzerfähigkeiten von MP/M mit hoher Kompatibilität zu CP/M-86.

Software für CP/M 
Unter CP/M wurden Anwendungsprogramme wie die Textverarbeitungen Electric Pencil und WordStar (von MicroPro), die Tabellenkalkulationsprogramme Supercalc und Microsoft Multiplan sowie die Datenbanksoftware dBASE II (von Ashton-Tate) angeboten. Eine integrierte Office-Lösung, mit der Möglichkeit der leichten Datenübernahme z. B. von der Datenbank in die Textverarbeitung, gab es unter CP/M noch nicht. Allerdings waren die damaligen Dateiformate noch recht einfach aufgebaut, so dass meist eine händische Übernahme möglich war, oder es musste ein eigenes kleines Programm dafür geschrieben werden.

Neben den Anwendungsprogrammen lag der Schwerpunkt der Software für CP/M bei Programmiersprachen zur Erstellung spezifischer Programme. Erwähnenswert sind hier MBASIC von Microsoft, Fortran, Turbo Pascal von Borland, PL/I, muLISP und COMAL. Die von Digital Research selbst angebotene Sprache PL/M, eine systemnahe Programmiersprache mit Ähnlichkeiten zu PL/I, wurde bei DR auch intern viel verwendet; die Ähnlichkeit mit dem Namen des Betriebssystems ist somit nicht zufällig. Einige der mit CP/M standardmäßig mitgelieferten Hilfsprogramme wurden in dieser Sprache geschrieben. Die später so dominante Sprache C war unter CP/M noch ziemlich unbedeutend, entsprechend gibt es nur wenige Compiler für diese Sprache, die unter CP/M laufen – beispielsweise BDS C. Mit Aztec C wurde gegen Ende der Lebenszeit von CP/M ein brauchbarer Compiler verfügbar.

Zudem gab es recht große Sammlungen an Public-Domain-Programmen für CP/M, die z. B. von Benutzervereinigungen oder privaten Kleinvertrieben auf durchnummerierten Disketten zusammengestellt wurden. In diesem Bereich finden sich auch Computerspiele, die im Bereich der kommerziellen CP/M-Software nie eine Rolle spielten. Viele dieser Sammlungen wurden später auf CD-ROM oder zum Herunterladen im Internet wiederveröffentlicht. Eine CD-ROM kann leicht zehntausend oder mehr der nach heutigen Maßstäben winzigen CP/M-Programme fassen.

Emulationen 

Beim Übergang von 8-Bit-Prozessoren (wie dem Z80) zu 16-Bit-Maschinen (wie z. B. dem Intel 8086 und 80286) Anfang der 1980er Jahre bestand zunächst ein großer Mangel an Anwendungsprogrammen für die neue leistungsfähigere Hardware. Deshalb wurden Software-Emulationen entwickelt, die CP/M und eine Z80-CPU virtuell auf einem 16-Bit-System nachbildeten, so dass bestehende Anwendungen und Anwendungsdaten (z. B. eine dBase-II-Datenbank) auf dem neuen System weiterverwendet werden konnten. Für MacOS gibt es eine native CP/M Emulation.

Quelltext-Freigaben 
2001 gab Caldera CP/Ms Quelltext unter einer liberalen Open-Source-Lizenz, welche Redistribution und Modifikation erlaubt, via Tim Olmsteads  frei. Im Oktober 2014, um den 40. Jahrestag der Erstpräsentation zu feiern, veröffentlichte das Computer History Museum weitere frühe Quelltextversionen von CP/M unter einer Lizenz zur nicht-kommerziellen Verwendung.

Literatur 
 Rodnay Zaks: CP/M Handbuch, Sybex-Verlag GmbH, 1986, ISBN 3-88745-053-1
 Alfons Steinhoff, Klaus Michael Rübsam: Arbeiten mit CP/M, Sybex-Verlag GmbH, 1987, ISBN 3-88745-622-X
 
 Chip-Special 82005/87004 "CP/M+ besser programmieren" (für CP/M 3.0), Autor Karlheinz Dereser, 28 DM, keine weiteren bibliographischen Angaben ersichtlich (erschienen um 1988)

Weblinks 
 Yet Another Z80 Emulator by AG – YAZE-AG: Z80 CPU Emulator mit CP/M 3.1 auf der Internetpräsenz der Universität Ulm (englisch)
 Quellcode bei www.computerhistory.org „Early Digital Research CP/M Source Code“ ca. 150 MB (englisch)

Einzelnachweise 

Cpm
 
Betriebssystem
Historische Software