Farbe

Aus C64-Wiki
Wechseln zu: Navigation, Suche
Die 16 Farben des C64

Der C64 besitzt die Möglichkeit, 16 verschiedene Farben darzustellen. Diese 16 Farben beziehen sich auf alle möglichen Bildschirmdarstellungen, nicht nur auf Zeichen oder den Bildschirm an sich, sondern auch auf Sprites (auch Multicolor), hochauflösende Grafik, usw.

Im Direkteingabemodus lässt sich die Zeichenfarbe bequem per Tastenkombination ändern, in BASIC kann dies mittels PRINT CHR$(Wert) bzw. Steuerzeichen erledigt werden. Für das Ändern der Farbe von Sprites, Hintergrundfarbe, Rahmenfarbe oder Pixel in einer Grafik müssen in BASIC der BASIC-Befehl POKE Speicheradresse, Farbwert bzw. die entsprechenden Pendants in Maschinensprache verwendet werden.


Farbtabelle[Bearbeiten]

Farbe Name Farbwert
für POKE
HEX Direkt durch
Tastenkombination
Im Programm:
PRINT CHR$(X)
Werte für X:
Oder per PRINT "Steuerzeichen"
(in Anführungszeichen!)
HTML-
Farbcode
Schwarz
Schwarz 0 $00 CTRL + 1  144 Zeichensatz1 208.png Rechteck links unten #000000
Weiß
Weiß 1 $01 CTRL + 2  5 Zeichensatz1 133.png inverses E #ffffff
Rot
Rot 2 $02 CTRL + 3  28 Zeichensatz1 156.png inverses Pfund #880000
Cyan
Türkis 3 $03 CTRL + 4  159 Zeichensatz1 223.png Dreieck unten links #aaffee
Purpur
Violett 4 $04 CTRL + 5  156 Zeichensatz1 220.png inverses Halbschach #cc44cc
Grün
Grün 5 $05 CTRL + 6  30 Zeichensatz1 158.png inverser Pfeil hoch #00cc55
Blau
Blau 6 $06 CTRL + 7  31 Zeichensatz1 159.png inverser Linkspfeil #0000aa
Gelb
Gelb 7 $07 CTRL + 8  158 Zeichensatz1 222.png inverses π #eeee77
Orange
Orange 8 $08 C= + 1  129 Zeichensatz1 193.png inverses Pik #dd8855
Braun
Braun 9 $09 C= + 2  149 Zeichensatz1 213.png inv. 1/4-Kreis o.l. #664400
Hellrot
Hellrot 10 $0a C= + 3  150 Zeichensatz1 214.png inverses Grafik-X #ff7777
Dunkelgrau
Grau 1 11 $0b C= + 4  151 Zeichensatz1 215.png inverser Kreisring #333333
Mittelgrau
Grau 2 12 $0c C= + 5  152 Zeichensatz1 216.png inverses Kreuz (Kartenfarbe) #777777
Hellgrün
Hellgrün 13 $0d C= + 6  153 Zeichensatz1 217.png inv. Strich rechts #aaff66
Hellblau
Hellblau 14 $0e C= + 7  154 Zeichensatz1 218.png inverses Karo #0088ff
Hellgrau
Grau 3 15 $0f C= + 8  155 Zeichensatz1 219.png inverses Kreuz #bbbbbb

Mit C=  ist die Commodore-Taste gemeint.


Die C64-Farben werden (bei einem PAL-Gerät) nach dem YUV-Farbmodell erzeugt und müssen für RGB-Monitore umgerechnet werden. Da die Darstellung von dem benutzten Gerät abhängig und die Farbwahrnehmung bei Menschen unterschiedlich ist, gibt es keine RGB-Palette, die für jede(n) die Farben des C64 "richtig" darstellt. In der obigen Tabelle wird die Palette aus Godot benutzt.


Speicheradressen für Farbeinstellungen[Bearbeiten]

Hier erfolgt ein kurzer Speicheradressenüberblick bzw. eine Zusammenfassung von Speicheradressen, die Farbwerte enthalten bzw. deren Farben durch die BASIC-Befehle PEEK gelesen und POKE geändert werden können.

