★ CODING ★ INITIATION A CP/M - AMSTRAD MAGAZINE n°10 ★ |
Initiation a CP/M - Amstrad Magazine 10 - les Commandes Transitoires - les Fonctions Internes |
DISCKIT 2 C'est un utilitaire, hors standard Digital Research, qui est fourni par Amstrad pour faciliter les travaux de : formatage,copie, vérification d'une disquette. Voir son mode d'emploi, très bien détaillé, dans la notice livrée avec votre système. DUMP Affiche en héxadécimal, le contenu d'un fichier octet par octet, à raison de 16 octets par ligne. L'adresse de départ est 0, les adresses indiquées sont relatives à cette adresse de départ (toujours en héxadécimal). Pour exécuter cette commande tapez : DUMP TOTO.COM (sur lecteur actif). Ou DUMP B:TOTO.COM (sur lecteur B). Ou DUMP *.COM (le premier programme .COM rencontré). Sous CP/M 2 pour suspendre l'affichage tapez CONTROL-S (touche CONTROL et touche S appuyées simultanément), pour reprendre l'affichage, tapez à nouveau CONTROL-S. Pour arrêter l'action de DUMP, appuyez sur CONTROL-C. ED Editeur de texte Il s'agit ici d'un éditeur ligne à ligne, c'est-à-dire d'un “traitement de texte”. Son fonctionnement n'est pas facile à expliquer et il est plus complexe que les traitements de textes modernes. Il peut néanmoins rendre des services. Création d'un fichier TOT.ASM. Tapez la commande : ED TOTO .ASM. Comme il s'agit d'une création, le nom de fichier n'existe pas donc l'éditeur affiche en réponse : NEW FILE Le prochain numéro de ligne disponible est affiché suivi de : puis attente de caractères. Chaque ligne de texte est terminée par retour chariot. La ligne suivante est prête on trouvera donc successivement : 1 : texte entre Après CONTROL-Z, retour au. niveau attente de commande. Dans le tampon il y a trois lignes, le pointeur de ligne est sur 4. Pour lister, il faut revenir au début du tampon par la commande B, puis *T (T seul affiche une ligne correspondant à la position du pointeur). — B place le pointeur en fin de tampon, sur la prochaine ligne disponible. Pour déplacer le pointeur de ligne nL fait avancer de n lignes (vers la fin du tampon). – nL le fait reculer de n lignes (vers le début du tampon). Pour sauvegarder votre chef-d'œuvre, tapez la commande E (pour End = fin). Nous avons ainsi parcouru un cycle de création sauvegarde sans aucune modification. Maintenant, si nous désirons modifier notre fichier texte, les choses se compliquent un peu. En premier nous relançons l'exécution de l'éditeur par la commande : ED TOTO .ASM. Comme le fichier existe, on est directement au niveau d'entrée de commande. Mais attention la zone tampon de ED est vide. La première opération est de remplir ce tampon avec le contenu du fichier TOTO .ASM. Utiliser à ce moment la commande A (comme Append = Ajouter). Il existe un certain nombre de variantes pour cette commande. Pour notre exemple nous utilisons é A. Tout notre fichier est transféré, le pointeur de ligne est sur la ligne 1, nous vérifions la présence de notre texte en tapant 4= T (lister toutes les lignes à partir du pointeur). Ajoutez une ligne en tête : placez le pointeur de ligne en tête (s'il n'y est pas déjà) avec la commande B, l'écran affiche 1:*, vérifiez le texte de la ligne 1 avec la commande T. Entrez la commande I, l'écran affiche 1: et attend le contenu de votre nouvelle ligne. Vous pouvez entrer plusieurs lignes, elles seront ajoutées, dans l'ordre d'entrée, en tête du texte existant. Vous terminez l'insertion en tapant CONTROL-Z. Toutes les lignes sont renumérotées. Vérifiez votre nouveau texte en tapant B = T (vous constatez qu'une ligne de commande peut être l'association, sans espace, de plusieurs commandes élémentaires). Après l'affichage du texte, vous vous trouverez avec 1:*, l'éditeur attend une commande. Ajoutez une ligne en queue de texte. Placez le pointeur de ligne en fin de tampon avec la commande - B. L'écran affiche :* et attend une commande. Tapez alors I, le numéro de ligne suivant la dernière ligne actuelle est affiché, l'éditeur attend le texte de la nouvelle ligne. Procédez alors comme ci-dessus (control-Z en fin d'insertion et B = T pour obtenir toute la liste). Ajoutez une ligne en cours de tampon. Par exemple une ligne entre la ligne n° 3 et la ligne n° 4. Positionnez le pointeur sur la ligne n° 4 avec la commande 3L (déplacer le pointeur actuel de trois lignes soit 1 + 3 = 4). L'éditeur affiche 4:* et attend une commande, taper I pour insérer une ligne avant la ligne 4 (ou un groupe de lignes). Attention, chaque fois que vous entrez une ligne, toutes les lignes situées après celle-ci sont renumérotées, donc en cas d'insertion ne vous fiez pas à la liste de votre texte obtenu avant cette modification. Supprimez une ligne. Positionnez le pointeur de ligne sur la ligne à supprimer, par exemple la ligne 4, avec la commande 4: (vous remarquerez la syntaxe de cette commande n: qui positionne le pointeur à une adresse absolue alors que précédemment nous nous sommes déplacés en relatif avec nL). Vérifiez le contenu de cette ligne avec la commande T. Pour supprimer cette ligne entrez la commande K (Kill = tuer). Les lignes situées derrière la ligne supprimée sont déplacées pour combler le vide laissé par la ligne supprimée. Remarque importante : les modifications décrites ci-dessus sont effectuées dans le tampon de l'éditeur, le contenu du fichier n'est absolument pas concerné. Cela veut dire qu'en fin de travail, vous devez sauvegarder le contenu du tampon dans votre fichier avec la commande E. Si après cette mise à jour de votre fichier Dans notre numéro 9 nous vous avions présenté une première partie des commandes transitoires. Voici la suite et la fin de cette description détaillée. La deuxième partie de notre article concerne les fonctions internes disponibles sur CP/M 2, utilisables sous Assembleur. vous êtes pris de remords (cela arrive !) sachez que l'éditeur y a pensé. 11 a effectué une copie de votre fichier avant de procéder à sa modification, sous le même nom, avec l'extension .BAK. Vous pouvez donc le récupérer avec la commande : REN TOTO.ASM = TOTO.BAK Nous vous avons montré le minimum vous permettant de créer, modifier, sauvegarder un texte. FILECOPY Cet utilitaire permet de copier un ou plusieurs fichiers d'une disquette sur une autre avec un système à un seul lecteur. La disquette réceptrice doit être formatée avant d'effectuer une copie. Un fichier source avec le statut R/O (lecture seule) est recopié avec le status R/W (lecture/écriture). Les fichiers sources cachés type SYS ne sont pas copiés. Une copie peut être arrêtée en tapant CONTROL-C. Le format de la commande est : FILECOPY nom/user, où nom est le nom du (ou des) fichiers source. Ce nom doit être conforme à la convention CP/M et peut comporter les caractères * ou ?. Le paramètre /user est optionnel, si user = S4 par exemple, c'est la zone utilisateur 4 qui sera lue (S = Source). Si User = D6, c'est la zone utilisateur 6 qui sera écrite (D = Destination). En cours de traitement FILECOPY demande à l'utilisateur de placer successivement dans le lecteur la disquette source ou la disquette destination. Exemples : FILECOPY TOTO.BAS copie TOTO.BAS de la source vers destination : FILECOPY TOTO.* copie tous les fichier ? avec nom TOTO dont l'extension est quel- 1 conque de la source vers la destination. FILECOPY *.* copie tous les fichiers (sauf les fichiers systèmes éventuels). FILECOPY *.* /S2D6. copie tous les fichiers de la zone utilisateur 2 vers la zone utilisateur 6 de la disquette destination. STAT Statistiques sur les fichiers ou les unités. Cette commande permet d'être renseigné sur la taille et les attributs des fichiers, ou de modifier ces attributs. Elle permet également de fournir ou d'imposer des informations sur les unités logiques. Statistiques sur les fichiers. Plusieurs formats sont possibles : STAT : affiche l'attribut de la disquette sur le lecteur actif, (R/W = lecture/écriture) et l'espace disponible depuis la dernière mise | en route. STAT B : comme ci-dessus mais sur le lec-; teur B: STAT *.COM : affiche les attributs des fichiers dont l'extension est .COM. Cette liste, directrice dans l'ordre alphabétique, donne les renseignements suivants : Recs : nombre d'enregistrements de 128 octets alloués au fichier. Bytes : longueur du fichier en kilo-octets. Acc : mode d'accès au fichier : R/W = lecture/écriture. R/O = lecture seule. Le nom du fichier affiché entre parenthèses, indique un fichier système (SYS). STAT *.* affiche les attributs de tous les fichiers. Cette commande peut être suivie par un argument. SR/O : impose au fichier le mode lecture seul (utile pour protéger un fichier contre une ré-écriture accidentelle). SR/W : impose au fichier le mode lecture-écriture. $SYS : impose le mode système. $DIR : impose le mode non-système. Statistiques sur les unités. Une unité physique est le périphérique réel de votre équipement, par exemple l'imprimante. Une unité logique représente la fonction à réaliser (par exemple l'impression). Il y a quatre unités logiques : CON : console c'est-à-dire clavier et écran. RDR : entrée des données sur un dispositif auxilliaire (dans la passé : lecteur de bande perforée). Cette commande est le complément indispensable de l'Assembleur. En effet, elle transforme le fichier au format .HEX en fichier programme exécutable au format COM. La syntaxe est : LOAD x:TOTO où x: peut être omis, dans ce cas le fichier TOTO.HEX doit se trouver sur la disquette active, ou peut avoir les j valeurs A: ou B:. TOTO est le nom du fichier au format .HEX généré par l'assembleur ASM. En réponse, cette commande affiche les renseignements suivants : FIRST ADDRESS 0100 première adresse du programme. LAST ADDRESS 0264 : dernière adresse du programme. BYTES RE AD 165 : taille du programme en octets. RECCORDS WRITTEN : nombre d'enregistrements de 128 octets. MOVCPM Cette commande permet un ajustement de la taille mémoire utilisée par CP/M, c'est une commande à manier avec précaution, et réservée aux utilisateurs ayant de grandes connaissances en langage machine. L'utilisation de cette commande permet de personnaliser CP/M pour des applications particulières et spécifiques. Dans la pratique courante elle n'a pas d'utilité. PIP (Peripheral Interchange Program). Cet utilitaire sert -à échanger des informations entre périphériques. Il réalise la copie de fichiers entre eux,-la lecture d'un port d'entrée, du clavier, ou du contenu d'un fichier, ou l'écriture sur un port de sortie (exemple imprimante) ou l'écriture d'un fichier. C'est une commande très puissante qui possède de nombreux paramètres. Il y a deux formats principaux de commande : PIP : charge l'utilitaire en mémoire et attend une commande. L'indicateur d'attente est *. Sortir de la commande en tapant CONTROL-C. PIP : ligne de commande. Charge l'utilitaire en mémoire, exécute la commande, et retourne au CP/M. Une ligne de commande est de la forme suivante : Destination = Source. On peut utiliser des noms de fichiers réels, ou utiliser des "Jockers”. Exemples : TOTO.BAS = TATA.BAS copie le fichier TATA.BAS dans TOTO.BAS sur la même disquette. B: = TATA.BAS copie le fichier TATA.BAS de la disquete active, dans un fichier de même nom situé dans le lecteur B: B: = *.* copie tous les fichiers présents dans le lecteur actif sur la disquette placée dans le lecteur B: B: = *.*[V] même que ci-dessus, mais en plus vérifie après copie la correspondance entre source et destination. B: = TOTO.* copie du lecteur actif vers le lecteur B: tous les fichiers de nom TOTO avec un nom d'extension quelconque. B: = T?T?.* copie tous les fichiers du lecteur actif vers le lecteur B: des fichiers ayant un T en première et troisième position et d'extension quelconque (exemple TOTO, TATA, TITU etc.). Cette commande est surtout utile pour les systèmes à deux lecteurs de disquettes. Nous citons ci-après, pour mémoire, les différentes possibilités de la commande PIP. Nous vous conseillons de consulter un ouvrage spécialisé pour prendre connaissance de la syntaxe des commandes dans chacun des cas. PIP en copie de fichier – copie d'un fichier d'une disquette sur une autre. – copie d'un fichier avec modification du nom. – copie d'une disquette sur une autre. – création d'un fichier résultant de l'ajout de plusieurs fichiers (concaténation). – copie d'une portion de fichier. – afficher le contenu d'un fichier en cours de copie. PIP en copie entre unités physiques – copie d'un fichier vers une unité physique. SETUP Cette commande permet la modification des paramètres de configuration existants sur le disque système CP/M, et servant à la procédure d'initialisation au démarrage de CP/M. La commande est lancée en tapant au clavier : Message d'introduction (SIGN-ON STRING). C'est la chaîne de caractères affichés à l'écran lors de l'initialisation de CP/M, de 253 caractères maximum. Pour les codes de contrôle, même conversion que ci-dessus ( suivi du code + 64). Impression à l'initialisation(Printer power-up string). Sur le même principe que le tampon de commande initiale, mais envoie la chaîne de caractères définie ici à l'imprimante, lors de l'initialisation de CP/M. Longueur maxi 253 caractères. Changement de codes-clavier (Keyboard translations). Création d'une table qui redéfinit le code généré lorsqu'une touche est appuyée. Consulter la notice Amstrad Soft 158 A pour les détails d'utilisation. Touches de fonctions (Keyboard expansion). Permet d'affecter une chaîne de trente caractères maxi à certaines touches du clavier. Consultez la notice Amstrad. Redirections Entrées-Sorties (IO BYTE). Possibilité de modifier l'affectation par défaut des unités logiques. Voir le chapitre consacré à la commande STAT. MODE LENT (SLOW MODE). Sauf cas très particulier, ne pas modifier ce mode. Contrairement au nom de cette option il n'y a pas de différence de vitesse entre le mode lent et le mode rapide. L'explication de ce mode sort du cadre de l'utilisation courante. Message BIOS. Autorise ou non l'affichage des messages d'erreurs du système. Il peut être intéressant de supprimer cet affichage, pour éviter de détruire l'organisation d'un écran, à condition de gérer dans son programme, l'éventualité d'apparition d'erreurs. Efface tampon du clavier (Clear initial com-mand buffer on keyboard input). Permet d'effacer ou non le tampon du clavier avant la frappe d'une touche. Ne pas modifier l'état par défaut qui est : effacement. Les trois options suivantes concernent les paramètres de fonctionnement des lecteurs de disquettes. Toute modification est une affaire de spécialiste. Répondre Y (yes) aux trois interrogations : Default motor on delay is SIO CANAL A (Z80 S10 Chanel A:) Cette option affiche les paramètres de commande de l'interface série RS 232 Amstrad, xxxx Tx baudrate : (vitesse de transmission) xxxx Rx baudrate : Les vitesses de transmission ou de réception sont les suivantes : 19 200. 9 600. 4 800. 3 600. 2 400. 2 000. 1 800. 1 200. 600. 300. 200. 150. 110. 75. 50. SIO CANAL B Sans objet car l'interface série RS 232 ne gère que le canal A. Vous avez la possibilité de confirmer ou non la modification effectuée par la commande SETUP et vous avez la possibilité ou non d'enregistrer cette nouvelle version sur la disquette présente dans le lecteur actif. SUBMIT Cette commande permet d'exécuter automatiquement une suite de commandes CP/M. Cette suite de commandes est contenue dans un fichier ayant une extension .SUB (Exemple : TEST.SUB). Avec un éditeur de texte (ED par exemple) créér le fichier appelé TEST.SUB comprenant une commande CP/M par ligne, par exemple : STAT *.* Pour exécuter les commandes existantes dans le fichier de traitement en série, lancez la commande : Autre forme de commande : DIR $1.* Si vous utilisez ce fichier de commandes en série en tapant : SUBMIT MAJ TATA B vous obtiendrez la séquence de commandes suivante : SYSGEN XSUB XSUB DDT IS1.HEX R Vous l'exécutez avec la commande : L'utilisation des fonctions internes Après avoir analysé les commandes résidentes, et les commandes transitoires, nous allons décrire l'utilisation des fonctions internes disponibles en CP/M 2. Cette utilisation passe obligatoirement par l'utilisation de l'Assembleur. Nous avons choisi l'Assembleur 8080, puisqu'en standard vous disposez avec votre machine, des outils logiciels correspondant à cette syntaxe : AMS-DDT-LOAD. Souvenez-vous que du fait de la compatibilité montante entre 8080 et Z80, tous les problèmes examinés dans cet arti- Le programme de l'utilisateur débute à l'adresse 100 héxa de la mémoire. La partie entre l'adresse zéro et l'adresse 100 H est appelée page zéro. Cette page zéro sert d'interface entre l'utilisateur et les différents modules de CP/M. Quel est le contenu de cette page zéro ? (Toutes les adresses sont données en héxadécimal). 0 à 2 : saut au point d'entrée du BIOS+ 3, permet de situer où se trouve physiquement implantée la zone personnalisée par AMSTRAD de la partie du CP/M de gestion des périphériques. Nous n'utiliserons pas ces adresses dans le cadre de notre article. Utilisation des fonctions Le principe est le suivant :
Liste des fonctions du BDOS 1-C = 01H. Entrée d'un caractère sur le clavier avec écho sur l'écran. 2-C = 02H. Affichage d'un caractère à l'écran. 3-C = 03H. Lecture d'un caractère sur le port auxilliaire. 4-C = 04H. Sortie d'un caractère sur le port auxilliaire. 5-C = 05H. Sortie d'un caractère sur le port imprimante. 6-C = 06H. Entrée clavier ou affichage écran sans contrôle. 7-C = 07H. Lecture de l'octet entrée-sortie. (IOBYTE) de redirection. 8-C = 08H. Écriture de l'octet entrée-sortie de redirection. 9-C = 09H. Affichage d'une chaîne de caractères. Cette chaîne doit se terminer par le signe dollar ($). 10-C = 0AH. Lecture d'urie chaîne de caractères, placée dans une zone tampon. Tous les caractères envoyés par la console sont affichés à l'écran en écho un « retour chariot » arrête la chaîne de caractères. 11-C = 0BH. État du clavier. 12-C = 0CH. Donne le numéro de la version du CP/M. 13-C = 0DH. Réinitialisation des lecteurs de disquettes dans l'état lecture-écriture (R/W) et prise en compte du lecteur implicite. 14-C = 0EH. On impose par programme le numéro de lecteur de disquettes implicite. 15-C = 0FH. Ouverture d'un fichier, le nom du fichier doit figurer dans le catalogue du disque actif. Ce nom est inscrit dans la zone du bloc de contrôle fichier (FCB = File Con-trol Bloc) qui débute à 05CH. Le contenu de cette zone est détaillé à la suite. 16-C=10H. Fermeture d'un fichier, les entrées et sorties sont identiques à la fonction d'ouverture. 17-C= 11H. Recherche de la première rencontre d'un fichier dans le catalogue. Cette fonction est réservée au système. 18-C = 12H. Recherche des rencontres suivantes. Cette fonction, réservée au système, doit suivre la fonction 11H. 19-C=13H. Destruction d'un fichier en catalogue ; équivalent à la commande CP/M ERA. Mêmes remarques que pour la fonction 0FH. 20-C = 14H. Lecture en mode séquentiel d'un secteur de 128 octet. Le contenu de ce secteur est copié dans le tampon en mémoire, défini par la fonction 1AH. Après chaque lecture, le compteur d'enregistrement du bloc de contrôle est incrémenté. 21-C= 15H. Écriture en mode séquentiel sur un secteur du contenu du tampon de 128 octets défini en mémoire par la fonction 1AH. 22-C = 16H. Création d'un fichier et ouverture de celui-ci si la création s'est effectuée avec succès. Avant d'appeler cette fonction, il faut créer le bloc de contrôle de fichier, et s'assurer qu'il n'existe pas déjà en catalogue. On peut utiliser systématiquement la fonction 13H avant d'utiliser 16H. 23-C = 17H. Changement du nom d'un fichier (commande RENAME). Le bloc de contrôle de Fichier est construit avec l'ancien nom, les octets dl à d8 contiennent le nouveau nom, et les octets d9 à dl 1, le nouveau type (voir organisation du bloc de contrôle décrit plus loin). 24-C = 18H. Donne les numéros des lecteurs effectivement connectés. 25-C = 19H. Donne le numéro du lecteur actif. 26-C = 1AH. Définition de l'adresse de début en mémoire du tampon pour lecture-écriture disque. 27-C= 1BH. Donne l'adresse du vecteur d'allocation des blocs du disque ou des disques en ligne. Cette fonction est en principe réservée au système. Le programme STAT, par exemple, utilise ce vecteur pour déterminer la taille de l'espace disponible. 28-C = 1CH. Permet une protection temporaire contre l'écriture du lecteur actif. 29-C= 1DH. Donne le vecteur des lecteurs déclarés en lecture seule (R/0). Le format du registre HL est identique à celui de la fonction 24 (18H). 30-C= 1EH. Positionnements des attributs d'un fichier c'est-à-dire écriture, lecture seule, catalogue ou système (R/W, R/O, D1R, SYS). 31-C=1FH. Donne l'adresse du bloc des paramètres disques. Réservé au système, sert au calcul de l'espace et aux modifications des valeurs des paramètres disques. 32-C = 20H. Définition du numéro utilisateur (en lecture ou en écriture). 33-C = 21H. Lecture directe d'un fichier. Le numéro du bloc à lire est indiqué dans le champ R du bloc de contrôle de fichier. Après une lecture, ce numéro n'est pas modifié. 0 = lecture sans problème. 34-C = 22H. Écriture directe d'un fichier. Même principe que pour la lecture directe. 35-C = 23H. Écriture dans le champ R du bloc de contrôle de fichier, de la taille du fichier c'est-à-dire du nombre de blocs de 128 octets. 36-C = 24H. Donne le numéro d'enregistrement actuel après une série de lecture-écriture en mode séquentiel. Utile pour passer du mode séquentiel au mode direct. 37-C = 25H. Réinitialisation sélective d'une unité de lecteur de disquette. 40-C = 28H. Écriture en mode direct similaire à la fonction 34 (22H) sauf que le bloc de 128 octets est rempli de 0. Bloc de contrôle des fichiers (Dans la notice américaine : FCB = File Con-trol Bloc. Ce bloc de contrôle comprend 33 octets pour le mode séquentiel ou 36 pour le mode direct. Octet 0 = numéro de l'unité de lecteur à mettre en œuvre : 0 = unité actuelle 1 = A, 2 = B, etc.). 54 45 53 54 20 20 20 20 |
|
|