APPLICATIONSDISQUE ★ CAT-DISK (CPC REVUE) ★

Cat-disk (CPC Revue)Applications Disque
Cet utilitaire fournit les informations intégrales sur les fichiers implantés sur une disquette. Il complète la fonction CAT en reprenant ses caractéristiques.

Cliquez sur l'image pour l'agrandir

INFORMATIONS FOURNIES

  • Nom : nom du fichier (écriture standard AMSDOS). La liste des noms est triée alphanumérique croissant (identique à la fonction CAT)
  • Type : type du fichier
    • BAS : fichier source BASIC
    • BAS P : fichier source BASIC protégé (sauvé par SAVE ---,p);
    • BIN : fichier binaire obtenu par SAVE--,b,--,--
    • ASC : tous les autres fichiers. Le type de fichier ASCII est reconnu par le fait qu'il ne débute pas par un HEADER sur la disquette.
  • Début : adresse de chargement (HEXA et DECIMAL),
    • 0 si type ASC utile pour les fichiers de type BIN lors de l'instruction LOAD ---,adresse.
    • Elle est toujours égale à 170H pour les fichiers de type BAS.
  • START : adresse de lancement (HEXA et DECIMAL),
    • 0 si type ASC.
    • Elle est significative pour les fichiers de type BIN si elle a été renseignée lors de la sauvegarde SAVE--,b,-,-, adresse de lancement, elle est exploitée par l'instruction RUN.
  • Longueur réelle : longueur réelle du fichier en octets, telle qu'elle est enregistrée dans le HEADER.
  • Longueur occupée : taille physiquement occupée sur la disquette en K (1024 octets) (identique à CAT).

FONCTIONNEMENT

Après le RUN du programme, la disquette à analyser est demandée sur le lecteur A. Le catalogue et les hea-ders sont lus avec reconnaissance automatique du format de disquette (DATA ou SYSTEME). L'affichage du catalogue s'arrête en fin de page écran dans l'attente de la frappe d'un caractère quelconque au clavier. Sur la dernière page affichée, sont fournis : le format de la disquette, la place réellement occupée et la place disponible.

Remarque : les fonctions de lecture physique utilisées sont directement appelées dans la ROM AMSDOS : la disquette doit donc être standard AMSDOS. Dans le cas contraire, ou si la disquette n'est pas formatée, un message FORMAT INCONNU est envoyé.

RAPPELS SUR LES FORMATS DE DISQUETTE

Les CPC reconnaissent 3 formats de disquette :

  • le format standard CPC (ou format système)
  • le format DATA
  • le format IBM (peu utilisé et pas détaillé ici)

Sont communs aux formats S et D:

  • l'organisation physique de la disquette : 40 pistes (numérotées de 0 à 39) de 9 secteurs de 51 2 octets, soit 184320 octets disponibles après formatage.
  • la méthode unique d'accès aux fichiers : recherche dans le catalogue puis lecture séquentielle.
  • l'organisation de la zone catalogue et des header de fichiers que nous allons détailler.

Le catalogue

Il contient le répertoire de tous les fichiers implantés sur la disquette. Chaque fichier est géré par une zone de 32 octets sous la forme :

  • octet 0 : numéro de USER ou valeur HE5 si le fichier a été supprimé,
  • octets 1 à 11 : nom du fichier en ASCII sous la forme 8 caractères + 3 caractères de l'extension. Le "." n'est donc pas représenté,
  • octet 12 : numéro de l'extension du fichier.
  • octet 15 : nombre d'enregistrements CPM (128 octets) de cette extension.
  • octets 16 à 31 : numéros des blocs (1024 octets) que comporte cette extension (maximum 16). Le catalogue comporte un maximum de 64 zones de cette forme et fait donc une taille fixe de 2048 octets, plusieurs unités de mesure sont donc utilisées dans ce système :
    • l'enregistrement CPM : plus petite zone logiquement accessible par le DOS : 128 octets.
    • le secteur physique : plus petite zone physiquement accessible par le DOS:512 octets = 4 enregistrements.
    • le bloc unité de mesure de taille de fichier, 1024 octets = 2 secteurs.

