VIC II 6569

Der VIC-II-Chip (nachfolgend VIC genannt) im C64 ist der Nachfolger des VIC-I, der im Commodore VIC-20 eingesetzt wurde. Gegenüber seinem Vorgänger hat sich seine Leistungsfähigkeit drastisch erhöht, so verfügt er jetzt über eine höhere Auflösung, einen hochauflösenden Grafikmodus, Sprites und vieles mehr. Der Chip übernimmt auch den Refresh des Dynamischen RAMs indem er alle Speicherstellen regelmäßig ausliest, sowie die Takterzeugung für den Prozessor. An seinem Ausgang liegen ein Composite und ein SVHS-Signal an.

Speicherorganisation

Der VIC besitzt einen 16 KByte großen Adressraum, der beim C64 in 16 KByte Schritten an vier verschiedenen Positionen liegen kann. Mittels der zweiten CIA kann die gewünschte Position gewählt werden - allerdings sind diese nicht gleichwertig. In der ersten und dritten Position wird immer das Zeichensatz-ROM ausgelesen, umgekehrt muß in der zweiten und vierten Position ein Zeichensatz ins RAM kopiert werden.

Innerhalb des VIC-Adressraums befindet sich: Der Grafikbildschirm, der Textbildschirm, der Zeichengenerator, die Spritezeiger sowie die Sprites selbst. Das sogenannte Farb-RAM, das einen Teil der Farbinformationen des Bildes enthält befindet sich beim C64 fest an der Adresse $D800, und umfaßt 1024 Bytes. Tatsächlich befindet sich ein eigener Speicherchip für das Farb-RAM auf der Platine des Rechners, der an dieser Stelle eingeblendet wird.

VIC 2 Multicolormodus Beispiel Grundsätzlich verfügt der VIC-Chip über zwei Grafikmodi: Den Hires-Modus und den Multicolor-Modus. Im Hires-Modus wird ein Bit pro Pixel für die Farbinformation verwendet. Im Multicolormodus werden zwei benachbarte Pixel zu einem zusammengefaßt, wodurch zwar die Horizontale Auflösung halbiert, die Bitzahl pro Pixel aber auf zwei verdoppelt wird und so mehr Farben möglich werden. Dies gilt für alle vom VIC erzeugten Grafiken, egal ob Sprites, Text- oder Grafikmodus.

Farben

16 Farben stehen zur Verfügung, diese kommen aus einer festen Palette. Diese Farben wurden von den Chipentwicklern festgelegt. Die Farberzeugung erfolgt intern nicht mittels RGB Werten, sondern mittels YUV - Farbton, Sättigung und Helligkeit. Daher gibt es etwa bei Emulatoren auf PCs immer Farbabweichungen vom Original. Auch spielt die Qualität des Ausgabegerätes eine Rolle. Aus all diesen Gründen besteht diese Farbtabelle nur aus Annäherungen, sollte aber dennoch einen brauchbaren Eindruck über die verfügbaren Farben vermitteln.

Farbtabelle

Diese Farbtabelle gilt für alle Farbregister des Chips sowie das Farb-RAM.

Die Textmodi

Die Zeichenauflösung ist im Textmodus in beiden Farbmodi dieselbe, nämlich 40 Spalten * 25 Zeilen, was in 1000 verschiedenen Bildchirmpositionen resultiert. Da jedes Byte für ein Zeichen steht, benötigt der Textmodus 1000 Bytes für einen kompletten Bildschirminhalt. Dieser Bildschirmspeicher kann innerhalb des VIC-Adreßraums in 1 KByte Schritten an 16 verschiedene Positionen verschoben werden. Die Zeichen selbst besitzen im Hires-Modus eine Auflösung von 8 x 8 Pixeln und im Multicolor-Modus 4 x 8 Pixel. Die Zeichensatzinformationen stammen aus einem 4 KByte großen Speicherbereich, der 8 Byte pro Zeichen reserviert welche die Pixelmatrix von jedem einzelnen Zeichen beinhalten. Ein Byte entspricht einer Pixelzeile eines Zeichens.

Beschreibung des Hires Textmodus

In 4 KByte lassen sich auf diese Weise die Pixelinformationen von 512 Zeichen speichern, angezeigt werden können aber nur 256. Daher bietet der Chip die Möglichkeit, zwischen zwei verschiedenen Zeichensätzen mit je 256 Zeichen umzuschalten. Die Zeichen können beliebig verändert werden sofern sie erst einmal aus dem Zeichensatz-ROM ins RAM kopiert worden sind.

