Hintergrundfarbe

Aus C64-Wiki
Wechseln zu: Navigation, Suche
Einschaltbild mit Standardfarben eines C64

Als Hintergrundfarbe wird auf dem C64 die Farbe bezeichnet, die überall dort zu sehen ist, wo keine Pixel gesetzt sind (Ausnahme: Hires-Modus, s.u.). Beim C64 und anderen Commodore-Heimcomputern (z.B. Plus/4) wird außerdem noch zwischen Hintergrundfarbe und Rahmenfarbe unterschieden. Beim C64 ist die Standard-Hintergrundfarbe dunkelblau, die Standard-Rahmenfarbe hellblau. Die Textfarbe ist ebenfalls hellblau, wobei die Farbe jedes einzelnen Zeichens mittels Farb-RAM definiert wird. Rasterbars, welche oft in Intros oder Demos zu sehen sind, verändern in Maschinensprache die Hintergrundfarbe (und in der Regel auch die Rahmenfarbe) in jeder Zeile, so dass das typische Erscheinungsbild von bunten Balken entsteht.


Hintergrundfarbe im Textmodus[Bearbeiten]

Im Textmodus wird die Hintergrundfarbe über das VIC-Register bei $D021 (53281) eingestellt. Sie kann also unter BASIC mit POKE 53281,X verändert werden, wobei X eine von 16 möglichen Farben (siehe Farbtabelle) annehmen kann.


Beispielprogramm:

10 X = X +1: IF X>15 THEN X=0
20 POKE 53281,X: POKE 646,X
30 PRINT " * C64-WIKI DEMO ";
40 FOR Z=0 TO 150: NEXT Z: GOTO 10

Dieses C64-Wiki-Demo-Programm verändert dauernd die Hintergrund- und Zeichenfarbe der möglichen 16 Farben. Abbruch durch Drücken der Taste RUN/STOP

Hintergrundfarbe im Multicolor-Modus[Bearbeiten]

Im Grafikmodus Multicolor wird jeder Pixel durch ein Bitpaar repräsentiert. Sind beide Bits Null, ist an der Stelle die Hintergrundfarbe zu sehen.

Hintergrundfarbe im Hires-Modus[Bearbeiten]

Im Grafikmodus Hires ist die Hintergrundfarbe, so wie sie in den anderen Modi existiert, nicht zu sehen. Stattdessen liest der VIC für jede Kachel das entsprechende Byte aus dem Bildschirmspeicher und verwendet das High-Nibble als Farbe für gesetzte Bits in der Bitmap, das Low-Nibble als Farbe für nicht gesetzte.

Erweiterter Hintergrundfarbenmodus[Bearbeiten]

Ein paar einfache POKEs aktivieren den Spezialmodus

Zusätzlich gibt es beim C64 einen erweiterten Hintergrundfarbenmodus (Extended Background Color), der es erlaubt, im Textmodus drei zusätzliche Hintergrundfarben für Zeichen zu benutzen. Wird dieser Modus aktiviert, sind aus dem gerade aktiven Zeichensatz aber nur noch die ersten 64 Zeichen zu benutzen. Die "geshifteten", "reversen" und "reversen geshifteten" Zeichen entsprechen dann den ersten 64 Zeichen, aber jeweils mit anderer Hintergrundfarbe.

  • Erweiterten Hintergrundfarbenmodus einschalten: POKE 53265,PEEK(53265) OR 64
  • Erweiterten Hintergrundfarbenmodus ausschalten: POKE 53265,PEEK(53265) AND 191

Für die erweiterten Hintergrundfarben stehen die Speicheradressen 53282 bis 53284 des VIC zur Verfügung, die über den BASIC-Befehl POKE eingestellt werden können.

Beim Setzen der Zeichen mit den zusätzlichen Hintergrundfarben über den Bildschirmspeicher (ab Adresse 1024/hex. $0400) muss jeweils zum Wert des Zeichens 64 ("geshiftet"), 128 ("revers") oder 192 ("revers geshiftet") hinzu addiert werden. Beispiel für das Zeichen "@":

  • POKE 1024,0 ergibt normale Hintergrundfarbe
  • POKE 1024,64 Hintergrundfarbe 1
  • POKE 1024,128 Hintergrundfarbe 2
  • POKE 1024,192 Hintergrundfarbe 3
Zeichencode Speicheradresse Farbe
0-63 53281 ($D021) normal
64-127 53282 ($D022) 1
128-191 53283 ($D023) 2
192-255 53284 ($D024) 3

Beispielprogramm:

10 POKE 53281,1 : REM FARBE NORMAL: WEISS
20 POKE 53282,2 : REM FARBE 1: ROT
30 POKE 53283,5 : REM FARBE 2: GRUEN
40 POKE 53284,6 : REM FARBE 3: BLAU
50 POKE 53265, PEEK(53265) OR 64 : REM ERW. HINTERGRUNDFARBMODUS EIN
60 PRINT "abc ABC "+CHR$(18)+"abc"+CHR$(146)+" "+CHR$(18)+"ABC"

Bildschirmausgabe:

abc abc abc abc


Wechselnde Rasterbars innerhalb von Zeichen in einem Diskmag

Notemaker wie Facenoter machen auf eine besondere Art Gebrauch von diesem Modus: Sie invertieren den genutzten Zeichensatz, so dass vier verschiedene vom Farb-RAM unabhängige Zeichenfarben entstehen, welche dann durch zyklisches Schreiben von Werten aus einer Farbtabelle in eines der Register verändert werden, um Blinkeffekte für einzelne Wörter oder Absätze zu realisieren.

Einige Demos sowie das Diskettenmagazin Metal Force gehen noch weiter und bauen sogar Rasterbars im Text mithilfe dieses Modus auf, wodurch auf einer Zeile unterschiedlich farbige Effekte für Schrift möglich werden. Ein ähnlicher Effekt ist alternativ nur mittels Rastersplit innerhalb der Standard-Hintergrundfarbe ($D021) möglich. Diese Art Farbänderung von Zeichen ist aufgrund der Anforderungen an das Timing allerdings nicht von BASIC aus realisierbar, sondern kann nur mit Maschinensprache programmiert werden.