★ CODING ★ INITIATION A CP/M - CPC n°23 ★ |
Initiation a CP/M (15/xx) (CPC Revue n°22) |
Ce mois-ci nous continuons notre étude des fonctions du BDOS de CP/M et nous arrivons aux fonctions de gestion des fichiers.Avant de poursuivre nous allons décrire les éléments utilisés dans cette gestion. STRUCTURE DU CATALOGUE Chaque disquette CP/M contient une zone utilisée par le BDOS qui s'appelle le catalogue. Cette zone est subdivisée logiquement en "enregistrements CP/M" c'est-à-dire en "secteurs logiques" de 128 octets. Comme sur un CPC les secteurs ont une taille physique de 512 octets, chaque secteur physique contient donc 4 secteurs logiques. Chaque secteur du catalogue est divisé en 4 postes de 32 octets. Un poste de 32 octets correspond à une partie ou au tout d'un fichier présent sur la disquette. En effet, chaque poste de 32 octets est divisé en 2 zones de 16 octets. La première contient l'indentification du poste et la deuxième les numéros des blocs succès sifs alloués. En voici la description détaillée : – octet 0 : numéro d'utilisateur (0 à 1 5 correspondant au numéro de USER) ou 0E5H si le poste est vide, c'est-à-dire libre pour la création d'un nouveau poste. Note : les autres valeurs correspondent en CP/M Plus à des postes alloués pour autre chose qu'un poste de fichier ; FONCTIONNEMENT DU SYSTEME D'ALLOCATION DES BLOCS Les blocs d'allocation ont une taille de 1K, ce qui donne 16K d'allocation par poste de catalogue. Donc un fichier de 36K aura 3 extensions, 2 de 16K et une de 4K. Après formatage tous les blocs de données d'une disquette sont libres et lors de la création d'un fichier ils seront alloués séquentiellement. Mais un fichier peut très bien être sur les blocs 10 à 1 5 puis 20 à 25, tandis qu'un autre, créé en même temps aura les blocs 16 à 19 et 26 à 31. Si on supprime le premier fichier les blocs qui lui étaient alloués deviennent libres. Lors de la création d'un nouveau fichier on réutilisera ces blocs en commençant par les premiers utilisables. Ce système qui stocke les numéros des blocs dans les postes du catalogue a été déterminant dans la faillite de CP/M lors de l'évolution des matériels. En effet, parfaitement adapté aux systèmes de faibles capacités, car plus fiable qu'un système avec table d'allocation comme MSDOS, celui-ci se révèle vite peu performant lorsque les fichiers ont des tail les très importantes. En effet, un fichier de 160K aura 10 postes dans le catalogue et il faudra passer de l'un à l'autre lors d'accès dits "directs", ce qui ralentira considérablement la recherche d'un enregistrement par son numéro relatif, en entraînant l'équivalent d'une nouvelle ouverture de fichier chaque fois que l'on passe d'une zone de 16K à une autre. STRUCTURE DU BLOC DE CONTROLE FICHIER (FCB: File Control Block) Toute opération sur un fichier utilise une zone de travail utilisée par CP/M et qui s'appelle un FCB. En voici la description : – octet 0 : code disque : 0 = disque courant, 1 = A: , 2 = B:, etc. ; REMARQUE SUR LA MISE AU POINT DES PROGRAMMES 1- La protection contre le "déplombage" Si vous êtes un petit curieux et que vous essayez l'exécution de certaines des commandes travaillant sur des fichiers ou surtout le catalogue, vous aurez la désagréable surprise de vous apercevoir que sous DDT ou SID, en mode trace ou en exécution avec point d'arrêt, le système ou se plante et revient au Basic (CP/M 2.2) ou termine votre programme et redonne la main au CCP. Ce n'est pas le meilleur de ce qu'a ajouté Amstrad à CP/M ! Est-ce par peur du piratage ou autre chose toujours est-il que cette protection est bien gênante pour la mise au point des programmes honnêtes ! Car en effet ça marche normalement à condition d'exécuter le programme à partir du CCP, mais l'exécution est impossible sous un Debugger. 2 Le mode de traitement des erreurs en CP/M Plus. Nous le verrons plus tard avec la fonction 45, mais sous CP/M Plus il y a plusieurs modes de fonctionnement possible lorsqu'il se produit une erreur grave. Par défaut il est important de le savoir, en cas d'erreur grave le BDOS affiche un message d'erreur, termine votre programme et rend la main au CCP. Ainsi pas question d'essayer la fonction 14 pour savoir combien de disques sont en ligne, dès la demande de sélection d'une unité inconnue votre programme se terminera i Si vous êtes certain de ne faire fonctionner votre programme que sous CP/M Plus vous aurez la possibilité avec la fonction 45 de modifier cet état par défaut de façon à ce que le système rende la main à votre programme même lors de ce genre d'erreur. REINITIALISATION DU SYSTEME DISQUE Cette fonction permet de réinitialiser le système de gestion des disques dans un état équivalant à celui obtenu après le démarrage de CP/M. Son utilité essentielle est de permettre le changement de disquette dans un lecteur sans faire tomber la disquette dans un état de lecture seule. En effet, pour ne pas risquer d'écrire des informations d'une disquette sur une autre lors des mises à jour de catalogue, CP/M effectue un contrôle sur le contenu du catalogue de la disquette en ligne par rapport à la disquette lue à l'origine dans le même lecteur. Si le contrôle décèle que la disquette a été changée, le disque passe alors en "Read Only" c'est-à-dire que toute opération d'écriture sur la disquette est refusée. Cette fonction doit donc être exécutée chaque fois que l'on veut permettre le changement de disquette dans l'un des lecteurs. (Voir exemple 1). En entrée : C = 13 SELECTION D'UNE UNITE DE DISQUE Cette fonction est utilisée pour mettre en ligne une disquette qui se trouve dans le lecteur désigné. Après la première exécution de cette fonction, la disquette est disponible en lecture et écriture avec contrôle d'identification et le disque devient le disque courant. Une resélection, après sélection d'un autre disque, ne permet pas le change ment de disquette, mais considère que le lecteur contient toujours la disquette de la première sélection. Si un changement de disquette est constaté par ailleurs dans le cours du traitement, le disque passe alors en "lecture seule". Cette sélection précède toutes les fonctions accédant directement au catalogue du disque courant (voir exemple 2). En entrée : C = 14 E = numéro du disque (A: = 0 B: = 1, etc.) OUVERTURE D'UN FICHIER EXISTANT Avant d'effectuer des lectures ou des écritures dans un fichier déjà existant il est nécessaire d'effectuer une opération que l'on appelle l'ouverture. Cette opération consiste en une recherche dans le catalogue d'un poste correspondant aux nom et extension de fichier indiqués, sur le disque indiqué et ayant le code USER actif, ou le code USER 0. Les fichiers USER 0 sont donc visibles quelque soit le USER courant. En cas de succès CP/M initialisé dans le FCB ses zones de travail qui lui permettent lors des accès successifs de savoir où il se trouve dans le fichier en cours de traitement (voir exemple 3). En entrée : C - 1 5 DE = adresse d'un FCB correctement initialisé ; En sortie ; A contient le code retour. En CP/M Plus le registre H contient le code de l'erreur : – 0 pas d'erreur ; FERMETURE D'UN FICHIER OUVERT Lorsque l'on a terminé un traitement sur un fichier, il est nécessaire, afin de mettre à jour les informations du catalogue s'y rapportant d'effectuer ce que l'on appelle la fermeture du fichier. Cette opération est indispensable lorsque l'on a effectué des créations de nouveaux enregistrements dans le fichier. Un fichier non fermé correctement peut être perdu en partie ou totalement. C'est pour cela qu'il est bon de prendre l'habitude de toujours fermer tous les fichiers ayant été ouverts, même si on n'a effectué que des lectures (voir exemple 4). En entrée : C = 16 DE = adresse du FCB du fichier à fermer ; TROUVE PREMIER POSTE Cette fonction n'est en général pas utilisée par un programme d'application, mais plutôt par un utilitaire système, comme un utilitaire de copie sélective ou de visualisation de catalogue, etc. En effet, le but n'est pas d'effectuer une quelconque opération sur un fichier mais uniquement une recherche dans le catalogue. Le traitement du code USER est identique à une ouverture. En entrée : C = 17 De = adresse d'un FCB contenant une référence de fichier soit unique, soit ambiguë. {Nom, extension et numéro d'extension). En sortie : A contient code retour identique à une ouverture 0 à 3 si OK, OFFH si aucun fichier trouvé. En CP/M Plus H contient code erreur. En plus, à l'adresse DMA courante (voir plus tard fonction 26) CP/M copie le secteur du catalogue contenant le fichier trouvé. Référence ambiguë : vous avez la possibilité de mettre n'importe où dans le nom ou l'extension du fichier recherche des ?. Chaque position dans le nom ou l'extension qui contient un ? acceptera n'importe quel caractère lors de la comparaison effectuée pendant la recherche, ainsi une référence de type ESSAI ???.??? renverra un code retour OK dès que l'on trouve dans le catalogue un fichier comprenant les lettres ESSAI comme ,5 premières lettres du nom. Les fichiers ESSAI.TXT, ESSAIS.DOC, ESSAI 01 .BAS par exemple seront tous trouvés (voir exemple 5). CHERCHE LE SUIVANT Cette fonction suit normalement la précédente et permet de continuer la recherche dans le catalogue, en repartant de la position du poste précédemment trouvé. Est bien sûr utile surtout dans le cas d'une référence ambiguë (voir exemple 6) En entrée : C = 18 EFFACEMENT D'UN FICHIER DU CATALOGUE Cette fonction permet de supprimer un fichier. Tous les postes associés à ce fichier sont libérés (premier octet à 0E5H) et les blocs alloués deviennent libres. Les données du fichier ne sont pas touchées. Cette opération ne met à jour que le catalogue. Si vous avez supprimé un fichier par erreur, sous réserve de n'avoir plus écrit aucun enregistrement nouveau dans aucun fichier, il est possible de le récupérer en effectuant une mise à jour directe du catalogue. Il suffit de remettre le premier octet de tous les postes correspondant au fichier à la valeur de son USER (0 à 15) (voir exemple 7). En entrée : C = 19 DE = adresse d'un FCB contenant les nom et extension du fichier à supprimer. Le mois prochain nous continuerons par les fonctions de lecture/écriture en séquentiel ainsi que la fonction de création que nous illustrerons par un exemple complet d'utilisation. Exemple 1 mvi c,9 Affiche message demandant de mettre une disquette en A; |
|
Page précédente : Initiation a CP/M (07/xx) |
|