CODING ★ INITIATION A CP/M - AMSTRAD MAGAZINE n°10 ★

Initiation a CP/M - Amstrad Magazine 10 - les Commandes Transitoires - les Fonctions Internes
  • 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
:*
C'est un nouveau fichier, l'éditeur attend une commande, qui, pour notre propos sera I (comme Insertion). Tout caractère tapé au clavier entrera dans le tampon de l'éditeur. La seule façon de sortir de cette commande est de taper CONTROL-Z.

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
2 : suite 2
3 : suite 3 etc.

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.
Ext : nombre de blocs logiques de 16 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).

PUN : sortie des données sur un dispositif auxilliaire (dans le passé : perforation de bandes PUNCH).

LST : impression de liste : fonction imprimante.

Les unités physiques acceptées par Amstrad CPC 664 sont :

TTY : canal A de l'interface série Z80 SIO. CRT : clavier et écran.

BAT : entrée depuis le “READER“ et sortie “LIST”.

UC1 : canal B de l'interface série (non implanté).

PTR : entrée du caractère ASCII 1A (hexa) marque de fin de fichier.

PTP : sortie de caractères nuls.

UR1 : canal B de l'interface série (non implanté).

UR2 : clavier.

UP1 : canal B de l'interface série (non implanté).

UP2 : écran.

LPT : port Centronics.

UL1 : canal B de l'interface série (non implanté).

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.
– copie d'une unité physique vers un fichier.
– copie d'une unité physique vers une autre 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 :
SETUP.
Il faut ensuite répondre aux questions suivantes : Tampon de commande initiale permet de jancer automatiquement une commande après l'initialisation de CP/M. Le tampon de commande peut contenir jusqu'à 128 caractères ASCII imprimables ou pour les codes ASCII de valeur inférieurs à 32, le caractère suivi du code ASCII désiré + 64. Exemple : retour chariot est représenté par M (Retour chariot = valeur 13 + 64 = 77 soit M). Si vous désirez lancer automatiquement un programme appelé MENU, lors de l'initialisation de CP/M 2, votre tampon de commande initiale sera : MENU.COM M.

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
Default motor off delay is
Default stepping rate 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 :
(vitesse de réception) x data bits :
(nombre de bits de données 5.6.7 ou 8) xx parité :
(type de parité N, O, E) x stop bits :
(nombre de bits stop 1, 1.5 ou 2)

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.
Si vous désirez modifier l'option par défaut, vous répondrez N à la question, et vous entrez les nouveaux paramètres dans l'ordre d'affichage, chaque paramètre séparé par un espace.

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 *.*
DIR

Pour exécuter les commandes existantes dans le fichier de traitement en série, lancez la commande :
SUBMIT TEST
Pour arrêter l'effet d'un fichier SUBMIT, tapez au clavier CONTROL-H. L'effet n'est pas immédiat, et n'intervient qu'à la fin du traitement en cours.

