Obligement - L'Amiga au maximum

Jeudi 21 mars 2019 - 00:10  

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

 


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
CIA

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.

CIA
CIA

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


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