Zeichenspeicher

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Der Zeichenspeicher enthält 256 Zeichen, die der C64 im Textmodus darstellen kann. Ein Zeichen benötigt genau 8 Bytes im Speicher und ein kompletter Zeichensatz somit 256×8 Bytes = 2048 Bytes = 2 KByte. Da man beim C64 zwischen zwei Zeichensätzen umschalten kann, ist der Zeichenspeicher insgesamt 4 KByte groß. Der erste Zeichensatz (der nach dem Einschalten aktiv ist) enthält Großbuchstaben und Grafiksymbole. Der zweite Zeichensatz enthält Groß- und Kleinbuchstaben (und dafür weniger Grafiksymbole) und wurde vom Commodore-Marketing auch als "Business-Mode" bezeichnet.

Zeichen-ROM[Bearbeiten | Quelltext bearbeiten]

Nach dem Einschalten liest der C64 die Zeichen aus dem Zeichen-ROM (im englischen Char-ROM, im deutschen auch Zeichensatz-ROM) aus den Adressen 53248-57343 ($D000-$DFFF). In VIC-Bank 0 und 2 des VIC-II ist es im Bereich $1000-$1FFF bzw. $9000-$9FFF eingeblendet.

Block Adresse (hex) VIC Adresse Inhalt
0 53248 ($D000-$D1FF) $1000-$11FF Großbuchstaben
53760 ($D200-$D3FF) $1200-$13FF Grafikzeichen
54272 ($D400-$D5FF) $1400-$15FF Großbuchstaben revers
54784 ($D600-$D7FF) $1600-$17FF Grafikzeichen revers
1 55296 ($D800-$D9FF) $1800-$19FF Kleinbuchstaben
55808 ($DA00-$DBFF) $1A00-$1BFF Großbuchstaben und Grafikzeichen
56320 ($DC00-$DDFF) $1C00-$1DFF Kleinbuchstaben revers
56832 ($DE00-$DFFF) $1E00-$1FFF Großbuchstaben und Grafikzeichen, revers

c64-charset0.png   c64-charset1.png

Zeichen im RAM[Bearbeiten | Quelltext bearbeiten]

Der C64 ist in der Lage, Zeichen im RAM zu nutzen. Der Benutzer kann diese selbst gestalten und so eine beliebige Zahl von Zeichensätzen erzeugen. Um eigene Zeichen zu definieren (siehe Beispiel), teilt man dem VIC-II-Chip im Speicherkontrollregister 53272 ($D018) mit, an welcher Position innerhalb der aktuell gewählten VIC-Bank die eigenen Zeichen im RAM abgelegt wurden. Die Lage des Zeichenspeichers wird in 2K-Blöcken bestimmt von den drei Bits 3, 2 und 1 des Kontrollregisters. Das Verschieben funktioniert mit folgendem BASIC-Befehl:

POKE 53272,(PEEK(53272) AND 240) OR A

Hierbei kann die Variable A folgende Werte annehmen:

Variable A Bits Startspeicheradresse (hex) Anmerkung
0 XXXX000X 0 ($0000) RAM
2 XXXX001X 2048 ($0800) RAM
4 XXXX010X 4096 ($1000) Grundeinstellung
Zeichensatz 1 (Großbuchstaben und Grafik)
(nur in VIC-Bank 0 und 2)
6 XXXX011X 6144 ($1800) Zeichensatz 2 (Groß- und Kleinbuchstaben)
(nur in VIC-Bank 0 und 2)
8 XXXX100X 8192 ($2000) RAM
10 XXXX101X 10240 ($2800) RAM
12 XXXX110X 12288 ($3000) RAM
14 XXXX111X 14336 ($3800) RAM

Die Adresse der VIC-Bank muss zur Startspeicheradresse addiert werden, um die absolute Adresse im 64k-Speicher zu erhalten. Das Register 53272 ($D018) bestimmt auch die Lage des Bildschirmspeichers, so dass man vorsichtig sein muss, ihn nicht zu beeinträchtigen.

Der Zeichenspeicher ist für Programme nicht sichtbar, aber für Zugriffe des VIC-Chips (nur bei Bank 0 und 2) erreichbar. Aus CPU-Sicht kann aber das Zeichensatz-ROM in die Speicherlandschaft (im I/O-Bereich) eingeblendet werden, indem die Speicherkonfiguration über den Prozessorport $01 entsprechend geändert wird (siehe auch PLA).