# 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.
CP/M est largement inspiré de TOPS-10 des systèmes PDP-10, alors utilisé par Kildall comme environnement de développement, et qui outre CP/M inspirera également les système OS-8 des PDP/8, RT11 des PDP/11, ainsi que les premières versions de MS-DOS. Les principales commandes telles que DIR ou TYPE, ou encore les extensions telles que .EXE ou .TXT, sont une illustration de la paternité commune de ces systèmes.

## 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.

## Périphériques

Sous CP/M, les périphériques sont gérés par le BIOS (adaptable par l'utilisateur), sous le contrôle du BDOS.
Comme le BIOS peut s'adapter aux différentes besoins, il est possible d'utiliser des lecteurs de disquettes et/ou des disques durs. Les disques sont désignés par une lettre majuscule (A B C ...) avec un maximum de 15.
Comme, de nos jours, la capacité des mémoires RAM ou PROM est considérable, il est possible aussi de disposer de disques virtuels en RAM et/ou en PROM. Les fichiers en PROM ne risquent pas d'être modifiés ou détruits par des virus.
L'utilitaire STAT permet d'assigner différents périphériques physiques, par exemple l'imprimante, aux périphériques logiques.

## 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 8000 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és 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 (et pas uniquement "dans le monde" CP/M) 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. Si un fichier ne se trouve pas sur le disque par défaut, il faut taper la lettre du disque auquel on veut accéder, suivie de deux points. Cette convention a été reprise par MS-DOS.

## 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 128 octets 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). 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 pour le MP/M)
* 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 ; DIR.PRL pour le MP/M).
* PIP « the Peripheral Interchange Program » pour copier un ou plusieurs fichiers à la fois (PIP.COM) ou même 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 (que l'on peut toujours trouver dans des sites dédiés et télécharger gratuitement via Internet), il y a 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. A son tour, CP/M peut être émulé sous MS-DOS.
Le logiciel KERMIT développé par l'Université Columbia, de New York, permet d'échanger des fichiers entre machines tournant sous des systèmes d'exploitation différents (VMS, Unix, Multics, MS-DOS et successeurs). Il en existe de multiples versions (gratuites) pour des machines CP/M et, en particulier, une version générique que l'on peut adapter à sa propre machine. Il en résulte qu'il est possible de transférer puis de stocker dans une machine CP/M (peu exposée à des virus) des fichiers importants.