CODING ★ INITIATION A CP/M 16 - CPC n°23 ★

Initiation a CP/M (16/xx) (CPC Revue n°23)

Nous allons voir ce mois-ci, dans la suite de notre étude des fonctions du BDOS de CP/M, les fonctions de lecture et écriture en mode séquentiel, plus quelques fonctions diverses.

FIXATION DE L'ADRESSE DES TRANSFERTS DISQUE

Afin d'expliciter le fonctionnement des fonctions de lecture et d'écriture, il nous faut parler de la fonction 26 qui permet de fixer l'adresse des transferts disque.

En effet, lors d'une lecture séquentielle par exemple, CP/M va lire un secteur logique de 128 octets et le contenu de ce secteur sera mouvementé à l'adresse courante des transferts disque. Lors du démarrage de CP/M, cette adresse vaut 80H, mais la fonction 26 permet de fixer cette adresse de transfert où vous le désirez, c'est-à-dire le plus souvent dans une zone réservée à cet effet dans votre programme.

Si cela est nécessaire, cette adresse peut être modifiée avant chaque lecture, pour charger un fichier en mémoire, par exemple, ou pour changer de zone de trans fert lorsque l'on passe d'un fichier à un autre dans un programme qui travaille sur plusieurs fichiers.

Bien sûr, dès que votre programme se termine, CP/M réinitialise cette adresse à 80H.

En entrée: C = 26 ; DE contient l'adresse des transferts disque à fixer.
En sortie : pas de code retour.

LECTURE SEQUENTIELLE D'UN FICHIER

Cette fonction permet la lecture en séquentiel d'un fichier préalablement ouvert par la fonction 15. Rappelons que, pour CP/M, un fichier est un ensemble d'enregistrements logiques de 128 octets (un "secteur" CP/M). Donc, après la fonction 15 d'ouverture, le fichier est ouvert et le pointeur dans le fichier est fixé sur le premier enregistrement à lire.

Chaque appel successif à la fonction 20 va donc lire 1 28 octets du fichier et les mouvementer à l'adresse fixée par la fonction 26 et déplacer le pointeur d'un enregistrement.

En entrée: C = 20 DE = contient l'adresse d'un FCB d'un fichier ouvert. En sortie : A contient 0 si la lecture s'est effectuée sans erreur. En CP/M 2.2 une valeur différente de 0 signale que l'on a atteint la fin du fichier. En CP/M Plus les différentes valeurs possibles de A sont :

– 01 : fin de fichier.
– 09 : FCB invalide.
– 0A : disquette a été changée.
– FF : erreur physique, code dans H

ECRITURE SEQUENTIELLE D'UN FICHIER

