RETRODREAMSAMIGA & SPECTRUM
Menü

← Alle Chips

cia.chip

DIP-40 · 8520A-1 · Zeichnung, kein Foto

Amiga-ChipsCommodore (MOS / CSG)

1985

CIA 8520

Der Chip der Schnittstellen: Tastatur, Diskettenlaufwerk, Parallelport, LED und Timer. Jeder Amiga hat zwei.

Der CIA 8520 ist der Ein-/Ausgabe-Chip des Amiga, geerbt vom 6526 des Commodore 64. Jede Maschine hat zwei: CIA-A liest die Tastatur und den Parallelport, schaltet die LED und räumt beim Start das ROM aus dem Weg; CIA-B steuert das Diskettenlaufwerk und die Steuerleitungen der seriellen Schnittstelle. Jeder hat außerdem zwei Timer und einen Ereigniszähler.

Bit Bus
8

Ein Chip des Commodore 64, der im Amiga blieb

CIA steht für Complex Interface Adapter. Der ursprüngliche Entwurf ist der 6526 von MOS Technology, der Schnittstellen-Chip des Commodore 64, der zwei davon trägt. Als Commodore den Amiga entwarf, baute man keinen Ein-/Ausgabe-Chip von Grund auf neu, sondern passte an, was schon da war: Der 8520 ist ein 6526 mit einem Unterschied, der Uhr. Im 6526 ist es eine echte Uhr mit Stunden, Minuten und Sekunden in BCD; im 8520 wurde daraus ein einfacher binärer 24-Bit-Zähler, der Impulse zählt. Ansonsten ist es derselbe Chip.

Commodores interne Spezifikation, die Zeichnung 318029, beschreibt ihn als Peripheriebaustein, kompatibel zum Bus der 65xx, im 40-poligen Gehäuse, und nennt die Einsatzorte: Amiga und das Diskettenlaufwerk 1581. Von den Commodore-Chips im Amiga ist er der einzige, der nicht für ihn entworfen wurde, und er spricht die Sprache der 65xx in einer 68000-Maschine: Der Prozessor hat für diese Peripherie einen eigenen Takt, den E-Takt, mit einem Zehntel seiner Geschwindigkeit, und darauf synchronisiert sich der CIA.

In jedem Amiga stecken zwei, vom A1000 bis zum A4000, und das System nennt sie CIA-A und CIA-B. Die Ausnahme ist der CD32: Der Akiko hat ihre Funktionen übernommen, und auf der Platine der Konsole gibt es keinen.

Zwei Chips, zwei Aufgaben

Jeder CIA hat 16 Ein-/Ausgabe-Pins in zwei 8-Bit-Ports, dazu ein serielles Schieberegister, einen Impuls-Pin und einen Eingang, der Flanken erkennt. Der Amiga verteilt die Aufgaben auf beide. CIA-A, an den ungeraden Adressen ab $BFE001, gibt seinen ganzen Port B an die 8 Datenbits des Parallelports, und sein Port A ist voller Einzelbits: OVL, das das ROM an Adresse null legt; die Power-LED, die leuchtet, wenn das Bit null ist; vier Statussignale des Diskettenlaufwerks (bereit, Spur null, schreibgeschützt, Diskette gewechselt); und die Feuerknöpfe der beiden Joystickports. Sein serielles Register empfängt die Tastatur.

CIA-B, an den geraden Adressen ab $BFD000, steuert mit seinem ganzen Port B das Diskettenlaufwerk: Motor, Auswahl eines von vier Laufwerken, Schritt, Richtung und Seite. Port A vereint die Flusskontrollleitungen der seriellen Schnittstelle (DTR, RTS, CTS, DSR, Trägererkennung) und die Steuerleitungen des Parallelports (BUSY, POUT, SEL). Sein Flankeneingang zählt die Indeximpulse der Diskette, einen pro Umdrehung. Das serielle Register des CIA-B wird für nichts verwendet.

Jeder spricht mit dem Prozessor auf einer eigenen Interrupt-Ebene: CIA-A auf Ebene 2, CIA-B auf Ebene 6. Und beide teilen eine Eigenheit des Entwurfs: CIA-A hängt an den unteren 8 Bits des Datenbusses, CIA-B an den oberen 8, weshalb die Adressen des einen ungerade und die des anderen gerade sind und man nur byteweise auf sie zugreifen kann.

