Der MOS 6567/6569 Videocontroller (VIC-II) und seine Anwendung im Commodore 64
Inhalt 3. Funktionsweise des VIC
3.5. Bad Lines |
Wie schon erwähnt, benötigt der VIC beim Zugriff auf die Zeichenzeiger (d.h. die Zeichencodes einer Textzeile aus der Videomatrix) 40 zusätzliche Buszyklen, denn die 63-65 dem VIC pro Rasterzeile für einen transparenten (vom Prozessor unbemerkten) Zugriff während der ersten Taktphase zur Verfügung stehenden Zyklen reichen nicht aus, um für die 40 Zeichen einer Zeile die Zeichenzeiger und auch noch die Pixeldaten der Zeichen aus dem Speicher zu lesen. Aus diesem Grund benutzt der VIC während der ersten Pixelzeile jeder Textzeile den in Abschnitt 2.4.3. beschriebenen Mechanismus, um den Prozessor für 40-43 Zyklen zu "betäuben", um die Zeichenzeiger lesen zu können. Die Rasterzeilen, in denen dies geschieht, werden gewöhnlich "Bad Lines" genannt ("Bad", weil sie den Prozessor anhalten und den Rechner damit langsamer machen und zu Problemen führen, wenn es auf das genaue Timing eines Programms ankommt, wie bei der Datenübertragung zum Diskettenlaufwerk). Der Zeichenzeigerzugriff findet auch in den Bitmap-Modi statt, denn dort werden die Daten der Videomatrix für die Farbinformation benutzt. Normalerweise ist innerhalb des Anzeigefensters beginnend mit der ersten Zeile der Grafik jede achte Rasterzeile eine Bad Line, jeweils die ersten Rasterzeilen jeder Textzeile. Daher ist die Position der Bad Lines vom YSCROLL abängig. Wie sich noch zeigen wird, basiert der gesamte Grafikaufbau und das Zugriffsschema auf den Grafikspeicher auf der Position der Bad Lines. Aus diesem Grund ist es notwendig, eine allgemeinere Definition einzuführen, nämlich die des "Bad-Line-Zustands":
| Ein Bad-Line-Zustand liegt in einem beliebigen Taktzyklus vor, wenn an der negativen Flanke von ø0 zu Beginn des Zyklus RASTER >= $30 und RASTER <= $f7 und die unteren drei Bits von RASTER mit YSCROLL übereinstimmen und in einem beliebigen Zyklus von Rasterzeile $30 das DEN-Bit gesetzt war.
Diese Definition ist wörtlich zu nehmen. Man kann durch Verändern von YSCROLL mehrfach innerhalb einer beliebigen Rasterzeile im Bereich $30-$f7 einen Bad-Line-Zustand erzeugen und wieder wegnehmen und damit jede Rasterzeile innerhalb des Anzeigefensters ganz oder teilweise zur Bad Line machen oder die anderen Funktionen auslösen oder unterdrücken, die mit dem Auftreten des Bad-Line-Zustands zusammenhängen. Ist YSCOLL=0 tritt in Rasterzeile $30 ein Bad-Line-Zustand auf, sobald das DEN-Bit (Register $d011, Bit 4) gesetzt wird (für näheres über das DEN-Bit, siehe Abschnitt 3.10.). Die folgenden drei Abschnitte beschreiben die Funktionsgruppen, die zur Darstellung der Grafik benutzt werden. In Abschnitt 3.6. geht es um das Speicherinterface, mit dem die Grafikdaten gelesen werden, und das Timing der Zugriffe innerhalb einer Rasterzeile. Abschnitt 3.7. handelt von der Anzeigestufe, die die Daten der Text- und Bitmap-Grafik in Farben umsetzt und die Adressen für den Speicherzugriff erzeugt, Abschnitt 3.8. behandelt die Sprites und ihre Adreßerzeugung.