sslxy

c64

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.

System Diagnostic

> C64 ANALYSIS
CPU MOS 6510/8500 – ca. 0,985 MHz (PAL) beziehungsweise 1,023 MHz (NTSC) / 6-Bit-I/O-Port am Chip VIDEO MOS 6569 VIC-II (PAL) – Sprites, Bitmap, Rasterstrahl, 16 Farben AUDIO MOS 6581 / 8580 SID – 3 Stimmen, Filter, Ring-Mod, Sync RAM 64 KB – davon durch ROM-Einblendung teils verdeckt, aber grundsätzlich vorhanden I/O 2× MOS 6526 CIA – Timer, Interrupt, Joystick, serieller Bus SPEICHER Bankschaltung über CPU-Port $01 sowie GAME/EXROM – ROM, RAM, I/O und Modulbereiche konfigurierbar LOGIC PLA erzeugt Chip-Select-Signale aus Adress-, Port-, Modul- und Buszuständen BUS CPU und VIC-II teilen sich RAM; BA warnt vor Busübernahme, AEC trennt CPU-Adressausgänge ROM BASIC 8 KB / KERNAL 8 KB / Zeichen-ROM 4 KB; darunter beziehungsweise daneben bleibt RAM vorhanden POWER extern 5 V DC und 9 V AC; interne abgeleitete Spannungen und Chipanforderungen unterscheiden sich nach Mainboard-Revision MINDSET verstehen, was wirklich möglich ist – nicht nur, was dokumentiert wurde
Ein System, das man erst dann wirklich kennt, wenn man seine versteckten Spielräume ebenfalls kennt.
[hardware/system_architecture]

Systemarchitektur: kein einzelner Hauptchip

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.

[hardware/system_variants]

Gehäuse- und Systemvarianten

„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.

Früher C64

Klassisches rundes Gehäuse, häufig als „Brotkasten“ bezeichnet; ältere NMOS-Chips und größere Mainboards mit mehreren Einzelbausteinen.

C64C

Flacheres Gehäuse; je nach Produktionszeit noch ältere oder bereits stark kostenreduzierte C64E-Platinen.

C64E

Spätere kompakte Boardarchitektur mit 8500, 8565 und 8580 sowie stärker integrierter Logik. Spannungs- und Bauteilanforderungen ändern sich.

SX-64

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.

[hardware/mainboard_revisions]

Mainboard-Revisionen und Bestückungsfamilien

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.
[hardware/clock_bus]

Takt, PHI2, BA und AEC

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.

[hardware/pla_decode]

PLA und Adressdekodierung

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.

[PLA_Decision]
> CPU address + read/write state
> LORAM / HIRAM / CHAREN
> GAME / EXROM cartridge mode
> VIC or CPU bus ownership
> select RAM, ROM, I/O or cartridge resource

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.

[system/reset_startup]

Reset und Startvorgang

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.

  1. Versorgung und Takt: Spannungen stabilisieren sich und die Takterzeugung läuft an.
  2. Reset: CPU und Peripherielogik erhalten einen definierten Startzustand.
  3. Hardwarevektor: 6510 lädt die Startadresse aus $FFFC/$FFFD.
  4. KERNAL-Initialisierung: I/O, Bildschirm, CIA-Zustände und RAM-Bereiche werden vorbereitet.
  5. BASIC-Initialisierung: Interpreter und Arbeitszeiger werden gesetzt.
  6. READY: Editor und BASIC warten auf Benutzereingabe.

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.

[hardware/cpu]

MOS 6510 – nicht nur ein 6502

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.

; CPU-Port: Bankschaltung und Datasette
; $0000 = Datenrichtungsregister (1 = Ausgang)
; $0001 = Datenwort
;
; Bit 0 = LORAM / BASIC-ROM-Schaltung
; Bit 1 = HIRAM / KERNAL-ROM-Schaltung
; Bit 2 = CHAREN / I/O oder Zeichen-ROM im Bereich $D000-$DFFF
; Bit 3 = Datasette Write Data
; Bit 4 = Datasette Sense
; Bit 5 = Datasette Motor Control
;
; Wichtig: RAM liegt unter ROM/I/O weiterhin physisch vor – es ist nur verdeckt

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.

Zero Page und Stack

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.

[hardware/memory_model]

Speichermodell und Bankschaltung

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.

