CODING ★ Gestion d'erreurs des routines disques ★

Bidouilles ACPC n°40 - Gestion d'erreurs des routines disques

ET LES KEUFS ET LES MEUFS DANS LE RER

Ceci concerne la gestion d'erreurs des routines disques des mois derniers. NDPoum :Je vous signale que Sined voulait faire un jeu de mots avec erREuR. Heureusement que je suis là pour tout vous expliquer car personne, je dis bien personne, ne l'aurait compris. NDSined : S'il faut tout te mâcher le travail, je vais me racheter un dentier.

Pour vous parler des routines, elles ne font aucunement appel au système et nécessitent donc des sous-programmes spéciaux. Nous allons les voir ici. Cela en finira avec la gestion du disque. Ensuite, nous verrons bien d'autres sujets du genre compression de fichiers et programmes, gestion des sons... Bref. nous découvrirons encore de nouveaux horizons, tant que votre courrier nous soutiendra.

Nous disions donc que les routines de lecture et d'écriture ne gèrent pas les statuts d'erreurs qu'elles récupèrent. Cela est dû au fait que tout fonctionne ainsi si vous faites attention et que le gain de place généré ne peut être que gratifiant au regard du code à ajouter. Comme des malintentionnés finissent toujours par venir semer la zone dans des manipulations étranges, voici les détournements d'erreurs.

FDC
STRIKES BACK

Comme vous l'avez vu, dans les routines de lecture et d'écriture, le FDC nous renvoie un statut comprenant l'état du lecteur après la dernière opération. Il est obligatoire de lire ce statut, sans quoi le FDC fait la grève du zèle en signifiant que ces états doivent être lus et que dans le cas contraire, il ne fera rien d'autre que patienter sans relâche. Cette poignée d'octets qu'il veut absolument nous remettre s'appelle la phase résultat. C'est le moment où il est possible de savoir ce qui s'est réellement passé. Une erreur comme un lecteur vide ou une protection en écriture sera rapportée illico. Ces informations sont lues et stockées à l'adresse RES dans nos programmes d'exemples. Ces sept octets ont une signification précise dont voici le commentaire concis.

  • Les trois premiers octets sont les registres d'état de 0 à 2 du FDC. Nous les décortiquerons plus loin (adresse RES+0 à RES+2).
  • Le quatrième octet est le numéro de piste en cours (RES+3).
  • Le cinquième est le numéro de tête qui est obligatoirement zéro sur CPC (RES+4).
  • Le sixième est le numéro du dernier secteur vu par le contrôleur (RES+5).
  • Le dernier est la longueur de ce dernier secteur (RES+6).

En ce qui concerne nos trois registres d'état. ils contiennent des bits plus époustouflants les uns que les autres. Faites des essais et vous verrez. Cela change tout le temps selon les erreurs déclenchées. Par souci de ludisme et pour ne pas vous prendre la tête avec des listes sans fin ni sens, nous avons isolé certains de ces drapeaux pour vous mâcher le travail. En voici la liste.

BITS
A TOUT VA

Comme dirait notre regrettée Boisson: « De quoi passer plus d'une nuit fatigante!!! ». Nous allons donc commencer par le commencement..

Le premier registre (RES+O) est assez porté sur le matériel. C'est lui qui vous dira si tout est prêt ou non au niveau du hardware. Normalement, il doit être égal à &40 (le bit 5 mis à 1 signale que la dernière commande est achevée) pour le lecteur A et &41 pour le B. Viennent ensuite les autres bits. S'ils sont non nuls, il y a de fortes chances pour qu'une belle erreur soit arrivée.

Le bit 3, particulièrement, permet s'il est à 0, de ne pas douter de la présence d'une disquette dans le lecteur. S'il est à 1, le drive est presque certainement vide. Les deux bits de poids faible donnent le numéro de lecteur sélectionné (A=0 et B=1), Si un autre bit que les 0, 1, 3 ou 5 pointe le bout de son nez, attention à l'erreur inconnue.

Le second registre (RES+ 1) est le plus intéressant. C'est lui qui nous renseigne le mieux sur les diverses erreurs qu'il est possible de rencontrer lors des lectures-écritures de disquette. Son bit 7 n'est pas à prendre en compte car il représente le témoin de fin de piste et se positionne aussi au moment de la lecture de tous les secteurs d'une piste. Le bit 2 (valeur 4) passe à 1 lorsque le nom du secteur demandé n'a pas été trouvé sur la piste. C'est très pratique pour remarquer que le format de la disquette n'est pas celui demandé par notre routine. Le bit 1 (valeur 2) est à 1 après une commande d'écriture si la disquette est protégée. Le bit 0 (valeur 1) est à 1 si la disquette n'est pas formatée.

