MOS Technology VIC II
Der VIC (Video Interface Controller) II von MOS Technologies, Nachfolger des VIC, ist ein Videochip, der im Commodore-Heimcomputer C64 und (als leicht erweiterter VIC IIE bzw. VIC III) im C128 zum Einsatz kam. Er wurde in NTSC- (MOS 6567/MOS 8562) und PAL-Versionen (MOS 6569/MOS 8565) produziert. Eine Besonderheit des VIC II sind seine 8 Hardware-Sprites mit Kollisionsabfrage.
Technische Daten
- Erzeugung des Systemtakts für die anderen Chips
- automatischer Refresh für dynamische RAMs (DRAM).
- Bus und Speicher kann mit Prozessoren der 6502-Familie ohne große Verlangsamung eines der beiden Chips geteilt werden, beide Chips greifen abwechselnd darauf zu.
- 16 kB Adressbereich (DMA) für Video- und Zeichensatzspeicher
- separater 1000 × 4 Bit Farbspeicher, beim C64 mit statischem RAM (SRAM) realisiert. (Im für die CPU vorgesehenen Adressraum der Größe 1 kB erscheint nur ein Nibble je adressiertem Byte.)
- 16 Farben
- Textmodus mit 25 Zeilen zu 40 Zeichen
- 3 Textmodi:
- Normal mit 8 × 8 Pixel pro Zeichen, einer aus 16 Vordergrundfarben je Zeichen und einer festen Hintergrundfarbe
- Extended-Color mit einer aus 16 Vordergrundfarben und einer von 4 (aus 16) Hintergrundfarben je Zeichen, Zeichensatz auf 64 Zeichen eingeschränkt
- Multi-Color mit 4 × 8 (doppeltbreiten) Pixel pro Zeichen, je Zeichen eine aus 8 Vordergrundfarben, und 3 bildschirmweit festzulegende weiteren Farben aus 16. Normale Zeichen und Multicolor-Zeichen können dabei beliebig gemischt werden; aber die normalen Zeichen sind in diesem Fall auf 8 Vordergrundfarben beschränkt.
- 2 Grafikmodi:
- Hires mit 320 × 200 Pixeln, und einer frei wählbaren Vorder- und Hintergrundfarbe pro 8 × 8-Pixel-Feld
- Multi-Color mit 160 × 200 (doppeltbreiten) Pixeln, 3 frei wählbaren Farben je 4 × 8 Pixel-Feld sowie 1 bildschirmweit einstellbaren Farbe.
- Hardware-Pixel-Scrolling (vertikal und horizontal um je 8 Hires- bzw. Normal-Pixel)
- 8 Hardware-Sprites mit 24 × 21 Pixeln Größe mit Kollisionsabfrage, Multicolor-Möglichkeit, getrennte Vergrößerbarkeit auf das jeweils Doppelte in X- und Y-Richtung.
- Optionale Interrupts bei Sprite-Sprite- und Sprite-Grafik-Kollisionen
- Rasterzeilen-Interrupts
- Lichtgriffel-Funktion mit Interrupts
- Ausgabesignal: S-Video
Programmierung des VIC II
Eine zentrale Rolle bei der Programmierung des VIC II spielen die Rasterinterrupts. Diese können dazu dienen, an bestimmten Bildschirmpositionen das aktuelle Hauptprogramm anzuhalten und neue Registerinhalte in einige VIC II-Register zu laden. Auf diese Weise kann man sehr einfach den Bildschirm in mehrere verschiede Bereiche unterteilen. Weiterhin kann man mit deren Hilfe recht leicht die 8 Sprites mehrfach pro Bildaufbau verwenden, so dass man sehr viel mehr Sprites darstellen kann. Diese beiden Verfahren werden von sehr vielen C64-Spielen verwendet.
Weiterhin stellt der Rahmen um die Grafik des C64 ein Problem dar, besonders bei PAL-Systemen ist dieser sehr breit. Der VIC II bietet keinerlei Register, die Darstellung von Grafik in diesem Bereich ermöglichen, allerdings kann man durch einige geschickte Registermanipulationen die Maskierung der Darstellung durch den Rahmen abschalten und so zumindest Sprites in diesem Bereich darstellen, so dass sich die Grafikdarstellung auf bis zu 402 Pixel Breite und in etwa 284 Pixel Höhe (bei PAL, weniger bei NTSC-Systemen) erweitern lässt.
Auch die Farbauflösung in den Grafikmodi lässt sich durch geschickte Registermanipulation erhöhen. Man kann den VIC II dazu zwingen, nicht nur bei jeder achten, sondern bei jeder Rasterzeile neue Farbinformation aus dem Speicher zu laden. Das hat zur Folge, daß bei einer 160x200-Grafik zwar mehr als 64% der Rechenzeit für die Grafikdarstellung verlorengeht, aber man erhält einen fast vollwertigen 16-Farben-Modus.
Siehe auch: DYCP