Hardware-Aufbau des C64

Aus C64-Wiki
Zur Navigation springenZur Suche springen
C64-Hauptplatine KU-14194HB

Dieser Artikel beschreibt den Hardware-Aufbau des C64. Grundlagenwissen zum Thema Computerhardware und Schaltungstechnik wird vorausgesetzt. Eine allgemeinverständliche Erklärung zu den Fähigkeiten des C64 findet sich im Überblicksartikel zum C64.


Vereinfachtes Blockschaltbild[Bearbeiten | Quelltext bearbeiten]

                  ┌──────┐ ┌──────┐ ┌──────┐   ┌────────┐
                  │ BASIC│ │KERNAL│ │  CHAR│   │    8x8k│
                  │   ROM│ │   ROM│ │   ROM│   │     RAM│
                  └┬─┬─┬─┘ └┬─┬─┬─┘ └┬─┬─┬─┘   └┬─┬───┬─┘
                   │ │ │    │ │ │    │ │ │      │ │   │
   ┌─────┐enable   │ │ │    │ │ │    │ │ │      │ │   │
   │ PLA ├>───────┬┴─┼─┼───┬┴─┼─┼───┬┴─┼─┼─────┬┴─┼───┼─────┐
   └──┬──┘        │  │ │   │  │ │   │  │ │     │  │   │     │
      │           │  │ │   │  │ │   │  │ │     │  │8  │8    │
 ┌────┴──┐adr16   │  │ │   │  │ │   │  │ │     │ ┌┴┐  │     │
 │       ├<>──────┼─┬┴─┼───┼─┬┴─┼───┼─┬┴─┼─────┼─┤A├──┼───┐ │
 │  CPU  │data8   │ │  │   │ │  │   │ │  │     │ └┬┘ ┌┴┐ ┌┴─┴───┐
 │       ├<>──────┼─┼─┬┴───┼─┼─┬┴───┼─┼─┬┴─────┼──┼──┤D├─┤ColMem│
 └────┬──┘        │ │ │    │ │ │    │ │ │      │  ^  └┬┘4└┬─────┘
      │           │ │ │    ^ │ │    │ │ │      ^  v   │   │
      │          ┌┴─┴─┴─┐ ┌┴─┴─┴─┐ ┌┴─┴─┴┐    ┌┴──┴───┴───┴┐
      │          │ CIA1 │ │ CIA2 │ │ SID │    │   VIC-II   │
      │          └┬┬───┬┘ └─┬───┬┘ └─────┘    └────────────┘
      │  ┌────────┘├─┬─┤    │   │
     ┌┴──┴─┐     ┌─┴┐│┌┴─┐ ┌┴┐ ┌┴─┐
      Datas      Joy1Joy2 Ser User
                    ┌┴┐                               verbunden ┴
                    Key                        keine Verbindung ┼

Hinweise[Bearbeiten | Quelltext bearbeiten]

Die Chipbezeichnungen (Uxx etc.) und weiteren Erklärungen beziehen sich auf den Original-C64 ("Brotkasten"). Der Aufbau der Hauptplatine neuerer C64-Varianten weicht davon etwas ab.

Detaillierter Schaltplan[Bearbeiten | Quelltext bearbeiten]

  • Schaltplan Seite 1 (CPU, CIAs, Takterzeugung, Stromversorgung, Ports außer Expansionsport)
  • Schaltplan Seite 2 (RAM, Farbram, ROMs, PLA, VIC, SID, Expansionsport, Audio-/Video-Schaltung, mit weiteren Erklärungen)
  • Schaltplan des C64 (beide Seiten als PDF, ohne weitere Erklärungen auf Seite 2)

Zusammenspiel/PLA[Bearbeiten | Quelltext bearbeiten]

  • Die meisten Chips sind direkt an den 16bittigen Adress- und 8bittigen Datenbus des MOS 6510 angekoppelt.
  • Je nach Speicherkonfiguration und angesprochener Adresse aktiviert dabei die PLA (U17) unterschiedliche Chips.
  • Wird der I/O-Bereich angesprochen, entscheidet zusätzlich zur PLA der Demultiplexer U15, welcher Chip aktiviert wird.

Hauptspeicher[Bearbeiten | Quelltext bearbeiten]

  • Die dynamischen 64k RAM liegen in 8 Chips à 65536 Bits vor; jeder Chip ist dabei für ein Bit aller Hauptspeicher-Bytes zuständig (U12 liefert das höchstwertige Bit jedes Bytes etc.).
  • Das RAM hat 8 Adressleitungen, die an jedem Chip parallel anliegen. Adressiert wird gemultiplext (CAS/RAS).
    • Der CPU-Adressbus (16 Bits) ist über U13/U25 entsprechend angebunden.
    • Der VIC greift direkt auf die 8 gemultiplexten Adressleitungen des RAMs zu.

