Après la théorie sur CP/M, passons à la pratique : Programmons et ajoutons notre propre commande à CP/M. en assembleur bien sûr.
Vous avez peut-être déjà lancé CP/M quelquefois et utilisé quelques-unes de ses commandes. REN, DIR, STAT, SHOW, TYPE, SYSGEN, SET ne vous sont donc peut-être pas inconnues. Mais que diriez-vous de créer votre propre commande ? en langage machine 8080! (avec les vrais outils CP/M: ED,ASM et LOAD)
Si vous connaissez MS-DOS ou le langage Batch, vous connaissez la commande VER elle permet d'afficher le n° de version de MS-DOS : Microsoft Windows [version 6.1.7601] CP/M offre aussi cette possibilité pour les programmeurs, mais n'a pas fourni la commande VER : pas grave, nous allons la créer nous-même.
Il suffit pour cela d'appeller la fonction12 du BDOS de CP/M : on récupère ainsi automatiquement le n° de version dans le registre HL. H contient 0 si on est sous CP/M et 1 si on est sous MP/M (version terminal multi-utilisateur). L contient &20 sous CP/M 2.0, mais &22 sous CP/M 2.2 et &31 sous CP/M 3.1 Eh oui! La version CP/M Plus sur Amtrad CPC 6128 est la version 3.1, et non pas la 3.0 comme indiquée par erreur sur la couverture du livre de Micro Application n° 12 : "Le livre du CP/M 2.2 et CP/M Plus 3.0". Décidément...
Voici le code source 8080 à taper dans ED : créez le fichier "VER.ASM" (voir le tuto précédent dans ce topic si besoin). (vous pouvez utiliser Protext si ED vous semble trop difficile. Une fois qu'on a pris l'habitude, ED est génial.)
Assemblez le code source et la commande VER est créée. tapez simplement : VER (comme sous MS-DOS).
Testez VER.com sous CP/M 2.2 et vous verrez qu'il vous indique également le n° de version correct. Voilà, si un jour quelqu'un d'autre fait des recherches sur CP/M, ce topic pourra lui être utile.
Si vous regardez comment je distingue CP/M 2.2 de CP/M 3.1 dans le programme précédent, c'est un simple test de la valeur reçue dans le registre L : si inférieur à &30, c'est donc CP/M 2.2
Cela fonctionne très bien sur les 3 Amstrad CPC et sur les PCW, mais sur un autre ordinateur CP/M plus ancien, on ne pourrait pas distinguer le CP/M 3.0 du CP/M 3.1 et encore moins détecter une version CP/M 2.0 : elle serait faussement identifiée comme étant CP/M 2.2 !! On va donc directement afficher à l'écran la valeur reçue dans le registre L
&14 en binaire = 0001 0100 &20 en binaire = 0010 0000 &22 en binaire = 0010 0010 &31 en binaire = 0011 0001 Il suffit donc de couper les octets en 2 et d'afficher chaque quartet à l'écran, séparés d'un point, en ajoutant +&30 pour obtenir le code ASCII. (Méthode souvent utilisée pour afficher la mémoire dans les utilitaires Dump Hexa-Ascii) Mon niveau de programmation en assembleur n'étant pas terrible, vous pouvez sans doute faire mieux que moi.
J'ai appellé cette commande "VERSION" :
Voili-voilou. Cette fois, sur n'importe quel système CP/M, la valeur exacte sera affichée. Même sur une improbable version 1.9 par exemple, qui serait inconnue. (prototype) Vous tapez "VERSION" et vous savez très exactement sur quel système vous êtes. Pour ceux qui veulent se lancer : créez VER.ASM ou VERSION.ASM avec Protext (ou ED si vous êtes un baroudeur), puis:
Immédiatement, je me retrouve dans l'environnement CP/M Plus avec mes outils préférés : ED,MAC,SID,HEXCOM...
Je tape ma routine asm 8080 en 2 minutes et je lance :
C'est bien une version 3.1 qui tourne sur le MSX 2. Je testerai aussi le Commodore 128, mais je pense que c'est la même chose.
J'ai remarqué que le système CP/M sur MSX possède quelques programmes non disponibles sur le CPC 6128, comme par exemple "EDIT", un éditeur de texte pleine page : je vais essayer de ramener ça sur CPC pour compléter notre CP/M sur Amstrad.
Il existe d'ailleurs sur PCW et Commodore 128 un editeur de texte CP/M nommé "RPED", (réalisé en Mallard Basic) et crée par le bien connu Roland Perry : (Roland Perry's EDitor).
P.S: On a ici un bon exemple de l'utilité de savoir programmer en 8080 : Je n'ai pas Maxam II ni Pyradev II sur cette machine (ils ne connaissent que l'asm Z80), et je ne connais absolument pas le MSX 2! Mais je connais bien CP/M et ses outils qui sont 8080: donc aucun problème pour programmer tout de suite avec ce qui était fourni d'origine.
évidemment le PCW c'est pas du 8080...mais bon, ça reste un émulateur CP/M viable logiquement.
le problème du MSX2 c'est que la résolution est étalonnée sur 512 pixels de large en haute résolution, le PCW logiquement peut largement faire du 640x200 mais sera aussi nativement en "Mode2 overscan" si on compare à un CPC. donc euh...720x256 donc (pixels rectangulaires verticalement) les PCW ont aussi l'avantage d'être en configuration avec pas mal de RAM d'origine (mais ça en émulation ce n'est pas trop un problème). enfin le PCW étant censé être une machine à écrire numérique, éditer les textes d'un programme doit bien avoir quelques avantages (et quelques bonnes applications), si on souhaite utiliser le vrai hardware...
(Car idem en émulation, il y a moyen d'importer depuis un traitement de texte moderne logiquement)
Sinon il ne me semble pas avoir vu de mention a CP/M box... évidemment le PCW c'est pas du 8080...mais bon, ça reste un émulateur CP/M viable logiquement.
Pour la CP/M Box qui émule l'Amstrad PCW, c'est très simple : Le CP/M sur PCW est une version 3.1, comme sur l'Amstrad CPC6128. Donc la CP/M Box retournera cette valeur. Tout comme JOYCE, autre émulateur PCW.
Le PCW se programme bien sûr en 8080 sous CP/M, comme tous les ordinateurs tournant sous CP/M. et les commandes VER et VERSION que j'ai écrites en 8080 tournent évidemment parfaitement sur le PCW.
Tout simplement parceque les debuggueurs-moniteurs-assembleurs-desassambleurs fournis par Digital Research sont des outils 8080. (afin d'assurer une compatibilité avec les anciens IMSAI et autres).
C'est d'ailleurs ce qui m'a permis de programmer immédiatement le MSX 2. Comme quoi, la programmation 8080 reste très utile en 2012 pour un programmeur CP/M.
Pour le reste de tes questions concernant le hardware et les possibilités des MSX2 et PCW, je serai très content te répondre, mais sur un autre topic, car celui-ci concerne la programmation 8080 sous CP/M.
en + sachant que le code pour de l'intel 8080 fonctionne à 100% sur un z80 sans modification ! L'inverse n'est pas vrai à 100% !
Forcément, puisque le Z80 a été crée plus tard, incorporant de nouvelles instructions. Comment le 8080 pourrait-il les connaître ?
Mais ce n'est pas grave du tout pour programmer des logiciels sous CP/M. On n'a besoin ni de vitesse ni de performances, vu qu'on n'utilise pas le hardware ni les graphismes de la machine. (on émule en fait un terminal VT-52. Le CPC lui, intégre un émulateur de terminaux Zenith 19/29). On se débrouille très bien avec les instructions du 8080, amplement suffisantes. (D'ailleurs il manque aussi des intructions sur un Z80A, comme la division et la multiplication et on s'en arrange). Vous avez la même vitesse en utilisant l'assembleur 8080, car les codes opérations sont bien sûr les mêmes et ça tourne sur votre micro-processeur Z80. Aucune perte de vitesse ni de puissance.
Il faut dire qu'entre 1978 et 1982, avec le grand succès du Z80, par simplicité, beaucoup d'applications ont été écrites en code Z80, négligeant les anciennes machines 8080 qu'on ne trouvait presque plus.
Mais comme je m'intéresse à utiliser les outils fournis d'origine avec CP/M, écrits par Gary Kildall, je programme traditionnellement en 8080. D'ailleurs, ça m'a bien réussi sur le MSX 2, vu que je ne possède aucun assembleur Z80 tournant sur cette machine.
Vu que je veux lancer mes logiciels sur un vingtaine d'ordinateurs très différents, ce côté-là est bien pratique. Mais il ne faut pas être sectaire, et je vous montrerai dans un prochain post comment on peut insérer du code Z80 dans un assembleur 8080 comme ASM ou MAC.com. Et ils assembleront le code sans broncher!
Je vous montrerai une astuce pour le faire facilement et rapidement. inutile de changer de logiciel editeur-assembleur pour insérer quelques lignes de code Z80 dans un code source assembleur 8080. Si vous avez absolument besoin d'une instruction Z80 au détriment de la portabilité, pourquoi pas... Sinon, autre solution : L'assembleur M80 de Microsoft, sous CP/M qui accepte aussi bien les instructions Z80 que 8080.
Toujours par curiosité, j'ai installé un émulateur Commodore 128, mis le disque de CP/M Plus, et puis j'ai testé le numéro de version en tapant mon programme :
Comme je n'ai pas pu trouver d'assembleur sur C128, ni SID, j'ai utilisé ce que j'ai trouvé : le debugger DDT : impec! (c'est pourquoi vous voyez la commande G100 pour lancer le programme.)
Résultat : C'est aussi une Version 3.1 qui tourne sur le CBM 128. Digital Research a laissé "CP/M 3.0" écrit en texte dans le loader, mais la fonction BDOS 12 retourne bien 31h. Les programmeurs de DRI confirment dans leur code source que dans ce cas, c'est bien une version 3.1
Il faudrait maintenant que je teste l'Osborne Executive de 1982 pour voir s'il a une vraie version 3.0.
J'ai trouvé un collectionneur qui le possède, j'espère qu'il acceptera de lancer mon programme et de m'envoyer la photo d'écran. Je pourrai ainsi classer précisément les 200 ordinateurs CP/M.
La 3.1 a été la dernière version 3. Mais l' Amstrad PC1512 a bénéficié de la version 4.1 (DOS Plus) La dernière adaptation de CP/M Plus (3.1) a été réalisée je crois sur le Spectrum+3 sorti en 1987.
Le Commodore 128, le CPC6128 et le MSX 2 étaient eux sortis en 1985. (CP/M sur le CBM128 est très lent car son Z80 tourne à 2 Mhz) Ensuite sont venues les versions CP/M pour PC (CP/M86), DR-DOS, le TOS sur ATARI ST (CP/M68k rebaptisé TOS), GEM sur ST.
J'essaie de trouver et de ramener quelques programmes CP/M pouvant tourner sur le CPC : Je viens de ramener de chez MSX un éditeur de texte plein écran (EDIT.com) qui peut avantageusement remplacer ED ou Protext pour la programmation.
Par contre, tout n'est pas tout rose: Tous les ordinateurs n'émulant pas tous les même terminaux, tout n'est pas compatible. J'ai par exemple trouvé un joli Space Invaders hier, mais il tourne sur le CBM 128, pas sur CPC.
J'en ferai un pour le CPC quand j'aurai le temps. Ainsi qu'un petit Break-Out.
P.S: Merci de ne pas trop écrire de messages dans ce topic : ça doit rester un tutoriel pour chercheurs CP/M. C'est mieux de m'envoyer les questions par Message Privé.
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 8 invité(s)
Vous ne pouvez pas publier de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas insérer de pièces jointes dans ce forum