Autre forme de commande :
SUBMIT TEST P1 P2.
Les valeurs paramètres P1 et P2 (jusqu'à P9) remplaçeront respectivement les variables $1, $2 etc. figurant dans les lignes de commandes.
Par exemple, vous créez un fichier MAJ.SUB contenant les lignes suivantes :

DIR $1.*
PIP $2: = $1.BAK
ERA S1.BAK

Si vous utilisez ce fichier de commandes en série en tapant : SUBMIT MAJ TATA B vous obtiendrez la séquence de commandes suivante :
DIR TATA.* : (affiche le contenu du catalogue des fichiers dont le nom principal est TATA).
PIP B: = TATA.BAK : (copie sur le lecteur B le fichier TATA.BAK du lecteur actif).
ERA TATA.BAK : (efface sur le lecteur actif le fichier TATA.BAK).
Cette procédure est très utile lorsqu'un enchaînement de tâches est répétitif.

SYSGEN
Voir la commande BOOTGEN.

XSUB
Cette commande est une extension de SUBMIT (voir plus haut). Quant XSUB est placé en tête d'un fichier SUBMIT, il permet de fournir des paramètres en entrée des programmes exécutés dans SUBMIT. Suivez bien l'exemple suivant : soit un fichier SAUVE.SUB contenant les lignes suivantes :

XSUB DDT IS1.HEX R
GO
SAVE 1 S2.COM

Vous l'exécutez avec la commande :
SUBMIT SAUVE AA BB
Les opérations suivantes sont effectuées :
DDT : Changement et exécution de DDT, outil de mise au point (voir cette commande détaillée dans notre article).
IAA.HEX : initialise le tampon nom fichier AA.HEX.
R : charge ce fichier sous DDT.
GO : retourne à CP/M.
SAVE 1 BB.COM : sauvegarde une page de 256 octets depuis l'adresse mémoire 100 H dans le fichier BB.COM.

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-
cle seront valables avac la syntaxe propre au Z80. L'inverse n'étant pas forcément vrai.
De l'implantation physique de CP/M sur AMSTRAD nous n'en examinerons que les éléments qui intéressent le programmeur désirant travailler dans le respect du standard CP/M. C'est-à-dire faire appel aux fonctions de CP/M dans l'esprit de l'interfaçage standard.

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.
3 : emplacement de l'octet de redirection des périphériques. Nous reviendrons sur l'utilisation de cet octet particulier.
4 : contient deux informations : le numéro utilisateur (USER) et le numéro de lecteur actif.
5 à 7 : saut au BDOS, qui est la partie de CP/M assurant la gestion des disquettes. C'est l'adresse 5 qui sera appelée pour toute utilisation d'une fonction de CP/M.
5C à 7F : zone d'accès aux fichiers.
80 à FF : zone du tampon de l'unité disquette.

Utilisation des fonctions

Le principe est le suivant :

    • Placer le numéro de la fonction (en héxadécimal) dans le registre C.
    • Suivant la fonction invoquée, fournir le paramètre dans le registre E s'il s'agit d'un octet, ou dans le registre double DE s'il s'agit d'un mot (2 octets).
    • Appeler la fonction par CALL 5H (CALL à l'adresse 5 héxadécimal). Si la fonction, après exécution doit fournir une valeur en retour, celle-ci sera placée dans le registre A s'il s'agit d'un octet, ou dans le registre double HL s'il s'agit d'un mot (de 2 octets). L'appel d'une fonction se présente donc de la façon suivante (syntaxe 8080) :


LXI D, PARAM ; valeur paramètre. MVI C, FONCTION ; numéro de fonction. CALL 0005H ; appel au BDOS.
Nous voyons donc qu'il n'est pas nécessaire de connaître l'implantation et le contenu interne de CP/M pour en utiliser ses fonctions puisque l'adresse mémoire 5 héxa contiendra toujours la référence à l'appel du système d'exploitation.

Liste des fonctions du BDOS
0-C = 00H. Réinitialisation du système.
Entrée : non.
Sortie : non.

1-C = 01H. Entrée d'un caractère sur le clavier avec écho sur l'écran.
Entrée : non.
Sortie : A = caractère ASCII.

2-C = 02H. Affichage d'un caractère à l'écran.
Entrée : E = caractère ASCII à afficher. Sortie : non.

3-C = 03H. Lecture d'un caractère sur le port auxilliaire.
Entrée : non.
Sortie : A = caractère ASCII lu.

4-C = 04H. Sortie d'un caractère sur le port auxilliaire.
Entrée : E = caractère à envoyer.
Sortie : non.

5-C = 05H. Sortie d'un caractère sur le port imprimante.
Entrée : E = caractère ASCII à envoyer à l'imprimante.
Sortie : non.

6-C = 06H. Entrée clavier ou affichage écran sans contrôle.
Entrée : E = OFFH cas lecture du clavier. Sortie : A = caractère lu sur clavier ; A = O pas de caractère.
Entrée : Ez caractère ASCII à afficher. Sortie : A = État.

7-C = 07H. Lecture de l'octet entrée-sortie. (IOBYTE) de redirection.
Entrée : non.
Sortie : A = contenu octet adresse 03.

8-C = 08H. Écriture de l'octet entrée-sortie de redirection.
Entrée : E = valeur de l'octet adresse 03.
Sortie : non.

9-C = 09H. Affichage d'une chaîne de caractères. Cette chaîne doit se terminer par le signe dollar ($).
Entrée : DE = adresse de début de la chaîne.
Sortie : non.

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.
Entrée : DE = adresse début tampon. Le premier octet indique le nombre maxi de caractères attendus.
Sortie : dans le tampon : le deuxième octet donne le nombre de caractères réellement reçus, les octets suivants contiennent les caractères reçus.

11-C = 0BH. État du clavier.
Entrée : non.
Sortie : A = 0 il n'y a aucun caractère en attente ; A * 0 il y a un caractère en attente prêt à être lu par la fonction 01.

12-C = 0CH. Donne le numéro de la version du CP/M.
Entrée : non.
Sortie : L = 20H version 2.0 ; L = 22H Version 2.2.

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.
Entrée : E = 0 lecteur A: ; E = 1 lecteur B:.
Sortie : non.

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.
Entrée : DE = adresse de la zone du bloc de contrôle.
Sortie : A = 0 à 3 le fichier est trouvé ; A = 0FFH le fichier n'est pas trouvé.

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.
Entrée : DE = adresse de la zone bloc de contrôle.

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.
Entrée : DE = adresse de la zone bloc de contrôle.

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é.
Sortie A = 0 lecture correcte ; A = 0FFH pas de données à lire : fin de fichier.

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.
Sortie A = 0FFH indique une disquette pleine.

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.
Entrée : DE = adresse du bloc de contrôle fichier.
Sortie : A = 0 pas d'erreur ; A = 0FFH le catalogue est plein.

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).
Entrée : DE = adresse du bloc de contrôle fichier.
Sortie : A = 0 pas erreur ; A = 0FFH l'ancien nom n'existe pas.

24-C = 18H. Donne les numéros des lecteurs effectivement connectés.
Sortie : HL = deux octets dont chaque bit indique la présence ou non d'un lecteur (1 = présent ; 0= absent).
Le bit 0 de L correspoond au lecteur A.
Le 1 au B. Le 7 au H. Le bit 0 de H correspond au lecteur I. Le 1 au J. Le 7 au P.

25-C = 19H. Donne le numéro du lecteur actif.
Sortie : A = 0 correspond au lecteur A. 1 correspond au B, etc.

26-C = 1AH. Définition de l'adresse de début en mémoire du tampon pour lecture-écriture disque.
Entrée : DE = adresse du tampon, habituellement ; DE = 0080H (cette zone est souvent appelée DMA = Direct Memory Access).

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).
Entrée : DE = adresse du bloc de contrôle.
Sortie : A = 0 à 3 le fichier est trouvé ;, A = àFFH le fichier n'est pas trouvé.

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).
Entrée : E = 0FFH, c'est une opération de lecture du numéro utilisateur.
E = numéro utilisateur imposé.
Sortie : A = numéro utilisateur actif dans le cas d'une lecture.

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é.
Entrée : DE = adresse du bloc de contrôle fichier.
Sortie : A = compte rendu de l'opération :

