Obligement - L'Amiga au maximum

Vendredi 21 juin 2019 - 01:29  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

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

 · Articles in english
 · Articles en d'autres langues


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Logiciels
 · Jeux
 · Scène démo
 · Divers


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


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


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


Programmation : Assembleur - Utilisation des CIA pour le lecteur de disquette
(Article écrit par Loïc Far et extrait d'Amiga News Tech - juillet 1991)


Le Complex Interface Adapter, CIA pour les intimes, n'est pas seulement un super-chronomètre, comme certains auraient pu le penser suite à notre article du mois dernier. C'est également par lui que le système contrôle les quatre lecteurs de disquette connectables à l'Amiga.

Bien entendu, notre brave petit CIA ne fait pas tout ; il se contente d'assister le DMA disque, en démarrant le(s) moteur(s), en déplaçant la tête de lecture/écriture, en choisissant la face active et en fournissant au système l'état de certaines broches, indispensable au bon fonctionnement du DOS. Ce qui n'est déjà pas si mal. Le DMA disque se charge, quant à lui, lorsque le lecteur est fin prêt, de la lecture ou de l'écriture des données. Il est capable de synchroniser la lecture avec un mot de contrôle, appelé "SyncWord", usuellement égal à $4489, pour garantir l'alignement des données en mémoire. Le type de codage couramment utilisé est le MFM (comme sur IBM PC ou Atari ST), mais le contrôleur de disquette peut également lire des disquettes codées en GCR (comme sur l'ancêtre Apple II). Il paraît même qu'il serait capable de lire des disquettes 5"1/4 Commodore 64, mais je n'ai jamais eu l'occasion de vérifier !

Encore les CIA ?

Ce sont en fait les deux CIA qui participent à cette tâche ; 4 bits du port A du CIA A (adresse $bfe001, faut-il le rappeler ?) servent d'indicateurs, tandis que carrément 8 bits du port B du CIA B (adresse $bfd100) contrôlent les lecteurs. Pour simplifier, le CIA A est utilisé en entrée et le CIA B en sortie.

Les tableaux donnés le mois dernier ne faisaient que rapidement état de ces bits ; les voici à nouveau, en plus détaillé pour le propos qui nous intéresse.

CIA A, port A ($bfe001). Utilisé en entrée

Bit Nom Fonction
5 RDY Disk Ready. Ce bit passe à 0 quand le moteur du
lecteur sélectionné tourne à sa pleine vitesse.
4 TRACK0 Track Zero Detect. Ce bit passe à 0 quand la tête
de lecture/écriture est positionnée sur la piste 0.
3 WPRO Write Protected. Ce bit passe à 0 si la disquette
présente dans le lecteur est protégée en écriture
2 CHNG Disk Change. Ce bit passe à 0 quand on retire la
disquette du lecteur. Il ne repasse à 1 que lorsque
qu'une disquette est à nouveau insérée et qu'une
impulsion STEP a été transmise.

CIA B, port B ($bfd100). Utilisé en sortie

Bit Nom Fonction
7 MTR Disk Motor Control. Voir note 1.
6 SEL3 Sélectionne le lecteur 3 (DF3:) si présent.
5 SEL2 Sélectionne le lecteur 2 (DF2:) si présent.
4 SEL1 Sélectionne le lecteur 1 (DF1:) si présent.
3 SEL0 Sélectionne le lecteur 0 (DF0:) si présent.
2 SIDE Sélectionne la face. Voir note 2.
1 DIR Sélectionne la direction de déplacement de la tête. Voir note 3.
0 STEP Envoie une impulsion de déplacement à la tête. Voir note 4.

Tous ces signaux, exceptés SIDE et DIR, sont actifs à l'état bas (0).

Note 1 : ce signal est un peu particulier ; il n'a pas d'action immédiate, mais n'est reçu par le lecteur que lorsque celui-ci est sélectionné par SEL3-SEL0. De fait, pour démarrer ou arrêter le moteur d'un lecteur donné, il faut d'abord positionner MTR selon l'opération choisie puis sélectionner le lecteur en question.

Note 2 : SIDE doit être maintenu pendant 100 microsecondes avant une opération d'écriture, et pendant au moins 1,3 milliseconde entre une écriture et un changement de face. 0 sélectionne la face supérieure, 1 la face inférieure.

Note 3 : 0 sélectionne un déplacement vers le centre du disque (la piste 0 est située à l'extérieur du disque). Ce signal doit être mis avant l'impulsion STEP. Deux instructions du microprocesseur sont donc nécessaires.

Note 4 : l'impulsion STEP doit toujours être rapide : inactif, actif, inactif. Les lecteurs Amiga se déplacent d'une piste à l'autre en un maximum de 3 millisecondes. D'autres lecteurs peuvent être plus rapides, d'autres encore plus lents. Lors d'un changement de direction, un minimum de 18 millisecondes est nécessaire entre les deux impulsions STEP.

Attention : messieurs les démomakers, soyez sympas, pensez à ceux qui ont un tout petit peu gonflé leur Amiga ! Avec ma 68020 de compétition, les trois-quarts des démos en chargement par piste (track-loading) refusent de tourner sur mon ordinateur, simplement parce que les délais logiciels (décrémentation d'un compteur) s'exécutent plus rapidement ! Vous avez quatre chronomètres à votre disposition dans les CIA, utilisez-en au moins un pour régler les différents délais nécessaires à la mécanique...

Petits exemples rapides

Pour tous ces exemples, on considère qu'a5 contient l'adresse de base du CIA B, et a4, celle du CIA A. Je vous conseille, pour des raisons de lisibilité, d'utiliser les labels définis dans "hardware/cia.i" et de laisser Devpac supprimer pour vous les offsets inutiles (Cf. ciapra qui est égal à 0).

CIA

Démarrage du moteur de DF0: :

CIA

Arrêt du moteur de DF0: :

CIA

Recherche de la piste 0 du lecteur sélectionné :

CIA

Avance la tête de lecture dans la direction indiquée par DIR :

CIA

Produit un délai suffisamment grand entre deux STEP. Totalement en désaccord avec ce que j'ai dit plus haut, cette petite routine utilise un délai logiciel, alors qu'il faudrait programmer un chronomètre (timer) pour trois millisecondes.

CIA

Teste si le lecteur sélectionné est prêt à lire ou à écrire :

CIA

La place étant limitée, vous retrouverez toutes ces routines, ainsi que d'autres, dans le programme d'exemple du prochain numéro. Nous en profiterons pour programmer un véritable délai totalement compatible, en utilisant nos connaissances sur les chronomètres du CIA, engrangées le mois dernier. D'ici là, essayez de vous documenter sur le codage MFM, vous verrez, ce n'est pas triste.


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