Der Commodore 64 Video Interface Controller II (VIC-II) unterstützt Double Buffering für Bitmaps, Zeichenspeicher und Bildschirmspeicher – aber leider nicht für das Farb-RAM.
Das hat dazu geführt, dass so manche Spiele entweder weniger Farben verwendet haben als eigentlich zur Verfügung stehen (keine Aktualisierung des Farb-Rams) oder langsamer liefen als es mit Double Buffer möglich gewesen wäre ("teures" umkopieren der Farbdaten von Ram in Farb-Ram).
Aber der C64 wäre nicht der C64, wenn es hier nicht über VIC-II Tricks eine Lösung gäbe!
Ein Farb-Ram Double Buffer lässt sich folgendermaßen umsetzen:
Die ersten 12 geraden Zeilen des Bildschirmspeichers und des Farb-RAM sind Puffer 0, die ersten 12 ungeraden Zeilen sind Puffer 1. Die Zeichengröße beträgt 8x16, der obere 8x8-Teil eines Zeichens mit Nummer x wird durch Zeichensatz 0 definiert, der untere 8x8-Teil wird durch das Zeichen mit derselben Nummer x im Zeichensatz 1 definiert. Der Bildschirm besteht also aus 8x16 großen Zeichen mal 12 Zeilen (= 24 Zeilen im Standard-Modus), die Anzahl der Spalten bleibt unverändert bei 40.
Eine Beispiel-Implementierung inklusive genauer Beschreibung des Ansatzes, Source-Code, Dokumentation, Einschränkungen und einem Vergleich mit dem Standard Text Mode findet ihr hier:
https://github.com/FPT-Sokrates/C64ColorRamDoubleBuffer
Das Beispiel läuft auf allen VIC-II-Typen (PAL, NTSC, DREAN usw.) und sieht folgendermaßen aus:
Die Hauptziele dieser Implementierung:
* Besseres Verständnis für das Double-Buffer-Konzept anhand eines Beispiels
* Inspiration und guter Ausgangspunkt für eigene Anwendungsfälle
Hier das Programm:
Viel Spaß damit!
Sokrates