RETRODREAMSAMIGA & SPECTRUM
Menu

← Toutes les puces

cia.chip

DIP-40 · 8520A-1 · dessin, pas une photo

Puces de l'AmigaCommodore (MOS / CSG)

1985

CIA 8520

La puce des ports : clavier, lecteur de disquettes, port parallèle, LED et temporisateurs. Chaque Amiga en a deux.

Le CIA 8520 est la puce d'entrées-sorties de l'Amiga, héritée du 6526 du Commodore 64. Chaque machine en a deux : le CIA-A lit le clavier et le port parallèle, allume la LED et écarte la ROM au démarrage ; le CIA-B commande le lecteur de disquettes et les lignes de contrôle du port série. Chacun a aussi deux temporisateurs et un compteur d'événements.

bits de bus
8

Une puce du Commodore 64 restée dans l'Amiga

CIA signifie Complex Interface Adapter. Le dessin d'origine est le 6526 de MOS Technology, la puce des ports du Commodore 64, qui en embarque deux. Quand Commodore a conçu l'Amiga, plutôt que de créer une puce d'entrées-sorties de zéro, elle a adapté ce qu'elle avait déjà : le 8520 est un 6526 avec une différence, l'horloge. Dans le 6526, c'est une vraie horloge, avec heures, minutes et secondes en BCD ; dans le 8520, elle est devenue un simple compteur binaire de 24 bits, qui compte des impulsions. Pour le reste, c'est la même puce.

La spécification interne de Commodore, le dessin 318029, la décrit comme un périphérique compatible avec le bus des 65xx, en boîtier de 40 broches, et indique où elle a servi : l'Amiga et le lecteur de disquettes 1581. Parmi les puces Commodore de l'Amiga, c'est la seule qui n'a pas été dessinée pour lui, et elle parle la langue des 65xx dans une machine à 68000 : le processeur a une horloge dédiée à ces périphériques, l'horloge E, au dixième de sa vitesse, et c'est sur elle que le CIA se synchronise.

Il y en a deux dans chaque Amiga, de l'A1000 à l'A4000, et le système les appelle CIA-A et CIA-B. L'exception est le CD32 : l'Akiko a absorbé leurs fonctions, et la carte de la console n'en a aucun.

Deux puces, deux métiers

Chaque CIA a 16 broches d'entrée-sortie, en deux ports de 8 bits, plus un registre à décalage série, une broche d'impulsion et une entrée qui détecte les fronts. L'Amiga répartit les tâches entre les deux. Le CIA-A, aux adresses impaires à partir de $BFE001, a son port B entier consacré aux 8 bits de données du port parallèle, et son port A rempli de bits isolés : OVL, qui place la ROM à l'adresse zéro ; la LED d'alimentation, qui s'allume quand le bit est à zéro ; quatre signaux d'état du lecteur de disquettes (prêt, piste zéro, protégé, disque changé) ; et les boutons de tir des deux ports de jeu. Son registre série reçoit le clavier.

Le CIA-B, aux adresses paires à partir de $BFD000, a son port B entier aux commandes du lecteur de disquettes : moteur, sélection d'un lecteur parmi quatre, pas, direction et face. Le port A réunit les lignes de contrôle de flux du port série (DTR, RTS, CTS, DSR, détection de porteuse) et celles de contrôle du port parallèle (BUSY, POUT, SEL). Son entrée de fronts compte les impulsions d'index de la disquette, une par tour. Le registre série du CIA-B ne sert à rien.

Chacun parle au processeur sur son propre niveau d'interruption : le CIA-A au niveau 2, le CIA-B au niveau 6. Et les deux partagent une particularité de conception : le CIA-A est câblé sur les 8 bits bas du bus de données et le CIA-B sur les 8 bits hauts, si bien que les adresses de l'un sont impaires et celles de l'autre paires, et qu'on n'y accède qu'octet par octet.

