C64ColorRamDoubleBuffer

There are 9 replies in this Thread which has previously been viewed 1,246 times. The latest Post (April 23, 2025 at 11:06 AM) was by Sokrates.

  • 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:

    Please login to see this link.

    Das Beispiel läuft auf allen VIC-II-Typen (PAL, NTSC, DREAN usw.) und sieht folgendermaßen aus:

    Please login to see this attachment.

    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:

    Please login to see this attachment.

    Viel Spaß damit!

    Sokrates

  • Coole Idee, aber leider recht "teuer" in der Umsetzung wegen der ganzen erforderlichen Raster-Interrupts. Aber technisch sehr interessant!

    Nimm doch einfach einen C128, der hat von Haus aus zwei Farb-RAMs :)

  • Coole Idee, aber leider recht "teuer" in der Umsetzung wegen der ganzen erforderlichen Raster-Interrupts. Aber technisch sehr interessant!

    Auf github findest Du einen detaillierten Vergleich dazu:

    Please login to see this link.

    Kurze Version: wenn die Anwendung/das Spiel bis zu 5 Frames Rechenzeit benötigt ist der Double Buffer schneller oder gleich schnell, werden mehr Frames benötigt ist der Double Buffer langsamer.

    Aber es gibt auch andere Vorteile, die vielleicht nicht ganz so offensichtlich sind:

    • Die Anzahl an frei definierbaren Pixeln verdoppelt sich, da ein zweiter Zeichensatz genutzt wird
    • Der Speicherplatz für graphische Objekte halbiert sich! Abhängig vom Anwendungsfall kann das sehr interessant sein...

    Nimm doch einfach einen C128, der hat von Haus aus zwei Farb-RAMs :)

    Wer benötigt schon so viel Speicher! Verrückt, was soll man denn damit alles machen! :smile:

  • Das klingt nach dem Double Char Mode, den Peiselulli und THCM in C=Bit 18 und Next Level benutzt haben.

    In C=Bit 18 der Logo-Scroller bei ca. 3 Minuten
    Please login to see this link.
    Please login to see this media element.

    In Next Level der Greetings-Part bei ca. 2:46
    Please login to see this link.
    Please login to see this media element.

    Als Grafikmodus schränkt das zwar ein, allerdings kann man hier in größeren Dimensionen denken. Ich hatte da auch mal ein Mockup gemacht, wie die Sonic-Grafik in Double Char aussehen könnte...
    Please login to see this attachment.

  • v3to : danke, genau solche Beispiele suche ich!

    Das Sonic-Mockup sieht super aus, da muss man schon ganz genau hinschauen, um die Einschränkungen zu sehen!

    Sonst habe ich noch das unfertige Spiel Please login to see this link. gefunden.

    Hat jemand noch mehr Beispiele?

    Weiß jemand, wer als erstes diese Idee hatte?

    Oder was die erste Implementierung war?

    Sokrates - das F steht für Philosoph!

    Edited once, last by Sokrates (April 17, 2025 at 11:32 PM).

  • Ich glaube, die Idee hatte ich in der damaligen Boulderdash Diskussion mal erklärt, Doublebuffer für das Farbram. Da ging es darum, ob man BD mit Farbram scrollen kann. Der Trick besteht darin, die Charzeile ein zweites Mal auszugeben und auf einen zweiten Zeichensatz umzuschalten, damit hat man dann zwei zusätzliche Farben. Auch da war peiselulli mit ein Beispiel von der Partie.

    Es ist praktisch unmöglich, ein schnelles Programm zu schreiben, wenn man es in Basic programmiert.

  • Sonst habe ich noch das unfertige Spiel Please login to see this link. gefunden.

    Weiß jemand, wer als erstes diese Idee hatte? Oder was die erste Implementierung war?

    Ich meine, dass bei doynax zuerst gesehen zu haben: Please login to see this link.

  • Danke an alle für Eure Informationen!

    Als Ergebnis der Diskussionen habe ich in der Doku den Abschnitt Please login to see this link. hinzugefügt.