Die Farbinformationen kommen im Hochauflösenden Textmodus einmal aus einem VIC-Register für die einheitliche Hintergrundfarbe, und aus dem Farb-RAM, welches für jedes einzelne der 1000 Zeichen eine eigene Farbe speichern kann. Im Multicolormodus werden noch zwei VIC-Register hinzugezogen, die die beiden Bitkombinationen 01 und 10 mit einer Farbinformation versorgen. Die Farbe für die Kombination 00 kommt wie im Hochauflösenden Modus aus der Hintergrundfarbe und die Kombination 11 bezieht ihre Information aus dem Farb-RAM.

Im Multicolormodus gibt es noch eine Besonderheit: das oberste Bit aus dem Farb-RAM schaltet für jedes Zeichen zwischen Multicolor (Bit ist 1) und Hires (Bit ist 0) um. Dies hat allerdings zur Folge, dass im Farb-RAM nur die 8 untersten Farben verwendet werden können.

Dazu gibt es noch in beiden Modi den Extended Background Color Mode, bei dem die obersten beiden Bits jedes Bytes im Bildschirmspeicher als Zeiger auf ein Hintergrundfarbregister dienen. Dabei bleiben jedoch nur 6 Bits für den Zeichencode, weshalb man in diesem Modus nur 64 Zeichen verwenden kann.

Der VIC verfügt über vier besondere Hintergrundfarbregister, die je nach Modus verschiedene Bedeutungen haben:

Standard-Adresse: Hires-Modus Multicolor-Modus Extended Background Color Modus
$d020 (53280) Rahmenfarbe Rahmenfarbe Rahmenfarbe
$d021 (53281) Hintergrundfarbe Hintergrundfarbe Hintergrundfarbe 1
$d022 (53282) - Vordergrundfarbe 2 Hintergrundfarbe 2
$d023 (53283) - Vordergrundfarbe 3 Hintergrundfarbe 3
$d024 (53284) - - Hintergrundfarbe 4

Die Grafikmodi

Die Grafikmodi verfügen über dieselbe Pixelauflösung wie die Textmodi (also 320 x 200 im Hires- und 160 x 200 im Multicolor-Modus), mit dem Unterschied dass jedes Pixel einzeln angesprochen werden kann. Leider steigt der Speicherbedarf dabei um das achtfache auf 8000 Bytes für einen Bildschirminhalt. Der Anfang dieses Bereichs kann innerhalb des VIC-Adreßraums an zwei Stellen stehen, genau am Anfang oder genau in der Mitte. Im Hires- Modus kommt das Farb-RAM für die Vordergrundfarbe und der Speicher des Textmodus für die Hintergrundfarbe zum Einsatz. Die Beschränkung auf die Einfärbung von 8 x 8 Pixel großen Bildteilen besteht auch hier, mit dem Unterschied dass auch die Hintergrundfarbe frei gewählt werden kann.

Im Multicolormodus stammt die Hintergrundfarbe (Bitkombination 00) wieder aus dem ersten Hintergrunfarbregister des VIC, die Vordergrundfarbe (Bitkombitation 11) aus dem Farb-RAM. Die beiden anderen Bitkombinationen nehmen ihre Farbinformationen aus den entsprechenden Bytes des Textmodus- Videospeichers, und zwar die oberen 4 Bits für 01, und die unteren 4 für 10. Man hat also 3 frei wählbare Farben und eine einheitliche Hintergrundfarbe pro 4 x 8 Pixelblock zur Verfügung.

Sonderfunktionen

Der VIC verfügt im Textmodus über Hardwarescrolling. Dazu wird das sichtbare Textfenster auf 38 Spalten x 24 Zeilen verringert, die tatsächliche Textauflösung beträgt aber nach wie vor 40 Spalten x 25 Zeilen. Innerhalb des sichtbaren Textfensters kann der Texbildschirm jetzt um je 8 Pixel vertikal und Horizontal verschoben werden. Dies hat einen ganz einfachen Grund: Hat man um 8 Pixel gescrollt muß der gesamte Inhalt des Textschirmes in die entgegengesetzte Scrollrichtung verschoben werden und am anderen Ende muß neuer Inhalt hinzugefügt werden. Würde man den gesamten Bildschirm anzeigen könnte man dem Neuaufbau quasi "zuschauen" was einen nicht sehr professionellen Eindruck hinterlassen würde.