0 = lecture sans problème.
1 = lecture dans un bloc non écrit.
2 = pas de code en lecture.
3 = ouverture de l'extension impossible.
4 = recherche d'une extension non écrite.
5 = code inexistant en lecture.
6 = dépassement de la fin physique disquette.

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.
Entrée : DE = adresse du bloc de contrôle de fichier.
Sortie : dans le bloc de contrôle, adresse du bloc de 128 octets qui suit la fin de fichier. On utilise cette fonction pour ajouter des enregistrements à la suite d'un fichier.

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.
Entrée : DE = octet dont chaque bit concerne un des lecteurs en ligne. Bit 0 = unité A, bit 1 = unité B, etc.

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.).
1 à 8 : nom du fichier en code ASCII majuscule cadré à gauche et complété par des espaces, exemple : TEST sera codé (en héxa.).

54 45 53 54 20 20 20 20
1 2 3 4 5 6 7 8

9 à 11 : type du fichier (extension), cadré à gauche et complété à droite par des espaces. Exemple : BAS sera codé (en héxa.).

42 41 53
9 10 11

Les bits 7 des positions 9 et 10 indiquent respectivement la restriction lecture seule (R/O) et le type système (SYS). L'exemple ci-dessus sera codé en position 9 de la façon suivante, pour un fichier en lecture seule : 42H + 80H = C2H.
12 : numéro d'extension courante, initial!-sez à zéro au départ.
13 et 14 : utilisé par le système, initialisez à zéro au départ.
15 : nombre de blocs de 128 octets dans l'extension.
16 à 31 : adresse des blocs physiques utilisés par CP/M, réservés au système.
32 : numéro courant du bloc de 128 octets à lire ou à écrire en mode séquentiel.
33 à 35 : numéro du bloc de 128 octets à lire ou à écrire en mode direct. La position 35 est toujours 0.
Exemple : accès au bloc 287 ( 11FH), placez 1F en position 33 et 01 en position 34.

1F 01 00
33 34 35

Ceci termine la description des fonctions utilisables en CP/M 2 sur CPC 664 et 6128. Les deux exercices qui suivent vous permettront de vous familiariser avec l'utilisation de quelques fonctions.

AMSTRAD MAGAZINE n°10

★ ANNÉE: ???
★ AUTEUR: Pierre Squelart
★ NOTE: Dans Amstrad Magazine n° 10, un article “CP/M, les commandes transitoires, les fonctions internes”, a été amputé de ces deux exercices de fin de démonstration. Excusez-nous et regardez un peu ce qui suit :
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Initiation  a  CPM-Amstrad  Magazine  10-Les  Commandes  Transitoires    FRENCH    LISTINGDATE: 2022-03-30
DL: 103
TYPE: PDF
SiZE: 128Ko
NOTE: 2 pages/PDFlib v1.6

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop
Page créée en 010 millisecondes et consultée 1913 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.