APPLICATIONSCP/M ★ Les commandes Transitoires ★

Les Commandes Transitoires|Amstrad Magazine)Applications Cp/m

Nous ne nous préoccupons pour l'instant que des commandes transitoires fournies avec CP/M 2. La liste du catalogue de la disquette système fournie par Amstrad nous renseigne sur les commandes à notre disposition :

ASM          Assembleur 8080.
BOOTGEN      Génère une disquette système.
CLOAD        Transfert un fichier de cassette à disquette.
CSAVE        Tranfert de fichier de disquette à cassette.
DDT          Utilitaire de mise au point 8080.
DISCKIT2     Formate, copie, vérifie des disquettes.
DRLKEYS      Passe l'écran en 40 colonnes.
DUMP         Contenu d'un fichier affiché en hexadécimal.
ED           ;Editeur de texte.
FILECOPY     Copieur de fichiers avec système à un seul lecteur de disquettes.
STAT         ;Renseigne sur les caractéristiques de fichier ou impose des critères.
LOAD         ;Conversion de fichiers .HEX en fichiers .COM.
MOVCPM       Création d'une organisation spéciale de CP/M.
PIP          Transfert de fichiers.
SETUP        Redéfinition des caractères du clavier, du lecteur et autres actions.
SUBMIT       Fichier de traitements automatiques (ou par lot).
SYSGEN       Initialisation d'une disquette système ou chargement du système en mémoire.
XSUB         ;Paramètres fournis aux travaux effectués sous le contrôle de SUBMIT.

Chaque commande est mise en oeuvre en tapant son nom au clavier, suivi éventuellement d'arguments. Vous remarquerez qu'un certain nombre de commandes font double emploi. Chaque utilisateur doit opérer lui-même une sélection en fonction de ses objectifs. Nous passerons en revue ce mois-ci toutes les commandes jusqu'à DISCKIT2. Les suivantes vous seront décrites dans notre revue n° 10.

ASM : assembleur 8080.

Cet assembleur convertit un programme source, écrit en langage assembleur, utilisant les mnémoniques 8080, en un programme objet au format héxadécimal INTEL. La commande LOAD effectue la conversion finale en langage machine. On voit donc que le travail est effectué en deux phases. Pourquoi un assembleur en 8080 alors que votre CPC est équipé d'un Z80 ? Pour répondre, il faut remonter aux sources ! Pratiquement toutes les versions de CP/M sont écrites en 8080 car ce processeur est antérieur aux Z80. D'autre part, la compatibilité dans le sens 8080 vers Z80 est totale, alors que l'inverse n'est pas vrai.

La première étape consiste à préparer un fichier texte (avec ED par exemple) contenant les lignes du programme source en assembleur, et dont l'extension est .ASM. L'assemblage est effectué en tapant la commande :

ASM NOM. SHP ou ASM NOM.

La première forme permet de choisir les unités de disquettes contenant les différents fichiers ; la deuxième forme est standard et implique que toutes les opérations soient effectuées sur l'unité courante. (Attention dans l'exemple ci-dessus : NOM. SHP ne signifie pas que l'extension de NOM est SHP, car obligatoirement NOM a l'extension .ASM). S, H et P sont des paramètres. S peut être la lettre A ou B qui est l'unité disque qui contient le fichier Source.

H peut être la lettre A ou B qui est l'unité disque qui contient le fichier .HEX résultant de l'assemblage ou si la valeur Z est donnée, ce fichier n'est pas créé.

P peut être la lettre A ou B qui est l'unité disque qui contient le fichier .PRN résultant de l'assemblage ou si la valeur X est donnée, ce fichier n'est pas produit.

Le fichier .HEX contient la représentation héxadécimalc des instructions du fichier source .ASM, suivant une organisation standardisée. Ce fichier peut être listé avec la commande résidente TYPE. Cette organisation est la suivante. Chaque ligne de texte est découpée en zones :

Colonne 1 contient toujours : qui est l'indication de début de ligne.

Col. 2 et 3 : nombre d'octets utiles en héxadécimal.

Col. 4 à 7 : adresse d'implantation du premier octet utile (poids fort en tête).

Col. 8 à 9 : type d'éléments 00 ou 20H. Col. suivantes : octets utiles.

Deux dernières colonnes : somme de contrôle : la somme de tous les octets de la
colonne 2 à la dernière colonne est nulle (la retenue est ignorée).

Le fichier .PRN : c'est le fichier imprimable (avec TYPE) qui contient la source du programme et le résultat de l'assemblage. Vous trouverez également dans ce fichier les messages des erreurs détectées lors de l'assemblage.

Le fichier source doit présenter les lignes d'instructions assembleur suivant une syntaxe définie par INTEL pour le micro 8080. Il n'entre pas dans le cadre de cet article de détailler ces instructions. Il existe en librairie de nombreux livres traitant ce sujet.

Reconfigurer les pistes systèmes

BOOTGEN