Mittels des sogenannten Rasterzeileninterrupts kann man den Prozessor in seiner Arbeit unterbrechen und in den Interrupthandler springen lassen wenn der Elektronenstrahl eine bestimmte Rasterzeile erreicht hat. Damit lassen sich Spezialeffekte wie ein geteilter Text- und Grafikbildschirm oder vertikale Farbverläufe realisieren.

Der VIC holt sich in bestimmten Abständen seine Informationen aus dem Video-RAM, wofür er den Prozessor für 40 Taktzyklen anhält. Dies passiert erst einmal alle 8 Zeilen, und wird auch als "Badline" bezeichnet. Man kann den Bildschirm mittels eines VIC-Registers abschalten, woraufhin auch der Prozessor nicht mehr vom VIC angehalten wird. Natürlich sieht man dann nichts mehr, aber für spezielle Laderoutinen, die sehr Timing-Kritisch sind sowie für langwierige Berechnungen ist diese Möglichkeit sehr wichtig.

Sprites

Sprites sind kleine Grafiken, die vom Hintergrund unabhängig auf dem Bildschirm bewegt werden können. Man kann so etwa ein Raumschiff vor einer Mondlandschaft vorbeifliegen lassen ohne den Grafikspeicher mit langwierigen Pixeländerungen zu modifizieren, sondern man ändert lediglich die Position des Sprites, der Videochip erledigt den Rest. Der VIC besitzt 8 Sprites, die jeweils 24 x 21 Bildpunkte groß sein können. Die Unterscheidung in Hires-Modus und Multicolormodus besteht auch hier, wobei die Auflösung im Multicolormodus wie gewohnt horizontal halbiert wird (12 x 21).

Das Setzen und Löschen der Bildpunkte funktioniert ähnlich wie im Textmodus, nur dass hier nicht 8 sondern 24 Pixel nebeneinander liegen und so auch drei Bytes statt einem benötigt werden um eine Pixelzeile zu definieren. Der Gesamtspeicherbedarf liegt bei 21 * 3 Bytes, also 63 Bytes. Innerhalb des VIC- Adreßraums liegen nun 8 Sprite-Zeiger, mit denen man die Anfangsadresse der Bitmuster aller acht Sprites in 64 Byte Schritten definieren kann. Daraus resultiert eine (theoretische) Maximalzahl von 256 Sprite-Grafiken innerhalb des 16 KByte Adreßraums des VIC (16384 / 64). So kann man beispielsweise durch periodisches Ändern von nur einem Byte eine Sprite-Animation abspielen. Die Sprite-Zeiger liegen immer exakt 1000 Bytes nach dem Beginn des Textschirms, wenn dieser also woandershin verschoben wird werden die Spritezeiger mitverschoben.

Die Farbverteilung läuft etwas anders ab. Die Hintergrundfarbe wird grundsätzlich transparent, also hat man im Hires-Modus lediglich eine Farbe zur Verfügung. Im Multicolormodus hat man 3 Farben, wobei zwei davon bei allen Sprites identisch sind und die dritte frei gewählt werden kann.

Es besteht auch die Möglichkeit, die Sprites auf Kollision untereinander und mit dem Hintergrund zu überprüfen. Dabei wird jeweils ein Interrupt generiert und die Kollisionsregister des VIC entsprechend gesetzt. Ferner kann man die Spritegröße in X und Y Richtung verdoppeln, wobei die Auflösung gleich bleibt.

Die Überlappungsreihenfolge der Sprites ist festgelegt. Sprite 0 hat die höchste und Sprite 7 die niedrigste Priorität. Dafür kann man bei jedem Sprite einzeln festlegen ob es vor oder hinter der Hintergrundgrafik erscheinen soll.

Tricks

Der VIC-II hat bestimmte Eigenschaften und kleine Bugs die im Laufe der Zeit ans Licht kamen. Viele davon können benutzt werden um dem Chip Möglichkeiten zu verleihen die er eigentlich gar nicht besitzt. Zwei davon sollen hier beschrieben werden.

