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.3. Timing einer Rasterzeile |
Die Abfolge der VIC-Speicherzugriffe innerhalb einer Rasterzeile ist fest vorgegeben, unabhängig vom Grafikmodus und für jede Rasterzeile gleich. Als Zeilenbeginn wurde die negative Flanke von IRQ bei einem Rasterinterrupt festgelegt (dies ist auch der Zeitpunkt, an dem das RASTER-Register erhöht wird). Rasterzeile 0 bildet allerdings eine Ausnahme: Dort finden IRQ und Erhöhen (bzw. Nullsetzen) von RASTER einen Zyklus später statt als in allen anderen Zeilen. Der Einfachheit halber wird hier jedoch von konstanten Zeilenlängen ausgegangen und der Beginn von Rasterzeile 0 als einen Zyklus vor dem Auftreten des IRQ definiert. Hier zunächst die Timing-Diagramme, die Erklärung folgt danach: 6569, Bad Line, keine Sprites: 6569, keine Bad Line, keine Sprites (gekürzt): 6567R56A, Bad Line, Sprites 5-7 in dieser Rasterzeile aktiv, Sprite 0 in der nächsten (gekürzt): 6567R8, keine Bad Line, Sprites 2-7 in dieser Rasterzeile aktiv, Sprites 0-4 in der nächsten (gekürzt): In der Zeile "Zykl-#" ist die Nummer des Taktzyklus innerhalb der Rasterzeile aufgetragen. Die Zeile beginnt mit Zyklus 1 und besteht beim 6569 aus 63, beim 6567R56A aus 64 und beim 6567R8 aus 65 Zyklen. Zur Übersicht wurden noch der letzte Zyklus der vorangehenden und der erste Zyklus der nächsten Rasterzeile in jedes Diagramm mit aufgenommen. Die Zeilen "ø0", "IRQ", "BA" und "AEC" geben den Zustand der gleichnamigen Bussignale wieder. In der ersten Phase jedes Zyklus ist ø0 Low, in der zweiten Phase High. Die Symbole in den Zeilen "VIC" und "6510" geben an, welche Art von Zugriff VIC bzw. 6510 in der jeweiligen Taktphase durchführen (für eine Erklärung der verschiedenen Zugriffsarten des VIC siehe Abschnitt 3.6.2.):
c | Zugriff auf die Videomatrix und das Farb-RAM (c-Zugriff)
g | Zugriff auf den Zeichengenerator oder die Bitmap (g-Zugriff)
0-7 | Lesen des Spritedatenzeigers für Sprite 0-7 (p-Zugriff)
s | Lesen der Spritedaten (s-Zugriff)
r | DRAM-Refresh
i | Idle-Zugriff
x | Schreib- oder Lesezugriff des Prozessors
X | Evtl. Schreibzugriff des Prozessors, der erste Lesezugriff stoppt den Prozessor (BA ist Low und damit auch RDY)
Die Zeile "X-Koo." enthält die X-Koordinaten des Beginns jeder Taktphase (daher die "\\\" als Gedankenstütze) und die Zeile "Grafik" ist eine Projektion des 40-Spalten-Anzeigefensters und des Rahmens auf diese Koordinaten, zum Ausrichten von Sprites. Dies entspricht jedoch NICHT dem Signal am Videoausgang des VIC. Aus der "Grafik"-Zeile kann man auch nicht ablesen, wann die Rahmenstufe den Rahmen erzeugt. Dies geschieht ca. 8 Pixel später als in der "Grafik"-Zeile angegeben. Um beim Programmieren die Zugriffe des Prozessors innerhalb der Rasterzeile zeitlich bestimmen zu können, orientiert man sich am besten an den g-Zugriffen des VIC, indem man vom 6510 ein Byte im Grafikspeicher ändert und am Bildschirm beobachtet, an welchem Zeichen die Änderung frühestens wirksam wird. Der Schreibzugriff des Prozessors muß dann in Taktphase direkt davor erfolgt sein. Dann kann man mit Hilfe der Diagramme ermitteln, in welchem Taktzyklus der Zugriff stattfand und alle weiteren Zugriffe des Prozessors relativ dazu einfach abzählen.