Les utilitaires BOOTGEN sont fournis pour vous permettre de reconfigurer les pistes système d'une disquette ou de créer des pistes système sur une disquette formatée au format “vendeur”. La rcconfiguration des pistes systèmes peut être nécessaire en cas de distribution d'une disquette CP/M de taille non standard (produit par MOVCPM) ou pour une configuration non standard (produite par SETUP).

Pour convertir une disquette au format vendeur en disquette système (en format “vendeur” les pistes système sont vierges) : tapez la commande BOOTGEN en ayant au préalable placé une disquette système contenant l'utilitaire BOOTGEN.COM dans le lecteur A. Vous verrez apparaître sur votre moniteur :

BOOTGEN V 2.0.

Please insert SOURCE dise into drive A then press any key.

Appuyez sur une touche quelconque, ce qui provoque le stockage en mémoire des informations système à transférer. Le message suivant est alors affiché (en remplacement du précédent) :

Please insert DESTINATION dise into drive A then press any key.

Placez alors dans le lecteur A votre disquette au format vendeur, puis appuyez sur une touche quelconque.

Les informations système du lanceur sont alors recopiées sur les pistes correspondantes de votre disquette “vendeur” qui est maintenant une disquette “système” permettant de relancer CP/M 2.

Le message suivant : Do you wish to reconfigure another dise (Y/N) ? : vous permet éventuellement d'effectuer le transfert sur une autre disquette “vendeur” en tapant Y (yes : oui), si non tapez N (Non).

Le travail n'est pas terminé, en effet une partie seulement des informations du CP/M est recopiée : l'autre partie est transférée avec l'utilitaire SYSGEN, en procédant de la même façon qu'avec BOOTGEN. (Recopie des zones DDT et BDOS).

Vous voyez donc que le processus est réalisé en deux étapes. Entre nous, il existe une méthode plus simple :

- formatez une disquette vierge avec l'option système.

- effectuez la copie de votre disquette vendeur sur votre nouvelle disquette système. Car il est toujours prudent d'avoir au moins une copie de sécurité du logiciel contenu dans la disquette que vous venez d'acquérir, en cas de problème.

Le cas des configurations non standard est un peu plus complexe et nécessite une très grande connaissance au niveau système car c'est l'utilisateur qui met en place une nouvelle organisation du CP/M. Nous dirons simplement que dans ce cas, BOOTGEN est le même qu'en version standard, par contre il existe deux formats pour la commande SYSGEN :

SYSGEN : qui sauvegarde sur disque les zones CCP et BDOS existantes en image TPA, elle-même générée par MOVCPM nnnn.

SYSGEN nom écrit sur disque les zones CCP et BDOS qui ont été stockées sur fichier nommé nn avec la commande SAVE.

CLOAD

Cette commande lit un fichier sur cassette et l'écrit sur disquette. Comme nous sommes en CP/M, le fichier écrit sur disquette ne comporte pas l'en-tetc propre à AMS-DOS.

Le format de la commande est :

CLOAD NOMC, NOMD

où NOMC est le nom du fichier sur cassette

à lire, entouré de guillemets “EXEMPLE”.

Si ce nom n'est pas spécifié, c'est le premier enregistrement rencontré qui sera lu. NOMD est le nom du fichier récepteur sur disquette. Si NOMC est un nom validé CP/M, alors NOMD n'est pas nécessaire. (Notez que les fichiers protégés ne sont pas admis).

En cours de transfert, un fichier temporaire avec l'extension .$$$ est créé. Si le fichier NOMD existe déjà, il sera renommé avec extension .BAK.

CSAVE

Cette commande effectue l'opération inverse de CLOAD, le format de cette commande est :

CSAVE NOMD, NOMC, vitesse.

Les paramètres NOMD et NOMC sont identiques à ceux de CLOAD.

Vitesse prend deux valeurs. 0 correspond à une vitesse d'écriture de 1 000 bits par seconde, et 1 à une vitesse de 2 000 bits par seconde. Si le paramètre n'est pas donné, la vitesse par défaut est de 1 000 bits par seconde.

DDT (Dynamic Debugging Tool).

C'est un outil de mise au point pour mnémoniques 8080. (Rappelez-vous DDT = chasse aux parasites). Il permet de tester et de corriger les programmes en langage machine générés par l'assembleur ASM. Cet utilitaire est appelé avec deux formats de commande :

DDT ou DDT x:nom.EXT. où x: est le nom, optionnel, du lecteur sur lequel se trouve le fichier à changer, nom.EXT est le nom du fichier à charger avec l'extension .COM ou .HEX. Lorsqu'il est chargé, DDT remplace la partie de gestion des commandes du clavier (appelée CCP), si un nom de programme est donné dans la ligné de commande, ou la zone utilisateur dans le cas contraire (zone dite TPA).

