Obligement - L'Amiga au maximum

Vendredi 06 juin 2025 - 12:53  

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

 


Dossier : Les CIA (généralités)
(Article écrit par Loïc Far et extrait d'Amiga News Tech - juin 1991)


Nous entamons ce mois-ci une nouvelle série sur le matériel de l'Amiga. Depuis le Copper jusqu'au Blitter, en passant par les sprites et le DMA disque et audio, nous verrons ensemble ces merveilleux composants électroniques qui font de l'Amiga le meilleur ordinateur du moment.

Vous avez déjà sans doute pu voir à droite et à gauche - surtout à gauche - des articles sur ce sujet, et vous êtes gavés des barres de Copper, des BOB et autres tracés de droites... Bien sûr, nous n'y échapperons pas, mais l'approche sera différente. Plutôt que de nous contenter d'une description bête et méchante des puces, telle que l'on peut en trouver dans le RKM Hardware ou la Bible de l'Amiga, nous nous attacherons à mettre en oeuvre certaines particularités dudit matériel.

CIA
CIA 8520A-1 présent dans les A1000, A2000 et A500

Et pour commencer en beauté, nous allons voir de plus près l'utilisation et la programmation de ce fameux CIA 8520 dont l'Amiga est doublement équipé.

Généralites

Il en faut tout de même... Le CIA est un Complex Interface Adaptor. En d'autres termes et plus simplement, c'est un circuit capable de gérer plusieurs choses en même temps. Ainsi, il est équipé de deux ports parallèles 8 bits, d'un port série bidirectionnel, de trois minuteries dont deux 16 bits et une 24 bits et d'une fonction d'alarme. Il est capable de libérer des interruptions processeur lorsqu'un évènement particulier intervient (port série plein ou vide, minuterie à 0). L'Amiga est équipé de deux CIA, communément appelés CIA A pour le premier, et CIA B pour le second.

Le CIA est équipé de 16 registres 8 bits programmables, accessibles par le processeur par une simple instruction MOVE. Ces 16 registres contrôlent évidemment les fonctions du 8520. Nous verrons chacun de ces registres le moment venu, mais vous devez d'ores et déjà savoir qu'ils sont accessibles depuis les adresses $BFE001 (CIA A) et $BFD000 (CIA B), avec un espace de 256 octets entre chaque registre (par exemple, le registre 10 du CIA A est à l'adresse $BFE001+(256*10)=$BFEA001 : le registre 15 du CIA B est à l'adresse $BFD000+(256*15)=$BFDF00).

Les ports parallèles

Comme mentionné plus haut, le CIA dispose de deux ports parallèles 8 bits programmables, accessibles par les registres 0 et 1. respectivement, et baptisés PRA et PRB. Les registres 2 et 3, appelés DDRA et DDRB, contrôlent la direction des données pour chacun des bits du registre PR correspondant. Si un bit de DDR est mis à 1, le bit correspondant de PR est une sortie, sinon, c'est une entrée (pour le CIA A, évidemment, et non pour le processeur).

Ces quatre ports parallèles sont évidemment utilisés par l'Amiga, comme le montrent les tableaux suivants :

CIA A PRA ($BFE001)
(Bit - Nom - Fonction)
  • 7 - FIR1 - Bouton de feu de la manette (0=appuyé).
  • 6 - FIR0 - Bouton gauche de la souris (0=appuyé).
  • 5 - RDY - Drive ready (lecteur de disquette prêt) (0=prêt).
  • 4 - TK0 - Tête de lecture en piste 0 (0=piste 0).
  • 3 - WPRO - Disquette protégée en écriture (0=protégée).
  • 2 - CHNG - Changement de disquette (0=disquette changée).
  • 1 - LED - Contrôle de la diode d'alimentation (filtre passe-bas).
  • 0 - OVL - Contrôle du recouvrement ROM/RAM (0=RAM).
DDRA est initialisé à 0x03 (LED et OVL en sortie, tous les autres bits en entrée).

CIA A PRB ($BFE101)

Les huit bits sont utilisés pour les données de l'interface parallèle.

DDRB peut être initialisé à 0 ou à 0xFF suivant le sens de la tranmission.

CIA B PRA ($BFE101)
(Bit - Nom - Fonction)
  • 7 - DTR - Interface sérielle, sortie DTR.
  • 6 - RTS - Interface sérielle, sortie RTS.
  • 5 - CD - Interface sérielle, sortie CD (détection de porteuse).
  • 4 - CTS - Interface sérielle, sortie CTS.
  • 3 - DSR - Interface sérielle, sortie DSR.
  • 2 - SEL - Contrôle interface parallèle.
  • 1 - POUT - Paper Out (imprimante).
  • 0 - BUSY - Imprimante occupée.
DDRA est initialisé à 0xFF (tous les bits en sortie).

CIA B PRB ($BFD100)
(Bit - Nom - Fonction)
  • 7 - MTR - Contrôle du moteur du lecteur de disquette.
  • 6 - SEL3 - Sélection lecteur de disquette 3.
  • 5 - SEL2 - Sélection lecteur de disquette 2.
  • 4 - SEL1 - Sélection lecteur de disquette 1.
  • 3 - SEL0 - Sélection lecteur de disquette 0.
  • 2 - SIDE - Sélection de la face de la disquette.
  • 1 - DIR - Sélection de la direction du moteur du lecteur de disquette.
  • 0 - STEP - Contrôle du pas du lecteur de disquette.
DDRA est initialisé à 0xFF (tous les bits en sortie).

Le port A du CIA A est multifonctionnel (bouton feu de la manette, bouton gauche de la souris, contrôle disquette, diode de mise sous tension et recouvrement disquette) tandis que son port B est entièrement dédié aux données de l'interface parallèle.

Le port A du CIA B contrôle les interfaces série (contenue dans Paula) et parallèle, tandis que son port B est entièrement dédié au contrôle des lecteurs de disquette (en supplément au port A du CIA A).

Le port série

Attention, ne confondez pas : le port série du CIA n'est pas celui de la RS232, qui est émulée par Paula.

Le port série du CIA est accessible par son registre numéro 12. Celui du CIA A est connecté au processeur clavier pour la transmission des touches, tandis que celui du CIA B est inutilisé. Nous reparlerons plus en détails du clavier plus tard.

Les minuteries

C'est là le plus gros morceau du 8520. Il comporte deux minuteries 16 bits appelées TA et TB (Timer A et Timer B). Chacune se voit attribuer un registre de contrôle, baptisé CRA pour TA et CRB pour TB.

Le rôle des minuteries est de décompter à partir d'une valeur fixée à l'avance par le processeur jusqu'à 0. Dès que la minuterie dépasse le 0 (en d'autres termes, dès qu'elle arrive à -1), elle peut déclencher ou non une interruption processeur et, suivant le mode choisi, recommencer ou non le décompte. Le décompte commence dès que la valeur de départ a été inscrite dans le registre adéquat.

Chaque minuterie dispose en fait de deux registres 16 bits, l'un pour la lecture, l'autre pour l'écriture. Ces deux registres étant logés à la même adresse, il est impossible de savoir par lecture à quelle valeur la minuterie à été initialisée, puisqu'elle est décrémentée dès l'écriture (le CIA, lui, s'y retrouve en recopiant juste avant le démarrage de la minuterie, la valeur de début dans une mémoire interne). On peut par contre lire à tout moment la valeur en cours du compteur, en l'arrêtant provisoirement.

