Der VIC-II (Video Interface Controller-II) von MOS Technology, Nachfolger des VIC, ist ein Video Display Controller, 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.
Eine zentrale Rolle bei der Programmierung des VIC II spielt der Rasterzeileninterrupt. Dieser kann 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 verschiedene Bereiche unterteilen (Split Screen). 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 zur richtigen Zeit 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 ungefähr 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, dass bei einer bildschirmfüllenden Grafik zwar mehr als 64 % der Rechenzeit für die Grafikdarstellung aufgewendet wird, aber man erhält einen fast vollwertigen 16-Farben-Modus (FLI, Flexible Line Interpreter).
Schnelles Scrollen von Bitmap-Grafik ist ebenfalls durch ausgefeilte Registermanipulationen möglich, horizontal kann so der Bildschirmanfang verschoben werden (HSP – Horizontal Screen Position), was ein viel zu rechenaufwendiges Umkopieren der gesamten Bitmap alle 8 Pixel (wie es bei herkömmlichem Hardwarescrolling nötig wäre) überflüssig macht – es braucht nur der hereinscrollende Bereich neu beschrieben zu werden. Vertikal kann die Bitmap mittels FLD (Flexible Line Distance) nach unten bzw. per Linecrunching nach oben verschoben werden (VSP – Variable Screen Position). Zusammen ist dieser Effekt unter C64-Programmierern als AGSP (Any Given Screen Position) bekannt.[1]