CP/M (Abkürzung für Control Program for Microcomputers, „Steuerprogramm für Mikrocomputer“) ist eine Reihe von Betriebssystemen, die ab etwa 1974 von Digital Research unter Gary Kildall entwickelt wurden. CP/M war (neben dem für leistungsstärkere Rechner konzipierten Unix) das erste plattformunabhängige Betriebssystem. Eine Mehrbenutzer-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 den dazu kompatiblen Zilog Z80, eine 8-Bit-Architektur. Die letzte Version von CP/M-80 wurde „CP/M-Plus“ genannt. „CP/M-86“ war eine Portierung auf die Prozessoren Intel 8086 und 8088, eine 16-Bit-Architektur. Mit „CP/M-68K“ folgte eine weniger erfolgreiche Variante für den Motorola 68000 (ebenfalls 16 Bit).

Die Abkürzung CP/M stand ursprünglich für Control Program/Monitor („Steuerprogramm/Maschinencode-Monitor“). Das ursprüngliche Akronym wurde später in Control Program for Microcomputers umgedeutet.

Aufbau mini|hochkant|CP/M-Betriebssystem-Handbuch, 1982 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 (zum Beispiel dir (Disketten-Inhaltsverzeichnis anzeigen), rename (Umbenennen von Datei[en]) und weitere). Andernfalls wird ein entsprechendes Programm mit der Dateinamenserweiterung .com (bei CP/M-68k: .68k) geladen und gestartet. Beispiele: pip.com (Kopierprogramm), stat.com (Informationen über verschiedene Systemeinstellungen) usw.

Anwendungssoftware kommuniziert mit der Hardware meist nur über das gleichbleibende BDOS sowie über die standardisierten Einsprungspunkte des BIOS – und ist somit portabel. Allerdings ist die Anwendungssoftware für CP/M aus Geschwindigkeits- und Speicherplatzgründen oft in Assemblersprache geschrieben und 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,digitalresearch.biz die hauptsächliche Änderung war das verbesserte Dateisystem File Allocation Table (FAT).

Schwachpunkte Ein Schwachpunkt von CP/M war, dass es kein einheitliches Format für 5¼-Zoll-Disketten gab. Das einzige offizielle (IBM-Industriestandard)-Format war ein 8-Zoll-Format, so dass nach dem weitgehenden Verschwinden der 8-Zoll-Diskettenlaufwerke 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 das Terminal VT100 der Digital Equipment Corporation, damit möglichst viel Software unverändert darauf eingesetzt werden konnte. Kommerzielle Programme mussten auf das jeweilige Zielsystem angepasst werden. Im günstigsten 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 Schneider/Amstrad CPC bis hin zu Rechnern wie dem Epson QX 10 mit 256 Kilobyte (kB) Arbeitsspeicher 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 kB direkt nutzbaren Speichers ein Problem – schuld war hier allerdings nicht CP/M selbst, sondern die 8-Bit-Architektur der zeitgenössischen Prozessoren, auf denen es hauptsächlich eingesetzt wurde. Auch die schlechte Eignung für Festplattenlaufwerke 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 (der Version 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 mini|CP/M-Computer, DEC VT180, 1982 Typische Rechner aus den frühen 1980er Jahren, auf denen CP/M eingesetzt wurde, hatten einen Intel 8080 mit 2 MHz oder einen Zilog-Z80-Prozessor (codekompatibel zum Intel 8080) mit 2,4576 MHz (Z80) oder 4 MHz (Z80A), 32, 48 oder 64 kiByte Hauptspeicher, einen Monochrom-Bildschirm, der 64×16 oder 80×24 Zeichen Text (aber keine Grafik) darstellen konnte, ein oder zwei Diskettenlaufwerke für 8-Zoll- oder 5¼-Zoll-Disketten, selten auch eine Festplatte mit 5 MByte. 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 Ende der 1970er Jahre noch S-100-Bus-Systeme wie etwa der IMSAI 8080, setzten sich Anfang der 1980er Jahre modulare Systeme auf ECB-Basis durch, z. B. der mc-CP/M-Computer. Bekannte kommerzielle CP/M-Computer der späteren Jahre waren 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 gab es Zusatzkarten für die Commodore-Arbeitsplatzrechner der CBM-3000- und CBM-4000-Serie (Nachfolger des PET 2001).

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. Allerdings bildete vor allem der Amstrad/Schneider CPC 6128 hier eine Ausnahme, da er im Lieferumfang bereits eine CP/M 2.2 und eine CP/M-Plus-Version hatte. Auch das Handbuch ging recht detailliert auf CP/M ein und professionelle Software wie zum Beispiel Multiplan oder Wordstar wurden häufig auf dem CPC genutzt.

Auch der Schneider Joyce/Amstrad PCW 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 Zilog-Z80-Prozessor mit 4 MHz und 256 bzw. 512 kiByte Arbeitsspeicher. Das gestartete CP/M-Betriebssystem war in dieser Konfiguration auf drei „Speicherbänke“ zu je 64 kiByte verteilt, mit einem gemeinsamen „Common“-Bereich ab Adresse HxC000 (zum Beispiel Kernel in Bank 1, Tastatur und Bildschirm in Bank 0, Drucker in Bank 2). Diese Versionen waren an der Dateinamenserweiterung .ems erkennbar.

Portierungen von CP/M CP/M in der Deutschen Demokratischen Republik