Der MOS 6567/6569 Videocontroller (VIC-II) und seine Anwendung im Commodore 64
Inhalt 3. Funktionsweise des VIC
3.4. Bildaufbau und Ausmaße des Bildausschnittes |
Wie bei der Ansteuerung von Kathodenstrahlröhren üblich baut der VIC das Videobild zeilenweise auf. Die Zeilenzahl und die Anzahl Taktzyklen pro Zeile sind bei jedem VIC-Typ konstant. Der VIC arbeitet zeichenbasiert, jedes Zeichen besteht aus einer Matrix von 8×8 Pixeln, entsprechend eine Textzeile aus 8 Pixelzeilen. In den textbasierten Modi werden 40×25 Textzeichen dargestellt, in den Bitmap-Modi 320×200 oder 160×200 Pixel. Die Angabe einer Position auf dem Bildschirm erfolgt in diesem Artikel durch die Nummer der Rasterzeile als Y-Koordinate (RASTER, Register $d011/$d012) und eine X-Koordinate entsprechend dem Sprite-Koordinatensystem. Bei der Angabe des Zeitpunktes eines VIC-Speicherzugriffs oder einer internen Operation im VIC werden die Rasterzeilennummer als Y-Koordinate und die Nummer des Taktzyklus innerhalb der Zeile als X-Koordinate benutzt. Wie bereits erwähnt, kommen auf einen Taktzyklus 8 Pixel, die Angabe einer Sprite-X-Koordinate ist also achtmal so genau wie die der Zyklusnummer. Die Grafikdarstellung findet in einem nicht verschieblichen Fenster in der Mitte des sichtbaren Bildbereiches statt, dem "Anzeigefenster". Der Bereich außerhalb des Anzeigefensters bildet den Bildschirmrahmen und wird in der Rahmenfarbe (EC, Register $d020) dargestellt. Man kann den Rahmen mit einem Trick auch ganz oder teilweise ausschalten; dann erkennt man, daß das Anzeigefenster Teil einer "Anzeigespalte" ist, die sich aus der geradlinigen Erweiterung des Anzeigefensters nach oben und unten ergibt. Damit kann man auch den Rahmen in einen oberen/unteren und einen linken/rechten Rahmen aufteilen. Der sichtbare Bildbereich ist horizontal und vertikal von Austastlücken umgeben, in denen die Videoausgabe abgeschaltet ist und in denen der Rasterstrahl an den Anfang der nächsten Zeile bzw. an den Anfang des Bildes zurückkehrt Die folgende Abbildung (nicht maßstäblich) illustriert den letzten Absatz: Über die Bits RSEL und CSEL in den Registern $d011 und $d016 lassen sich für die Höhe und Breite des Anzeigefensters jeweils zwei verschiedene Werte einstellen:
RSEL | Höhe des Anzeigefensters | Erste Zeile | Letzte Zeile
0 | 24 Textzeilen/192 Pixel | 55 ($37) | 246 ($f6)
1 | 25 Textzeilen/200 Pixel | 51 ($33) | 250 ($fa)
CSEL | Breite des Anzeigefensters | Erste X-Koo. | Letzte X-Koo.
0 | 38 Zeichen/304 Pixel | 31 ($1f) | 334 ($14e)
1 | 40 Zeichen/320 Pixel | 24 ($18) | 343 ($157)
Bei RSEL=0 werden der obere und untere Rahmen um jeweils 4 Pixel in das Anzeigefenster hinein verbreitert, bei CSEL=0 der linke Rahmen um 7 Pixel und der rechte um 9 Pixel. Die Position der Grafik im Anzeigefenster und deren Auflösung ändert sich dabei nicht, RSEL/CSEL schalten nur Start und Ende der Rahmendarstellung um. Auch die Größe der Videomatrix bleibt konstant bei 40×25 Zeichen. Mit XSCROLL/YSCROLL (Bits 0-2 der Register $d011 (XSCROLL) und $d016 (YSCROLL)) kann man die Position der Grafik innerhalb des Anzeigefensters pixelweise um bis zu jeweils 7 Pixel nach rechts und unten verschieben. Damit läßt sich weiches Scrolling realisieren. Die Position des Anzeigefensters selbst ändert sich dabei nicht. Um die Grafik bündig mit dem Fenster zu halten, sind bei 25 Zeilen/40 Spalten als X/YSCROLL die Werte 0 und 3, bei 24 Zeilen/38 Spalten jeweils 7 zu wählen. Die Ausmaße der Videodarstellung bei den verschiedenen VIC-Typen sind wie folgt:
Typ | Video- norm | Anzahl Zeilen | Sichtbare Zeilen | Zyklen/ Zeile | Sichtbare Pixel/Zeile
6567R56A | NTSC-M | 262 | 234 | 64 | 411
6567R8 | NTSC-M | 263 | 235 | 65 | 418
6569 | PAL-B | 312 | 284 | 63 | 403
Typ | Erste V-Blank- Zeile | Letzte V-Blank- Zeile | Erste X-Koo. einer Zeile | Erste sichtbare X-Koo. | Letzte sichtbare X-Koo.
6567R56A | 13 | 40 | 412 ($19c) | 488 ($1e8) | 388 ($184)
6567R8 | 13 | 40 | 412 ($19c) | 489 ($1e9) | 396 ($18c)
6569 | 300 | 15 | 404 ($194) | 480 ($1e0) | 380 ($17c)
Wer sich bei den ersten und letzten sichtbaren X-Koordinaten wundert, daß scheinbar die erste Koordinate nach der letzten liegt: Dies kommt daher, daß als Referenzpunkt für den Beginn einer Rasterzeile das Auftreten des Raster-IRQ gewählt wurde, das aber nicht mit der X-Koordinate 0 zusammenfällt, sondern mit der unter "Erste X-Koo. einer Zeile" angegebenen. Die X-Koordinaten laufen innerhalb der Zeile bis $1ff (beim 6569 nur bis $1f7), dann erst kommt X-Koordinate 0. Bei der Erklärung des Aufbaus einer Rasterzeile wird dies noch genauer erklärt.