CIA
Aus C64-Wiki
Inhaltsverzeichnis |
[bearbeiten] Beschreibung
Der CIA (Complex Interface Adapter) ist ein Interface-Chip der in Commodore Heimcomputern eingebaut ist und die meisten Ein- und Ausgabevorgänge steuert, sowie den internen Timer (Uhr) des Computers enthält. Der CIA wurde von dem Halbleiterhersteller MOS Technology entwickelt, der 1976 von Commodore übernommen wurde. Im C64 befinden sich zwei CIA 6526.
[bearbeiten] Einzelheiten des CIA 6526
- 16 einzeln programmierbare Ein- und Ausgabeleitungen
- Die Leitungen sind als Open Collector mit internen Pullups herausgeführt.
- Im C64 werden einige dieser Leitungen zur Abfrage/Ansteuerung der Ein-/Ausgabegeräte (Tastatur, Joystick, IEC etc.) benutzt, einige sind mit dem VIC verbunden und legen den für ihn sichtbaren Speicherbereich fest, andere stehen zur freien Verfügung und sind am Userport herausgeführt.
- 8- oder 16-Bit Datentransport (lesend und schreibend) mit Handshaking
- 2 unabhängige 16-Bit Intervalltimer
- jeder Timer besteht aus einem 16 Bit-Latch (Startwert) und dem eigentlichen 16 Bit-Timer
- das Latch kann man direkt setzen, den Timer nur lesen bzw. indirekt über das Latch setzen
- 24-Stunden-Zeituhr (AM/PM) mit programmierbarem Alarm
- 8-Bit Schiebregister für serielle Ein- und Ausgabe
- 2 TTL-Eingänge
- CMOS-kompatibel
- Taktung: 1 MHz (6526) oder 2 MHz (6526A)
[bearbeiten] Speicheradressen der CIAs
Folgende Speicheradressen werden von den beiden CIA-Chips im C64 belegt:
[bearbeiten] CIA 1
| Adressbereich: $DC00-$DCFF, 56320-56575 Aufgaben: Tastatur, Joystick, Paddles, Datasette, IRQ Steuerung | ||||
| Adresse Hex | Adresse Dez | Register | Funktion | Bemerkung |
|---|---|---|---|---|
| $DC00 | 56320 | 0 PRA | Daten Port A | Abfrage/Steuerung der acht Datenleitungen von Port A. Die Leitungen sind mehrfach belegt: Lesen/Schreiben: Bit 0..7 Tastaturmatrixspalten |
| $DC01 | 56321 | 1 PRB | Daten Port B | Abfrage/Steuerung der acht Datenleitungen von Port B. Die Leitungen sind mehrfach belegt: Lesen/Schreiben: Bit 0..7 Tastaturmatrixzeilen |
| $DC02 | 56322 | 2 DDRA | Datenrichtung Port A | Bit X: 0=Eingang (nur lesen), 1=Ausgang (lesen und schreiben) |
| $DC03 | 56323 | 3 DDRB | Datenrichtung Port B | Bit X: 0=Eingang (nur lesen), 1=Ausgang (lesen und schreiben) |
| $DC04 | 56324 | 4 TA LO | Timer A Low Byte | Lesen: aktueller Wert Timer A (Low Byte) Schreiben: Latch des Timers A setzen (Low Byte) |
| $DC05 | 56325 | 5 TA HI | Timer A High Byte | Lesen: aktueller Wert Timer A (High Byte) Schreiben: Latch des Timers A setzen (High Byte) - falls der Timer gestoppt ist, wird gleichzeitig das High Byte des Timers neu gesetzt |
| $DC06 | 56326 | 6 TB LO | Timer B Low Byte | Lesen: aktueller Wert Timer B (Low Byte) Schreiben: Latch des Timers B setzen (Low Byte) |
| $DC07 | 56327 | 7 TB HI | Timer B High Byte | Lesen: aktueller Wert Timer B (High Byte) Schreiben: Latch des Timers B setzen (High Byte) - falls der Timer gestoppt ist, wird gleichzeitig das High Byte des Timers neu gesetzt |
| $DC08 | 56328 | 8 TOD 10THS | Echtzeituhr 1/10s | Lesen: Bit 0..3: Zehntelsekunden im BCD-Format ($0-$9) |
| $DC09 | 56329 | 9 TOD SEC | Echtzeituhr Sekunden | Bit 0..3: Einersekunden im BCD-Format ($0-$9) Bit 4..6: Zehnersekunden im BCD-Format ($0-$5) |
| $DC0A | 56330 | 10 TOD MIN | Echtzeituhr Minuten | Bit 0..3: Einerminuten im BCD-Format( $0-$9) Bit 4..6: Zehnerminuten im BCD-Format ($0-$5) |
| $DC0B | 56331 | 11 TOD HR | Echtzeituhr Stunden | Bit 0..3: Einerstunden im BCD-Format ($0-$9) Bit 4..6: Zehnerstunden im BCD-Format ($0-$5) |
| $DC0C | 56332 | 12 SDR | Serielles Schieberegister | Am SP-Pin wird das Byte in diesem Register Bitweise mit jeder positiven Flanke am CNT-Pin hinausgeschoben bzw. eingelesen. |
| $DC0D | 56333 | 13 ICR | Interrupt Control und Status | CIA1 ist an die IRQ-Leitung angeschlossen. Lesen: (Bit0..4 = INT DATA, Herkunft des Interrupts) |
| $DC0E | 56334 | 14 CRA | Control Timer A | Bit 0: 0 = Stop Timer; 1 = Start Timer Bit 1: 1 = Zeigt einen Timer Unterlauf an Port B in Bit 6 an |
| $DC0F | 56335 | 15 CRB | Control Timer B | Bit 0: 0 = Stop Timer; 1 = Start Timer Bit 1: 1 = Zeigt einen Timer Unterlauf an Port B in Bit 7 an
Bit 7: 0 = Schreiben in die TOD-Register setzt die Uhrzeit, 1 = Schreiben in die TOD-Register setzt die Alarmzeit |
| $DC10-$DCFF | 56336-56575 | - | - | Die CIA 1 Register wiederholen sich alle 16 Bytes |
[bearbeiten] CIA 2
Der zweite CIA-Chip ist identisch mit dem ersten. Deshalb sind in der folgenden Tabelle nur Einträge zu finden, die sich auf die spezifische Verwendung im C64 beziehen.
| Adressbereich: $DD00-$DDFF, 56576-56831 Aufgaben: Serielle Schnittstelle, RS-232, VIC Speicher, NMI Steuerung | ||||
| Adresse Hex | Adresse Dez | Register | Funktion | Bemerkung |
|---|---|---|---|---|
| $DD00 | 56576 | 0 PRA | Daten Port A | Bit 0..1: Auswahl der Position des VIC-Speichers
Bit 2: RS-232: TXD Ausgang, Userport: Daten PA 2 (Pin M)
Bit 6..7: Serielle Schnittstelle Eingang (0=Low/Active, 1=High/Inactive)
|
| $DD01 | 56577 | 1 PRB | Daten Port B | Bit 0..7: Userport Daten PB 0-7 (Pins C,D,E,F,H,J,K,L) Der KERNAL bietet einige RS232-Routinen an, die die Pins folgendermaßen benutzen:
Bit 1..5: RS-232: schreiben
|
| $DD02 | 56578 | 2 DDRA | Datenrichtung Port A | siehe CIA 1 |
| $DD03 | 56579 | 3 DDRB | Datenrichtung Port B | siehe CIA 1 |
| $DD04 | 56580 | 4 TA LO | Timer A Low Byte | siehe CIA 1 |
| $DD05 | 56581 | 5 TA HI | Timer A High Byte | siehe CIA 1 |
| $DD06 | 56582 | 6 TB LO | Timer B Low Byte | siehe CIA 1 |
| $DD07 | 56583 | 7 TB HI | Timer B High Byte | siehe CIA 1 |
| $DD08 | 56584 | 8 TOD 10THS | Echtzeituhr 1/10s | siehe CIA 1 |
| $DD09 | 56585 | 9 TOD SEC | Echtzeituhr Sekunden | siehe CIA 1 |
| $DD0A | 56586 | 10 TOD MIN | Echtzeituhr Minuten | siehe CIA 1 |
| $DD0B | 56587 | 11 TOD HR | Echtzeituhr Stunden | siehe CIA 1 |
| $DD0C | 56588 | 12 SDR | Serielles Schieberegister | siehe CIA 1 |
| $DD0D | 56589 | 13 ICR | Interrupt Control und Status | CIA2 ist an die NMI-Leitung angeschlossen. Bit 4: 1 = NMI Signal am FLAG-Pin aufgetreten (RS-232 Daten empfangen) |
| $DD0E | 56590 | 14 CRA | Control Timer A | siehe CIA 1 |
| $DD0F | 56591 | 15 CRB | Control Timer B | siehe CIA 1 |
[bearbeiten] Links
| Wikipedia: MOS Technology CIA |
| Wikipedia: MOS Technology CIA |
- Der CIA 6526 im Commodore Computer Online Museum
- MOS 6526 CIA Datenblatt (PDF Format)
- Mapping the C64 - u.a. Details zur CIA-Programmierung
Hardware-Aufbau des C64 · Hardware-Portalseite
Komponenten des C64: CPU · VIC · SID · CIA · PLA · RAM · ROM · Farbram