AdresseGrößeInhalt im Standardzustand
$0000–$00FF256 BZero Page – CPU-Port in $0000/$0001, KERNAL/BASIC-Variablen
$0100–$01FF256 BStack
$0200–$03FF512 BKERNAL- und BASIC-Systemvariablen, Tastaturpuffer usw.
$0400–$07FF1 KBStandard-Bildschirm-RAM (40×25 Zeichen)
$0800–$9FFF~38 KBFreies RAM / BASIC-Programmbereich
$A000–$BFFF8 KBBASIC-ROM (oder RAM, wenn BASIC abgeschaltet)
$C000–$CFFF4 KBFreies RAM
$D000–$DFFF4 KBI/O-Bereich: VIC-II, SID, CIA1, CIA2, Color-RAM (oder Zeichen-ROM oder RAM)
$E000–$FFFF8 KBKERNAL-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.

VIC-II und Speicherbereiche

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.

[software/kernal_basic_vectors]

KERNAL, BASIC, Editor und Vektoren

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.

RAM-Vektoren statt fest verdrahteter Aufrufe

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.

PETSCII und Screen Codes

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.

[hardware/vic-ii]

VIC-II – wie er wirklich funktioniert

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.

Badlines – wenn der VIC-II die CPU bremst

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.

Grafikmodi

Zeichenmodus (Standard)

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.

Multicolor-Zeichenmodus

Wie Zeichenmodus, aber jedes Pixel effektiv 2 Bit breit. Vier Farben möglich, dafür halbe horizontale Auflösung.

Hires-Bitmap

320×200 Pixel, 1 Bit pro Pixel. Freie Pixelsetzung, aber nur zwei Farben pro 8×8-Zelle.

Multicolor-Bitmap

160×200 Pixel effektiv. Vier Farben pro 4×8-Block. Grundlage vieler typischer C64-Grafiken.

Color-RAM – die besondere Eigenheit

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.

[programming/raster]

Rasterstrahl-Tricks

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.

Stabiler Raster-IRQ

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.

  • Farb-Split Hintergrundfarbe oder Rahmenfarbe werden in einer Raster-Routine geändert. So entstehen mehrere horizontale Zonen, obwohl das System offiziell nur wenige globale Farbregister bietet.
  • Horizontaler Scrolling-Split Über $D016 kann ein Teil des Bilds scrollen, während ein anderer statisch bleibt – klassische Aufteilung zwischen Spielfeld und Statusbereich.
  • FLD – Flexible Line Distance Durch gezieltes Schreiben in $D011 kurz vor den richtigen Rasterzeilen lässt sich derselbe Bildinhalt mehrfach darstellen. Das dehnt Bereiche vertikal, ohne Bilddaten im Speicher selbst zu verschieben.
  • FLI – Flexible Line Interpretation Durch zyklusgenaue Änderung von Y-Scroll und Bildschirmzeiger werden in nahezu jeder Grafikzeile Badlines erzwungen und unterschiedliche Screen- beziehungsweise Farbinformationen nachgeladen. Dadurch steigt die Farbauflösung pro Zellzeile deutlich – auf Kosten fast der gesamten verfügbaren CPU-Zeit in diesem Bereich und mit typischen Randartefakten.
  • DYCP – Different Y Character Positions Durch wiederholte Y-Scroll-Manipulationen entstehen wellenförmig bewegte Textzeilen. Das ist weniger dekorativ interessant als technisch: Es zeigt, wie stark die Darstellung vom exakten Rastertiming abhängt.

„Der Rasterstrahl ist kein Grafikdetail, sondern eine Taktfrage. Wer das verstanden hat, sieht den VIC-II anders.“

[hardware/sprites]

Sprites und Multiplex

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.

Wie Multiplex funktioniert

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.

; Sprite-Multiplex: Grundprinzip
;
; 1. Raster-IRQ für Y-Position des untersten aktiven Sprites
; 2. Im IRQ: neue Y-Position in $D001/$D003/... schreiben
; 3. Sprite-Pointer aktualisieren (letzte 8 Bytes des Screen-RAM)
; 4. Nächsten IRQ für die Y-Position des nächsten Sprites setzen
; Wichtig: X-Position und Pointer müssen rechtzeitig vor dem neuen Sichtbereich gesetzt sein

Sprite-Priorität und Kollisionserkennung

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.

[programming/border_tricks]

Open Border – den Rahmen aufbrechen

Der C64-Bildschirm hat einen sichtbaren Rahmen, den Border. Offiziell gehört dieser Bereich nicht zum nutzbaren Bild. Praktisch lässt er sich manipulieren.

Unterer und oberer Rahmen – vertikales Open Border

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.

Seitlicher Rahmen – horizontales Open Border

Ä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.

; Vertikales Open Border – Prinzip für PAL, nicht komplette Routine
; RSEL in $D011 muss nach dem 24-Zeilen-Vergleich,
; aber vor dem 25-Zeilen-Vergleich umgeschaltet werden.
;
LDA $D011
AND #$F7 ; Bit 3 RSEL löschen
STA $D011 ; unteren Border-Vergleich umgehen
; nach dem kritischen Vergleich:
ORA #$08 ; RSEL wiederherstellen
STA $D011
; Exakte Rasterzeile und Zyklusposition hängen von PAL/NTSC und Routine ab

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.

