Control Program/Monitor
CP/M, sigle de Control Program/Monitor ou /Microcomputer, est un système d'exploitation créé en 1974 par Gary Kildall, fondateur de Digital Research.

Il est utilisé notamment sur les Amstrad CPC et Amstrad PCW, Commodore 128, TRS-80, l'Osborne 1, BBC Micro, le ZX Spectrum. Il fut utilisé sur PC, notamment livré en standard avec les Amstrad PC-1512 en plus du MS-DOS et de GEM.

Pour l'Apple II, Microsoft a créé en 1980 la carte d'extension Z-80 SoftCard qui permettait l'usage du système d'exploitation de Digital Research.

Les premières versions de MS-DOS se sont largement inspirées de CP/M.

Organisation de la mémoire 
La mémoire d'un ordinateur sous CP/M est divisée en quatre parties :
 Le BIOS (basic input output system for serial peripheral) : il gère les périphériques, disquettes, imprimantes moniteur, etc. Habituellement, le BIOS occupe la partie « haute » de la mémoire ;
 Le BDOS (basic disk operating system primitives) : il contient le système d'exploitation. Habituellement, le BDOS se trouve sous le BIOS ;
 Le CCP (console command processor) : cette partie du CP/M correspond à l'interface utilisateur. Habituellement, le CCP se trouve sous le BDOS ;
 Le TPA (transient program area) : cette partie de la mémoire débute à l'adresse hexadécimale 100. Elle est destinée aux programmes des utilisateurs.

Les différents types de fichiers 
Ce système d'exploitation, enregistre les fichiers sur disquettes suivant une organisation logique spécifique (qui n'a pas été reprise par MS-DOS), et peut remplir les disquettes jusqu'à ce qu'elles soient complètement remplies.

