Badline

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Eine Badline (englisch schlechte Zeile) ist eine Rasterzeile, in der der Prozessor vom VIC abgeschaltet wird, damit letzterer mehr Speicherzugriffe ausführen kann. Der Name kommt daher, dass durch dieses Abschalten das Timing des Prozessors durcheinander gerät. Das ist beispielsweise bei Diskettenzugriffen problematisch. Zudem stören Badlines bei vielen Rastertricks. Es gibt aber auch Tricks, bei denen man eine solche Zeile absichtlich erzeugen muss.

Warum die Badlines notwendig sind[Bearbeiten | Quelltext bearbeiten]

(Die nachfolgende Erläuterung geht von einem 6569-VIC und einem der Text-Modi aus. Bei Bitmap-Modi erfolgen zu den selben Zeitpunkten ähnliche Zugriffe.)

Normalerweise greifen innerhalb eines Taktzyklus VIC und Prozessor genau einmal auf den Speicher zu. In der ersten Hälfte eines Taktzyklus ist der VIC dran, in der zweiten der Prozessor. Die nachfolgende Grafik verdeutlicht dies:

Speicherzugriffe innerhalb einer Rasterzeile des VIC (6569) im Normalzustand

In der Grafik sind die 63 Taktzyklen einer Rasterzeile dargestellt. Jeder Zyklus ist zweigeteilt: in der roten Hälfte greift der VIC zu, in der blauen der Prozessor. B steht dabei für Bitmap-Daten, R für Refresh des Speichers, und die Zahlen für die jeweiligen Spriterahmenzeiger.

Für die vollständige Grafikausgabe fehlen allerdings noch Daten: Der VIC weiß nun, wie die Zeichen, die er darstellen soll, aussehen, aber er weiß noch nicht, welche Zeichen er darstellen soll. Da für diese Zugriffe keine Zeit mehr zur Verfügung steht, schaltet der VIC den Prozessor jeweils in der obersten Zeile eines Zeichens für 40 Taktzyklen ab. In dieser Zeit greift er selbst auf den Speicher zu und holt die Zeichendaten (sowie die Zeichenfarbe), in der folgenden Grafik mit C markiert:

Speicherzugriffe innerhalb einer Rasterzeile des VIC (6569) in einer Badline

Das Timing ist so gestaltet, dass die C-Zugriff immer direkt vor den B-Zugriffen liegen, denn diese benötigen ja die Information aus dem C-Zugriff. Man beachte noch: Die letzten drei Zugriffe des Prozessors vor dem Abschalten sind eingeschränkt (in der Grafik gestreift dargestellt): In dieser Zeit können vom Prozessor nur noch Schreibzugriffe durchgeführt werden. Sobald der erste Lesezugriff erfolgen würde, stoppt der Prozessor, selbst wenn dies mitten in der Abarbeitung eines einzelnen Befehls ist.

Weitere Abschaltungen erfolgen in Zeilen, in denen Sprites dargestellt werden: Spritedaten werden immer in den drei Zugriffsmöglichkeiten direkt nach einem Spriterahmenzeiger-Zugriff geholt. Auch hierfür muss der Prozessor angehalten werden.

Welche Zeilen sind Badlines?[Bearbeiten | Quelltext bearbeiten]

Der Startbildschirm des C64; Badlines sind hervorgehoben

In nebenstehender Abbildung sind die 25 Badlines beim Startbildschirm zu sehen. Es handelt sich dabei um alle Rasterzeilen zwischen 48 und 247 (einschließlich), bei denen die letzten drei Bits von Register 18 ($D012, Rasterzeile) mit den letzten drei Bits von Register 17 ($D011, YSCROLL) übereinstimmen. Standardmäßig sind dies die Rasterzeilen 51, 59, 67, 75, 83, 91, 99, 107, 115, 123, 131, 139, 147, 155, 163, 171, 179, 187, 195, 203, 211, 219, 227, 235 und 243.

Durch Verändern von YSCROLL, kann man diese Zeilen ändern. Insbesondere kann man dadurch auch erreichen, dass überhaupt kein Badline-Zustand erzeugt wird. In diesem Fall benutzt der VIC die Zeichendaten der vorigen Zeile erneut, notfalls bis zum unteren Ende des Bildschirms.

Umgekehrt kann man aber durch Ändern von YSCROLL auch dafür sorgen, dass eine andere Zeile zu einer Badline wird. Der VIC liest dann die Zeichendaten erneut ein. Dies passiert insbesondere auch dann, wenn YSCROLL erst nach Erreichen des Zeitfensters, in dem der Prozessor normalerweise abgeschaltet wird, geändert wird. In diesem Fall schaltet VIC sofort den Prozessor ab und beginnt damit, die Zeichendaten auszulesen. Insbesondere wird in diesem Fall nicht darauf gewartet, bis der Prozessor seine drei potentiellen Schreibzugriffe erledigt hat, weshalb die ersten drei Lesezugriffe des VIC fehlerhafte Daten liefern (die Zeichendaten sind immer 255, die Farbdaten hängen davon ab, welche Speicherzelle der Prozessor in seinem nächsten Befehl lesen möchte, meist handelt es sich dabei um den Opcode des nächsten Befehls).

Weblinks[Bearbeiten | Quelltext bearbeiten]