Un fichier de taille supérieure à 16 blocs est implanté sous forme de plusieurs extensions de 1 6K, la dernière n'étant pas complète. Pour reconstituer ce fichier, il est nécessaire de définir un ordre dans ses extensions. C'est le but de l'octet 12 qui les numérotent de 0 à n. La numérotation des secteurs sur chaque piste est différente selon les 2 formats. En format S, ils portent les numéros H41 à H49 et en format D, HC1 à HC9. De plus, en format S, les 2 premières pistes sont réservées au système CPM (qui cependant n'y est pas chargé dans les formats vendeurs).

Le catalogue est implanté sur les 4 premiers secteurs libres de la disquette :

  • secteurs H41 à H44 de la piste 2 en format S.
  • secteurs HC1 à HC4 de la piste 0 en format D.

Le reste de la disquette est à la disposition de l'utilisateur, soit :

  • en format S 184320 octets, pistes 0 et 1 CPM : 9216 octets - catalogue : 2048 octets = 173056 octets = 169K
  • en format D : 184320 octets - catalogue : 2048 octets = 182272 octets = 178 K

La numérotation des blocs ne prend pas en compte les pistes systèmes en format S, mais recouvre toujours la zone catalogue qui représente donc les blocs 0 et 1 dans les 2 formats. Ils sont numérotés croissants à la suite, ce qui produit des blocs à cheval sur 2 pistes (bloc 4 = piste 2 secteur H49 + piste 3 secteur H41 en format S).

Les headers de fichiers