Le registre de contrôle de la minuterie détermine son mode de fonctionnement. Chacune des deux minuteries dispose de son propre registre de contrôle, car la minuterie B peut éventuellement fonctionner de manière légèrement différente de la minuterie A. Les registres CRA et CRB sont les registres numéros 14 et 15 (respectivement) du CIA.

Registre CRA (Control Register A)
(Bit - Nom - Fonction)
  • 7 - TOD IN - Contrôle de TOD (0=60 Hz, 1=50 Hz).
  • 6 - SPMODE - Contrôle port série (0=entrée, 1=sortie).
  • 5 - INMODE - Contrôle du signal de la minuterie.
  • 4 - LOAD - Recharge la valeur de départ dans le compteur (strobe).
  • 3 - RUNMODE - Contrôle du mode (0=continu, 1=une fois).
  • 2 - OUTMODE - Sélection du type de sortie (0=pulse, 1=toggle).
  • 1 - PBON - Redirection de la minuterie vers le port B (1=on).
  • 0 - START - Contrôle de la minuterie (0=stop, 1=start).
Registre CRB (Control Register B)
(Bit - Nom - Fonction)
  • 7 - ALARM - Mode alarme (0=TOD, 1=alarme).
  • 6-5 - INMODE - Contrôle du signal (00=Horloge, 01=CNT, 10=Timer A, 11=CNT+Timer A).
  • 4 - LOAD - Recharge la valeur de départ dans le compteur (strobe).
  • 3 - RUNMODE - Contrôle du mode (0=continu, 1=une fois).
  • 2 - OUTMODE - Sélection du type de sortie (0=pulse, 1=toggle).
  • 1 - PBON - Redirection de la minuterie vers le port B (1=on).
  • 0 - START - Contrôle de la minuterie (0=stop, 1=start).