FLI - Flexible Line Interrupt: Normalerweise holt sich der VIC nur alle 8 Zeilen seine Farbinformationen aus dem Farbspeicher (die vorher besprochene Badline). Indem man ein bestimmtes Register rechtzeitig beschreibt kann man den Chip dazu zwingen in jeder Zeile seine Farbinfos zu lesen. Dies erfordert genaues Timing, ermöglicht aber eine fast uneingeschränkte Verwendung aller 16 Farben des Chips.

Rahmen Öffnen: Eigentlich kann der VIC keine Sprites und Grafikdaten im Rahmen darstellen. Man kann aber durch geschickte Registermanipulationen dafür sorgen, dass der Chip quasi "vergißt" den Rahmen einzuschalten, und als Resultat kann man Grafik und Sprites im Rahmen darstellen. Das nennt man auch "den Rahmen öffnen".

Darstellungsmodi

Dies sind nur die "offiziellen" Auflösungen, wie unter "Tricks" erwähnt gibt es noch mehr Möglichkeiten.

Art Auflösung Farben
Text 40 x 25 2 aus 16
Grafik 160 x 200 4 aus 16 pro 4 x 8-Pixel Block
Grafik 320 x 200 2 aus 16 pro 8 x 8-Pixel Block

Modellübersicht

Die meisten Unterschiede zwischen den Versionen betreffen die Fernsehnorm sowie die Herstellungsart. Technisch anders sind nur die Versionen für den C128, da diese zwei zusätzliche Register besitzen.

Bezeichnung Fernsehnorm Besonderes Verwendet in
6569 PAL-B (Europa) NMOS Version C64
6572 PAL-N (Argentinien) NMOS Version C64
6573 PAL-M (Brasilien) NMOS Version C64
8565 ? HMOS-II Version C64c
8566 PAL-B (Europa) HMOS-II Version C128
8569 PAL-N (Argentinien) HMOS-II Version C128
6566 NTSC NMOS Version MAX Machine / VC 10
6567 NTSC NMOS Version C64, CBM 500
8562 NTSC HMOS-II Version C64c
8564 NTSC HMOS-II Version C128

Register

