Der MOS 6567/6569 Videocontroller (VIC-II) und seine Anwendung im Commodore 64
Inhalt 2. Die Architektur des Commodore 64 2.4. Speicher
2.4.3. Speicherzugriff von 6510 und VIC |
6510 und VIC beruhen beide auf einem recht einfachen, festverdrahteten Design. Beide Chips führen in JEDEM Taktzyklus einen Speicherzugriff aus, auch wenn dies gar nicht notwendig ist. Wenn z.B. der Prozessor in einem Taktzyklus mit einer internen Operation wie der Indexadressierung beschäftigt ist, die eigentlich keinen Zugriff erforden würde, wird trotzdem ein Lesezugriff ausgeführt, dessen Ergebnis verworfen wird. Der VIC greift nur lesend auf den Speicher zu, der 6510 lesend und schreibend. Es gibt keine Waitstates, keine internen Caches und keine aufwendigen Zugriffsprotokolle auf den Bus, wie sie bei modernen Prozessoren üblich sind. Jeder Zugriff wird in einem einzigen Zyklus ausgeführt. Der VIC erzeugt die Taktfrequenzen des Systembus und die RAS- und CAS-Signale für den Zugriff auf das dynamische RAM (auch für den Prozessor). Er hat daher die primäre Kontrolle über den Bus und kann den Prozessor gelegentlich "betäuben", wenn er zusätzliche Zyklen für Speicherzugriffe benötigt. Außerdem sorgt der VIC für den Refresh des DRAM, indem er in jeder Rasterzeile aus 5 Refresh-Adressen liest. Die Aufteilung der Zugriffe zwischen 6510 und VIC ist zunächst einmal statisch: Jeder Taktzyklus (eine Periode des ø2-Signals) ist in zwei Phasen aufgeteilt. In der ersten Phase (ø2 Low) greift der VIC zu, in der zweiten Phase (ø2 High) der Prozessor. Das AEC-Signal schwingt parallel zu ø2 mit. So könnten 6510 und VIC beide abwechselnd den Speicher benutzen, ohne sich gegenseitig zu stören. Jedoch benötigt der VIC manchmal mehr Zyklen, als dieses Schema ihm zuteilen würde. Das ist dann der Fall, wenn der VIC auf die Zeichenzeiger und auf die Sprite-Daten zugreift. Im ersten Fall werden 40, im zweiten Fall pro Sprite 2 zusätzliche Zyklen benötigt. Dann geht BA 3 Zyklen bevor der VIC den Bus komplett übernimmt auf Low (3 Zyklen sind die maximale Anzahl aufeinanderfolgender Schreibzugriffe beim 6510) und nach 3 Zyklen bleibt AEC während der zweiten Taktphase Low, damit der VIC seine Adressen anlegen kann. Das folgende Diagramm illustriert den Vorgang der Busübernahme: Die Zeile "Chip" gibt an, welcher Baustein gerade auf den Bus zugreift (es findet ja, wie gesagt in jedem Zyklus ein Zugriff statt). "V" steht für den VIC, "P" für den 6510. Die mit "p" gekennzeichneten Zugriffe des Prozessors werden nur ausgeführt, wenn sie Schreibzugriffe sind. Der erste "p"-Lesezugriff hält den 6510 an, spätestens nach dem dritten "p", da ja beim 6510 höchstens 3 Schreibzugriffe aufeinanderfolgen können. Bei einem "p"-Lesezugriff werden aber trotzdem die Prozessoradressen auf den Bus gegeben, denn AEC ist ja noch High. Das Diagramm beschreibt den normalen Verlauf der Busübernahme. Durch geeignetes Verändern des VIC-Registers $d011 ist es möglich, eine Busübernahme zu außerordentlichen Zeitpunkten zu erzwingen. Dies sowie das komplette Bus-Timing einer VIC-Rasterzeile werden in Kapitel 3 erläutert.