Erstellt: 10. Juli 2013 (zuletzt geändert: 1. Januar 2018)

VIC-II: Die Register

Ein kurzer Blick, auf die Register des VIC-II

Die Register des VIC-II erlauben so vielfältige Effekte, dass ich mir nicht mal sicher bin, ob seine Entwickler an all die Möglichkeiten gedacht haben, die findige Programmierer bis heute noch entdecken.

Die meisten Register wurden bereits unter Sprites (ASM) besprochen, hier findet ihr jetzt aber sämtliche VIC-II Register am Stück.

Sofern bereits ein Beitrag vorhanden ist, der das entsprechende Register verwendet, kommt ihr durch einen Klick auf die Adresse, direkt dort hin. Wobei ihr evtl. nicht exakt die angeklickte Adresse findet, ob nun $D000 oder $D00C erklärt wird, sollte keinen nennenswerten Unterschied machen.

Adresse
Nr.
Beschreibung
00
Sprite 0: X-Position (s. auch $D010)
01
Sprite 0: Y-Position
02
Sprite 1: X-Position (s. auch $D010)
03
Sprite 1: Y-Position
04
Sprite 2: X-Position (s. auch $D010)
05
Sprite 2: Y-Position
06
Sprite 3: X-Position (s. auch $D010)
07
Sprite 3: Y-Position
08
Sprite 4: X-Position (s. auch $D010)
09
Sprite 4: Y-Position
10
Sprite 5: X-Position (s. auch $D010)
11
Sprite 5: Y-Position
12
Sprite 6: X-Position (s. auch $D010)
13
Sprite 6: Y-Position
14
Sprite 7: X-Position (s. auch $D010)
15
Sprite 7: Y-Position
16
Für ALLE Sprites: Das höchste Bit der X-Position
Da der Bildschirm breiter als 256 (mehr passt ja nicht in ein Byte) Pixel ist benötigt man noch ein weiteres Bit um ein Sprite z. B. nach X = 300 zu bringen. Die C64-Entwickler haben sich entschieden diese Info in diesem einzelnen Byte für alle Sprites zu speichern.

Sprite-Nr. = Bit-Nr. (denkt dran: Bit-7 ist ganz links, Bit-0 ist ganz rechts)
17
Kontrollregister 1

BIT
7 : 9. BIT von $D012
6 : Extended Color Modus
5 : Bitmapmodus
4 : Bildausgabe an/aus (erst mit Beginn des nächsten Bildes)
3 : 25 oder 24-Zeilenmodus
2-0 : Rasterzeilen-Offset, vom oberen Rand
18
Rasterzeile
lesen: aktuelle Rasterzeile
schreiben: Rasterzeile für IRQ setzen
$D011 beachten!
$D013
19
X-Koordinate des Lichtgriffels (Lightpen) lesen
$D014
20
Y-Koordinate des Lichtgriffels (Lightpen) lesen
21
Legt fest, ob das jeweilige Sprite aktiv (sichtbar) ist (=1)
Sprite-Nr. = Bit-Nr.
22
Kontrollregister 2

BIT
7-5: unbenutzt
4: Multicolor-Modus für Text & Grafik, nicht für Sprites!
3: 40 Spalten (1) oder 38 Spalten (0)
2-0: Pixel-Offset vom linken Rand
23
Bestimmt, ob das jeweilige Sprite in seiner Höhe verdoppelt (=1) werden soll oder nicht (=0)
Sprite-Nr. = Bit-Nr.
24
Speicherkontrollregister
Legt jeweils fest, wo sich etwas im für den VIC-II sichtbaren 16KB-Block befindet.
BIT
7-4: Festlegen, wo sich der Bildschirmspeicher für den Textmodus befindet.
Die Adresse berechnet sich 1024*(BIT 7-4) + Startadresse der aktuellen VIC-Bank. Nach dem Systemstart steht in den BITs 7-4 %0001 = 1 * 1024 + 0 (da standardmäßig Bank-0 aktiv ist) = 1024 = $0400
Der Farbspeicher kann nicht verschoben werden, er beginnt immer bei $D800!
3-1: Startadresse des Zeichensatzes für den Textmodus. Berechnung 2048*(BIT 3-1) + Startadresse der gewählten VIC-Bank. Beim Systemstart steht in den BITs 3-1 %010 = 2 * 2048 + 0 = 4096 = $1000, allerdings wird in Bank-0 dort das Char-ROM bei $D000 angesprochen.
3: Im Bitmap(Grafik)-Modus wird hierüber gewählt, ob der Speicher für die Grafik in der ersten ($0000-$1FFF) oder zweiten Hälfte ($2000-$3FFF) des 16KB-Blocks liegen soll. Berechnung: 8192*(BIT 3)
0: wird überlesen
25
Interrupt-Status
aktuell aufgetretene Interrupts vom VIC-II abfragen / bestätigen

