Émulation CP/M avec Linux

CP/M était un des premiers systèmes d'exploitation pour micro-ordinateurs, conçu dans les années 1970, pour les microordinateurs à base de processeurs 8 bits Intel 8080, Intel 8085 et Zilog Z80. On peut lire ici, une description détaillée (en anglais) de l'histoire de CP/M. Une chronologie est disponible ici.

Plus tard, des versions de CP/M pour les microordinateurs à processeur 16 bits Intel 8086 (CP/M-86) et 16/32 bits Motorola 68000 (CP/M-68k) ont été commercialisées. CP/M a été supplanté par MS-DOS à partir du milieu des années 1980.

CP/M ressemblait beaucoup à MS-DOS, la principale différence étant que CP/M ne possèdait pas de répertoires. À la place, CP/M utilisait des numéros d'utilisateur allant de 0 à 15. Les fichiers de l'utilisateur numéro N étaient invisibles pour les 15 autres utilsateurs. On utilisait la commande user pour changer de numéro d'utilisateur, ce qui donnait l'équivalent de 16 répertoires (sans sous repértoires évidemment) par disquette.

Une documentation de CP/M 3.0 est disponible sur Internet Archive.

Il est possible de faire fonctionner sous Linux l'émulateur de microprocesseur Zilog Z80 Yaze-ag, et d'éxecuter le système CP/M sur cet émulateur. Les programmes cpmtools permettent de copier des fichiers Unix sur les images de disques CP/M créées par Yaze-ag ou d'extraire des fichiers de ces images de disques.

L'émulateur Yaze-ag

On le trouve sur le serveur http://www.mathematik.uni-ulm.de/users/ag/yaze-ag/. Il émule un processeur 8bits Zilog Z80 et permet d'utilser le système CP/M 3.1 (ou CP/M Plus) dont la documentation est disponible ici. L'émulateur vient avec un compilateur C et un compilateur Turbo Modula 2.

Installation

tar zxvf yaze-ag-2.21.tar.gz cd yaze-ag-2.21 mv Makefile_linux Makefile make make install

Disques CP/M

Avec cet émulateur on peut créér des fichiers Unix qui contiennent des données de type disque CP/M. La procédure est la suivante. Dans l'émulateur, on entre les commandes: A>sys $>create disk 256256 $>mount b disk $>go A>B: B>dir No File B>sys quit ce qui crée le fichier disk qui contient une image de disque CP/M vierge. On peut évidemment, une fois revenu au shell, copier ce fichier autant de fois que nécessaire avec cp.

cpmtools

cet utilitaire disponible sur http://www.moria.de/~michael/cpmtools/permet de copier des fichiers Unix sur des images de disques CP/M et vice-versa. Par exemple: cpmcp -t disk README 0:README copie le fichier README sur l'image disk avec le nom README et le numéro d'utilisateur 0. L'option -t permet de copier les fichiers texte. Il est également possible d'utiliser cpmtools pour lire des disquettes formatées sous CP/M, comme l'explique cette page. La commande setfdprm n'est nécessaire que lorsque le format du disque n'est pas déjà listé dans diskdefs.

Installation

tar zxvf cpmtools-2.11.tar.gz cd cpmtools-2.11 ./configure make make install

Archives CP/M

Un certain nombre de programmes CP/M sont disponibles sur internet. En particulier, on trouve l'archive Commercial CP/M archive, et l'archive Digital Research Binary Files. Bien que la plupart de ces programmes (comme par exemple le traitement de texte Wordstar) soient très largement dépassés, quelques uns peuvent encore présenter un intérêt.

Compilateur PL/I

un compilateur PL/I pour CP/M est disponible dans Digital Research Binary Files, ce qui peut permettre de s'initier à ce langage de programmation sans bourse délier. Voir le standard ECMA-50: Programming Language PL/1, 1st edition (December 1976), PL/I Language reference (AIX and OS/2), The PL/I programming language et A concise guide to PL/1. La documentation de la version de PL/1 reconnue par le compilateur CP/M est disponible sur bitsavers.org: La marche à suivre pour installer le compilateur PL/I est la suivante: unzip pli80_13.zip L'archive doit contenir les fichiers suivants: Archive: pli80_13.zip Length Date Time Name -------- ---- ---- ---- 7168 08-21-91 20:02 LIB.COM 768 08-21-91 20:01 ACK.PLI 7680 08-21-91 19:47 PLI.COM 18176 08-21-91 19:47 PLI0.OVL 32512 08-21-91 19:47 PLI1.OVL 31616 08-21-91 19:47 PLI2.OVL 13568 08-21-91 19:47 RMAC.COM 15488 08-21-91 19:47 XREF.COM 384 08-21-91 20:01 DFACT.PLI 15616 08-21-91 20:02 LINK.COM 1408 08-21-91 20:01 OPTIMIST.PLI 44416 08-21-91 20:02 PLILIB.IRL -------- ------- 188800 12 files Aprés avoir préparé un fichier disk comme expliqué plus haut, on fait cp disk pli80, puis on utilise les commandes cpmcp pour copier les fichiers *.COM, *.OVL,*.IRL dans le fichier image de disquette CP/M pli80. cpmcp *.COM *.OVL *.IRL pli80 0: Aprés cela, il suffit d'utiliser l'émulateur yaze-ag pour lire le fichier image. $ yaze-ag A>sys mount c pli80 A>c: C>dir : LIB COM : LINK COM : PLI COM : RMAC COM : XREF COM C: PLI0 OVL : PLI1 OVL : PLI2 OVL : PLILIB IRL pour utiliser le compilateur, on peut éditer un fichier source sous Linux, puis le copier avec cpmcp -t dans le fichier image pli80. Par exemple pour commpiler ce programme test.pli pl1: procedure options(main); dcl i fixed; begin; do i=1 to 20; put list(i); end; end; end; dans l'émulateur, on utilise successivement pli test.pli (équivalent approximatif sous CP/M de cc -c sous Linux) pour créer un fichier binaire test.rel puis link test.rel pour obtenir l'exécutable test.com.