Le premier bloc de chaque fichier (son numéro se situe dans l'octet 16 de l'extension 0 du fichier dans le catalogue) commence par une zone de 64 octets appelée header. Elle comporte les renseignements suivants :

  • octets 0 à 15 nom du fichier (16 octets pour la compatibilité cassette. En fait, on y trouve le numéro USER suivi de 11 caractères tels que dans le catalogue, les 4 derniers octets sont garnis par des 0.
  • l'octet 18 contient le type de fichier :
    • bit 0 = 1 alors fichier protégé
    • bit 1,2 et 3 type du fichier 000 : BASIC 100 : binaire
  • octets 21 et 22 : adresse de chargement en format low/high.
  • octets 24 et 25 : longueur réelle du fichier sur 16 bits en octets dans le format low/high.
  • octets 26 et 27 : adresse de lancement sous la forme low/high. Les autres octets du header ne sont pas utilisés.

Dans le cas d'un fichier de type ASCII, aucun header n'est écrit. Le fichier débute directement par le premier caractère du premier enregistrement. Cependant, AMSDOS regénère un header pour traiter ce type de fichier de façon standard dans ses routines.

COMMENTAIRES SUR LE PROGRAMME BASIC

Le but essentiel du programme est de récupérer dans un tableau T$ (64) l'ensemble des headers des fichiers de la disquette. Chaque header étant une chaîne de caractères, il est ensuite aisé de les trier et de les exploiter pour l'affichage. Le chargement du tableau T$ est confié au programme en langage machine qui va chercher les headers sur la disquette. D'une manière plus générale, cette méthode peut être adoptée pour transmettre ou recevoir un grand nombre de paramètres entre un programme BASIC et un programme en langage machine. En effet, l'instruction CALL ne permet que 32 valeurs en paramètre. Après l'affichage du cadre de présentation, le tableau T$ est réservé en ligne 70. L'appel au programme en langage machine se fait en ligne 110 avec, comme paramètre, l'adresse de l'élément 1 du tableau. Ce paramètre permet au programme binaire de connaître l'emplacement en mémoire de tous les descripteurs des éléments T$ (i).

Ils sont :

  • consécutifs en mémoire, adresses croissantes ;
  • composés de 3 octets ; le premier contient la longueur de la chaîne de caractères, les deux suivants, l'adresse mémoire (format low/high) à partir de laquelle figure la chaîne de caractères. Le programme en langage machine peut alors forcer l'octet de longueur à 32 (longueur d'un header) et faire pointer l'adresse directement sur sa table de header qu'il constitue. Ainsi, après retour au programme BASIC, le tableau T$ est valorisé et exploitable par des instructions standard BASIC.
  • 2 paramètres supplémentaires sont à retourner, le nombre d'éléments T$ valorisés et le format de la disquette. Ils sont restitués aux adresses 37003 et 37004 et récupérés de façon classique par des PEEK. La valeur 99 de l'octet 37003 est un artifice technique pour signaler au programme BASIC que le format de la disquette n'a pas été reconnu par le programme binaire. Un tri du tableau T$ est ensuite effectué (ligne 140 à 210) par la méthode de Shell-Metzner et les headers sont exploités pour affichage. L'octet 17, non utilisé par les headers, contient le nombre de blocs du fichier calculé par le programme binaire.

COMMENTAIRES SUR LE PROGRAMME EN LANGAGE MACHINE

Les octets CPT et FORMAT sont les paramètres nombre de fichiers et format de disquette récupérés par le programme BASIC à l'aide d'instructions PEEK. Après sauvegarde des registres, l'adresse du descripteur de T$ (1), passée dans le registre DE par le CALL BASIC, est stockée dans la zone ADR.

Reconnaissance du format de disquette

Une méthode simple pour reconnaître le format d'une disquette est d'essayer de la lire dans un format puis dans l'autre en cas d'échec. Cependant, pour effectuer ces opérations de manière insensible pour l'utilisateur, il faut, au préalable, supprimer la sortie des messages d'erreurs et diminuer le nombre d'essais de lecture standards en AMSDOS. La zone CPT est utilisée temporairement pour comptabiliser le nombre d'essais effectués. Un essai est d'abord fait en format S, puis en format D si le premier n'a pas réussi. Si ce deuxième essai est.encore infructueux, alors la disquette est alors considérée illisible et la valeur 99 est placée dans la zone FORMAT avant d'effectuer un retour au BASIC.

Lorsque le format est déterminé, alors l'ensemble du catalogue est lu dans la zone BUF.

Lecture des headers

Un premier traitement sur le catalogue est effectué pour charger les headers dans la table ZONE. Seules les extensions de fichiers portant le numéro 0 sont à considérer puisqu'elles représentent les débuts des fichiers. Pour chacune d'elles, un calcul du numéro de piste et de secteur est réalisé en tenant compte de la présence ou non des pistes système. Une division par 9 du nombre de secteurs représentant le numéro de bloc 0, donne alors le numéro de piste comme quotient et

le numéro de secteur comme reste. Afin d'utiliser un algorithme de division très simple pour un dividende tenant sur 8 bits, une soustraction éventuelle d'une valeur de 20 pistes est exécutée au préalable.

Garnissage de la table ZONE

Chaque élément de la table ZONE représente un élément du tableau T$. Le programme force donc la longueur à 32 et l'adresse à l'adresse courante dans ZONE, dans le descripteur de l'élément courant de T$. Chaque élément de ZONE est d'abord rempli par les 16 premiers caractères du catalogue ; on a vu qu'ils devaient être égaux dans tous les cas. Par contre, dans le cas d'un fichier ASCII, les 1 6 caractères suivants ne peuvent pas venir du header, il n'y en a pas ; ils sont remplis par des 0. Pour les autres fichiers, la deuxième partie du header y est recopiée. La reconnaissance d'un fichier ASCII est faite sur la comparaison du premier caractère du header avec le premier caractère du catalogue. Ce procédé très simple ne fonctionne pas si le premier caractère du fichier ASCII est égal au numéro de USER du fichier (très rare).

Le sous-programme LNG calcule la taille en K d'une extension. Cette taille est stockée dans l'octet 17 de l'élément de ZONE, non utilisé par ailleurs.

Un deuxième passage sur le catalogue a pour but de calculer la taille totale des fichiers dans l'octet 17, en y ajoutant celle des extensions portant un numéro différent de 0.

CPC n°20

★ EDITEUR: CPC Revue
★ ANNÉE: 1987
★ CONFIG: ???
★ LANGAGE:
★ LiCENCE: LISTING
★ AUTEUR: Daniel LEBARBIER
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» CAT-DISK    FRENCHDATE: 2015-01-18
DL: 419
TYPE: ZIP
SiZE: 6Ko
NOTE: 40 Cyls
.HFE: Χ

★ 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/c
Page créée en 283 millisecondes et consultée 1791 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.