CODING ★ GESTION DU FDC ★

Bidouilles ACPC n°37 - FDC en mode direct

FAN DE CHICHOUNE

Le mois dernier, nous avons commencé à voir les possibilités réelles qu'offre le FDC lorsqu'on le programme en mode direct. Les initialies FDC peuvent prendre bien des formes comme fan de chichoune (chère à notre jeune, beau et talentueux illustrateur Yann Serra), mais je vous signale que FDC signifie aussi fils de chien, face de craie et, accessoirement, faignasse doublée de chieuse, dans le cas où ce cher composant ne réagirait pas comme on le voudrait bien, ce qui n'est pas rare.

En attendant, nous nous contenterons d'appeler le 765 courtoisement du nom de floppy disk controler, histoire de ne pas trop le vexer. Les insultes viendront plus tard, lorsqu'il s'agira de travailler sur les lectures-écritures de secteurs. Les détournements d'erreurs seront dans ce cas assez « je te prends le chou et je garde la main histoire de planter le machin », ce qui peut occasionnellement irriter quelque peu un brave programmeur armé de bonnes et honnêtes intentions. Ce mois-ci, nous allons revenir sur le listing du mois dernier en voyant les commandes passées alors en revue, mais avant il nous faut nous attarder sur quelques détails relativement importants.

Prenez donc le listing du mois dernier et attardez-vous sur la ligne contenant le label SECT. Il contient la liste des noms des secteurs tels qu'ils seront écrits physiquement sur la piste. Lorsqu'on parle de liste, il est possible de la traiter de deux façons différentes. La première est la logique (1, 2, 3, 4 et 5). C'est'celle qui, comme son nom l'indique, vient la première à l'esprit. C'est aussi l'ordre dans lequel seront lues les données de manière normale. Dans la théorie, ce genre de choses est parfaitement concevable mais, dans la pratique, il existe certaines contraintes incontournables qu'il faut prendre en compte, surtout lorsqu'on veut obtenir des résultats performants. Si vous voulons lire les secteurs 1,2 et 3 d'une piste quelconque à la suite les uns des autres, voici comment procéderont physiquement le FDC et le Z80:

  • Ordre de lecture du secteur 1.
  • Lecture des identificateurs jusqu'à ce que celui du secteur 1 soit trouvé.
  • Synchronisation sur les données après le GAP 3.
  • Transfert des données vers le Z80.

Cette opération se répétant trois fois. Un des temps les plus encombrants de cette manipulation est celui pris par l'ordre de lecture. En effet. après la lecture d'un secteur, et dans le cas d'un formatage avec l'ordre logique, l'identificateur du second secteur est passé lorsque le FDC commencera sa recherche. Il faudra donc un tour de disquette supplémentaire pour retomber sur la zone de données attendue. Par contre, si l'ordre de formatage des secteurs est par exemple 1, 4, 2, 5 et 3, le premier identificateur rencontré après la lecture du premier secteur et après l'ordre de recherche du second est bien le secteur numéro 2. C'est l'identificateur du secteur 4 qui sera alors perdu lors de la commande de recherche de l'identificateur 2. La lecture sera donc lancée immédiatement après l'ordre, cela presque comme si les lecteurs se suivaient directement. non .pas physiquement mais logiquement.

L'effet désiré est donc obtenu, ce qui n'est pas si mal. Vous pouvez voir aussi qu'avec cet ordre physique, le passage entre les secteurs 3 et 4 se fait par le saut du secteur 1, ce qui évitera encore une rotation complète du support avant lecture. Voilà pourquoi la théorie n'est parfaite que lorsqu'elle est utilisée de paire avec la pratique. Bref, la théorie n'est pratique que lorsqu'elle est parfaite.

LANGUAGE HAIFDESSIEN

La Haifdessie, comme la Massoumipourie orientale, est une contrée sauvage où il est encore possible de trouver des tribus sous-développées, sous-alimentées, sous-industrialisées mais étrangement. sur abreuvées d'alcools forts et de luxure. Le danger et la peur règnent en maîtres absolus dans ces déserts arides, et la moindre erreur de l'aventurier commun est fatale à sa vie. Pour être sûr de ne pas perdre la tête pour un petit bit. il faut connaître le langage des chasseurs d'octets. Voici, pour ne pas vous laisser sur votre faim, les rudiments de ce dialecte salvateur.

La première des commandes utilisées dans le listing est la commande nommée Calibrate. Elle permet de positionner la tête de lecture sur la piste 0 et ainsi d'initialiser le moteur pas à pas de déplacement piste à piste. Il faut pour l'exécuter, envoyer deux octets au FDC. Le premier est l'ordre 7 et le second permet de sélectionner le lecteur désiré.