Die zwei CIAs: was wohin führt
CIA-A · $BFE001 · Interrupt-Ebene 28520OVL · Auf der Platine ansehenPA0OVLLED · Auf der Platine ansehenPA1LEDCHNG · Auf der Platine ansehenPA2CHNGWPRO · Auf der Platine ansehenPA3WPROTK0 · Auf der Platine ansehenPA4TK0RDY · Auf der Platine ansehenPA5RDYFIR0 · Auf der Platine ansehenPA6FIR0FIR1 · Auf der Platine ansehenPA7FIR1KDAT · Auf der Platine ansehenSPKDATKCLK · Auf der Platine ansehenCNTKCLKD0 · Auf der Platine ansehenPB0D0D1 · Auf der Platine ansehenPB1D1D2 · Auf der Platine ansehenPB2D2D3 · Auf der Platine ansehenPB3D3D4 · Auf der Platine ansehenPB4D4D5 · Auf der Platine ansehenPB5D5D6 · Auf der Platine ansehenPB6D6D7 · Auf der Platine ansehenPB7D7STROBE · Auf der Platine ansehenPCSTROBEACK · Auf der Platine ansehenFLAGACKTOD · Auf der Platine ansehenTOD ← 50/60 Hz (Bilder) (Ereigniszähler)INT2 · Auf der Platine ansehenIRQ → INT2CIA-B · $BFD000 · Interrupt-Ebene 68520BUSY · Auf der Platine ansehenPA0BUSYPOUT · Auf der Platine ansehenPA1POUTSEL · Auf der Platine ansehenPA2SELDSR · Auf der Platine ansehenPA3DSRCTS · Auf der Platine ansehenPA4CTSCD · Auf der Platine ansehenPA5CDRTS · Auf der Platine ansehenPA6RTSDTR · Auf der Platine ansehenPA7DTRBUSY · Auf der Platine ansehenSPBUSYPOUT · Auf der Platine ansehenCNTPOUTSTEP · Auf der Platine ansehenPB0STEPDIR · Auf der Platine ansehenPB1DIRSIDE · Auf der Platine ansehenPB2SIDESEL0 · Auf der Platine ansehenPB3SEL0SEL1 · Auf der Platine ansehenPB4SEL1SEL2 · Auf der Platine ansehenPB5SEL2SEL3 · Auf der Platine ansehenPB6SEL3MTR · Auf der Platine ansehenPB7MTRPCnicht verwendetINDEX · Auf der Platine ansehenFLAGINDEXTOD · Auf der Platine ansehenTOD ← Bildschirmzeilen (Ereigniszähler)INT6 · Auf der Platine ansehenIRQ → INT6
  • Tastatur
  • Diskettenlaufwerk
  • Parallelport
  • Serielle Schnittstelle (Flusskontrolle)
  • System: OVL und LED
  • Feuerknöpfe der Joysticks

Jeder Pin der Ports A und B mit dem Signal, das der Amiga daran anschließt. Quelle: Amiga Hardware Reference Manual, Anhang F. Klicke auf ein Signal, um es auf der Platine des Amiga 500 rev 8A im Explorer leuchten zu sehen.

Wie eine Taste beim Prozessor ankommt

Die Amiga-Tastatur hat einen eigenen Mikrocontroller und hängt über vier Leitungen an der Maschine: Versorgung, Masse, KCLK (der Takt, nur von der Tastatur zum Rechner) und KDAT (die Daten, in beide Richtungen). Jede Taste erzeugt einen 7-Bit-Code, und das achte Bit sagt, ob sie gedrückt (0) oder losgelassen (1) wurde. Die Tastatur sendet die 8 Bits einzeln über KDAT, mit einem Impuls auf KCLK pro Bit, bei etwa 60 Mikrosekunden pro Bit: Eine Taste braucht eine halbe Millisekunde, bis sie ankommt.

Auf der Amiga-Seite empfängt das serielle Schieberegister des CIA-A: KDAT kommt am Pin SP herein, KCLK an CNT. Beim achten Impuls fällt das Byte ins Datenregister, und der CIA löst einen Interrupt aus. Die Software liest den Code und muss antworten: Sie zieht KDAT für 85 Mikrosekunden auf null, der Handschlag, der der Tastatur sagt, dass sie die nächste Taste senden darf.

Zwei Details zeigen die Sorgfalt des Entwurfs. Die Leitung ist aktiv auf null, die Bits kommen also invertiert an. Und das Byte geht rotiert hinaus: Zuerst wird Bit 6 gesendet, zuletzt Bit 7, das Bit für gedrückt oder losgelassen. Verlieren Tastatur und Rechner den Gleichtakt, sendet die Tastatur Einsen, bis sie den Handschlag bekommt, und ein Müllbyte voller Einsen liest sich als losgelassene Taste, was niemandem schadet. Dann warnt sie mit einem Sondercode ($F9) und wiederholt die verlorene Taste. Probier es in der Demonstration weiter unten.

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

Timer und Ereigniszähler

Jeder CIA hat zwei 16-Bit-Timer. Man lädt einen Wert, der Timer zählt im Takt des E-Takts des Prozessors herunter (709 379-mal pro Sekunde bei PAL, 715 909-mal bei NTSC, ein Zehntel des 68000-Takts) und löst bei null einen Interrupt aus und lädt sich neu. Sie lassen sich für 32-Bit-Zählungen verketten, externe Impulse am Pin CNT zählen oder ihren Ausgang auf einen Pin von Port B legen. Mit ihnen misst das AmigaOS die Zeit.

