Bildschirmspeicher

Aus C64-Wiki
Wechseln zu: Navigation, Suche
Bildschirmspeicher mit Adressen für Zeilen und Spalten

Über den 1 KByte großen Bildschirmspeicher (engl. screen RAM), der normal in dem Speicherbereich 1024 ($0400) bis 2023 ($07E7) liegt, können alle 256 Zeichen des C64 direkt in alle 25 Zeilen und 40 Spalten geschrieben werden, in BASIC mit Hilfe des Befehls POKE . So setzt ein

POKE 1024,1

auf die erste Stelle des Bildschirmspeichers (linkes obersten Zeichen) das Zeichen A.
Ist AD die Anfangsadresse des Bildschirmspeichers, so wird mit der folgenden Anweisung ein "A" in Spalte Y, Zeile X ausgegeben:

POKE AD + Y + X*40, 1

Bei älteren Betriebssystemen ist das "A" eventuell nicht sichtbar, weil hier die Zeichenfarbe im Farb-RAM nicht gesetzt wird.


  • Einschränkungen im erweiterten Hintergrundfarbenmodus:
    Eine Veränderung der Zeichensatzgröße erfolgt indirekt durch Nutzung des erweiterten Hintergrundfarbenmodus. In diesem Modus sind nur 64 Zeichen verfügbar. Da ab dem 0., 64., 128., und 192. Zeichencode jeweils die normalen Zeichen (A-Z, 0-9 und Satzzeichen) jeweils eine andere Hintergrundfarbe erhalten.


Verschieben des Bildschirmspeichers[Bearbeiten]

Der Bildschirmspeicher kann verschoben werden. Dies geschieht mit Hilfe des CIA 2 Kontrollregisters 56576 ($DD00) und des VIC-Registers 53272 ($D018):

  • Die Bits 4-7 des VIC Speicher Kontroll-Register 53272 ($D018) enthalten die Startadresse des Bildschirmspeichers innerhalb des VIC Speicherbereichs.
  • Die Bits 0 und 1 des CIA 2 Kontrollregister 56576 ($DD00) wählen die Speicherbank für den VIC.

Häufig wird das Verschieben des Bildschirmspeichers in diversen Grafikmodi benutzt, wo er als Farbspeicher dient. FLI z.B. besitzt bis zu 8 Bildschirmspeicher, von denen in jeder Rasterzeile einer neu gewählt wird.

In BASIC verschiebt die folgende Zeile den Bildschirmspeicher innerhalb der aktuellen VIC Speicherbank:

10 POKE 53272,(PEEK(53272) AND 15) OR A

Der Wert für die Variable A kommt aus der unten stehenden Tabelle.

Gibt man diese Anweisung im Direktmodus ein, wird zwar der verschobene Bildschirm angezeigt, jedoch kann man damit nicht arbeiten, denn der Bildschirmeditor benutzt für die Ein- bzw. Ausgabe von Zeichen noch den alten Bildschirmspeicher.

Programmbeispiele für das Verschieben des Bildschirmspeichers findet man im Buch Sheldon Leemon: Mapping the Commodore 64, Compute! Publications im Abschnitt 43-44 und 56576-56577.

Variable A Startspeicheradresse (hex) Anmerkung
000 0 ($0000)
016 1024 ($0400) Grundeinstellung
032 2048 ($0800)
048 3072 ($0C00)
064 4096 ($1000)
080 5120 ($1400)
096 6144 ($1800)
112 7168 ($1C00)
128 8192 ($2000)
144 9216 ($2400)
160 10240 ($2800)
176 11264 ($2C00)
192 12288 ($3000)
208 13312 ($3400)
224 14336 ($3800)
240 15360 ($3C00)


Speicheradressen[Bearbeiten]

Hex-Adresse Dez-Adresse Beschreibung
Bildschirmspeicher
$0400 -
$07e7
1024 -
2023
1 kByte (1000 Bytes) Bildschirmspeicher, dient zum Setzen von Buchstaben und Zeichen im Bildschirmcode (Werte: 0-127); wird 128 zu einem Wert hinzu addiert, erscheinen die Inverszeichen (128-255). Alle 40 Spalten in den 25 Zeilen des Bildschirmspeichers sind direkt ansprechbar, z.B. setzt POKE 1024,1 das Zeichen A in die linke obere Ecke des Bildschirms (ohne die Farbe mitzusetzen).
Für die Farbzuweisung siehe Farb-RAM.
$07E8 -
$07F7
2024 -
2039
ungenutzt
Spriteblock-Register
$07F8 2040 Spritepointer für Sprite 1 in Speicherblock: Blocknr.*64
(z.B. Sprite 1 im Kassettenpuffer ab $033C: Blocknr. = 13 (13*64=832, in hex: $0340))
$07F9 2041 Spritepointer für Sprite 2 in Speicherblock: Blocknr.*64
$07FA 2042 Spritepointer für Sprite 3 in Speicherblock: Blocknr.*64
$07FB 2043 Spritepointer für Sprite 4 in Speicherblock: Blocknr.*64
$07FC 2044 Spritepointer für Sprite 5 in Speicherblock: Blocknr.*64
$07FD 2045 Spritepointer für Sprite 6 in Speicherblock: Blocknr.*64
$07FE 2046 Spritepointer für Sprite 7 in Speicherblock: Blocknr.*64
$07FF 2047 Spritepointer für Sprite 8 in Speicherblock: Blocknr.*64