0 correspond au lecteur A et 1 au lecteur B. Ainsi, si les octets 7 et 0 sont transmis au contrôleur, le lecteur A devra se réinitialiser. Seulement, le temps de réaction du moteur pas à pas n'est pas si bref qu'il y paraît. Il faut tout de même que la tête de lecture arrive en butée, ce qui ne se fait pas à la microseconde. Pour être sûr que cette opération a bien été réalisée et que tout s'est passé sans erreur, il faut la faire suivre de la commande qui est relative au dernier lecteur sélectionné et donc par défaut. Tant que la tête n'est pas stabilisée à la position demandée, la réponse du FDC' sera toujours du type « minute, y'en a des qui bossent ». Lorsque les signaux deviennent corrects, le FDC donne son feu vert pour tout ordre de recherche d'identificateurs ou toute lecture-écriture de secteurs. A ce moment-là, il est même possible de vérifier le statut du lecteur ainsi que la piste atteinte et donc courante. Deux octets sont alors renvoyés. Le premier est le registre d'état numéro 1 et renferme les .données suivantes:

  • Bit 0 (Missing adress mark) : s'il est à 1, la piste sous la tête est vierge ou suffisamment endommagée pour ne pas être reconnue.
  • Bit 1 (Disquette protégée) : si la disquette est protégée alors ce bit passe à 1.
  • Bit 2 (secteur invalide) : si le secteur recherché n'est pas trouvé ou bien si un identificateur est endommagé, ce bit passe à 1.
  • Bit 4 (overrun) : si vous avez trop traîné pour envoyer vos données au FDC, il vous envoie délicatement paître et vous le fait savoir par ce bit à 1.
  • Bit 5 (CRe) : si une erreur de magnétisme et donc de checksum est découverte, ce bit joue au rapporteur en passant à 1 (gnia gnia gnia !)
  • Bit 7 (track end) : si la disquette tourne en rond pour rien après des commandes de recherche, ce bit se met à 1, histoire de dire que le FDC en a encore marre (pas patient l'animal).

Le second octet renvoyé par le contrôleur est le numéro de piste courante. Il est ainsi simple de demander à tout moment où on en est sur la disquette et de vérifier si cela coïncide avec nos désirs.
La troisième commande utilisée est la 4. Suivie du nom du lecteur comme pour la commande 7, elle penmet d'avoir accès au registre d'état 3 dont voici la composition:

  • Bit 0 et 1 : lecteur sélectionné (de 0 à 3 pour A à D).
  • Bit 2 : indique la tête sélectionnée (sur CPC toujours 0)
  • Bit 3 : précise si le lecteur est simple ou double face (sur CPC on s'en fout, car il est impossible d'utiliser la seconde vu qu'elle n'est pas branchée).
  • Bit 4 : ce bit est à 1 si la tête est en piste O.
  • Bit 5 : si le lecteur est prêt, ce bit est à 1.
  • Bit 6 : si la disquette est protégée, ce bit passe à 1.
  • Bit 7 : en cas de faute quelconque, voire de commande mal déroulée, ce bit est obligatoirement à 1.

La quatrième commande que nous avons appelée est la commande &4D.

C'est celle qui donne l'ordre de formatage, Elle est suivie des paramètres suivants :

  • Octet 1 : les bits 0 et 1 sélectionnent le lecteur et le bit 2 la tête (ce dernier sera toujours à 0),
  • Octet 2 : représente la longueur en octets des secteurs. 1 pour 256, 2 pour 512, 3 pour 1 024, 4 pour 2 048, 5 pour 4 096 et 6 pour 8 192. Ce dernier formatage sert plutôt à débarrasser une piste de ses identificateurs et donc à la déformater.
  • Octet 3 : nombre de secteurs sur la piste.
  • Octet 4 : longueur de GAP. C'est la longueur de la zone neutre séparant les données de fin de secteur de l'identificateur du secteur suivant. Cela permet de compenser les différences de vitesses de rotations inhérentes au matériel et d'éviter ainsi les problèmes d'écrasement d'informations. Si lors de l'écriture d'un secteur, le lecteur tourne un peu plus vite que lors du formatage, la place prise par les données écrites sera plus grande que lors de la première opération. Vous entrevoyez les conséquences. Faites un essai en donnant une valeur faible à ce GAP et vous ne serez pas déçu.
  • Octet 5 : cet octet servira à remplir les secteurs fraîchement formatés. C'est donc l'octet de remplissage.

La dernière commande passée en revue est la 15. Suivie de l'octet de sélection de lecteur, elle permet le déplacement de la tête sur une piste quelconque. Elle doit, comme la commande de recalibrage (7) être suivie de la commande 8 permettant d'assurer la bonne fin des opérations et l'arrivée à destination de la tête chérie.

THAT'S ALL FOLKS

Le mois prochain, nous finirons de voir ce genre de bêtises et passerons au stade plus casse-bonbon de la lecture et de l'écriture. En attendant. prenez des vacances car la rentrée sera rude. Everybody, see you soon...

Sined le barbare, ACPC n°37, p46-47

Page précédente : Bidouilles ACPC n°36 - Direct disk Access

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

Lien(s):
» Coding » Assembleur ACPC n 05 - Initiation
» Coding » Assembleur ACPC n°49: Assemblez vos vumetres
» Coding » Bidouilles ACPC n°47 - Les vecteurs system (5/6)
» Coding » Bidouilles ACPC n°03 - Catalogue décorés
» Coding » Assembleur ACPC n°38 - Assembleur
» Coding » Bidouilles ACPC n°20 - Déviation du Ctrl Shift Esc.....
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 326 millisecondes et consultée 2283 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.