lesen: 1 = IRQ aufgetreten

BIT
7: IRQ aufgetreten, welcher es genau ist, steht in den BITs 3-0
6-4: unbenutzt
3: IRQ von Lichtgriffel (Lightpen)
2: IRQ durch Sprite-Sprite-Kollision
1: IRQ durch Sprite-Hintergrund-Kollision
0: IRQ von Rasterzeile

schreiben: Ein verarbeiteter IRQ muss mit einer 1 im jeweiligen BIT bestätigt werden! Dadurch wird dieser IRQ gelöscht!!
26
Interrupt-Maske

schreiben: Durch Setzen des jeweiligen BITs den zugehörigen IRQ freigeben / erlauben

BIT
7-4: unbenutzt
3: Lichtgriffel (Lightpen)
2: Sprite-Sprite-Kollision
1: Sprite-Hintergrund-Kollision
0: Rasterzeile
27
Soll das jeweilige Sprite vor (=0) oder hinter der Hintergrundgrafik (=1) erscheinen.
Sprite-Nr. = Bit-Nr.
28
Legt fest, ob das jeweilige Sprite Hi-Res (=0) oder Multicolor (=1) ist.
Sprite-Nr. = Bit-Nr.
29
Legt fest, ob das jeweilige Sprite normal (=0) oder in seiner Breite verdoppelt (=1) dargestellt werden soll.
Sprite-Nr. = Bit-Nr.
30
Zeigt eine Kollision (=1) zwischen Sprites an.
Sprite-Nr. = Bit-Nr.

Der Registerinhalt wird beim lesen gelöscht!
31
Zeigt eine Kollision (=1) zwischen einem Sprite und dem Hintergrund an.
Sprite-Nr. = Bit-Nr.

Der Registerinhalt wird beim lesen gelöscht!
32
Rahmenfarbe
33
Hintergrundfarbe
34
Hintergrundfarbe-1 im Extended Color-Modus (s. $D011)
35
Hintergrundfarbe-2 im Extended Color-Modus (s. $D011)
36
Hintergrundfarbe-3 im Extended Color-Modus (s. $D011)
37
Erste Spritefarbe (Multicolor_0) für den Sprite-Multicolormodus (s. $D01C)
Achtung: Diese ist für alle Sprites gleich!
38
Zweite Spritefarbe (Multicolor_1) für den Sprite-Multicolormodus (s. $D01C)
Achtung: Diese ist für alle Sprites gleich!
39
Sprite-0: Farbe - Hauptfarbe des Sprites
40
Sprite-1: Farbe - Hauptfarbe des Sprites
41
Sprite-2: Farbe - Hauptfarbe des Sprites
42
Sprite-3: Farbe - Hauptfarbe des Sprites
43
Sprite-4: Farbe - Hauptfarbe des Sprites
44
Sprite-5: Farbe - Hauptfarbe des Sprites
45
Sprite-6: Farbe - Hauptfarbe des Sprites
46
Sprite-7: Farbe - Hauptfarbe des Sprites
Die letzten beiden Register gibt es nur beim VIC-IIe aus dem C128!!!
$D02F
47
Status der zusätzlichen Tastatur-Pins

BIT
7-3: unbenutzt
2-0: Status der zusätzlichen Tastatur-Pins
$D030
48
Betriebsmodus

BIT
7-2: unbenutzt
1: Testmodus
0: 1MHz Slow-Mode (0) oder 2MHz Fast-Mode (1)

Die VIC-Register belegen den kompletten Adressbereich von $D000 bis $D3FF, da es aber nur die obigen 47 (bzw. 49 beim C128) Register gibt, wiederholen sie sich alle 64 Bytes. Unbelegte Register lassen sich nicht beschreiben und liefern immer den Wert $FF zurück. Wobei dies auch nicht ganz stimmt, wenn ein Turbo Chameleon 64 am Rechner hängt, blendet es einige neue Register in diesem Bereich ein, dazu später mal mehr, wenn es ums Erkennen und Ansprechen des TC64 geht.


ZurückWeiter

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Protected by WP Anti Spam