Der MOS 6567/6569 Videocontroller (VIC-II) und seine Anwendung im Commodore 64
Inhalt 3. Funktionsweise des VIC 3.14. Effekte/Anwendungen
3.14.1. Hyperscreen |
Wie in Abschnitt 3.9. erläutert, erzeugt der VIC den Bildschirmrahmen durch das Vergleichen der Strahlkoordinaten mit Start- und Stoppositionen, die sich durch die CSEL/RSEL-Bits auswählen lassen. Der Rahmen wird also nicht grundsätzlich innerhalb eines bestimmten Koordinatenbereichs dargestellt, sondern bei bestimmten Koordinaten ein- und ausgeschaltet. Sorgt man nun durch geeignetes Umschalten von CSEL/RSEL dafür, daß der Koordinatenvergleich niemals anspricht, so wird der Rahmen z.B. nicht eingeschaltet und man kann auch die Grafik im Randbereich sehen, die normalerweise durch den Rahmen überdeckt wird. Diese Technik wird als "Hyperscreen" oder "Öffnen des Rahmens" bezeichnet. Allerdings beschränkt sich die im Randbereich darstellbare Grafik hauptsächlich auf Sprites, da der Grafikdatensequenzer in diesem Bereich im Idle-Zustand ist, da außerhalb der Y-Koordinaten $30-$f7 keine Bad Lines auftreten können (siehe Abschnitt 3.5.). Man kann aber auch mit der im Idle-Zustand erzeugten Grafik etwas sinnvolles darstellen. Um den oberen/unteren Rahmen auszuschalten, geht man wie folgt vor: Irgendwo in der oberen Hälte des Bildschirms setzt man das RSEL-Bit und schaltet damit auf den 25-Zeilen-Rahmen. Nun wartet man, bis RASTER einen Wert im Bereich 248-250 erreicht hat. Das vertikale Rahmenflipflop ist noch gelöscht, denn bei RSEL=1 spricht der Komparator erst in Rasterzeile 251 an. Jetzt löscht man das RSEL-Bit. Der Komparator wird umgeschaltet und setzt das vertikale Flipflop nun bei Zeile 247. Diese Zeile ist aber schon vorbei und der VIC "vergißt" deshalb, den vertikalen Rahmen einzuschalten. Nach Rasterzeile 251 setzt man das RSEL-Bit wieder und wiederholt das Ganze bei Punkt 2. Wenn man den oberen/unteren Rahmen mit dieser Methode öffnet, bleibt aber weiterhin der linke/rechte Rahmen in dem "freigewordenen" Bereich aktiv. Schaltet man im Bereich der Rasterzeilen 52-54 von RSEL=0 auf RSEL=1, so wird der Rahmen nicht mehr ausgeschaltet und überdeckt den gesamten Bildschirm (dies entspricht der Darstellung bei gelöschtem DEN-Bits, jedoch mit dem Unterschied, daß Bad Lines stattfinden), was aber wenig sinnvoll ist. Der linke/rechte Rahmen läßt sich mit dem CSEL-Bit auf eine ähnliche Weise abschalten. Das Timing ist jedoch wesentlich kritischer. Hat man beim vertikalen Rahmen noch 4 Rasterzeilen Zeit für die Umschaltung, so muß beim horizontalen Rahmen der Wechsel CSEL=1 nach CSEL=0 auf den Zyklus genau erfolgen, und zwar in Zyklus 56. Ganz analog läßt sich das Abschalten des horizontalen Rahmens verhindern, indem man in Zyklus 17 von CSEL=0 auf CSEL=1 schaltet. Will man den linken/rechten Rahmen im oberen/unteren Randbereich öffnen, so muß man entweder damit anfangen, bevor das vertikale Rahmenflipflop gesetzt wird, also noch außerhalb des oberen/unteren Rahmens, oder den oberen/unteren Rahmen ebenfalls öffnen, denn das Haupt-Rahmenflipflop kann nur gelöscht werden, wenn auch das vertikale Flipflop gelöscht ist. Vergleicht man beide Methoden, kann man sich auch davon überzeugen, daß das vertikale Flipflop den Ausgang des Grafikdatensequenzers steuert: Bei der ersten Methode ist im freigewordenen oberen/unteren Rahmenbereich nur die Hintergrundfarbe sichtbar, bei der zweiten Methode wird die Grafik des Idle-Zustands dargestellt.