Der MOS 6567/6569 Videocontroller (VIC-II) und seine Anwendung im Commodore 64
Inhalt 2. Die Architektur des Commodore 64
2.3. 6567/6569 Grafikchip |
Die Grafikchips der 656*-Reihe von MOS Technologies wurden ursprünglich für den Einsatz in Videospielen und Grafikterminals entwickelt. Da der Absatz in diesen Märkten jedoch eher bescheiden war, entschloß sich Commodore, als sie eigene Heimcomputer planten, die Chips dafür zu verwenden. Im C64 fand der "Video Interface Controller II (VIC-II)" [2] Verwendung, der 3 textbasierte (40×25 Zeichen mit je 8×8 Pixeln) und 2 bitmapbasierte (320×200 Pixel) Videomodi beherrscht, über 8 Hardwaresprites und eine feste Palette von 16 Farben verfügt und bis zu 16KB dynamisches RAM verwalten kann (inklusive der Erzeugung von RAS und CAS und dem Refresh des RAM). Außerdem besitzt er noch einen Eingang für Lichtgriffel und die Möglichkeit, Interrupts auszulösen. Zwei VIC-Typen kommen im C64 vor: Der 6567 in NTSC-Rechnern und der 6569 in PAL-Rechnern. Von beiden Typen gibt es mehrere Maskenrevisionen, wovon allerdings bis auf den 6567R56A die Unterschiede relativ belanglos sind. In neueren C64-Versionen kommen die gleichwertigen Bausteine 8562 (NTSC) und 8565 (PAL) zum Einsatz. Im folgenden ist aber immer von 6567/6569 die Rede. Alle Aussagen lassen sich auf die 856*-Chips übertragen. Es gibt außerdem noch den 6566, der zum Anschluß an statisches RAM entworfen wurde, aber für den C64 keine Rolle spielt. Wichtige Signale:
A0-A13 | Der 14-Bit-Videoadreßbus, mit dem der VIC 16KB Speicher adressieren kann. Dabei sind die Adreßbits A0-A5 und A8-A13 jeweils paarweise (d.h. A0/A8, A1/A9 etc.) auf einem Pin gemultiplext. Die Bits A6-A11 sind (zusätzlich) als einzelne Leitungen ausgeführt.
D0-D11 | Ein 12 Bit breiter Datenbus, über den der VIC auf den Speicher zugreift. Die unteren 8 Bit sind mit dem Hauptspeicher und dem Prozessordatenbus verbunden, die oberen 4 Bit mit einem besonderen 4 Bit breiten statischen Speicher (1024 Adressen, A0-A9), in dem Farbinformationen gespeichert werden, dem Farb-RAM.
IRQ | Dieser Ausgang ist an den IRQ-Eingang des Prozessors angeschlossen und gibt dem VIC die Möglichkeit, Interrupts zu erzeugen. Der VIC hat vier Interruptmöglichkeiten: Beim Erreichen einer bestimmten Rasterzeile (Rasterinterrupt), bei der Kollision von zwei Sprites untereinander, bei der Kollision von Sprites mit Grafikdaten und bei einer negativen Flanke am Lichtgriffel-Eingang.
BA | Mit diesem Signal zeigt der VIC an, daß der Bus für den Prozessor in der zweiten Taktphase (ø2 High) zu Verfügung steht. Normalerweise ist BA High, da der VIC meistens nur während der ersten Phase zugreift. Für die Zeichenzeiger- und Spritedatenzugriffe benötigt der VIC den Bus jedoch auch während der zweiten Phase. In diesem Fall geht BA drei Zyklen bevor der VIC zugreift auf Low, danach bleibt AEC auch während der zweiten Phase Low und der VIC greift zu. Warum drei Zyklen? Wie bereits beschrieben, ist BA mit der RDY-Leitung des Prozessors verbunden, aber diese Leitung wird nur bei Lesezugriffen abgefragt, der Prozessor kann bei Schreibzugriffen nicht unterbrochen werden. Allerdings führt der 6510 nie mehr als drei Schreibzugriffe hintereinander aus (siehe dazu [5]).
AEC | Dieser Pin ist mit den gleichnamigen Signal des Prozessors verbunden (siehe dort). Es gibt den Status der Daten- und Adreßbustreiber des VIC wieder. Bei High befinden sie sich im Tri-State. Normalerweise ist AEC während der ersten Taktphase (ø2 Low) Low und während der zweiten Phase High, entsprechend dem Schema, daß der VIC während der ersten Phase auf den Speicher zugreift und der 6510 während der zweiten Phase. Wenn der VIC auch während der zweiten Taktphase zugreift, bleibt AEC Low.
LP | Dieser Eingang ist für den Anschluß eines Lichtgriffels vorgesehen. Bei einer negativen Flanke wird die aktuelle Position des Rasterstrahls in den Registern LPX und LPY gelatcht. Da dieser Pin im C64 eine Leitung der Tastaturmatrix mitbenutzt, läßt er sich auch per Software ansprechen.
øIN | Hier liegt der Pixeltakt von 8,18 MHz (NTSC) bzw. 7,88 MHz (PAL) an, der aus der Quarzfrequenz gewonnen wird. Pro Bustaktzyklus (ø2) werden acht Pixel ausgegeben.
ø0 | Aus dem Pixeltakt an øIN erzeugt der VIC durch Teilung durch acht den Systemtakt von 1,023 MHz (NTSC) bzw. 0,985 MHz (PAL), der an diesem Pin ausgegeben wird und an den Prozessor geht. Dieser erzeugt daraus das Signal ø2.