CODING ★ Formatage de bronze ★

Bidouilles ACPC n°33 - Formatage de bronze

Aujourd'hui, nous verrons comment le FDC 765 (floppy disk contrôler seven six five, ouaneugaine) fait pour formater une disquette à l'aide de son petit silex des temps modernes. En attendant, à vos maillets...

Je bronze, tu bronzes, il bronze, nous bronzons, vous bronzez, ils s'égarent. Nous sommes ici pour parler du lecteur de disquettes du CPC et non de cette période préhistorique au cours de laquelle s'est diffusée la métallurgie du bronze (3e millénaire), précédant l'âge du fer (vers 1 000 avant J.-C). Le bronze est, pour les incultes, un alliage de cuivre (beaucoup) et d'étain (point trop n'en faut), tout ça le Petit Larousse millésime 1990 dixit. Que voulez-vous, parler du soleil, cela me fait toujours chaud au coeur (tu déconnes papy, t'as le sein gauche qui trempe dans'la soupe). Pour commencer, voici le but avoué de cet article : nous tenterons de forcer le FDC à nous formater une disquette, en passant par l'Amsdos (Amstrad disk operating saloperie). Avant cela, il nous faut présenter le support et tout ce qu'il peut comporter comme sous-ensembles. Une disquette est un petit disque, comme son nom l'indique, contenant des pistes. Une piste est à visualiser comme un cercle ayant pour centre celui de la disquette. Lorsque nous disons visualiser, c'est une image. Les cercles ne sont pas physiquement mais abstraitement visibles, puisque magnétiques. De ces cercles, il faut une bonne quarantaine pour remplir la totalité du support. Vous me direz, des .pistes, c'est bien beau, mais qu'est-ce qu'on en fait ? A cela, je ne vous répondrai rien. Ou plutôt, je vous répondrais « rien ». Le FDC. sur chaque piste, et dans le mode Amsdos, découpe neuf petits morceaux. Ceux-ci s'appellent secteurs et sont composés de 512 octets. Voilà qui est présenté. Vous devez penser que cette prise en main est un peu concise et simpliste, mais si nous commençons à parler des GAPs, des IDs, des plages de synchronisation... j'en connais plus d'un qui seront dans le gaz, et je pèse mes bonbonnes.

Programmer une routine de formatage n'est pas si compliqué, si on connaît le mode d'appel des RSX situées dans la ROM 7, soit celle du système disque. Nous vous avons déjà parlé de ce genre d'appels lors des bidouilles des mois précédents. Il faut passer par le RST &18 situé en bas de mémoire, qui, s'il est suivi des bonnes valeurs, appelle des routines dans la ROM sélectionnée.

Quoi de neuf, secteur ?

Je crois que ce coup du lapin vous a déjà été fait avec les vecteurs mais je n'en suis plus sûr. Lors d'un formatage utilisant le système, il n'est pas simple d'intervenir sur les tables de paramétrages situées en Ram, dans les variables de l'Amsdos. De ce fait, il est préférable de ne pas bousculer ces zones si sensibles et capables d'influencer si monstrueusèment des opérations normalement sans problème. Nous décidons donc de travailler en mode standard, sans risque ni angoisse. Il ne nous sera donc pas possible de modifier le nombre de secteurs par piste, la taille des secteurs ou tout autre paramètre. Seul le nombre de pistes est modifiable facilement. Pour des raisons de manipulation, nous ne vous proposons qu'un formatage de type DATA, le plus simple à mettre en oeuvre. Dans le format CP/M, il faut copier les deux premières pistes d'une disquette système ainsi qu'un fichier de commandes. A vous de vous amuser à mettre au point ce genre de programme si vous utilisez le CP/M.

Deux routines en une

Le programme que nous vous proposons est en fait constitué de deux. Regardez de près la routine FINDRSX qui permet de stocker les valeurs nécessaires à un RST &18 ne contenant qu'un code, comme ceux de la ROM 7. Elle permet, si vous l'appelez avec le numéro de RSX dans A (de &81 à &89) et l'adresse de réception des données dans IX (3 octets), de préparer des buffers d'appel. Ils contiendront un mot où est stockée l'adresse de la routine et un octet de sélection de ROM.

La seconde routine permet de lancer le moteur du lecteur, initialiser le tampon d'appel de la commande de formatage de piste et le nombre de cel les-ci. Si cette valeur est 40, elle finit en 0 ce qui nous donne 41 pistes effectives. A partir du label TRACK, les données nécessaires à l'initialisation des secteurs sont mises à jour en fonction du numéro de piste en vigueur. Pour que la commande FORMAT fonctionne normalement il faut que le double registre HL pointe sur un tampon contenant les informations relatives aux secteurs à créer, que D détienne le numéro de piste et que E sélectionne le lecteur ( 0=A, 1 = B ). Dans ces conditions, le RST &18 peut être appelé, suivi d'un mot contenant l'adresse du tampon d'appel. Cela fait, il est enfin possible de passer à la piste suivante, si ce n'est pas la dernière, soit la 0.

L'étiquette RSX sert à stocker le code du RSX à appeler. FORMAT est le tampon d'appel de la commande portant le même nom, LECTEUR contient le numéro de lecteur dans lequel est la disquette à formater et enfin PISTE, comme son nom l'indique, sert à garder le numéro de piste en cours. TABFORM indique le début de la table de formatage où NUMERO et TETE ne sont que les valeurs utiles à l'assemblage. Suit la configuration des neuf secteurs à écrire.

A vos ordres mon capitaine

Comme vous pouvez le remarquer dans la table de formatage, nous disposons de 4 octets pour définir un secteur. Le premier est le numéro de piste, le second, le numéro de tète pour les lecteurs double face, le troisième est le nom physique du secteur et le dernier représente sa taille (1 = 256, 2 = 512, 3 - 1024, 4 = 2048 et 5 = 4096). Notez qu'il n'est pas possible de modifier ce dernier paramètre sans régler préalablement les variables systèmes. Tenons-nous en pour le moment à ce simple formatage. N'avez-vous rien remarqué de suspect dans l'ordre des noms de secteurs qui, au lieu de croître logiquement, se font un plaisir de se mélanger amoureusement ? Cette forme de suite illogique s'appelle l'entrelacement. C'est dû au fait suivant :

Lors de la lecture du premier secteur (par exemple &C1), le microprocesseur se charge de faire transiter les données du lecteur vers la mémoire. Cela fait, il lui faut travailler un brin pour savoir où il en est Pendant ce temps, la disquette tourne quelque peu. Lorsque le Z80 revient pour lire le second secteur (&C2), il ne trouve pas son identificateur avant une rotation complète de la disquette, si l'ordre de ces secteurs sont logiques. Avec un arrangement tel que celui de notre source, lorsque le Z80 revient, il se trouve dans le secteur &C6 et ne rate donc pas l'annonce du secteur &C2 qu'il peut lire immédiatement Pas con, l'entrelacement. Essayez de modifier cet ordre et vous verrez les différences de vitesses de travail... C'est pas triste.

See you to the end

A plus, bande de petites graisseuses et bande de petits graisseux, et comme dirait mon grand-père, que le formatage vous soit bénéfique. Mieux vaut un bon allié qu'un mauvais ennemi.

Sined le barbare, ACPC n°33 Jan91

Page précédente : Bidouilles ACPC n°32 - Bip, son and sound

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 152 millisecondes et consultée 1747 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.