Compilateur CBASIC 80

Le CBASIC est un Basic compilé destiné aux ordinateurs sous CP/M, créé par Gordon Eubanks. Il utilisait l'arithmétique décimale codée binaire, ce qui le rendait particulièrement utile pour écrire des programmes de gestion. Il peut être utilisé avec l'émulateur Yaze-ag. Sa documentation peut être obtenue sur Bitsavers. Il faut récupérer le fichier CB80.ZIP sur l'archive retroarchive. L'archive doit contenir les fichiers: Archive: CB80.ZIP Length Date Time Name --------- ---------- ----- ---- 256 05-11-1999 20:48 GRAPHCOM.BAS 34688 05-11-1999 20:48 CB80.IRL 15616 05-11-1999 20:48 CB80.OV1 15232 05-11-1999 20:48 CB80.OV2 16512 05-11-1999 20:48 CB80.OV3 20992 05-11-1999 20:48 CBASE2.COM 1536 05-11-1999 20:48 CIRCOM.BAS 17408 05-11-1999 20:48 CRUN2.COM 10368 05-11-1999 20:48 DEMOGRAF.BAS 5632 05-11-1999 20:48 CB80.COM 9216 05-11-1999 20:48 GRAPHR.BAS 256 05-11-1999 20:48 GSXPREP.BAS 7168 05-11-1999 20:48 LIB.COM 15744 05-11-1999 20:48 LINK.COM 6912 05-11-1999 20:48 LK80.COM 39552 05-11-1999 20:48 READ.ME 896 05-11-1999 20:48 TSTCIR.BAS --------- ------- 217984 17 files Comme précédemment, il faut copier les fichiers *.IRL *.COM *.OV[1-3] dans une image de disque CP/M avec cpmcp. Les instructions graphiques du CBasic ne sont pas utilisables avec Linux.

Le BBC Basic

Le BBC basic fonctionnait sur les microordinateurs à base de processeur 6502 Acorn BBC. Une version de cette interpréteur a été adaptée aux microordinateurs CP/M. Elle est disponible depuis la page web http://www.rtrussell.co.uk/. L'archive bbcbasic.zip contient les fichiers: Length Date Time Name --------- ---------- ----- ---- 4352 06-07-2000 22:47 BBCDIST.MAC 14848 06-04-2000 21:11 BBCBASIC.COM 2304 03-05-1995 14:58 CONVERT.COM 768 03-05-1995 15:28 MERGE.BBC 3072 03-05-1995 15:27 ANIMAL.BBC 1920 03-05-1995 15:21 SORT.BBC 2048 03-05-1995 15:27 SORTREAL.BBC 1152 03-05-1995 15:25 F-RSER2.BBC 640 03-05-1995 15:25 F-WSER1.BBC 2560 03-05-1995 15:25 F-WSTD.BBC 2944 03-05-1995 15:25 F-WSER2.BBC 2304 03-05-1995 15:26 F-RAND1.BBC 1024 03-05-1995 15:26 F-WESER1.BBC 3072 03-05-1995 15:26 F-WESER2.BBC 1152 03-05-1995 15:26 F-RSTD.BBC 384 03-05-1995 15:26 F-RSER1.BBC 1408 03-05-1995 15:26 F-RAND0.BBC 8064 03-05-1995 15:26 F-RAND2.BBC 6784 03-05-1995 15:26 F-INDEX.BBC 1408 06-09-2000 23:13 READ.ME 1280 06-07-2000 22:49 ANIMAL.DAT 2688 03-05-1995 14:48 CRC.COM 15360 06-09-2000 23:06 BBCBASIC.TXT 896 06-09-2000 23:13 CRCKLIST.CRC --------- ------- 82432 24 files Il faut copier les fichiers .COM sur une image de disque CP/M. L'interpréteur n'accepte que des instructions en majuscules. Pour revenir sous CP/M, il faut utiliser la commande *CPM.
Retour à la page principale