Cette fonction permet d'effectuer des écritures séquentielles dans un fichier préalablement ouvert, soit par la fonction 1 5. soit par la fonction 22. Après l'ouverture, le pointeur dans le fichier est fixé sur le premier enregistrement existant (fonction 15» ou à créer (fonction 22).

Chaque appel successif à la fonction 21 va donc prendre les 128 octets se trouvant à l'adresse des transferts disque et les écrire dans le fichier concerné. Si le fichier était un fichier non vide et existant déjà, les écritures successives écrasent les anciennes données. Si on dépasse la fin du fichier tel qu'il existait à l'ouverture, celui-ci augmente en taille et la nouvelle fin de fichier est après le dernier enregistrement écrit.

En entrée : C = 21 DE = contient l'adresse du FCB d'un fichier ouvert.
En sortie : A contient le code retour, 0 si pas d'erreur et non nul dans le cas contraire.

Sous CP/M Plus les codes possibles sont :

– 01 : plus de place dans le catalogue len cas de création d'une nouvelle extension du fichier).
– 02 : plus de place sur le disque pour les données.
– 09 : FCB invalide.
– 0A : disquette changée.
– FF : erreur physique (code dans H).

CREATION D'UN NOUVEAU FICHIER

Lorsque nous avons décrit la fonction 15, nous avons précisé qu'il s'agissait de l'ouverture d'un fichier déjà existant. La fonction 22 permet de créer un nouveau fichier. C'est-à-dire qu'elle est identique à la fonction 1 5 sauf qu'il faut que le fichier spécifié soit inexistant dans le catalogue et que cette fonction crée le premier poste catalogue pour ce fichier.

En entrée ; C = 22 DE- adresse d'un FCB correctement mitialisé.
En sortie ; A contient une valeur de 0 à 3 si l'opération s'est effectuée correctement et 0FFH dans le cas contraire. Sous CP/M Plus le registre H contient le code erreur (voir fonction 15). La figure 1 vous donne un exemple com plet d'utilisation de ces fonctions. Ce programme recopie un fichier dans un autre, quelqu'en soit le contenu, texte ou binaire, car la copie se fait par "secteurs" CP/M de 128 octets.


Figure 1

CHANGEMENT DU NOM D'UN FICHIER

Cette fonction permet de changer le nom d'un fichier existant par un autre nom qui, lui, ne doit pas correspondre à un fichier déjà présent dans le catalogue. La zone pointée par DE contient dans ses 1 6 premiers octets, le nom du fichier à renommer, dans le même format que pour un FCB.

Les 16 octets suivants contiennent le nouveau nom du fichier également dans le format d'un nom de fichier de FCB, mais avec le premier octet toujours à zéro.

En entrée : C = 23 DE = adresse d'une zone contenant l'ancien nom et le nou veau nom en format FCB.
En sortie : A contient un code retour équivalent à une ouverture de fichier, c'est-à-dire de 0 à 3 en cas de succès et 0FFH en cas d'erreur. Sous CP/M Plus en cas d'erreur, le registre H contient le code de l'erreur. La figure 2 vous donne un exemple d'utilisation de cette fonction.


Figure 2

LECTURE DU VECTEUR D'ETAT DES DISQUES

Cette fonction permet de connaître les disques qui sont en ligne. Un disque "en ligne" est un disque qui a été accédé. Ainsi, dans un système à 2 lecteurs de disquette, si vous n'avez pas effectué d'accès au lecteur B :, celui-ci n'est pas en ligne. Cette fonction ne permet donc pas de connaître le nombre de lecteurs maxi possibles dans un système.

En entrée : C -24
En sortie : le registre HL contient le vecteur des disques actifs. Le bit 0 de L correspond au disque A:, le bit 1 au disque B:... jusqu'au bit 7 de H qui correspond au disque P:. Si le bit est à 0, le disque n'est pas en ligne. Si le bit est à 1, le disque est en ligne.

LECTURE DU NUMERO DU DISQUE COURANT

Cette fonction permet de connaître quel est le disque courant, c'est-à-dire celui sur lequel on effectue les opérations disque lorsqu'aucun disque n'est spécifié dans les noms de fichiers. En entrée ; C = 25

En sortie : A contient le numéro du disque courant. (A: = 0 B: = 1...) Le mois prochain, nous continuerons avec quelques fonctions diverses, mais surtout avec les lectures et écritures en accès RANDOM (accès relatif).

CPC n°23

★ ANNÉE: ???
★ AUTEUR: Francis VERSCHEURE

Page précédente : Initiation a CP/M (15/xx)

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

Lien(s):
» Coding » Initiation a CP/M (01/xx) (CPC Revue n°7)
» Coding » Initiation a CP/M - Amstrad Magazine 10 - les Commandes Transitoires - les Fonctions Internes
» Coding » Initiation a CP/M (18/xx) (CPC Revue n°25)
» Coding » Initiation a CP/M (04/xx) (CPC Revue n°10)
» Coding » Initiation a CP/M (19/xx) (CPC Revue n°27)
» Coding » Initiation a CP/M (15/xx) (CPC Revue n°22)
Je participe au site:

» 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/c
Page créée en 754 millisecondes et consultée 1827 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.