Der MOS 6567/6569 Videocontroller (VIC-II) und seine Anwendung im Commodore 64
Inhalt 3. Funktionsweise des VIC 3.7. Text-/Bitmapdarstellung
3.7.2. VC und RC |
Das vielleicht wichtigste Ergebnis der VIC-Untersuchungen ist die Entschlüsselung der Funktionsweise der internen Register "VC" und "RC" des VIC. Mit ihrer Hilfe erzeugt der VIC die Adressen für den Zugriff auf Videomatrix und Zeichengenerator/Bitmap. Genaugenommen sind es drei Register: "VC" (Video Counter) ist ein 10-Bit-Zähler, der mit dem Wert aus VCBASE geladen werden kann. "VCBASE" (Video Counter Base) ist ein 10-Bit-Datenregister mit Löscheingang, das mit dem Wert aus VC geladen werden kann. "RC" (Row Counter) ist ein 3-Bit-Zähler mit Löscheingang. Außerdem gibt es noch einen 6-Bit-Zähler mit Löscheingang, der die Position innerhalb der internen 40×12 Bit Videomatrix-/Farbzeile angibt, an der gelesene Zeichenzeiger abgelegt bzw. von dort wieder gelesen werden, und den ich hier mit "VMLI" (Video Matrix Line Index) bezeichnen möchte. Diese vier Register verhalten sich nach folgenden Regeln: Irgendwo einmal außerhalb des Bereiches der Rasterzeilen $30-$f7 (also außerhalb des Bad-Line-Bereiches) wird VCBASE auf Null gesetzt. Vermutlich geschieht dies in Rasterzeile 0, der genaue Zeitpunkt ist nicht zu bestimmen, er spielt aber auch keine Rolle. In der ersten Phase von Zyklus 14 jeder Zeile wird VC mit VCBASE geladen (VCBASE-<VC) und VMLI gelöscht. Wenn zu diesem Zeitpunkt ein Bad-Line-Zustand vorliegt, wird zusätzlich RC auf Null gesetzt. Liegt in den Zyklen 12-54 ein Bad-Line-Zustand vor, wird BA auf Low gelegt und die c-Zugriffe gestartet. Einmal gestartet, findet in der zweiten Phase jedes Taktzyklus im Bereich 15-54 ein c-Zugriff statt. Die gelesenen Daten werden in der Videomatrix-/Farbzeile an der durch VMLI angegebenen Position abgelegt. Bei jedem g-Zugriff im Display-Zustand werden diese Daten ebenfalls an der durch VMLI spezifizierten Position wieder intern gelesen. Nach jedem g-Zugriff im Display-Zustand werden VC und VMLI erhöht. In der ersten Phase von Zyklus 58 wird geprüft, ob RC=7 ist. Wenn ja, geht die Videologik in den Idle-Zustand und VCBASE wird mit VC geladen (VC-<VCBASE). Ist die Videologik danach im Display-Zustand (liegt ein Bad-Line-Zustand vor, ist dies immer der Fall), wird RC erhöht. Im Normalfall sorgen diese Regeln dafür, daß VC innerhalb des Anzeigefensters die 1000 Adressen der Videomatrix einmal durchzählt und RC innerhalb jeder Textzeile die 8 Pixelzeilen einer Textzeile. Das Verhalten von VC und RC wird maßgeblich vom (Nicht-)Auftreten des Bad-Line-Zustandes bestimmt und da man mit dem Prozessor über YSCROLL diesen beinflussen kann, kann man so auch VC und RC in bestimmten Grenzen steuern.