[hardware/sid]

SID – was der Chip wirklich kann

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.

Ring-Modulation und Sync

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.

Kombinierte Wellenformen

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.

Der Voice-3-Trick

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.

; SID Voice 3: Pseudozufall über Rauschgenerator
;
LDA #$FF
STA $D40F ; Voice 3 Freq Hi
LDA #$FF
STA $D40E ; Voice 3 Freq Lo
LDA #$81 ; Noise + Gate
STA $D412 ; Voice 3 Control
LDA $D418
ORA #$80
STA $D418 ; Voice 3 aus dem Ausgangsmix nehmen
; Danach liefert LDA $D41B veränderliche Werte

SID 6581 vs. 8580 – nicht dasselbe

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.

SID als ADC – analoger Eingang

Ü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.

[hardware/cia]

CIA – Timer, Interrupts und was noch daran hängt

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.

Timer-Interrupts und NMI

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.

Tastatur-Matrix

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.

[hardware/irq_nmi]

IRQ, NMI und ihre Quellen

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.

Interruptquelle bestätigen

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.

[hardware/connectors]

Anschlüsse und elektrische Rollen

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.

Joystick und Tastatur teilen CIA-Leitungen

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.

[hardware/cartridge_port]

Expansion Port, GAME/EXROM und Module

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.

8-KB-Modul

Typischer ROM-Bereich bei $8000–$9FFF; weiterer Adressraum bleibt nahe am normalen C64-Modell.

16-KB-Modul

Zusätzlicher ROM-Bereich bei $A000–$BFFF; BASIC-ROM wird entsprechend verdrängt.

Ultimax-Modus

Stark veränderte Speicherkarte mit Modul-ROM und nur teilweise sichtbarem internem RAM.

Freezer / Fastloader

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.

[hardware/datasette]

Datasette: analoges Medium, digitale Zeitmessung

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.

  • READ: Impulse von der Datasette zum Rechner.
  • WRITE: Aufzeichnungsdaten vom 6510-Port zur Datasette.
  • SENSE: erkennt gedrückte Laufwerkstasten beziehungsweise Bereitschaft.
  • MOTOR: vom Rechner geschaltete Motorversorgung.
  • Zählerposition: nur mechanische Orientierung, keine absolute Dateiadresse.

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.

[hardware/1541]

Die 1541 und ihre Probleme

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.

Das Serial-Bus-Problem

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.

Warum die 1541 dennoch interessant ist

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.

; 1541 Spur-Layout: 4 Geschwindigkeitszonen
;
; Spuren 1-17: 21 Sektoren / Zone 3
; Spuren 18-24: 19 Sektoren / Zone 2
; Spuren 25-30: 18 Sektoren / Zone 1
; Spuren 31-35: 17 Sektoren / Zone 0
;
; Spur 18: Directory-Spur / BAM
; Gesamt: 664 Blöcke nutzbar

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.

[hardware/iec_system_role]

IEC-Bus im C64-System

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.

[programming/fastloader]

Fast Loader – wie und warum

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.

Burst-Übertragung und Parallelanschluss

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.

  • 1541-RAM nutzen Der Loader-Code wird in das RAM der 1541 geschrieben und dort ausgeführt. Erst dadurch bekommt das Laufwerk selbst genug Eigenlogik für schnellere Übertragungswege.
  • Eigenes Protokoll statt KERNAL-Weg Der Standardpfad wird umgangen. Clock- und Data-Leitungen werden mit engerem Timing genutzt, als es die offizielle Routine vorsieht.
  • KERNAL-Bypass Viele Loader biegen Ladevektoren um oder ersetzen KERNAL-Dienste direkt, um den Standardweg vollständig zu vermeiden.

„Ein Fast Loader war keine Spielerei. Er war die sachlich richtige Antwort auf einen unnötig langsamen Standardweg.“

[hardware/disk_tricks]

Disketten lochen und andere Laufwerk-Tricks

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.

Das Lochen

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.

Weitere Disk-Tricks

  • Halbspur-Zugriff Über die feine Kopfpositionierung lassen sich Halbschritte anfahren. Das wurde besonders für Kopierschutz und Sonderformate genutzt.
  • Spur 36 und darüber Offiziell endet die Diskette bei Spur 35. Praktisch lassen sich oft weitere Spuren nutzen – mit sinkender Zuverlässigkeit.
  • Directory-Manipulation Das Verzeichnis ist direkt sektorweise zugänglich. Einträge können versteckt, verändert oder wiederhergestellt werden.
  • BAM direkt beschreiben Wer die Block Availability Map direkt verändert, greift unmittelbar in die Dateisystemlogik des Laufwerks ein.
