Früher C64
Klassisches rundes Gehäuse, häufig als „Brotkasten“ bezeichnet; ältere NMOS-Chips und größere Mainboards mit mehreren Einzelbausteinen.
Das Fundament. Nicht weil er perfekt war, sondern weil sich an ihm Grenzen und Möglichkeiten unmittelbar lesen ließen.
Der C64 braucht keine Einleitung in dem Sinn, dass man erklären müsste, was er war. Meistverkaufter Heimcomputer der Geschichte, Plattform einer ganzen Generation, Kulturgegenstand. Das alles stimmt, und das alles ist hier nicht das Thema. Was mich am C64 bis heute interessiert, ist das Technische darunter: wie er aufgebaut ist, was seine Chips wirklich können, wo seine Grenzen liegen und vor allem, was Programmierer und Hardwarebastler gefunden haben, um genau diese Grenzen zu verschieben.
Denn das eigentlich Bemerkenswerte am C64 liegt nicht nur im Gerät selbst, sondern in dem, was aus genauer Kenntnis seiner Architektur entstanden ist. Rasterstrahl-Programmierung, Sprite-Multiplex, SID-Missbrauch, stabile IRQs – das sind keine Spielereien, sondern das Resultat davon, dass ein System ernst genommen wurde, bis hinunter auf Register- und Timing-Ebene.
Der C64 ist ein Verbund spezialisierter Bausteine. Der 6510 führt Programme aus, der VIC-II erzeugt Bild und DRAM-Zugriffe, der SID verarbeitet Klang und analoge Eingänge, zwei CIAs übernehmen Timer und Peripherie, und die PLA entscheidet, welcher Speicher- oder I/O-Baustein auf einen Buszugriff reagiert.
| Baustein | Systemrolle |
|---|---|
| 6510 / 8500 | 8-Bit-CPU mit integriertem 6-Bit-Port für Speichersteuerung und Datasette-Signale. |
| VIC-II | Video, Sprites, Raster-IRQ, DRAM-Refresh und zeitweilige Busübernahme. |
| SID | Drei Stimmen, Filter, externer Audioeingang sowie Paddle-Potentiometermessung. |
| CIA1 | Tastatur, Joysticks, Timer, TOD und reguläre IRQ-Quellen. |
| CIA2 | IEC-Leitungen, User-Port-Funktionen, VIC-Bankwahl, Timer und NMI-Quellen. |
| PLA / Gate Array | Adress- und Betriebsmodusdekodierung für RAM, ROM, I/O und Module. |
| RAM / ROM | 64 KB DRAM sowie BASIC-, KERNAL- und Zeichen-ROM; je nach Revision in unterschiedlichen Chipzahlen. |
Die entscheidende Eigenschaft ist das gemeinsame Timing. Grafik, CPU, Speicher und externe Erweiterungen hängen nicht unabhängig nebeneinander, sondern beeinflussen sich über denselben Bus und dieselben Taktphasen.
„C64“ bezeichnet mehrere äußerlich und intern unterschiedliche Ausführungen. Für Softwarekompatibilität bilden sie weitgehend dieselbe Plattform, für Reparatur, Chiptausch und Bild-/Toncharakter sind die Unterschiede relevant.
Klassisches rundes Gehäuse, häufig als „Brotkasten“ bezeichnet; ältere NMOS-Chips und größere Mainboards mit mehreren Einzelbausteinen.
Flacheres Gehäuse; je nach Produktionszeit noch ältere oder bereits stark kostenreduzierte C64E-Platinen.
Spätere kompakte Boardarchitektur mit 8500, 8565 und 8580 sowie stärker integrierter Logik. Spannungs- und Bauteilanforderungen ändern sich.
Transportable Variante mit eingebautem Bildschirm und Laufwerk; mechanisch und elektrisch eine eigene Serviceklasse.
Kosmetische Varianten sagen nicht immer eindeutig, welche Platine eingebaut ist. Vor Ersatzteilen oder Chiptausch muss deshalb die Boardnummer und tatsächliche Bestückung geprüft werden.
Commodore vereinfachte die Schaltung während der langen Produktionszeit mehrfach. Repräsentative Boardfamilien sind unter anderem 326298, 250407, 250425, 250466 und 250469. Diese Aufzählung ist keine vollständige Liste aller regionalen und Zwischenrevisionen.
| Boardfamilie | Typische technische Einordnung |
|---|---|
| 326298 | Frühe große Platine mit vielen Einzelbausteinen und früher Video-/Takterzeugung. |
| 250407 | Weit verbreitete klassische Platine mit 6510, 6567/6569, 6581 und acht DRAMs. |
| 250425 | Überarbeitete klassische Baugruppe mit Änderungen an Takt, Video und Bestückung. |
| 250466 | Kostenreduzierte Zwischenstufe, häufig mit zwei 64K×4-DRAMs. |
| 250469 | C64E-Board mit stärker integrierter Logik und HMOS-Chips; verschiedene Unterrevisionen. |
Der C64 leitet seine Systemtakte aus der Video-Takterzeugung ab. Deshalb unterscheiden sich PAL- und NTSC-Rechner nicht nur beim Fernsehbild, sondern auch bei CPU-Takt, Rasterzeilen und verfügbarer Rechenzeit pro Bild.
CPU und VIC-II teilen sich das DRAM. Im Normalfall organisiert die Schaltung Zugriffe in unterschiedlichen Taktphasen. Benötigt der VIC-II zusätzliche Zyklen für Badlines oder Sprite-Daten, kündigt er die Busübernahme über BA an und trennt die CPU über AEC zeitweise vom Adressbus.
| Signal | Rolle |
|---|---|
| PHI2 | CPU- und Peripherietakt; bestimmt gültige Phasen vieler Buszugriffe. |
| BA | Bus Available; warnt die CPU vor einer bevorstehenden VIC-II-Busübernahme. |
| AEC | Address Enable Control; schaltet CPU-Adressausgänge während fremder Buszyklen hochohmig. |
| R/W | Kennzeichnet Lese- oder Schreibzugriff. |
| IRQ / NMI | Maskierbare beziehungsweise nicht maskierbare Interruptanforderung. |
Genau daraus entstehen die bekannten Zyklusunterschiede zwischen normalen Rasterzeilen, Badlines und Sprite-DMA. Zeitkritischer Code muss nicht nur CPU-Befehlszeiten, sondern auch verlorene Buszyklen berücksichtigen.
Die PLA ist die zentrale Auswahllogik des klassischen C64. Sie kombiniert Adressbits, CPU-Portzustände, Modulsignale und Buszustände und erzeugt daraus Chip-Select-Signale für BASIC-ROM, KERNAL-ROM, Zeichen-ROM, I/O, RAM und Modulbereiche.
Damit ist die Speicherkarte kein statischer Schaltplan, sondern das Ergebnis
mehrerer Eingangssignale. LORAM, HIRAM und
CHAREN aus dem 6510-Port bestimmen zusammen mit
GAME und EXROM des Expansion Ports,
welche Bereiche sichtbar werden.
Ein PLA-Fehler kann deshalb sehr unterschiedliche Symptome erzeugen: schwarzer Bildschirm, fehlerhafte ROM-Auswahl, falsche I/O-Sichtbarkeit oder Modulprobleme. Ein Symptom beweist jedoch nicht allein die PLA als Ursache.
Beim Einschalten hält die Resetlogik die digitalen Bausteine zunächst in
einem definierten Zustand. Nach Freigabe liest die CPU den Resetvektor aus
$FFFC/$FFFD und beginnt im KERNAL-ROM.
Ein schwarzer Bildschirm kann deshalb bereits vor dem sichtbaren BASIC-Start entstehen: fehlende Spannung, fehlender Takt, dauerhaft aktiver Reset, nicht lesbarer ROM-Vektor, RAM-Fehler oder gestörter VIC-II-Ausgang sind nur einige mögliche Ebenen.
Der MOS 6510 ist kein reiner 6502. Der offensichtliche Unterschied: Er hat einen integrierten 6-Bit-I/O-Port, direkt auf dem Chip, erreichbar über die Adressen $0000 (Datenrichtungsregister) und $0001 (Datenwort). Das klingt wie ein Detail. Es ist keines.
Über diesen Port steuert der C64 die Bankschaltung des gesamten Speichersystems. Bits 0, 1 und 2 von $0001 bestimmen, welche Kombination aus ROM, RAM und I/O im Adressraum sichtbar ist. Zusätzlich hängen dort die Datasette-Leitungen: Bit 3 für Schreibdaten zur Datasette, Bit 4 als Sense-Eingang und Bit 5 für die Motorsteuerung. Das bedeutet: Wer in $0001 schreibt, verändert nicht nur das Speicherlayout, sondern kann zugleich Teile der angeschlossenen Kassettenhardware beeinflussen.
Der 6510 läuft im PAL-C64 mit etwas unter 1 MHz, genauer mit 0,985 MHz. Das liegt daran, dass er mit dem VIC-II synchronisiert läuft, der den Systemtakt vorgibt. Und dieser Takt hängt wiederum am Bildschirmaufbau. Schon daran sieht man: Auf dem C64 ist die CPU nicht von der Darstellung getrennt.
Die wichtigste Konsequenz: Im C64 gibt es kein ROM, hinter dem kein RAM liegt. Das darunter liegende RAM ist immer vorhanden und beschreibbar – es ist nur verdeckt. Schaltet man das ROM ab, wird dieses RAM sichtbar. Genau darauf bauen viele fortgeschrittene Techniken auf.
Die ersten 256 Bytes des Adressraums – die Zero Page ($0000–$00FF) – haben beim 6502/6510 einen besonderen Status. Viele Befehle können Zero-Page-Adressen mit nur einem Byte kodieren statt mit zweien, was kürzere und schnellere Befehle ergibt. KERNAL und BASIC nutzen dabei bereits einen großen Teil dieser Adressen. Wer in Maschinensprache arbeitet, lernt deshalb schnell, dass gute Zero-Page-Kenntnis nicht Komfort, sondern Geschwindigkeit bedeutet.
Der Stack liegt bei $0100–$01FF und ist 256 Bytes groß. Das wirkt zunächst ausreichend, ist es aber nicht in jeder Situation. Tief verschachtelte Unterprogramme, Interrupt-Routinen und unachtsame Register-Sicherungen können ihn schnell an seine Grenze bringen. Stack-Probleme auf dem C64 melden sich selten sauber. Meist zeigt sich nur, dass ein Programm irgendwann nicht mehr tut, was es soll.
Die 64 KB des C64 sind nicht alle gleichzeitig frei nutzbar. Der Adressraum ist aufgeteilt zwischen RAM, ROM-Einblendungen und I/O-Bereichen, und welcher davon sichtbar ist, hängt von der Konfiguration in $0001 ab. Das ist das Grundprinzip des C64-Speichermodells: physisch 64 KB RAM, darübergelegt ROM und I/O.
| Adresse | Größe | Inhalt im Standardzustand |
|---|---|---|
| $0000–$00FF | 256 B | Zero Page – CPU-Port in $0000/$0001, KERNAL/BASIC-Variablen |
| $0100–$01FF | 256 B | Stack |
| $0200–$03FF | 512 B | KERNAL- und BASIC-Systemvariablen, Tastaturpuffer usw. |
| $0400–$07FF | 1 KB | Standard-Bildschirm-RAM (40×25 Zeichen) |
| $0800–$9FFF | ~38 KB | Freies RAM / BASIC-Programmbereich |
| $A000–$BFFF | 8 KB | BASIC-ROM (oder RAM, wenn BASIC abgeschaltet) |
| $C000–$CFFF | 4 KB | Freies RAM |
| $D000–$DFFF | 4 KB | I/O-Bereich: VIC-II, SID, CIA1, CIA2, Color-RAM (oder Zeichen-ROM oder RAM) |
| $E000–$FFFF | 8 KB | KERNAL-ROM (oder RAM, wenn KERNAL abgeschaltet) |
Der I/O-Bereich bei $D000–$DFFF ist besonders interessant. Dort liegen die Register aller wichtigen Chips: VIC-II ab $D000, SID ab $D400, Color-RAM ab $D800, CIA1 ab $DC00, CIA2 ab $DD00. Dieser Bereich kann aber auch auf das Zeichen-ROM umgeschaltet werden – was das Auslesen des eingebauten Zeichensatzes ermöglicht – oder auf das darunter liegende RAM.
Ein weiterer wichtiger Punkt: Der VIC-II sieht den Adressraum nicht so wie die CPU. Er arbeitet mit 16-KB-Bänken, von denen es vier gibt. CIA2 steuert, welche dieser Bänke der VIC-II gerade sieht. Standard ist Bank 0 ($0000–$3FFF).
Innerhalb dieser 16-KB-Bank zeigt der VIC-II auf Bitmap-Daten, Bildschirm-RAM und Zeichensatz. Das bedeutet: Wer den VIC-II auf eine andere Bank schaltet, kann Bilddaten in einem Bereich halten, der für die CPU anders organisiert ist. Genau daraus ergeben sich Double-Buffering- und Scroll-Techniken.
Der Startbildschirm ist das Ergebnis mehrerer ROM-Schichten. BASIC 2.0 stellt Interpreter und Programmlogik bereit; der KERNAL kapselt zentrale I/O-Dienste; Editor- und Bildschirmroutinen verbinden Tastatur, Zeichensatz und Anzeige.
Im Standardzustand meldet BASIC 38911 freie Bytes. Diese Zahl beschreibt den normalen BASIC-Programmbereich, nicht die gesamte physisch vorhandene RAM-Menge.
Der KERNAL verwendet im RAM eine Vektortabelle, über die Programme Funktionen umbiegen können. Beispiele sind IRQ, NMI, Zeichen-Ein-/Ausgabe, LOAD und SAVE.
| Adresse | Vektor |
|---|---|
| $0314/$0315 | IRQ-Vektor |
| $0318/$0319 | NMI-Vektor |
| $0324/$0325 | CHRIN – Zeichen lesen |
| $0326/$0327 | CHROUT – Zeichen ausgeben |
| $0330/$0331 | LOAD |
| $0332/$0333 | SAVE |
Davon zu unterscheiden sind die festen Hardwarevektoren am oberen Ende
des Adressraums: NMI bei $FFFA/$FFFB, Reset bei
$FFFC/$FFFD und IRQ/BRK bei $FFFE/$FFFF.
Tastatur- und Textzeichen werden nicht überall als identischer Zahlenwert behandelt. PETSCII, Bildschirmcodes und Zeichensatzgrafik sind verwandte, aber unterschiedliche Ebenen. Wer direkt ins Screen-RAM schreibt, muss deshalb Bildschirmcodes verwenden und die Farbe separat im Color-RAM setzen.
Der MOS 6569 (PAL) – kurz VIC-II – ist das Herzstück des C64. Er erzeugt nicht nur das Bild, er bestimmt auch das Timing des gesamten Systems. Wer den VIC-II versteht, versteht den C64.
Der VIC-II erzeugt das Bild, indem er Zeile für Zeile einen Rasterstrahl simuliert – so wie ein röhrenbasierter Monitor tatsächlich arbeitet. Der PAL-C64 hat insgesamt 312 Rasterzeilen, von denen 200 den sichtbaren Hauptbereich ausmachen. Während der Rasterstrahl eine Zeile durchläuft, liest der VIC-II Daten aus dem RAM. Genau dort beginnt das interessante Zusammenspiel mit der CPU.
Alle 8 Rasterzeilen muss der VIC-II neue Zeichenkodierungen aus dem Bildschirm-RAM lesen. In diesen Zeilen – den sogenannten Badlines – hält er die CPU für viele Taktzyklen an und nutzt den Bus allein. Das passiert automatisch, wenn das Display aktiv ist und die unteren drei Bits der aktuellen Rasterzeile mit den unteren drei Bits des Y-Scrollregisters ($D011, Bits 0–2) übereinstimmen.
Diese CPU-Bremse ist regelmäßig und vorhersehbar. Wer zeitkritischen Code schreibt – etwa für stabile Raster-Interrupts – muss Badlines einkalkulieren. Und wer das Y-Scrollregister verändert, verschiebt damit auch das Badline-Muster. Das wird bewusst genutzt: etwa für FLD-Effekte oder andere vertikale Timing-Tricks.
40×25 Zeichen, je 8×8 Pixel. Pro Zeichen eine Vordergrundfarbe aus dem Color-RAM, gemeinsame Hintergrundfarbe. Schnell, sparsam, aber farblich je Zeichen eingeschränkt.
Wie Zeichenmodus, aber jedes Pixel effektiv 2 Bit breit. Vier Farben möglich, dafür halbe horizontale Auflösung.
320×200 Pixel, 1 Bit pro Pixel. Freie Pixelsetzung, aber nur zwei Farben pro 8×8-Zelle.
160×200 Pixel effektiv. Vier Farben pro 4×8-Block. Grundlage vieler typischer C64-Grafiken.
Das Color-RAM bei $D800–$DBFF ist kein normales 8-Bit-System-RAM, sondern ein separater 4-Bit-Speicher. Die CPU erreicht es im normalen I/O-Fenster, wenn I/O an $D000–$DFFF eingeblendet ist. Wird dort Zeichen-ROM oder das darunterliegende RAM sichtbar gemacht, ist Color-RAM für die CPU nicht auf dieselbe Weise adressierbar.
Der VIC-II erhält die Farbnibbles dagegen über einen eigenen Hardwarepfad. Das Color-RAM lässt sich nicht wie normales Bild-RAM in eine andere 16-KB-VIC-Bank verlegen. Spätere kostenreduzierte Boards können diese Funktion in stärker integrierter Logik enthalten.
Der VIC-II kann einen Interrupt auslösen, wenn der Rasterstrahl eine bestimmte Zeile erreicht. Das ist die Grundlage für einen großen Teil dessen, was den C64 visuell von anderen Rechnern seiner Zeit unterscheidet.
Die Rasterzeile für einen Interrupt wird über $D012 konfiguriert, zusammen mit Bit 7 von $D011. Erreicht der Rasterstrahl diese Position, setzt der VIC-II ein Interrupt-Flag und die CPU springt in eine Service-Routine. Dort können VIC-II-Register in exakt definierten Bildphasen verändert werden.
Das Problem: Der Zeitpunkt, zu dem ein IRQ tatsächlich wirksam wird, variiert leicht – abhängig davon, welchen CPU-Befehl die Maschine gerade ausführt. Für grobe Effekte ist das egal. Für pixelgenaue Wechsel ist es das nicht.
Die Lösung ist der Double-IRQ-Trick. Der erste IRQ fängt die Unschärfe ab, der zweite arbeitet an einer stabileren Position. So erreicht man ein Timing, das für horizontale Farbgrenzen, Splits oder andere empfindliche Effekte ausreichend ruhig ist.
„Der Rasterstrahl ist kein Grafikdetail, sondern eine Taktfrage. Wer das verstanden hat, sieht den VIC-II anders.“
Der VIC-II unterstützt 8 Hardware-Sprites gleichzeitig. Jedes Sprite ist 24×21 Pixel groß, kann horizontal oder vertikal verdoppelt werden, hat eine eigene Position und eine eigene Farbe. Das ist für Spiele und bewegte Objekte ein erheblicher Vorteil gegenüber rein softwaregezeichneter Grafik.
Acht Sprites für ein ganzes Spielfeld sind allerdings wenig. Die Lösung ist Sprite-Multiplex. Dabei wird ein Sprite-Kanal neu positioniert, nachdem der Rasterstrahl an seiner bisherigen Position vorbei ist. Dasselbe Hardware-Sprite erscheint dadurch im selben Bild an mehreren Stellen.
Für jeden neu verwendeten Sprite-Kanal wird ein Raster-IRQ an einer passenden Y-Position gesetzt. In diesem IRQ werden neue Sprite-Daten, neue Zeiger und neue Koordinaten geschrieben. Das funktioniert nur, wenn das Timing stimmt und genügend CPU-Zeit frei bleibt.
Die harte Grenze bleibt: Pro Rasterzeile sind maximal 8 Sprites gleichzeitig darstellbar. Multiplex erhöht also nicht die Zahl pro Zeile, sondern nur die Gesamtzahl im Bild.
Der VIC-II hat Hardware-Kollisionserkennung: ein Register für Sprite-zu-Sprite-Kollisionen und eines für Sprite-zu-Hintergrund-Kollisionen. Das erleichtert einfache Abfragen erheblich. Für präzise Spielphysik reicht es allein nicht, aber als Hardware-Hinweis ist es nützlich.
Der C64-Bildschirm hat einen sichtbaren Rahmen, den Border. Offiziell gehört dieser Bereich nicht zum nutzbaren Bild. Praktisch lässt er sich manipulieren.
Der VIC-II setzt den Border am oberen und unteren Rand abhängig von einem internen Status. Dieser Status lässt sich beeinflussen, wenn man im richtigen Moment das Display-Enable-Bit in $D011 kurz deaktiviert und wieder setzt. Das Ergebnis ist vertikales Open Border: Der normalerweise verdeckte Bereich kann für weitere Darstellung genutzt werden.
Ähnlich arbeitet das horizontale Open Border über $D016. Das Timing ist enger, der Trick empfindlicher. Gelingt er, können auch seitliche Randbereiche sichtbar genutzt werden.
Beim seitlichen Öffnen wird entsprechend die 38-/40-Spaltenlogik
über CSEL in $D016 im kritischen Zyklus beeinflusst.
DEN in $D011 ist für das grundsätzliche Aktivieren des Displays
wichtig, ersetzt aber nicht die RSEL-/CSEL-Vergleichslogik der Border-Tricks.
Beide Varianten zusammen machen sichtbar, dass der scheinbar feste Bildschirmrahmen in Wahrheit ebenfalls ein Ergebnis interner Zustandslogik ist – und damit prinzipiell veränderbar.
Der MOS 6581 (später: MOS 8580) ist einer der ungewöhnlichsten Soundchips seiner Zeit. Er hat drei Stimmen, jede mit eigener Wellenformsteuerung, Hüllkurve, Frequenz- und Pulsbreitenregelung. Dazu kommt ein analoger Filter, der den Charakter des Chips wesentlich mitprägt.
Der SID ist aber nicht nur wegen seiner dokumentierten Funktionen interessant. Vieles von dem, was ihn in der Praxis besonders machte, liegt gerade in den Bereichen, die nur durch genaues Ausprobieren oder durch langes Hören wirklich verstanden wurden.
Diese C64-Seite beschreibt den SID als Bestandteil des Gesamtsystems. Filterrevisionen, 6581-/8580-Klangunterschiede, kombinierte Wellenformen, Digis, externe Beschaltung und Erhaltung werden auf sid.htm ausführlicher getrennt behandelt.
Zwei fortgeschrittene Modulationsmodi sind besonders wichtig: Ring-Modulation und Oscillator-Sync. Beide erzeugen Klangcharaktere, die mit einfachen Grundwellenformen allein nicht erreichbar wären. Gerade dadurch wird der SID mehr als ein Standard-Dreistimmen-Chip.
Dokumentiert sind vier Einzelwellenformen. In der Praxis lassen sich jedoch mehrere Wellenformenbits gleichzeitig setzen. Das Ergebnis sind kombinierte Klänge, die sich nicht allein aus dem Handbuch erklären. Viele typische SID-Klangfarben beruhen genau auf dieser Art von Nutzung.
Die dritte SID-Stimme kann aus dem hörbaren Mix entfernt werden und läuft trotzdem weiter. Ihr Zustand bleibt lesbar. Damit lässt sie sich im Rauschmodus als einfache Quelle für Pseudozufallswerte nutzen – ein bekannter und nützlicher Nebeneffekt der Architektur.
Der ältere 6581 und der neuere 8580 klingen spürbar unterschiedlich. Der 6581 ist rauer und ungenauer, der 8580 sauberer und kontrollierter. Viele Kompositionen und Tricks sind deshalb nicht vollständig zwischen beiden Chips austauschbar.
Über POTX und POTY besitzt der SID zudem zwei analoge Eingänge, ursprünglich für Paddle-Controller gedacht. Auch das zeigt, dass der Chip nicht auf reine Klangsynthese reduziert ist, sondern an mehreren Stellen über seinen offensichtlichen Zweck hinausreicht.
Der C64 hat zwei MOS 6526 CIA-Chips. CIA1 sitzt bei $DC00, CIA2 bei $DD00. Jeder CIA besitzt zwei 16-Bit-Timer, zwei 8-Bit-I/O-Ports, eine Uhrlogik und ein serielles Schieberegister.
CIA1 kümmert sich im Standardbetrieb vor allem um Tastatur-Scanning, Joystick-Port 2 und den normalen KERNAL-Zeittakt. CIA2 steuert unter anderem den seriellen IEC-Bus und die VIC-II-Bankumschaltung. Damit gehören beide CIAs zu den Chips, die im Alltag leicht übersehen werden, für die Gesamtfunktion aber unverzichtbar sind.
CIA1 hängt am normalen IRQ, CIA2 am NMI. Das ist ein erheblicher Unterschied. Ein NMI lässt sich nicht einfach mit SEI unterdrücken. Wer CIA2 nutzt, greift also deutlich tiefer in das Systemverhalten ein.
Die Tastatur ist als 8×8-Matrix organisiert und wird über CIA1 abgefragt. Daraus ergibt sich die bekannte Ghost-Key-Problematik: Bestimmte Tastenkombinationen beeinflussen sich gegenseitig. Wer eigene Abfrageroutinen schreibt, muss diese Matrixlogik selbst sauber berücksichtigen.
Der 6510 besitzt einen maskierbaren IRQ-Eingang und einen nicht maskierbaren NMI-Eingang. Mehrere Bausteine teilen sich diese Leitungen, weshalb eine Interrupt-Routine immer die tatsächliche Quelle prüfen und bestätigen muss.
| Leitung | Typische Quellen |
|---|---|
| IRQ | VIC-II-Raster/Kollision/Lightpen, CIA1-Timer/TOD/FLAG/seriell sowie Expansion-Port-Erweiterungen. |
| NMI | CIA2, RESTORE-Schaltung und Expansion-Port-Erweiterungen. |
SEI blockiert die Reaktion auf IRQ, aber nicht auf NMI.
Eine NMI-Routine muss deshalb besonders vorsichtig mit Bankschaltung,
Stack und bereits laufenden kritischen Abschnitten umgehen.
Beim VIC-II wird das gesetzte Interruptflag durch Rückschreiben einer Eins in das entsprechende Bit bestätigt. Bei den CIAs liefert das Lesen des Interrupt Control Registers die Quelle und löscht die gemeldeten Flags. Werden Quellen nicht korrekt quittiert, folgt unmittelbar der nächste Interrupt.
Die Steckerform allein genügt nicht zur Beurteilung eines C64-Anschlusses. Manche Ports führen Logiksignale direkt zu empfindlichen Custom-Chips, andere enthalten Versorgungsspannungen oder analoge Signale.
| Anschluss | Systemrolle und Vorsicht |
|---|---|
| Expansion Port | Adress-/Datenbus, ROM-Auswahl, GAME/EXROM, IRQ/NMI, DMA und Versorgung; niemals als beliebiger Steckplatz behandeln. |
| User Port | CIA2-I/O, Handshake, serielles Schieberegister, Reset, +5 V und 9 V AC; keine echte RS-232-Pegelwandlung eingebaut. |
| IEC Serial | ATN, CLOCK, DATA, RESET und Masse für intelligente Commodore-Peripherie. |
| Cassette | Read, Write, Sense, Motorversorgung, +5 V und Masse für Commodore-Datasette. |
| Control Ports | Joysticks, Paddle-Potentiometer und kompatible Eingabegeräte; direkt mit CIA/SID verschaltet. |
| Audio/Video | Composite, Luma/Chroma, Audio und je nach Buchsenrevision zusätzliche Signale. |
| RF | Modulierter Fernsehausgang; qualitativ und elektrisch nicht mit separatem Luma/Chroma gleichzusetzen. |
Die Joystickkontakte wirken auf dieselben CIA-Portleitungen, die auch zum Abtasten der Tastaturmatrix verwendet werden. Falsch verdrahtete oder aktiv treibende Controller können deshalb Tastaturfehler erzeugen oder CIA-Ausgänge gegeneinander belasten.
Module können weit mehr als ein ROM einblenden. Über den Expansion Port
stehen Bus, Takt, Interruptleitungen, ROM-Auswahlsignale und DMA zur Verfügung.
GAME und EXROM wählen zusammen mit der PLA
unterschiedliche Modul-Speichermodelle.
Typischer ROM-Bereich bei $8000–$9FFF; weiterer Adressraum bleibt nahe am normalen C64-Modell.
Zusätzlicher ROM-Bereich bei $A000–$BFFF; BASIC-ROM wird entsprechend verdrängt.
Stark veränderte Speicherkarte mit Modul-ROM und nur teilweise sichtbarem internem RAM.
Kann NMI, ROM-Banking, eigene I/O-Register und geänderte KERNAL-Routinen kombinieren.
Ein Modul kann deshalb Startvorgang, Speicherkarte, Interrupts und Massenspeicherzugriff gleichzeitig verändern. Diagnose sollte immer auch ohne Modul und mit gereinigtem Expansion-Port erfolgen.
Die Datasette liefert dem C64 keinen bereits decodierten Byte-Strom. Sie wandelt Magnetisierungswechsel in Impulse; KERNAL- oder Schnellladeroutinen messen deren Zeitabstände und rekonstruieren daraus Daten.
Kopfjustage, Bandgeschwindigkeit, Pegel und Verschmutzung wirken direkt auf die Impulsform. Für Archivierung ist deshalb ein hochwertiger Rohmitschnitt häufig wertvoller als nur ein einmal erfolgreich geladenes Programm.
Die Commodore 1541 ist in gewisser Weise ein Rechner für sich. Sie enthält eine eigene MOS 6502-CPU, RAM, ROM und zwei MOS 6522 VIA-Chips. Das Laufwerk ist also kein passives Zusatzgerät, sondern ein eigenständiges System mit eigenem Betrieb.
Dieses Design hat Vorteile, aber auch die berühmteste Schwäche des gesamten C64-Umfelds: die langsame Standardkommunikation über den seriellen IEC-Bus.
Hier bleibt die 1541 auf ihre Rolle im C64-Gesamtsystem begrenzt. Mechanik, Kopf, Motorsteuerung, Laufwerksrevisionen und Medienerhaltung gehören ausführlicher auf laufwerke-und-diskettenstationen.htm; die Leitungs- und Protokollebene auf iec-bus.htm.
Beim C64 wurde die serielle Anbindung gegenüber älteren Commodore-Systemen stark vereinfacht. Der Preis dafür war Geschwindigkeit. Wo deutlich mehr möglich gewesen wäre, blieben in der Praxis oft nur etwa 300–400 Bytes/s übrig.
Das ist der eigentliche Grund dafür, warum Fast Loader auf dem C64 so wichtig wurden. Das Problem lag nicht an einzelnen Programmen, sondern tief im offiziellen Übertragungsweg.
Die 1541 nutzt GCR (Group Code Recording) und vier unterschiedliche Geschwindigkeitszonen, um auf verschiedenen Spurgruppen eine sinnvolle Datendichte zu erreichen. Technisch ist das durchdachter, als der Ruf des Laufwerks vermuten lässt.
Das Directory liegt auf Spur 18, ebenso die BAM (Block Availability Map). Schon daran sieht man: Auch das DOS der 1541 ist kein Nebenaspekt, sondern ein technischer Raum, in dem sich viel verstehen und manipulieren lässt.
Der serielle Commodore-Bus verbindet intelligente Geräte über gemeinsam genutzte Leitungen. Der C64 signalisiert mit ATN, ob Bytes als Buskommando oder Nutzdaten zu interpretieren sind; CLOCK und DATA übertragen den eigentlichen Handshake.
| Leitung | Funktion |
|---|---|
| ATN | Attention; kennzeichnet Befehlsphase und Adressierung von Geräten. |
| CLOCK | Taktsignal beziehungsweise Handshake-Leitung der seriellen Übertragung. |
| DATA | Serielle Datenleitung mit gemeinsamem Open-Collector-Prinzip. |
| RESET | Setzt angeschlossene Commodore-Peripherie zurück. |
| GND | Gemeinsamer elektrischer Bezug. |
Mehrere Geräte können verkettet werden und besitzen logische Gerätenummern. Elektrisch defekte oder dauerhaft auf Low gezogene Leitungen eines einzigen Geräts können deshalb den gesamten Bus blockieren.
Die vollständige Signallogik, Open-Collector-Beschaltung, Geräteadressierung und Fast-Serial-Abgrenzung bleibt auf iec-bus.htm.
Die naheliegende Antwort auf die langsame Standardkommunikation der 1541 war: ein eigenes Ladeprotokoll. Genau das ist der Fast Loader.
Ein Fast Loader besteht aus zwei Teilen: einer Routine auf dem C64 und einer Routine, die in das RAM der 1541 übertragen wird. Ab diesem Moment arbeitet das Laufwerk nicht mehr mit seinem normalen Protokoll, sondern mit einem eigens optimierten.
Reine Software-Fast-Loader erreichen meist 1,5 bis 4 KB/s. Mit zusätzlichem Parallelanschluss – also einer direkten Verbindung zwischen C64-User-Port und 1541-Hardware – sind deutlich höhere Raten möglich. Dann nähert man sich den physischen Grenzen des Laufwerks.
„Ein Fast Loader war keine Spielerei. Er war die sachlich richtige Antwort auf einen unnötig langsamen Standardweg.“
Eine 5,25-Zoll-Diskette hat zwei physische Seiten. Die 1541 nutzt standardmäßig nur eine davon. Die andere bleibt ungenutzt – sofern man nichts daran ändert.
Die Lösung war direkt: Auf der Rückseite wurde an passender Stelle eine zweite Schreibschutzkerbe angebracht. Danach ließ sich die Diskette gedreht erneut verwenden. Das ist keine Magie, sondern eine einfache mechanische Antwort auf eine einfache mechanische Sperre.
BASIC auf dem C64 ist für viele Aufgaben zu langsam. Wer Raster stabil halten, Sprites sauber multiplexen oder schnelle Spiellogik bauen wollte, landete zwangsläufig in der Maschinensprache.
Das klassische externe C64-Netzteil liefert geregelte 5 V Gleichspannung und 9 V Wechselspannung. Die 5-V-Schiene versorgt wesentliche Logik direkt; aus 9 V AC erzeugen ältere Mainboards intern weitere Spannungen und den Zeitbasisbezug für die CIA-TOD-Uhren.
Spätere C64E-Platinen verwenden andere Custom-Chip-Familien und interne Spannungswege. Deshalb müssen Boardrevision, SID, VIC-II und deren Außenbeschaltung gemeinsam betrachtet werden.
Viele C64-Fehlerbilder haben mehrere mögliche Ursachen. Die Diagnose beginnt mit Versorgung, Takt, Reset und Busaktivität, bevor einzelne Custom-Chips auf Verdacht getauscht werden.
| Symptom | Mögliche Prüfebenen |
|---|---|
| Schwarzer Bildschirm | Netzteil, Reset, Takt, CPU, PLA, ROM, RAM, VIC-II, Modul und Videoausgang. |
| Wirre Zeichen | RAM, Zeichen-/Screen-Daten, VIC-II-Zugriff, PLA, ROM oder Sockelkontakte. |
| READY, aber falsche freie Bytes | RAM-Fehler, Modulbelegung, ROM-/PLA-Auswahl oder beschädigte Initialisierung. |
| Keine Tastatur | Tastaturmatrix, CIA1, Steckverbinder, Joystick-Port oder Softwarezustand. |
| Kein Ton | SID, Versorgung, Audioausgang, Filterbeschaltung, Lautstärke-/Registerzustand oder Kabel. |
| IEC-Geräte fehlen | Kabel, Gerätenummer, CIA2, Treiberstufen, Reset-/ATN-/CLOCK-/DATA-Leitungen oder Peripherie. |
| Modul startet nicht | Expansion-Port-Kontakte, GAME/EXROM, PLA, ROML/ROMH, Versorgung oder Modul selbst. |
Ein Dead-Test-Modul kann auch bei fehlendem KERNAL-Start Hinweise liefern, ersetzt aber keine Spannungs- und Taktprüfung. Diagnose-Harnesses testen zusätzlich Ports und externe Schleifen, wenn die CPU bereits zuverlässig läuft.
Ein historischer C64 sollte vor dem ersten längeren Betrieb dokumentiert und geprüft werden. Ziel ist nicht nur „er zeigt ein Bild“, sondern ein nachvollziehbarer Ausgangszustand.
Reinigung und Sockelarbeit erfolgen antistatisch und ohne unnötiges Heraushebeln alter ICs. Oxidierte Kontakte können Fehler verursachen, doch jeder mechanische Eingriff birgt ebenfalls ein Risiko.
Die Grundarchitektur, Anschlüsse, Speicherbereiche und Systemdienste orientieren sich an Commodore-Handbüchern, Serviceunterlagen und Originaldatenblättern der MOS-/Commodore-Bausteine.
Commodore 64 Programmer's Reference Guide
Commodore 64 Service Manual – HTML-Ausgabe
Commodore C64/C64C Service Manual, PN 314001-03
Commodore 64 User's Guide – Textfassung
MOS 6510 Microprocessor with I/O – Datenblatt
Commodore Semiconductor Group 6526 CIA – Datenblatt
MOS 6581 Sound Interface Device – Datenblatt
Undokumentierte Raster-, Border-, FLI-, SID- und Kopierschutztechniken können sich nach PAL/NTSC, Chiprevision und exaktem Zyklustiming unterscheiden. Solche Verfahren müssen gegen reale Hardware oder eine ausreichend zyklusgenaue Referenz geprüft werden.
Wenn ich auf den C64 zurückblicke, dann nicht zuerst mit Nostalgie, sondern mit der Frage, was von dieser Arbeitshaltung geblieben ist. Die Antwort ist: einiges. Nicht als Registerwissen, sondern als Denkweise.
Der C64 lehrte vor allem, dass Grenzen keine Störung sein müssen, sondern Teil der Architektur. Wer das System ernst nimmt, lernt nicht nur, was offiziell vorgesehen ist, sondern was tatsächlich passiert – auf dem Bus, im Timing, im Speicher, im Zusammenspiel der Chips.
Genau diese Fragehaltung bleibt nützlich: nicht beim ersten offensichtlichen Erklärungsversuch stehen bleiben, sondern darunter schauen. Warum ist etwas langsam? Warum bricht etwas an genau dieser Stelle? Welche Systembedingung steht dahinter? Der C64 hat diese Art des Hinsehens geschärft.
Der C64 zeigt außerdem etwas, das weit über seine eigene Zeit hinausreicht: Gute Technik entsteht nicht automatisch aus vielen Ressourcen. Sie entsteht häufig aus genauer Kenntnis dessen, was bereits da ist.
Auch deshalb bleibt der C64 für mich nicht als Kultobjekt interessant, sondern als ein System, an dem sich sehr klar lernen ließ, wie viel aus einer Architektur herauszuholen ist, wenn man sie wirklich versteht.
„Am C64 lernte man früh, dass Grenzen keine Störung sein müssen, sondern Teil der Architektur.“
Diese Datei gehört zu den Commodore-, Heimcomputer-, Hardware- und Übergangssystem-Seiten im sslxy-Bereich.
Diese Seite liegt im sslxy-Bereich der Domain und behandelt private technische Erinnerungen, historische Rechnerarchitektur, Programmierverfahren, Wartung und die nüchterne Einordnung des Commodore 64. sslxy ist ein technisches Pseudonym und kein davon getrennt betriebener Anbieter.
Genannte Marken-, Produkt-, Baustein- und Protokollnamen dienen ausschließlich der sachlichen technischen und historischen Einordnung. Diese Seite ist keine Hersteller-, Reparaturwerkstatt- oder Händlerpräsenz und steht in keiner geschäftlichen Verbindung zu den genannten Rechteinhabern.
Anbieter und Verantwortlicher der gesamten Domain – einschließlich dieses Unterverzeichnisses – ist der Betreiber des Goldenen Ochsen in Göppingen-Hohenstaufen. Die maßgeblichen Anbieterangaben stehen im zentralen Impressum der Domain; die Informationen zur Datenverarbeitung in der Datenschutzerklärung der Domain.
Hinweise zu Netzteilen, Spannungen, Platinen, Chips und Reparaturverfahren sind allgemeine technische Dokumentation. Arbeiten an Netzspannung und unbekannter historischer Hardware setzen geeignete Fachkenntnis, Messmittel und die Schaltunterlagen der konkreten Revision voraus.
Kontakt für technische Rückfragen: mail@sslxy.de
Auch diese Unterseite ist als rein informative, statische HTML-Seite konzipiert. Es werden keine Tracker, keine Analyse-Tools und keine zustimmungspflichtigen Cookies eingesetzt.
Statische Seite. Schlanke Struktur. Technischer Inhalt ohne unnötigen Überbau.