Les deux CIA : qui est relié à quoi
CIA-A · $BFE001 · interruption de niveau 28520OVL · Voir sur la cartePA0OVLLED · Voir sur la cartePA1LEDCHNG · Voir sur la cartePA2CHNGWPRO · Voir sur la cartePA3WPROTK0 · Voir sur la cartePA4TK0RDY · Voir sur la cartePA5RDYFIR0 · Voir sur la cartePA6FIR0FIR1 · Voir sur la cartePA7FIR1KDAT · Voir sur la carteSPKDATKCLK · Voir sur la carteCNTKCLKD0 · Voir sur la cartePB0D0D1 · Voir sur la cartePB1D1D2 · Voir sur la cartePB2D2D3 · Voir sur la cartePB3D3D4 · Voir sur la cartePB4D4D5 · Voir sur la cartePB5D5D6 · Voir sur la cartePB6D6D7 · Voir sur la cartePB7D7STROBE · Voir sur la cartePCSTROBEACK · Voir sur la carteFLAGACKTOD · Voir sur la carteTOD ← 50/60 Hz (images) (compteur d'événements)INT2 · Voir sur la carteIRQ → INT2CIA-B · $BFD000 · interruption de niveau 68520BUSY · Voir sur la cartePA0BUSYPOUT · Voir sur la cartePA1POUTSEL · Voir sur la cartePA2SELDSR · Voir sur la cartePA3DSRCTS · Voir sur la cartePA4CTSCD · Voir sur la cartePA5CDRTS · Voir sur la cartePA6RTSDTR · Voir sur la cartePA7DTRBUSY · Voir sur la carteSPBUSYPOUT · Voir sur la carteCNTPOUTSTEP · Voir sur la cartePB0STEPDIR · Voir sur la cartePB1DIRSIDE · Voir sur la cartePB2SIDESEL0 · Voir sur la cartePB3SEL0SEL1 · Voir sur la cartePB4SEL1SEL2 · Voir sur la cartePB5SEL2SEL3 · Voir sur la cartePB6SEL3MTR · Voir sur la cartePB7MTRPCnon utiliséINDEX · Voir sur la carteFLAGINDEXTOD · Voir sur la carteTOD ← lignes de l'écran (compteur d'événements)INT6 · Voir sur la carteIRQ → INT6
  • Clavier
  • Lecteur de disquettes
  • Port parallèle
  • Port série (contrôle de flux)
  • Système : OVL et LED
  • Boutons de tir des manettes

Chaque broche des ports A et B, avec le signal que l'Amiga y relie. Source : Amiga Hardware Reference Manual, annexe F. Cliquez sur un signal pour le voir allumé sur la carte Amiga 500 rev 8A, dans l’explorateur.

Comment une touche arrive au processeur

Le clavier de l'Amiga a son propre microcontrôleur et se relie à la machine par quatre fils : alimentation, masse, KCLK (l'horloge, du clavier vers l'ordinateur seulement) et KDAT (les données, dans les deux sens). Chaque touche produit un code de 7 bits, et le huitième bit dit si elle a été enfoncée (0) ou relâchée (1). Le clavier envoie les 8 bits un à un sur KDAT, avec une impulsion sur KCLK pour chaque bit, à environ 60 microsecondes par bit : une touche met une demi-milliseconde à arriver.

Côté Amiga, c'est le registre à décalage série du CIA-A qui reçoit : KDAT entre par la broche SP et KCLK par CNT. À la huitième impulsion, l'octet tombe dans le registre de données et le CIA lève une interruption. Le logiciel lit le code et doit répondre : il tire KDAT à zéro pendant 85 microsecondes, la poignée de main qui dit au clavier qu'il peut envoyer la touche suivante.

Deux détails montrent le soin du dessin. La ligne est active à zéro, donc les bits arrivent inversés. Et l'octet part tourné : le bit 6 est envoyé en premier et le bit 7, celui d'enfoncée ou relâchée, en dernier. Si le clavier et l'ordinateur perdent la synchronisation, le clavier envoie des uns jusqu'à recevoir la poignée de main, et un octet de déchets plein de uns se lit comme une touche relâchée, ce qui ne fait de mal à personne. Puis il prévient avec un code spécial ($F9) et répète la touche perdue. Essayez dans la démonstration plus bas.

Amiga 1000Amiga 1000 · 1985
Photo: Rama & Musée Bolo · CC BY-SA 2.0 fr · Wikimedia Commons

Temporisateurs et compteur d'événements

Chaque CIA a deux temporisateurs de 16 bits. On charge une valeur, le temporisateur compte à rebours au rythme de l'horloge E du processeur (709 379 fois par seconde en PAL, 715 909 en NTSC, un dixième de l'horloge du 68000) et, arrivé à zéro, il interrompt et se recharge. Ils peuvent s'enchaîner pour des comptes de 32 bits, compter des impulsions externes par la broche CNT, ou placer leur sortie sur une broche du port B. C'est avec eux que l'AmigaOS mesure le temps.

Le troisième compteur est le TOD, qui dans le 6526 était l'horloge. Dans l'Amiga, il a gagné deux usages ingénieux : celui du CIA-A compte les impulsions à 50 ou 60 Hz de chaque image, et celui du CIA-B compte les lignes de l'écran, 15 625 par seconde en PAL. Tous deux ont une alarme qui interrompt quand le compteur atteint une valeur choisie. Comme ce sont des compteurs de 24 bits, celui du CIA-B fait le tour toutes les 18 minutes, et celui du CIA-A au bout de presque quatre jours.

Au total, chaque CIA a cinq sources d'interruption : les deux temporisateurs, l'alarme, le registre série et l'entrée de fronts. Un seul registre, l'ICR, dit laquelle s'est déclenchée, et le lire l'efface, donc qui le lit doit traiter tout ce qui s'y trouvait. Sous AmigaOS, les programmes ne touchent pas directement aux CIA : ils demandent temporisateurs et interruptions au cia.resource, qui partage ce qu'il y a entre le système et qui en fait la demande.

Le premier à se réveiller

À la mise sous tension, le CIA est parmi les premières puces qui comptent. Un reset met toutes les broches en entrée, et comme elles ont des résistances de rappel, elles se lisent à un. Cela inclut OVL, le bit 0 du port A du CIA-A : à un, la ROM Kickstart apparaît à l'adresse zéro, où le 68000 va chercher son pointeur de pile et son adresse de départ. C'est la seule façon pour le processeur de démarrer, car à l'adresse zéro se trouve normalement la Chip RAM. Une fois lancé, le Kickstart configure les deux bits de sortie (OVL et LED) et abaisse OVL : la RAM revient à l'adresse zéro et la ROM ne reste qu'à sa place, en haut de la mémoire.

Le même bit de la LED commande le filtre passe-bas du son : c'est pour cela que, quand un jeu ou une démo coupe le filtre, la LED d'alimentation perd de l'éclat. La page de Paula explique le filtre ; ici, c'est l'interrupteur.

Le boîtier a changé au fil des ans. Dans les A1000, A500, A2000 et A3000, le 8520 est un DIP de 40 broches, presque toujours sur support. Dans les A600, A1200 et A4000, c'est un PLCC de 44 broches soudé à la carte. Le CD32 n'en a pas. À l'intérieur, c'est toujours la même puce de 1985.

Le saviez-vous…

  1. L'adresse $BFE001 est l'une des plus connues de l'Amiga : c'est le registre où l'on écrit pour éteindre la LED, couper le filtre du son et cacher la ROM.

  2. Une touche met environ une demi-milliseconde à atteindre le CIA : huit bits à 60 microsecondes chacun, soit quelque 17 kbit/s.

  3. Le clavier envoie le bit d'enfoncée ou relâchée en dernier, exprès : s'il perd la synchronisation, les déchets qui arrivent se lisent comme une touche relâchée, ce qui est inoffensif.

  4. Qui appuie sur Ctrl-Amiga-Amiga sur un A1000 ou certains A2000 reçoit d'abord un code d'avertissement ($78) : le clavier annonce qu'il fera un reset dix secondes plus tard.

  5. Le compteur d'événements du CIA-B compte les lignes de l'écran, 15 625 par seconde en PAL, et fait le tour de ses 24 bits toutes les 18 minutes.

  6. Le registre série du CIA-B ne sert à rien : chaque Amiga a un port série synchrone qui dort dans la puce.

  7. Caps Lock est la seule touche qui n'envoie un code qu'à l'appui : le bit d'enfoncée ou relâchée dit alors si le voyant s'est allumé ou éteint.

RUN "DEMO"

Touche par touche sur le fil

Le clavier de l'Amiga envoie chaque touche en 8 bits série : 7 de code et 1 qui dit si elle a été enfoncée ou relâchée, en dernier. Le CIA-A les reçoit dans son registre à décalage et, à la fin, l'Amiga tire la ligne KDAT à zéro pendant 85 µs, la poignée de main qui demande la touche suivante. Appuyez sur une touche de votre clavier, ou sur l'une de celles-ci.

Cliquez ici et appuyez sur une touche

Bits sur le fil, dans l'ordre 6-5-4-3-2-1-0-7 (ligne active à zéro)

KCLKKDATbit65432107

Reçu par le CIA-A

—

KDAT à zéro pendant 85 µs : touche suivante

Protocole et codes : Amiga Hardware Reference Manual, annexe G.

Pannes où elle intervient

Guides de diagnostic de l'explorateur de cartes qui mesurent les signaux de cette puce, carte par carte.

Où on la trouve

Sources

  1. [1]IC, LSI, Complex Interface Adapter 8520 — desenho 318029 rev. C (especificação interna) · Commodore · espelho funet dos documentos Commodore, 1987
  2. [2]Amiga Hardware Reference Manual, apêndice F: 8520 Complex Interface Adapters · Commodore-Amiga · Amiga Developer CD 2.1, 1991
  3. [3]Amiga Hardware Reference Manual, apêndice G: Keyboard Interface · Commodore-Amiga · Amiga Developer CD 2.1, 1991
  4. [4]MOS Technology CIA (6526 e 8520) · Wikipédia
  5. [5]CIA 8520 (números de peça e máquinas) · Big Book of Amiga Hardware