Der MOS 6567/6569 Videocontroller (VIC-II) und seine Anwendung im Commodore 64
Inhalt 3. Funktionsweise des VIC 3.6. Speicherzugriff/Timing einer Rasterzeile
3.6.2. Zugriffsarten |
Der VIC erzeugt zwei Arten von Grafik, die Zugriffe auf den Speicher erfordern: Die Text-/Bitmapgrafik (auch oft "Hintergrundgrafik" oder einfach "Grafik" genannt) und die Spritegrafik. Beide erfordern Zugriffe auf jeweils zwei getrennte Speicherbereiche. Für die Text-/Bitmapgrafik: Die Videomatrix, ein 1000 Videoadressen (40×25 mit je 12 Bit) großer Bereich, der sich mit den Bits VM10-VM13 aus Register $d018 in 1KB-Schritten innerhalb des 16KB-Adreßraums des VIC verschieben läßt. Dort sind in den Textmodi die Zeichencodes und deren Farbe und in den Bitmap-Modi die Farbinformationen für 8×8-Pixel-Blocks abgelegt. Das Farb-RAM ist Teil der Videomatrix, es liefert die oberen 4 Bit der 12-Bit-Matrix. Die aus der Videomatrix gelesenen Daten erden in einem internen Puffer des VIC, der 40×12 Bit Videomatrix-/Farbzeile gespeichert. Den Zeichengenerator bzw. die Bitmap, ein 2048 Bytes (Bitmap: 8192 Bytes) großer Bereich, der sich mit den Bits CB11-CB13 (Bitmap: nur CB13) aus Register $d018 in 2KB-Schritten (Bitmap: 8KB-Schritte) innerhalb des VIC-Adreßraums verschieben läßt. Dort sind in den Textmodi die Pixeldaten der Zeichen und in den Bitmap-Modi die Bitmap gespeichert. Der Zeichengenerator hat zunächst einmal nichts mit dem Char-ROM zu tun. Das Char-ROM enthält lediglich vorgefertigte Bitmuster, die als Zeichengenerator dienen können, aber man kann den Zeichengenerator auch im normalen RAM unterbringen um das Aussehen des Zeichensatzes zu ändern. Für die Sprites: Die Spritedatenzeiger, 8 Bytes hinter dem Ende der Videomatrix, die für jedes Sprite einen von 256 64-Byte-Blocks innerhalb des VIC-Adreßraums für die Spritedaten auswählen. Die Spritedaten, ein 63 Byte großer Bereich, der die Pixeldaten der Sprites enthält und für jedes Sprite einzeln mit Hilfe des Spritedatenzeigers in 64-Byte-Schritten verschoben werden kann. Entsprechend macht der VIC 4 verschiedene Arten von Grafikzugriffen: Auf die Videomatrix ("c-Zugriff", 12 Bit breit). Auf die Pixeldaten, also Zeichengenerator oder Bitmap ("g-Zugriff", 8 Bit breit). Auf die Spritedatenzeiger ("p-Zugriff", 8 Bit breit). Auf die Spritedaten ("s-Zugriff", 8 Bit breit). Daüberhinaus führt der VIC noch zwei weitere Arten von Zugriffen durch: Zugriffe zum Refresh des dynamischen RAM, 5 Lesezugriffe pro Rasterzeile. Idle-Zugriffe. Wie beschrieben, greift der VIC in jeder ersten Taktphase zu, obwohl es einige Zyklen gibt, in denen gerade kein anderer der oben beschriebenen Zugriffe ansteht. In diesem Fall führt der VIC einen Idle-Zugriff aus, einen Lesezugriff von Videoadresse $3fff (also je nach Bank an Adresse $3fff, $7fff, $bfff oder $ffff), desen Ergebnis verworfen wird.