Zeichenspeicher
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 |
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).