Les bits les plus importants sont LOAD, INMODE, RUNMODE et START.
  • LOAD force le CIA à recharger dans le compteur sa valeur initiale, qu'il avait sauvegardé dans une mémoire latch.

  • INMODE, quand il est mis à 0, indique que la valeur du compteur est décrémentée à chaque impulsion d'horloge (signal ECLK du processeur ou de Fat Gary sur l'A3000). La fréquence du CIA est donc de 1/10e de celle du processeur, soit 0,716 MHz. Nous verrons dans le prochain paragraphe comment déterminer un délai précis dans ce mode. Mis à 1, INMODE indique une décrémentation à chaque impulsion du signal CNT du CIA.

  • RUNMODE indique si la minuterie doit être continue ou non. Une minuterie continue permet par exemple de déclencher une interruption à intervalles réguliers.

  • START permet d'interrompre la minuterie, pour la refaire démarrer plus tard.
Calcul d'un délai

Pour programmer un délai de manière précise en mode horloge (INMODE 0), il faut d'abord savoir sur quel système, NSTC ou PAL, l'on se trouve.

Sur un Amiga NTSC, la fréquence d'horloge du 68000 est de 7,15909 MHz. Celle des CIA est donc de 0,715909 MHz. Une décrémentation du compteur survient donc toutes les 1/0,715909=1,3968255 microsecondes.

Sur un Amiga PAL, l'horloge du 68000 est de 7,09379 MHz, celle des CIA à 0,709379. La décrémentation intervient donc toutes les 1/0,709379=1,4096836 microsecondes.

Lorsque l'on sait qu'une seconde contient un million de microsecondes, on calcule qu'attendre 1/100e de seconde équivaut à attendre 10 000 microsecondes. Il faut donc initialiser le compteur avec la valeur 10 000/1,3968255=7159 en NTSC ou 10 000/1,4096839=7093 en PAL (on ne prend bien sûr que la partie entière du quotient). De même, attendre 3 millisecondes (1 milliseconde égale 1000 microsecondes) requiert d'initialiser le compteur à la valeur de 2148 en NTSC, ou 2128 en PAL.

Reste maintenant à savoir dans quel mode l'on se trouve, du NTSC ou du PAL... Le moyen le plus simple de le savoir est d'inspecter le champ DisplayFlags de la structure GfxBase. Ce mot contient la valeur 1 sur un système NTSC et la valeur 4 sur un système PAL. Les différentes valeurs possibles du compteur seront avantageusement calculées par avance et sauvegardées dans une table, parce que bon, ce n'est pas pour dire, mais les calculs en virgule flottante avec le 68000, hein...

Dernier point important : rappelez-vous que les minuteries sont 16 bits. Autrement dit, le délai maximum que l'on puisse programmer est de 65 534 (65 535 arrêtant la minuterie), soit environ 9/100e de seconde. Pour des délais plus longs, il faudra utiliser la minuterie 24 bits, comme nous le verrons le mois prochain.

Récréation

Vous avez bien gagné le droit de respirer un peu... Le petit programme que je vous propose maintenant est totalement inutile, si l'on fait abstraction de ses qualités didactiques. Il fait clignoter la diode de mise sous tension à intervalles réguliers de 1/100e de seconde (10 000 microsecondes). Il teste le système pour savoir si l'on se trouve en PAL ou en NTSC et s'adapte en conséquence. Le reste est suffisamment commenté.

CIA
CIA

Mise à jour de mai 2025 : une archive contenant le listing adapté à vbcc, et avec l'exécutable compilé par vbcc, a été réalisée par Yann-Gaël Guéhéneuc et est disponible sur obligement.free.fr/files/antciaexample.lha.


[Retour en haut] / [Retour aux articles] [Article suivant]