Adresse(n) (dez/hex) Bedeutung Standardwert Farbwert
646 ($0286) Textfarbe 14 14
647 ($0287) Farbe unter der Cursorposition unbestimmt 14
53280 ($D020) Rahmenfarbe (Farbwerte 0-15, danach wiederholen sie sich) 254 14
53281 ($D021) Hintergrundfarbe 0 (normaler Modus) 246 6
53282 ($D022) Hintergrundfarbe 1 (nur im Multicolor- & erweiterten Hintergrundfarben-Modus) 241 1
53283 ($D023) Hintergrundfarbe 2 (nur im Multicolor- & erweiterten Hintergrundfarben-Modus) 242 2
53284 ($D024) Hintergrundfarbe 3 (nur im erweiterten Hintergrundfarben-Modus) 243 3
53285 ($D025) Sprite Multicolor 1 (nur im Sprite-Multicolor-Modus) 244 4
53286 ($D026) Sprite Multicolor 2 (nur im Sprite-Multicolor-Modus) 240 0
53287 ($D027) Farbe Sprite 0 241 1
53288 ($D028) Farbe Sprite 1 242 2
53289 ($D029) Farbe Sprite 2 243 3
53290 ($D02A) Farbe Sprite 3 244 4
53291 ($D02B) Farbe Sprite 4 245 5
53292 ($D02C) Farbe Sprite 5 246 6
53293 ($D02D) Farbe Sprite 6 247 7
53294 ($D02E) Farbe Sprite 7 252 12
55296 - 56295
($D02F - $DBE7)
Farbspeicher - Hierüber können alle Zeichen des Bildschirminhalts (25 Zeilen bzw. 40 Zeichen pro Zeile) direkt angesprochen werden, z.B. POKE 55296,1 setzt das linke oberste Zeichen auf die Farbe weiß. unbestimmt je nach Farbe

Da für die Kodierung von 16 Farben 4 Bit genügen, werden in den Bytes der Farbspeicheradressen immer nur die Bits 0 bis 3 für den Farbwert benutzt. Für den Wert des oberen Nibbles gibt es drei Möglichkeiten:

  1. Bits 4 bis 7 sind 0: Gilt für Adresse 646, die deshalb auch einfach mit PEEK(646) ausgelesen werden kann.
  2. Bits 4 bis 7 sind 1: Gilt für die Adressen 53280 bis 53294, weshalb hier immer 240 ($F0) zum Farbwert hinzukommt.
  3. Bits 4 bis 7 sind undefiniert: Gilt für alle Werte des Farb-RAMs und auch für die Adresse 647.

In den letzten beiden Fällen muss man deshalb gezielt die Bits 0 bis 3 auswählen, z.B. in BASIC für die Hintergrundfarbe:

FB = PEEK(53281) AND 15

Der Bildschirmspeicher, welcher im Hires- und im Multicolor-Bitmap-Modus als Farbspeicher dient, unterscheidet sich in dieser Funktion von den anderen:

  • Er besitzt keine feste Adresse, sondern kann mit Einschränkungen frei im RAM positioniert werden.
  • Jedes seiner Bytes enthält zwei Farbwerte, je einen in den Bits 0-3 und einen in den Bits 4-7. Damit kann er die 2000 Werte in ca. 1 KByte speichern. So ist es möglich, in einer 16 KByte großen VIC-Bank bis zu 8 Bildschirmspeicher neben der 8 KByte großen Bitmap unterzubringen - wichtig z.B. für eine FLI-Grafik.


Luminanzen[Bearbeiten]

Die C64-Farben weisen ab VIC 856x neun verschiedene Luminanzen, d.h. Helligkeiten, auf. Bei älteren VIC-Versionen gibt es weniger Luminanzen. Man kann die Luminanzen sichtbar machen, wenn man am Monitor die Farbsättigung ganz herunter dreht bzw. im Emulator auf 0 stellt. Sieben Farben haben einen Partner mit dem gleichen Grauwert, dazu kommen Schwarz und Weiß.


Die obigen Beispiele sind mit VICE (interne RGB-Palette) erstellt worden.

Das folgende Bild zeigt die Verteilung der 9 Graustufen auf einer Grauskala mit 24 Grauwerten plus Schwarz und Weiß:

C64-Graustufen-Verteilung.png

Grafikern und Programmierern wird empfohlen, sich die folgende Grafik von der Seite der Gruppe Hitmen anzuschauen; dort werden die Luminanzen so dargestellt, wie man sie für Anti-Aliasing, Farbverläufe (z.B. in Rasterbars oder Plasma) oder Fade-in/Fade-out benötigt. [1]


luma.gif

LumaFix64

LumaFix64.jpg

Weblinks[Bearbeiten]

Quellen[Bearbeiten]

  1. Hilsdateien auf der Seite der Gruppe Hitmen inklusive Color Overview für Luminanzen Sprache:englisch