Anbindung des VIC[Bearbeiten | Quelltext bearbeiten]

  • Der VIC nimmt eine Ausnahmestellung ein, da er eigenständig zum Speicher-Refresh und bei Badlines auf den Speicher zugreifen muss. Daher auch die etwas komplexere Anbindung an die Busse und der dedizierte Bus zwischen Farbram und VIC.
  • Der VIC übernimmt bei AEC (Address Enable Control) low die Kontrolle über die Adressbusse. Das passiert normalerweise in jedem Takt bei Φ0=0, d.h. VIC und CPU greifen abwechselnd auf das RAM zu.
  • Mit BA (Bus Available) low kann der VIC die CPU anhalten und längere Zeit exklusiv auf das RAM zugreifen. Das passiert normalerweise alle 8 Scanlines bei den sog. Badlines, um Video Matrix Pointer zu holen, sowie abseits der Badlines auch zum Holen von Sprite-Daten, falls Sprites angeschaltet sind.
    • Der 6510 lässt sich nicht inmitten von Write States anhalten, weswegen der VIC nach dem Ziehen von BA auf low noch drei Takte wartet, bis er auch bei Φ0=1 AEC auf low lässt.
  • Die Anbindung des VIC ist nicht ganz trivial; die Chips U13, U14, U25 und U26 kümmern sich dabei um das Umschalten der Adressleitungen ("A" im Blockschaltbild oben) zwischen VIC und CPU. U16 kann das Farbram an den Datenbus ankoppeln ("D" im Schaltbild).
    • Der VIC hat grundsätzlich einen 14bittigen Adressbus (= 16k Adressraum, deswegen die zwei zusätzlichen Bits über die CIA2, mit der die Bank für den Bildschirmspeicher ausgewählt werden können). Das RAM-Refresh läuft aber nur über die acht gemultiplexten Leitungen, weswegen alle 64kB RAM ohne weitere Tricks refresht werden können.
    • Der Datenbus des VIC ist insgesamt 12 Bit breit (8 Bits am CPU-Datenbus, 4 Bits direkt am statischen Color-RAM).
    • U14 dient zur Einkopplung der beiden Bankbits der CIA in den VIC-Adressbus bzw. Umgehung derselben beim RAM-Refresh.
    • U26 erlaubt das Addressieren des Char-ROMs und des Color-RAMs durch den VIC.
    • Für den RAM-Refresh und den Zugriff des VIC auf den Hauptspeicher wird per U13 und U25 der CPU-Adressbus vom RAM abgekoppelt (AEC=0).
    • Der VIC-Zugriff auf den Hauptspeicher erfolgt gemultiplext über die 8 Adressleitungen zum RAM. Zugriff auf Char-ROM und Color-RAM erfolgt normal ohne Multiplex und über den CPU-Adressbus, der dafür zeitweise vom VIC angesteuert wird.
    • Adressierung (Lesen/Schreiben) der Register des VIC erfolgt über die unteren sechs Adressleitungen des VIC, die bidirektional sind und bei RAS=0 und AEC=1 VIC-intern in ein Latch geschrieben werden.

Takt[Bearbeiten | Quelltext bearbeiten]

  • Der Pixeltakt (~8MHz Dot Clock) wird durch die Schaltung hinter Y1 generiert.
  • Φ0 (~1MHz) ist eine Ausgangsleitung des VIC, an der der durch 8 geteilte Pixeltakt anliegt. Φ0 ist mindestens eine Gatterlaufzeit gegen den Pixeltakt verschoben, hat ein High-/Low-Verhältnis von 1:1 und wechselt (wahrscheinlich) bei der steigenden Flanke des Pixeltakts.
  • Φ2 ist das durch den 6510 um 30-40ns (temperaturabhängig) verzögerte Φ0. Φ2 ist der Haupttakt des Systems. Quellen: Gideon Zweijtzer in der CBM-Hackers Liste, Skoes Beitrag im Thema: "Hardware-Aufbau des C64" auf c64-wiki.de auf Forum64.de.
    • Während Φ2=0 greift der VIC auf das System zu, während Φ2=1 (meist) die CPU.
    • Der 6510 liest auf der fallenden Flanke von Φ0. Quelle.
    • Aus Sicht des 6510 sind die beiden verschobenen Taktsignale nötig, weil der 6510 in Dynamic Logic-Technik aufgebaut ist und mit dieser Technik aufgrund von sonst auftretenden Races intern aufeinanderfolgende Latches nicht gleichzeitig geschaltet werden dürfen. Quelle.
    • Bei der High-Flanke von Φ2 sind Daten- und Adressbus sowie R/W noch nicht stabil. Der VIC lässt AEC erst so spät los, dass der 6510 seine Ausgänge auch erst sehr spät wieder aktivieren kann. Quellen: Skoes Beitrag im Thema: C128 Expansion Port Timing auf Forum64.de, Beitrag in comp.sys.cbm.
    • Achtung: Z.B. im Datenblatt des 6510 taucht Φ0 nicht auf, stattdessen ist von Φ1 als Input-Takt die Rede. Vermutlich ist das historisch bedingt: Beim 6502 war Φ0 das Eingangssignal, am Ausgang Φ1 liegt Φ0 minimal verzögert und invertiert an, und Ausgang Φ2 ist der "Gegentakt" zu Φ1 (kurz high wenn Φ1 low). Beim 6510 gibt es nur einen Taktausgang. Details zum 6502.
  • Die TOD-Timer der CIAs werden separat über U27 aus dem Netztakt (9V) getaktet (außer SX64).

Weblinks[Bearbeiten | Quelltext bearbeiten]