Le troisième registre (RES+2) contient l'état des erreurs graves. Si un de ses bits passe à 1, c'est que la disquette est défectueuse. Cela peut provenir d'une erreur de checksum, d'une démagnéti
sation, d'une tasse de café, d'un cheveu ou d'un poil, bref: plantouille totale et le FOC dans le cirage.
Voilà qui clôt les messages d'erreurs. Voici tout de même quelques exemples d'utilisation.

TESTS
ET REMEDES

Voici quelques exemples de chaînes d'état renvoyées par le FDC (PP=piste, SS=secteur, LL=lecteur) :

40 00 00 PP SS 00 LL

Pas de problème, Batman, tout s'est bien passé.

40 80 00 PP SS 00 LL

Idem, la fin de piste est sûrement due à la lecture de tous les secteurs.

40 04 00 PP SS 00 LL

Il me semble, mon ami, que la disquette est protégée.

40 01 00 PP SS 00 LL

Faut tout de même pas oublier de formater la disquette avant de l'utiliser.

48 00 00 PP SS 00 LL

Sans disquette, il est sûr que cela marche beaucoup moins bien.

Voici les quelques états que nous avons pu récolter à force d'essais dans des conditions plus ou moins scabreuses. Jamais d'autres erreurs ne nous sont parvenues. Les seules qui auraient pu se produire n'arrivent pas dans des conditions normales d'utilisation, alors pourquoi s'en occuper.
Récapitulons donc tout cela.

  • RES+0 = &40 : tout va bien.
  • RES+0 = &48 : lecteur vide.
  • RES+0 = autre: réessayer après initialisation du contrôleur (on ne sait jamais avec ces bêtes-là).
  • RES+1 = 0 ou 80 : tout va bien.
  • RES+1 = 4 : secteur non trouvé.
  • RES+1 = 2 : disquette protégée.
  • RES+1 = 1 : disquette vierge.
  • RES+1 = autre: réessayer quelques fois.
  • RES+2 <> 0 : mieux vaut une disquette de plus à la poubelle que des données perdues.

A vous de jongler avec les AND, les CMP, les &BB5A et les j'en passe. C'est ici que s'achève notre tâche didactique et que commence votre soif de programmation. Amusez-vous bien. J'espère tout de même que ces routines vous seront agréables et utiles.

DISQUETTES ET FICHIERS

Nous avons rapidement passé en revue, le mois dernier le fait qu'il était possible de cloisonner une disquette brute de formatage en fichiers. Pour cela, il faut réserver une zone de quelques secteurs sur la disquette pour y stocker les noms de fichiers ainsi que la taille de ceux-ci et surtout leurs emplacements sur disque. Vous devrez donc aussi vous fabriquer un mini système chargé d'amener une bonne quantité de secteurs en mémoire en fonction de l'appel d'une entrée du répertoire. Voici un exemple de structure de directory :

  • 12 octets pour le nom du fichier.
  • 2 octets pour sa taille.
  • 2 octets pour son adresse d'implantation en mémoire.
  • 48 octets contenant les numéros des secteurs absolus formant le fichier.

Il ne sera pas possible, avec cette technique, de stocker des fichiers de plus de 48 Ko, ce qui est rare, et pour deux secteurs réservés, 32 entrées de répertoires seront disponibles. A vous de régler votre directory à vos besoins. Soit plus de secteurs réservés, soit une gestion de fichiers plus petits (32 octets pour les numéros des secteurs formant le fichier et trois secteurs réservés permettent de disposer de 64 entrées).

C'est comme tu veux tu choises. Si vous vous faites un zibou paramétrable, rien ne vous empêchera de travailler avec de multiples possibilités de codage stockable dans la première entrée. Laissez donc vagabonder votre imagination.

JOYEUX NOEL

Après les vacances, c'est tout de suite Noël. Je vous le souhaite donc bon d'avance en espérant que le père du même nom (aga) sera sympa avec vous.

En ce qui nous concerne, nous passerons en revue les différents procédés de compactage de données et de fichiers. Que ces méthodes se nomment Lempel, Ziv, Welch, Huffman, Binaire, RLE ou encore un mélange finement dosé de ces quelques noms, elles ne seront bientôt plus si secrètes qu'elles y paraissent.

En attendant, il est cinq heures, Paris s'éveille et moi, je m'en vais me coucher. A plus...

Sined le Barbare, ACPC n°40, sept/oct91, p38-38

Page précédente : Bidouilles ACPC n°39 - Gestion directe du FDC 765

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

Lien(s):
» Coding » Bidouilles ACPC n°35 - Disk Court
» Coding » Bidouilles ACPC n 04 - Le PSG (1/2)
» Coding » Assembleur ACPC n°33
» Coding » Bidouilles ACPC n°39 - Gestion directe du FDC 765
» Coding » Assembleur ACPC n°18
» Coding » Assembleur ACPC n°16: Organisation des pixels à l'écran
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 289 millisecondes et consultée 1983 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.