Register 0 / $0:
76543210 RW Sprite 0 X-Position
Register 1 / $1:
76543210 RW Sprite 0 Y-Position
Register 2 / $2:
76543210 RW Sprite 1 X-Position
Register 3 / $3:
76543210 RW Sprite 1 Y-Position
Register 4 / $4:
76543210 RW Sprite 2 X-Position
Register 5 / $5:
76543210 RW Sprite 2 Y-Position
Register 6 / $6:
76543210 RW Sprite 3 X-Position
Register 7 / $7:
76543210 RW Sprite 3 Y-Position
Register 8 / $8:
76543210 RW Sprite 4 X-Position
Register 9 / $9:
76543210 RW Sprite 4 Y-Position
Register 10 / $a:
76543210 RW Sprite 5 X-Position
Register 11 / $b:
76543210 RW Sprite 5 Y-Position
Register 12 / $c:
76543210 RW Sprite 6 X-Position
Register 13 / $d:
76543210 RW Sprite 6 Y-Position
Register 14 / $e:
76543210 RW Sprite 7 X-Position
Register 15 / $f:
76543210 RW Sprite 7 Y-Position
Register 16 / $10: 9. Bit für Sprite-X-Position
7....... RW Sprite 7 X-Position 9. Bit
.6...... RW Sprite 6 X-Position 9. Bit
..5..... RW Sprite 5 X-Position 9. Bit
...4.... RW Sprite 4 X-Position 9. Bit
....3... RW Sprite 3 X-Position 9. Bit
.....2.. RW Sprite 2 X-Position 9. Bit
......1. RW Sprite 1 X-Position 9. Bit
.......0 RW Sprite 0 X-Position 9. Bit
Register 17 / $11: Steuerregister 1
7....... RW Rasterzeile für Rasterzeileninterupt 9. Bit, siehe Register 18
.6...... RW Extended Background Mode: 0 = Aus, 1 = An
..5..... RW Grafikmodus: 0 = Aus, 1 = An
...4.... RW Bildschirmanzeige: 0 = Aus, 1 = An
....3... RW Textzeilenanzahl: 0 = 24 Zeilen, 1 = 25 Zeilen
.....210 RW Y-Scrollposition: 0 - 7
Register 18 / $12:
76543210 RW Rasterzeile für Rasterzeileninterupt, siehe Register 17
Register 19 / $13:
76543210 RW Lichtgriffel X-Position
Register 20 / $14:
76543210 RW Lichtgriffel Y-Position
Register 21 / $15: Spriteschalter
7....... RW Sprite 7: 0 = Aus, 1 = An
.6...... RW Sprite 6: 0 = Aus, 1 = An
..5..... RW Sprite 5: 0 = Aus, 1 = An
...4.... RW Sprite 4: 0 = Aus, 1 = An
....3... RW Sprite 3: 0 = Aus, 1 = An
.....2.. RW Sprite 2: 0 = Aus, 1 = An
......1. RW Sprite 1: 0 = Aus, 1 = An
.......0 RW Sprite 0: 0 = Aus, 1 = An
Register 22 / $16: Steuerregister 2
765..... RW Ungenutzt
...4.... RW Multicolormodus: 0 = Aus, 1 = An
....3... RW Textspaltenanzahl: 0 = 38 Spalten, 1 = 40 Spalten
.....210 RW X-Scrollposition: 0 - 7
Register 23 / $17: Spritegröße vertikal verdoppeln
7....... RW Sprite 7: 0 = Aus, 1 = An
.6...... RW Sprite 6: 0 = Aus, 1 = An
..5..... RW Sprite 5: 0 = Aus, 1 = An
...4.... RW Sprite 4: 0 = Aus, 1 = An
....3... RW Sprite 3: 0 = Aus, 1 = An
.....2.. RW Sprite 2: 0 = Aus, 1 = An
......1. RW Sprite 1: 0 = Aus, 1 = An
.......0 RW Sprite 0: 0 = Aus, 1 = An
Register 24 / $18:
7654.... RW Adresse des Textspeichers
....321. RW Adresse des Zeichenspeichers
.......0 RW Auswahl des Zeichensatzes: 0 = 1. Zeichensatz, 1 = 2. Zeichensatz
Register 25 / $19: Interruptstatusregister
7....... RW Interrupt-Flag: 0 = Kein Interrupt, 1 = Interrupt ist erfolgt
.654.... RW Ungenutzt
....3... RW Lichtgriffel-Interrupt: 0 = ist nicht erfolgt, 1 = ist erfolgt
.....2.. RW Sprite/Sprite-Kollision: 0 = ist nicht erfolgt, 1 = ist erfolgt
......1. RW Sprite/Hintergrund-Kollision: 0 = ist nicht erfolgt, 1 = ist erfolgt
.......0 RW Rasterzeileninterrupt: 0 = ist nicht erfolgt, 1 = ist erfolgt
Register 26 / $1a: Interrupt Maskenregister
7....... RW Interrupts sind generell erlaubt: 0 = Nein, 1 = Ja
.654.... RW Ungenutzt
....3... RW Lichtgriffelinterrupt erlaubt: 0 = Nein, 1 = Ja
.....2.. RW Sprite/Sprite-Kollisionsinterrupt erlaubt: 0 = Nein, 1 = Ja
......1. RW Sprite/Hintergrund-Kollisionsinterrupt erlaubt: 0 = Nein, 1 = Ja
.......0 RW Rasterzeileninterrupt erlaubt: 0 = Nein, 1 = Ja
Register 27 / $1b: Sprite Hintergrundpriorität
7....... RW Sprite 7: 0 = Hinter Hintergrund, 1 = Vor Hintergrund
.6...... RW Sprite 6: 0 = Hinter Hintergrund, 1 = Vor Hintergrund
..5..... RW Sprite 5: 0 = Hinter Hintergrund, 1 = Vor Hintergrund
...4.... RW Sprite 4: 0 = Hinter Hintergrund, 1 = Vor Hintergrund
....3... RW Sprite 3: 0 = Hinter Hintergrund, 1 = Vor Hintergrund
.....2.. RW Sprite 2: 0 = Hinter Hintergrund, 1 = Vor Hintergrund
......1. RW Sprite 1: 0 = Hinter Hintergrund, 1 = Vor Hintergrund
.......0 RW Sprite 0: 0 = Hinter Hintergrund, 1 = Vor Hintergrund
Register 28 / $1c: Sprite Multicolormodus
7....... RW Sprite 7: 0 = Aus, 1 = An
.6...... RW Sprite 6: 0 = Aus, 1 = An
..5..... RW Sprite 5: 0 = Aus, 1 = An
...4.... RW Sprite 4: 0 = Aus, 1 = An
....3... RW Sprite 3: 0 = Aus, 1 = An
.....2.. RW Sprite 2: 0 = Aus, 1 = An
......1. RW Sprite 1: 0 = Aus, 1 = An
.......0 RW Sprite 0: 0 = Aus, 1 = An
Register 29 / $1d: Sprite horizontal verdoppeln
7....... RW Sprite 7: 0 = Aus, 1 = An
.6...... RW Sprite 6: 0 = Aus, 1 = An
..5..... RW Sprite 5: 0 = Aus, 1 = An
...4.... RW Sprite 4: 0 = Aus, 1 = An
....3... RW Sprite 3: 0 = Aus, 1 = An
.....2.. RW Sprite 2: 0 = Aus, 1 = An
......1. RW Sprite 1: 0 = Aus, 1 = An
.......0 RW Sprite 0: 0 = Aus, 1 = An
Register 30 / $1e: Sprite/Sprite-Kollision aktiv
7....... RW Sprite 7: 0 = Aus, 1 = An
.6...... RW Sprite 6: 0 = Aus, 1 = An
..5..... RW Sprite 5: 0 = Aus, 1 = An
...4.... RW Sprite 4: 0 = Aus, 1 = An
....3... RW Sprite 3: 0 = Aus, 1 = An
.....2.. RW Sprite 2: 0 = Aus, 1 = An
......1. RW Sprite 1: 0 = Aus, 1 = An
.......0 RW Sprite 0: 0 = Aus, 1 = An
Register 31 / $1f: Sprite/Hintergrund-Kollision aktiv
7....... RW Sprite 7: 0 = Aus, 1 = An
.6...... RW Sprite 6: 0 = Aus, 1 = An
..5..... RW Sprite 5: 0 = Aus, 1 = An
...4.... RW Sprite 4: 0 = Aus, 1 = An
....3... RW Sprite 3: 0 = Aus, 1 = An
.....2.. RW Sprite 2: 0 = Aus, 1 = An
......1. RW Sprite 1: 0 = Aus, 1 = An
.......0 RW Sprite 0: 0 = Aus, 1 = An
Register 32 / $20:
7654.... RW Ungenutzt
....3210 RW Rahmenfarbe: 0 - 15
Register 33 / $21:
7654.... RW Ungenutzt
....3210 RW Hintergrundfarbe 1: 0 - 15
Register 34 / $22:
7654.... RW Ungenutzt
....3210 RW Hintergrundfarbe 2: 0 - 15
Register 35 / $23:
7654.... RW Ungenutzt
....3210 RW Hintergrundfarbe 3: 0 - 15
Register 36 / $24:
7654.... RW Ungenutzt
....3210 RW Hintergrundfarbe 4: 0 - 15
Register 37 / $25:
7654.... RW Ungenutzt
....3210 RW Sprite Multicolorregister 0: 0 - 15
Register 38 / $26:
7654.... RW Ungenutzt
....3210 RW Sprite Multicolorregister 1: 0 - 15
Register 39 / $27:
7654.... RW Ungenutzt
....3210 RW Sprite 0 Farbe: 0 - 15
Register 40 / $28:
7654.... RW Ungenutzt
....3210 RW Sprite 1 Farbe: 0 - 15
Register 41 / $29:
7654.... RW Ungenutzt
....3210 RW Sprite 2 Farbe: 0 - 15
Register 42 / $2a:
7654.... RW Ungenutzt
....3210 RW Sprite 3 Farbe: 0 - 15
Register 43 / $2b:
7654.... RW Ungenutzt
....3210 RW Sprite 4 Farbe: 0 - 15
Register 44 / $2c:
7654.... RW Ungenutzt
....3210 RW Sprite 5 Farbe: 0 - 15
Register 45 / $2d:
7654.... RW Ungenutzt
....3210 RW Sprite 6 Farbe: 0 - 15
Register 46 / $2e:
7654.... RW Ungenutzt
....3210 RW Sprite 7 Farbe: 0 - 15
Register 47 / $2f: NUR C128 Varianten (8564 / 8566): Keyboard Control Register
7654.... R Ungenutzt (immer 1)
....3210 RW Status der vier Keyboard Interface Pins
Register 48 / $30: NUR C128 Varianten (8564 / 8566): 2 Mhz Modus
7654321. RW Ungenutzt
.......0 RW 2 Mhz-Modus: 0 = Aus, 1 = An