Der dritte Zähler ist der TOD, der im 6526 die Uhr war. Im Amiga bekam er zwei findige Verwendungen: Der des CIA-A zählt die 50- oder 60-Hz-Impulse jedes Bildes, der des CIA-B zählt die Bildschirmzeilen, 15 625 pro Sekunde bei PAL. Beide haben einen Alarm, der einen Interrupt auslöst, wenn der Zähler einen gewählten Wert erreicht. Da es 24-Bit-Zähler sind, läuft der des CIA-B alle 18 Minuten über, der des CIA-A nach fast vier Tagen.

Insgesamt hat jeder CIA fünf Interrupt-Quellen: die zwei Timer, den Alarm, das serielle Register und den Flankeneingang. Ein einziges Register, das ICR, sagt, welche ausgelöst hat, und das Lesen löscht es, weshalb der Leser alles abarbeiten muss, was darin stand. Unter AmigaOS fassen Programme die CIAs nicht direkt an: Sie bitten die cia.resource um Timer und Interrupts, und die verteilt, was da ist, zwischen dem System und wer sonst fragt.

Der erste, der aufwacht

Beim Einschalten gehört der CIA zu den ersten Chips, auf die es ankommt. Ein Reset macht alle Pins zu Eingängen, und weil sie Pull-up-Widerstände haben, lesen sie sich als eins. Das schließt OVL ein, Bit 0 von Port A des CIA-A: Auf eins erscheint das Kickstart-ROM an Adresse null, wo der 68000 seinen Stapelzeiger und seine Startadresse holt. Nur so kann der Prozessor überhaupt starten, denn an Adresse null liegt normalerweise das Chip-RAM. Sobald es läuft, konfiguriert das Kickstart die zwei Ausgangsbits (OVL und LED) und zieht OVL auf null: Das RAM kehrt an Adresse null zurück, und das ROM bleibt nur an seinem Platz, am oberen Ende des Speichers.

Dasselbe LED-Bit schaltet den Tiefpassfilter des Tons: Deshalb wird die Power-LED dunkler, wenn ein Spiel oder eine Demo den Filter abschaltet. Die Paula-Seite erklärt den Filter; hier ist der Schalter.

Das Gehäuse änderte sich über die Jahre. In A1000, A500, A2000 und A3000 ist der 8520 ein 40-poliges DIP, fast immer gesockelt. In A600, A1200 und A4000 ist er ein 44-poliges PLCC, auf die Platine gelötet. Der CD32 hat keinen. Innen war es immer derselbe Chip von 1985.

Wusstest du…

  1. Die Adresse $BFE001 gehört zu den bekanntesten des Amiga: Es ist das Register, in das man schreibt, um die LED auszuschalten, den Tonfilter abzuschalten und das ROM zu verstecken.

  2. Eine Taste braucht etwa eine halbe Millisekunde bis zum CIA: acht Bits zu je 60 Mikrosekunden, rund 17 kbit/s.

  3. Die Tastatur sendet das Bit für gedrückt oder losgelassen absichtlich zuletzt: Geht der Gleichtakt verloren, liest sich der ankommende Müll als losgelassene Taste, und die ist harmlos.

  4. Wer auf einem A1000 oder manchen A2000 Ctrl-Amiga-Amiga drückt, bekommt zuerst einen Warncode ($78): Die Tastatur kündigt an, dass sie zehn Sekunden später einen Reset auslöst.

  5. Der Ereigniszähler des CIA-B zählt Bildschirmzeilen, 15 625 pro Sekunde bei PAL, und seine 24 Bits laufen alle 18 Minuten über.

  6. Das serielle Register des CIA-B wird für nichts verwendet: In jedem Amiga schläft eine synchrone serielle Schnittstelle im Chip.

  7. Caps Lock ist die einzige Taste, die nur beim Drücken einen Code sendet: Das Bit für gedrückt oder losgelassen sagt dann, ob die Leuchte an- oder ausging.

RUN "DEMO"

Taste für Taste über die Leitung

Die Amiga-Tastatur sendet jede Taste als 8 serielle Bits: 7 für den Code und 1, das zuletzt sagt, ob sie gedrückt oder losgelassen wurde. CIA-A nimmt sie in sein Schieberegister auf, und am Ende zieht der Amiga die Leitung KDAT für 85 µs auf null, der Handschlag, der die nächste Taste anfordert. Drück eine Taste auf deiner Tastatur oder eine von diesen.

Hier klicken und eine Taste drücken

Bits auf der Leitung, in der Reihenfolge 6-5-4-3-2-1-0-7 (Leitung aktiv auf null)

KCLKKDATbit65432107

Von CIA-A empfangen

—

KDAT für 85 µs auf null: nächste Taste

Protokoll und Codes: Amiga Hardware Reference Manual, Anhang G.

Störungen, an denen er beteiligt ist

Diagnoseanleitungen des Platinen-Explorers, die Signale dieses Chips messen, Platine für Platine.

Wo er steckt

Quellen

  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