Rechenwerk · Technik · 2. Juli 2026

6502-Assembler heute: Cross-Development für den C64

Niemand muss heute mehr Assembler auf einem C64 tippen — auch wenn es nostalgisch schön war, mit Turbo Assembler im Speicher und der Diskette voller Sourcen. Der Stand der Technik heißt Cross-Development, und er macht die alte Maschine erstaunlich angenehm zu programmieren.

Was Cross-Development bedeutet

Die Idee ist einfach: Geschrieben und gebaut wird auf dem modernen Rechner, gelaufen wird auf dem C64 — zunächst im Emulator, am Ende auf echter Hardware. Der Quelltext liegt in normalen Textdateien, der Cross-Assembler übersetzt sie in Sekundenbruchteilen in ein PRG, und der Emulator startet es direkt.

Das klingt unspektakulär, verändert aber alles:

  • Moderne Editoren statt 40-Zeichen-Bildschirm — Syntax-Highlighting, mehrere Dateien, Refactoring.
  • Versionskontrolle: C64-Projekte in Git, mit Branches, Diffs und Historie.
  • Build-Automatisierung: Ein Skript baut, cruncht und startet — auf Wunsch sogar in der CI.
  • Iterationsgeschwindigkeit: Ändern, Bauen, Sehen dauert zusammen keine zwei Sekunden. Auf der echten Maschine der Achtziger war allein das Assemblieren eine Kaffeepause.

Der Preis dafür ist ein mentaler Spagat: Man tippt auf einer Maschine mit Gigabytes an RAM Code für eine mit 64 Kilobyte — und muss beim Schreiben trotzdem in Rasterzeilen und Taktzyklen denken. Genau diese Disziplin beschreiben die Retro-Notizen unter „Cycle-Budget-Planung".

Die Assembler: drei Philosophien

Die Cross-Assembler-Landschaft ist erfreulich lebendig. Drei Werkzeuge decken die meisten Bedürfnisse ab — alle drei laufen auf Windows, macOS und Linux:

ACME — der Purist

ACME ist ein schlanker, schneller Cross-Assembler: ein einzelnes natives Binary ohne Abhängigkeiten, klare Syntax, solide Makros und mit -f cbm fällt direkt ein ladbares PRG samt BASIC-Startzeile heraus. Kein Linker, keine Zeremonie — Quelltext rein, Programm raus.

Genau deshalb ist ACME auch der Assembler der wintermute-c64-Toolchain: Für einen KI-Agenten, der in einem Container baut und testet, zählen Einfachheit, Geschwindigkeit und eindeutige Fehlermeldungen mehr als Komfort-Features.

Kick Assembler — das Schweizer Taschenmesser der Demoszene

Kick Assembler läuft auf der JVM (daher überall) und ist weit mehr als ein Assembler: Er bringt eine eingebaute Skriptsprache mit, mit der sich Sinustabellen, Farbverläufe und ganze Datenstrukturen zur Assemblierzeit berechnen lassen — statt sie als Binärblobs einzuchecken. Dazu kommen mächtige Makros, Pseudo-Befehle und komfortable Importfunktionen für Grafik- und Musikdaten. In der heutigen Demoszene ist er so etwas wie der Standard; wer viel generierten Content hat, wird ihn lieben. Der Preis: Java als Abhängigkeit und eine deutlich größere Sprache, die man erst lernen muss.

cc65 — wenn es C sein darf (oder ein richtiger Linker)

cc65 ist eine komplette Toolchain: C-Compiler, der Assembler ca65, der Linker ld65 und Runtime-Bibliotheken für die gängigen 6502-Maschinen. Damit lassen sich zwei sehr unterschiedliche Dinge tun: Tools und Anwendungen in C schreiben — der erzeugte Code ist spürbar langsamer als Handarbeit, für Utilities, Menüs oder Spiele-Logik aber oft völlig ausreichend — oder ca65/ld65 als ausgewachsenen Makro-Assembler mit echtem Linker nutzen. Für große Projekte mit vielen Modulen, Objektdateien und einem sauberen Memory-Layout ist das die strukturierteste Lösung der drei.

Ehrenvolle Erwähnungen

64tass versteht die Syntax des klassischen Turbo Assembler und ist damit die erste Wahl, wenn man alte Native-Sourcen weiterpflegen will. DASM ist ein bewährter Veteran, den man vor allem aus der Atari-2600-Ecke kennt.

Die Emulatoren

VICE ist die Referenz und läuft auf allen großen Plattformen. Für ernsthafte Entwicklung zählt vor allem x64sc — die zyklengenaue Variante, die auch fiese VIC-II-Timing-Tricks korrekt wiedergibt. Dazu kommt der eingebaute Maschinensprache-Monitor mit Breakpoints und Speicherinspektion, der sich auch remote ansprechen lässt — die Grundlage für Debugger-Frontends und dafür, VICE headless in Skripte und Container einzubauen. wintermute-c64 tut genau das: x64sc läuft dort ohne Bildschirm über Xvfb und liefert dem Agenten Screenshots als Feedback.

Sehenswerte Alternativen, ebenfalls plattformübergreifend: Denise, ein jüngerer Emulator mit Fokus auf Genauigkeit, und Z64K, eine Java-Implementierung mit beachtlicher Präzision. Fürs komfortable Effekt-Debugging lohnt ein Blick auf RetroDebugger/C64 Debugger, der VICE-Kern mit einer modernen Debugging-Oberfläche samt Rasterzeilen-Visualisierung verheiratet.

Der Rest der Kette

Zwischen Assembler und Emulator sitzt in der Praxis noch mehr:

  • Cruncher: Auf dem C64 wird fast nichts unkomprimiert ausgeliefert. Exomizer ist der Platzhirsch und erzeugt selbstentpackende PRGs; die Hintergründe stehen in den Retro-Notizen unter „Packing & Crunching".
  • Asset-Tools: CharPad und SpritePad für Zeichensätze und Sprites, GoatTracker oder SID-Wizard für Musik — die Ergebnisse importiert der Assembler als Binärdaten.
  • Editor-Integration: Für VS Code existiert mit VS64 eine Extension, die ACME/Kick/cc65-Projekte, Build-Tasks und Debugging verbindet.

Und am Ende: echte Hardware

So gut x64sc ist — die letzte Instanz bleibt die echte Maschine mit echtem VIC-II an einem echten Bildschirm. Der Transfer ist heute unproblematisch: SD2IEC-Laufwerke lesen D64-Images von der SD-Karte, die Ultimate-II+-Cartridge lädt PRGs übers Netzwerk, und Kung Fu Flash macht aus jedem Programm ein steckbares Modul. Wer regelmäßig auf Hardware testet, findet Timing-Sünden, die im Emulator durchrutschen — selten geworden, aber es gibt sie.


Die kuratierten Grundlagen zu allem hier — von der Opcode-Matrix bis zur Cycle-Budget-Methodik — liegen in der Wissensbasis von wintermute-c64.