Pourquoi employer DDT ? Il y a plusieurs raisons. Pour :

  • Modifier un programme objet (langage machine).
  • Corriger des erreurs.
  • Désassembler une partie de mémoire (en 8080).
  • Examiner le contenu des registres internes du Z80 (uniquement la partie “compatible” 8080).
  • Placer des points d'arrêt pour l'exécution du code machine en mémoire.
  • Effectuer une exécution pas à pas.

Son utilisation demande obligatoirement une grande connaissance en assembleur. Lorsqu'il est chargé avec un nom de fichier sur la ligne de commande, le message suivant est affiché :

DDT VERS 2.2 NEXT PC xxxx xxxx

xxxx sous NEXT donne l'adresse du premier octet disponible après le programme chargé.

xxxx sous PC donne l'adresse du premier octet du programme chargé, et la valeur du compteur ordinal (Program Counter en Anglais).

Nous allons passer en revue, dans l'ordre alphabétique, les commandes disponibles sous DDT sans en détailler l'emploi, car cela occuperait certainement tout le magazine. Nous vous signalons qu'en plus de la notice particulière éditée par Digital Research, il existe en librairie des ouvrages sur CP/M traitant en détail l'emploi de DDT.

Commandes disponibles sous DDT

1. Axxxx : assemble des instructions en assembleur 8080 à partir de l'adresse héxa-décimale xxxx.

2. D : affiche à l'écran douze lignes de 16 octets (soit 192 octets) correspondants au contenu de la mémoire depuis la valeur de PC. Affichage en deux parties : à gauche les valeurs héxadécimales, à droite, les codes ASCII éventuels (les non-imprimables remplacés par.).

3. Dxxxx : comme ci-dessus, mais à partir de l'adresse héxadécimale xxxx (la première ligne peut être tronquée pour permettre à la seconde ligne de toujours débuter à une frontière multiple de 10 héxa).
4. Ddddd, ffff : comme ci-dessus sauf limite entre les adresses début et fin en héxa dddd et ffff.

5. Fdddd, ffff, cc : remplit la zone mémoire débutant à dddd héxa et se terminant à ffff hexa, avec la constante cc en héxadécimal.

6. G : lance l'exécution à partir du code mémoire pointé par l'adresse actuelle du compteur ordinal (PC).

7. Gdddd : lance l'exécution à partir de l'adresse héxa dddd.

8. Gdddd, ffff : lance l'exécution à partir de l'adresse dddd et provoque un arrêt à l'adresse ffff, si cette adresse correspond à un code opération, et si ce code est sollicité.

9. Gdddd, ffff, cccc : comme ci-dessus avec un point d'arrêt supplémentaire cccc en héxa.

10. G, ffff et G, ffff, cccc : sont des variantes aux formats 8 et 9 avec début à l'adresse pointée par PC.

11. I nom.ext : initialise la zone tampon recevant le nom du fichier, à charge ultérieurement avec la commande R, .ext peut prendre deux formes : .COM ou .HEX.

12. L : affiche le désassemblage au format 8080 des 11 octets à partir de la valeur de PC, lors du premier appel, et à partir de l'octet suivant l'appel précédent pour toute autre nouvelle commande L.

Si un mnémonique spécifique Z80 est rencontré, l'affichage est ?? =. Les variantes de cette commande : Ldddd et Ldddd, ffff (similaire à 7 et 8 ci-dessus).

13. Mdddd, ffff, cccc : transfert du bloc mémoire de l'adresse dddd à ffff (héxa) vers un nouveau bloc débutant à l'adresse héxa cccc. (Attention aux recouvrements des blocs émetteurs et récepteurs).

14. R : copie un fichier de la disquette vers la mémoire, le nom du fichier est initialisé avec la commande I. L'adresse de début de chargement est celle du contenu du fichier.

15. Rdddd : comme ci-dessus, sauf que l'adresse de chargement est décalée de dddd héxa.

16. Sdddd : affiche le contenu de la mémoire à l'adresse dddd héxa, et attend une entrée au clavier. Un retour chariot ne modifie pas cet octet. Une nouvelle valeur entrée remplace l'ancienne. Un point permet de quitter la commande.

17. T : exécute un pas de programme à partir de la valeur de PC et affiche les valeurs contenues dans les registres A.F.B.C.D.E.H.L. S.P et l'instruction suivante à exécuter (à l'adresse P). Cette commande est très utile pour la mise au point d'un programme.

18. Tnnnn : exécutera nnnn pas.

19. Unnnn : exécute nnnn instructions et affiche l'état des registres correspondant à la dernière instruction.

20. X : affiche l'état de tous les registres et l'instruction à l'adresse de PC.

21. Xr : affiche un seul registre r et permet de le modifier, par exemple XP affiche l'état du registre compteur ordinal, si vous tapez A0F3, son contenu actuel sera remplacé par la valeur introduite.

Pour sortir de DDT tapez G0 (G suivi de la valeur numérique zéro).

AMSTRAD MAGAZINE n°9

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 070 millisecondes et consultée 866 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.