[programming/techniques]

Maschinensprache-Techniken

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.

  • Selbstverändernder Code Operanden werden zur Laufzeit angepasst, um Adressrechnungen zu sparen. Das ist nicht schön, aber schnell.
  • Unrolled Loops Schleifen werden ausgeschrieben, um Zähler- und Sprungaufwand zu vermeiden. Zeit wird gegen Platz getauscht.
  • Tabellen statt Berechnung Sinus-, Multiplikations- oder andere Werte werden vorbereitet abgelegt. Rechenzeit wird gegen Speicher eingetauscht.
  • Zero-Page-Nutzung maximieren Wer die Zero Page gut kennt, schreibt kürzeren und schnelleren Code.
  • Interrupt-Latenz kennen Wer IRQs nutzen will, muss wissen, was zwischen Auslösung und tatsächlicher Routine vergeht.
  • Stack als temporärer Speicher In engen Spezialfällen lässt sich auch der Stack selbst anders nutzen als nur für Rücksprungadressen.
  • PAL/NTSC unterscheiden Timing-Code ist nie völlig plattformneutral, solange das System in unterschiedlichen Video-Standards existiert.
; Beispiel: schnelle Bildschirmbereinigung (unrolled)
;
LDA #$20
STA $0400
STA $0401
STA $0402
; ... weitere direkte Schreibzugriffe
; Weniger Schleifenlogik, mehr direkter Durchsatz
[maintenance/power_supply]

Stromversorgung und Revisionsabhängigkeit

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.

  • Spannungen prüfen: 5 V DC und 9 V AC getrennt messen.
  • Stecker prüfen: Oxidation, lose Kontakte und gebrochene Leitungen ausschließen.
  • Board identifizieren: Chipspannung nicht aus Gehäuseform ableiten.
  • Wärme beobachten: auffällige Erhitzung ist ein Diagnosehinweis, kein alleiniger Bauteilbeweis.
  • Keine Fremdnetzteile improvisieren: Pinbelegung, Wechselspannungszweig und Belastbarkeit müssen passen.
[maintenance/diagnostics]

Diagnose: Symptom ist noch keine Ursache

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.

Messreihenfolge

  1. Sichtprüfung: Korrosion, gebrochene Buchsen, Fremdkörper, beschädigte Leiterbahnen.
  2. Versorgung: externe und interne Spannungen gegen Schaltplan der Revision prüfen.
  3. Reset und Takt: ohne beides kann kein sinnvoller Busablauf entstehen.
  4. Busaktivität: Adress-, Daten- und Chip-Select-Signale beobachten.
  5. Minimalaufbau: Module und Peripherie entfernen, bekannten Videoausgang verwenden.
  6. Diagnosemodul: Dead Test oder Harness passend zur Fehlerklasse einsetzen.
  7. Erst dann Bauteiltausch: Messbefund und Boardrevision dokumentieren.

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.

[archive/c64_preservation]

Erhaltung und bestandsschonende Inbetriebnahme

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.

  1. Gehäuse und Typenschild fotografieren.
  2. Mainboardnummer, Revision und Chipkennzeichnungen aufnehmen.
  3. Netzteil getrennt prüfen oder durch eine bekannte sichere Versorgung ersetzen.
  4. Expansion-, User-, IEC-, AV- und Joystickports auf verbogene Kontakte kontrollieren.
  5. Ohne unbekannte Module und Peripherie erstmals starten.
  6. Bild, Ton, Tastatur, Joysticks, IEC und Datasette anschließend getrennt testen.
  7. ROMs und Datenträger als Images sichern, bevor Reparatur- oder Schreibversuche erfolgen.
  8. Änderungen reversibel halten und ausgebaute Originalteile beschriften.

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.

[documentation/c64_sources]

Technische Referenzen

Die Grundarchitektur, Anschlüsse, Speicherbereiche und Systemdienste orientieren sich an Commodore-Handbüchern, Serviceunterlagen und Originaldatenblättern der MOS-/Commodore-Bausteine.

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.

[meaning/continuity]

Was der C64 gelehrt hat

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.

[Lesson_Transfer] C64 -> langfristiges Denken
> Grenzen sind keine Fehler – sie sind Systemeigenschaften
> Dokumentation beschreibt den vorgesehenen Weg, nicht alle realen Möglichkeiten
> Timing ist real – wer es ignoriert, bekommt instabiles Verhalten
> Weniger Ressourcen erzwingen oft die sauberere Struktur
> Ergebnis: strukturiertes Denken als Grundhaltung, nicht nur als Technik

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.“