Rasterbar

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Rasterbar - Das Beispiel aus dem Quellcode von codebase64.org

Eine Rasterbar (engl. raster bar; vom englischen Wort "bar" für Balken, Stange) ist ein hauptsächlich in Demos und Intros verwendeter Effekt, der einen Bereich mit horizontalen Linien auf den Bildschirm (und die Bildschirmränder) zeichnet, welcher in jeder Rasterzeile eine eigene Farbe besitzen kann. Geläufig ist auch die Bezeichnung Copperbar, da ähnliche Effekte auf dem Amiga mit Hilfe des Copper-Chips erzeugt wurden. Je nachdem wie die Rasterbar programmiertechnisch erzeugt wird, wird unterschieden zwischen "echten" und "scheinbaren" Rasterbars.


"Echte" Rasterbars[Bearbeiten | Quelltext bearbeiten]

"Echte" Rasterbars werden über den Rasterzeilen-Interrupt bzw. über das VIC-Register $D011/$D012 und $D020/$D021 erzeugt. Programmtechnisch wird meistens mit Hilfe von Rasterzeilen-Interrupts in den jeweiligen Rasterzeilen die gewünschte Aktion, also Hintergrund- und Rahmenfarbe ändern via $D020/$D021, ausgeführt. Allerdings vergehen vom Zeitpunkt des Interrupts bis zum Aufruf der eigentlichen Routine mindestens 9 Taktzyklen sowie mindestens 4 weitere Taktzyklen, um ein VIC-Register zu beschreiben. Zu diesem Zeitpunkt befindet sich der Rasterstrahl bereits im sichtbaren Teil des linken Rahmens. Bei Verwendung des originalen IRQ-Handlers vergehen sogar mindestens 38 Taktzyklen und in dieser Zeit hat der Rasterstrahl bereits mehr als die Hälfte der Bildschirmbreite überstrichen (eine Rasterzeile dauert insgesamt - abhängig von der Videonorm - 63 bis 65 Taktzyklen). Zudem ist die IRQ-Reaktionszeit der CPU nicht konstant, sondern abhängig vom gerade ausgeführten Befehl, was zu einem Zittern des Balkens führen kann. Eine Möglichkeit dieses Problem zu lösen besteht darin, den Interrupt eine Zeile früher auszulösen und dann über das VIC-Register 53266 ($D012) zu prüfen, ob der Rasterstrahl des Monitors die gewünschte Zeile erreicht hat.

Man könnte auch auf den Interrupt verzichten und die gewünschte Position nur über die VIC-Register ermitteln, dies würde aber Rechenzeit verschwenden, da die CPU in der Wartezeit anderes wie z.B. eine Musik-Routine ausführen könnte.

"Scheinbare" Rasterbars[Bearbeiten | Quelltext bearbeiten]

In diesem sehr bekannten Intro der Gruppe Fairlight bestehen die bewegten grünen Raster tatsächlich aus Sprites, lediglich die beiden blau- bzw. rosafarbigen Balken, die den Hintergrund des schwarzen Textes bilden, werden über Abfrage des Rasterstrahls und Hintergrundfarbe $D021 erzeugt.

Ein ähnlicher Effekt zu Rasterbars kann auch erzeugt werden, indem stattdessen Grafik angezeigt wird. Allerdings ist es ziemlich schwierig, auf diese Weise den Rahmen mit einzubeziehen; man muss hierfür auf Rahmensprites zurückgreifen, die am linken und rechten Rahmen viel schwieriger zu Programmieren sind, als echte Rasterbars.

Beim Intro von Fairlight, welches im nebenstehenden Bild angezeigt wird, bewegen sich die grünen Streifen im oberen Bereich vor dem Text "Fairlight" nach unten und hinter dem Text nach oben. Verdächtig ist, dass diese Streifen nicht über den Rand gehen, $D020 also nicht geändert wird. Tatsächlich handelt es sich um Sprites. Das kann man leicht sehen, indem man zum Beispiel im Maschinensprachemonitor das Spriteanzeigeregister $D015 auf $00 setzt.

Diese Vorgehen hat klare Vorteile, so muss man sich zum Beispiel nicht mehr um Badlines kümmern, also das Timing von Rasterzeilen, in denen weniger Zyklen zur Verfügung stehen als in anderen. Auch kann man leicht über das Prioritätsregister festlegen, ob die Streifen vor oder hinter der restlichen Grafik liegen sollen.

Vergrößerter Ausschnitt des obigen Bildes. Der fehlerhafte Bereich ist blau umrandet.

Ein weiterer Nachteil besteht darin, dass grundsätzlich zwei Multicolorfarben als Hintergrund zählen (hier schwarz und rot), die immer von den Sprites verdeckt werden. Man kann diese beim bewegten Intro gut erkennen. In der hier abgebildeten Vergrößerung des "T" ist ein solcher Bereich markiert: Er ist weiß bis grün, müsste bei echten Rasterbars aber rot sein.


Weblinks[Bearbeiten | Quelltext bearbeiten]

WP-W11.png Wikipedia: Raster bar Sprache:english

Programmierung[Bearbeiten | Quelltext bearbeiten]

Demo-Beispiele[Bearbeiten | Quelltext bearbeiten]