Obligement - L'Amiga au maximum

Lundi 02 juin 2025 - 04:05  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in English


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


Programmation : Assembleur - Routine de délai matériel
(Article écrit par Loïc Far et extrait d'Amiga News Tech - novembre 1991)


Quelques abonnés ont été déçus de ne pas trouver, dans mon article traitant des lecteurs de disquette, la routine promise de délai matériel (à grands coups de CIA) permettant de temporiser le déplacement de la tête de lecture de piste à piste. D'autres, plus mesquins, auraient souhaité trouver plus d'informations d'une part sur le codage MFM, d'autre part sur l'utilisation du Blitter pour le décodage des données.

A tous ceux-là, je tiens d'abord à adresser mes excuses les plus plates, à défaut des plus sincères, et à rappeler ce que j'avais alors dit dans : décoder le format MFM au Blitter relève à mon avis de l'hérésie. Cela revient à se limiter volontairement à charger des données en mémoire Chip, alors qu'en utilisant le 68000, on peut utiliser un tampon mémoire de piste se trouvant n'importe où en mémoire. De plus, du fait du délai nécessaire au moteur pas à pas pour déplacer la tête de lecture/écriture, le temps gagné serait tout de suite perdu à attendre que celle-ci soit effectivement positionnée sur la piste suivante. Sans oublier que le Blitter peut toujours être utilisé pour autre chose pendant ce temps-là, par exemple pour une animation graphique pendant le chargement. Enfin, il faut bien reconnaître ce qui est, le décodage MFM est beaucoup plus facile à réaliser au 68000 !

Cela dit, voici un tout petit bout de programme assembleur qui initialise le chronomètre A du CIA B et compte exactement tous les trois millisecondes, soit le temps minimum recommandé par les ingénieurs de chez Commodore Amiga. Cet exemple ne fonctionne pas tel quel, et il vous faudra l'insérer correctement dans le programme se trouvant dans cet article.

assembleur

Voilà, ce n'était vraiment pas grand-chose, et je m'en veux de ne pas l'avoir tout de suite fait dans le programme concerné.

MFM

Vous les aviez demandées, voici quelques informations complémentaires sur le format MFM et sur la manière dont l'Amiga enregistre ses pistes et secteurs sur la disquette. D'abord, le format MFM lui-même. Rappelons que ce format est destiné à éviter toute erreur de synchronisation lors de la lecture et de l'écriture des données, en insérant un bit de synchronisation entre chaque bit de donnée. Qui plus est, on code d'abord les bits impairs puis ensuite les bits pairs, dans deux tampons mémoire consécutifs en mémoire.

Donc, pour décoder un bloc de données, il suffit d'utiliser la routine suivante :

assembleur

Le codage est beaucoup plus délicat et ne sera pas abordé maintenant. Si vraiment vous désirez savoir comment procéder, écrivez-moi des tonnes de lettres, j'adore me faire injurier. J'avoue humblement ne m'être jamais attaqué à ce côté du problème mais qui sait, avec un peu de bonne volonté, on arrive à tout.

Un mot de synchronisation particulier est placé devant chaque secteur, qui permet au DMA d'en reconnaître exactement le début. Ce mot est une valeur MFM bidon, c'est-à-dire qui ne correspond à aucun codage possible (de cette manière, on est sûr qu'il s'agit bien d'une marque de synchronisation et non d'une donnée du secteur). AmigaDOS utilise le mot $4489, mais n'importe quel autre mot "bidon" ferait tout aussi bien l'affaire.

Les pistes

Une piste contient 11 secteurs constitués d'une zone d'informations diverses de 32 octets suivis d'une zone de données de 512 octets. La piste elle-même est précédée d'un GAP d'environ 700 octets. Je dis "environ" parce que sa taille peut varier suivant la position de la piste (près du centre ou au contraire de l'extérieur) sur la disquette. Le GAP lui-même ne sert strictement à rien pour le DOS, mais permet d'éviter, à l'écriture de la piste, que les dernières données écrites n'écrasent les premières (n'oubliez pas qu'une piste est circulaire !). Si on additionne tout ceci, on obtient une longueur de 700+(2*(11*(32+512)))=12 668 octets MFM par piste.

Voici résumé dans un tableau le format exact d'un secteur codé.

Décalage Valeur Signification
0 $aaaa Premier mot du secteur
2 $aaaa Second mot du secteur
4 $4489 Premier mot du synchronisation
6 $4489 Second mot de synchronisation
8 xxxxx ID secteur (bits impairs)
12 xxxxx ID secteur (bits pairs)
16 xxxxx Données AmigaDOS (bits impairs)
32 xxxxx Données AmigaDOS (bits pairs)
48 xxxxx Somme de contrôle de l'entête (bits impairs)
52 xxxxx Somme de contrôle de l'entête (bits pairs)
56 xxxxx Somme de contrôle des données (bits impairs)
60 xxxxx Somme de contrôle des données (bits pairs)
64 xxxxx Données (bits impairs)
576 xxxxx Données (bits pairs)

Comme on le voit, si l'on veut décoder tout ça, il faut procéder en quatre étapes : d'abord l'ID secteur, ensuite la somme de contrôle de l'entête, puis la somme de contrôle des données, et enfin les données elles-mêmes. La routine MFMUncode du programme de l'article du n°25 gérait tout cela et vérifiait en même temps la validité des deux sommes de contrôle.


[Retour en haut] / [Retour aux articles] [Article précédent]