Obligement - L'Amiga au maximum

Vendredi 19 avril 2024 - 03:42  

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 - 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 décalages 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]