CP/M peut aussi gérer des disques durs (en réalité, comme le BIOS est « ouvert » et décrit clairement dans la documentation que Digital Research fournissait avec certains de ses logiciels, il est donc possible d'adapter tout système particulier CP/M à toute mémoire de masse disponible - et aux périphériques dont on dispose). Certains ordinateurs tournant sous CP/M étaient vendus, à l'origine, avec des disques durs (l'Altos en est un exemple).

Il existe des implémentations pour  le micro-processeur Z80 qui ont un systeme de disques formé de carte SD ou de clées USB (au format FAT16).

Chaque fichier a un nom et une extension (plus précisément, la syntaxe est : <nom du fichier (8 caractères maximum)>.<extension (3 caractères maximum)>).

Parmi les extensions les plus habituelles, on trouve :

 ASM : fichier source assembleur ;
 PRN : fichier listing assembleur ;
 HEX : Langage machine présenté sous la forme d'une suite d'octets en hexadécimal au format Intel ;
 BAS : fichier source BASIC ;
 INT : fichier de code intermédiaire BASIC ;
 COM : fichier de commandes, fichier d'image mémoire (commençant à l'adresse 100 en hexadécimal) - sous CP/M les fichiers « exécutables » sont toujours des « .COM » ;
 SUB : fichier avec une suite de commandes – à traiter en mode  « Batch » par la commande  « SUBMIT » ;
 BAK : fichier de sauvegarde - il est souvent utilisé par les programmes de traitement de texte ;
 $$$ : fichier temporaire, utilisé, par exemple par  « SUBMIT » ;
 LBR : fichier archive.

Exemples de noms de fichiers : STAT.COM ; dans le cas de  « nomdufichier.ASM », le nom du fichier est trop long, puisqu'il y a un maximum de 8 caractères utilisables à cet effet ; donc il faudrait, par exemple, nommer ce fichier  « fichier.ASM » ou  « fichier1.ASM ».

« READ.ME » est un nom de fichier que beaucoup d'éditeurs utilisent pour attirer l'attention de l'utilisateur sur des aspects très importants de leurs logiciels... ce sont donc des fichiers à lire avant d'utiliser le logiciel en question. Pour lire le contenu d'un tel fichier on peut, en général utiliser la commande :

TYPE READ.ME

Les invites de commandes des disquettes sont A> pour le lecteur A et B> pour le lecteur B. Comme sous MS-DOS, il faut taper la lettre du disque auquel on veut accéder, suivie de deux points.

Différentes commandes de CP/M 
Les commandes de CP/M peuvent être « internes » ou « externes » (comme ce fut, par la suite, le cas avec MS-DOS). Sous CP/M, pour l'utilisateur, il n'y a pas de différence entre lancer une commande « interne » (par exemple DIR as*.*), « externe » (par exemple STAT as*.*) ou un programme (par exemple LINK).

Sous CP/M, le programme « correct » le plus court n'a besoin que d'un octet (C9 en hexadécimal - l'instruction RETurn) qui fait un retour au Système (ce qui est une sortie « normale » pour un programme CP/M). Par contre, il doit être sauvegardé dans un fichier « exécutable » (donc un  « .com ») dont la taille minimum est un secteur (donc  minimum).

Les commandes externes du CP/M ou MP/M appelaient des programmes du même nom qui portaient l'extension .COM ou .PRL (uniquement dans le cas de MP/M). Pour information, le MP/M était relativement semblable au CP/M mais était multi-utilisateurs.

 ERA pour effacer un ou plusieurs fichiers : ERA *.* efface tous les fichiers (ERA est une commande interne de CP/M ; ERA.PRL)
 DIR pour avoir la liste des fichiers d'une disquette : DIR *.* pour avoir la liste complète des fichiers (est une commande interne de CP/M ou DIR.PRL pour le MP/M).
 PIP  « the Peripheral Interchange Program » qui permettait de copier un ou plusieurs fichiers à la fois (PIP.COM) ou même de les concaténer...
 ABORT utilisé pour quitter un programme en cours d'exécution (nom du programme en argument ou le numéro de la console sur lequel le programme tourne (ABORT.COM OU ABORT.PRL)
 ASM assemble un fichier ASM (ASM.COM) (ASM a été fourni par Digital Research, mais beaucoup d'autres assembleurs et macro-assembleurs ont été écrits pour CP/M y compris par Digital Research)
 ATTACH attache la console à un programme détaché (ATTACH.PRL)
 DSKRESET pour changer un disque en multi-utilisateur (DSKRESET.COM DSKRESET.PRL)
 DUMP suivi d'un nom de fichier pour afficher le contenu du fichier en hexadécimal
 ED pour éditer un fichier (ED.COM ED.PRL)
 ERAQ pour effacer un fichier (ERAQ.COM ERAQ.PRL)
 GENHEX pour transformer un programme .COM en hexadécimal .HEX (GENHEX.COM GENHEX.PRL)
 GEMOD pour générer un fichier PRL avec un fichier HEX (GEMOD.COM ou GEMOD.PRL)
 GENESYS qui permettait de créer un système MP/M sur un système CP/M (GENESYS.COM)
 LOAD pour charger un fichier hexadécimal .HEX ou le transformer en exécutable .COM ( LOAD.COM )
 MOVCPM pour reconfigurer le CP/M pour ajuster la mémoire (MOVCPM.COM)
 MPMLDR pour charger, relouer et exécuter le système MP/M (MPMLDR.COM)
 MPMSTAT pour afficher les statuts du MP/M (processus, mémoire allouée) (MPMSTAT.PRL)
 STAT pour fournir les statistiques des fichiers et disques ou disquettes (STAT.COM STAT.PRL) ; STAT permet aussi de modifier la relation entre les périphériques logiques et les périphériques physiques
 SUBMIT exécute le traitement par lots d'une commande (SUBMIT.COM SUBMIT.PRL)
 PRLCOM pour transformer un exécutable PRL en exécutable .COM (PRLCOM.COM PRLCOM.PRL)
 REN pour renommer un fichier (REN est une commande interne en CP/M ; REN.PRL en MP/M)
 SAVE pour sauver le contenu de la mémoire dans un fichier (SAVE est une commande interne en CP/M)
 SCHED planifier l'exécution d'un programme à une heure ou une date ultérieure (SCHED.PRL)
 TYPE pour afficher le contenu d'un fichier (TYPE est une commande interne en CP/M ; MP/M TYPE.PRL)
 USER pour changer ou afficher la zone de travail d'un utilisateur (USER est une commande interne en CP/M ; USER.PRL)

Sous CP/M, l'utilisateur peut programmer en utilisant directement le code machine, un assembleur ou un langage de programmation comme le BASIC.

Les sources des logiciels écrits par DRI (c'est-à-dire, Digital Research) peuvent se trouver sur Internet (voir, par exemple, DRIPAK.zip).

Logithèque 

CP/M supporte de nombreux traitements de texte comme WordStar, avec, le cas échéant, leurs systèmes de vérification orthographique, des tableurs comme SuperCalc ou des logiciels combinant ces deux fonctionnalités.

Parmi les autres logiciels disponibles, il y avait aussi dBase II, une base de données relationnelle, très interactive.

Par ailleurs, des compilateurs CP/M ont été écrits pour de nombreux langages, par exemple :
– Ada ;
– Algol ;
– APL (interpréteur) ;
– BASIC (compilateurs et interpréteurs) ;
– C ;
– Cobol ;
– Fortran ;
– LISP ;
– PASCAL ;
– PL/I ;
– PROLOG ;
– et bien d'autres.
Des langages orientés vers l'« intelligence artificielle », comme muMATH (qui est capable de résoudre des équations formelles) ou muSIMP (voir muMATH) peuvent aussi « tourner » sous CP/M.

Le cas du langage PL/M est un peu particulier, puisqu'une partie du logiciel correspondant au système d'exploitation CP/M — et à ses utilitaires — a été écrite en PL/M, pour un compilateur qui tournait sous ISIS II. Il est possible, toutefois, d'émuler ISIS II sous CP/M.

Bibliographie 
 Pour plus d'information sur les commandes ou le CP/M en général, on peut se reporter à l'ouvrage The CP/M Handbook (with MP/M) de David E. Cortesi dont une version numérisée est disponible sur Internet version en ligne.
 A Programmer Notebook - Utilities for CP/M-80 version en ligne.

Lien externe 

 Page non officielle de référence sur CP/M

Système d'exploitation abandonné