von Bernd Dongus Letztes Mal habe ich ihn schon ange- kündigt, den Wellenscroller. Bei dieser Art von Scrolling bewegen sich die Zeichen nicht nur von rechts nach links, sondern auch in einer wellenförmigen Bewegung auf und ab. ANTIC besitzt zwar ein Register für vertikale Verschiebung (VSCROL: $D405), aber mit diesem lassen sich nur Zeilen im Ganzen verschieben. Für unsere Zwecke ist dies nicht ausreichend, da wir jedes Zeichen der Scroll-Zeile an einer anderen vertikalen Position haben wollen. Also muß die vertikale Ver- schiebung per Software erledigt werden. Was wir benötigen: - einen Zeichensatz - eine horiz. Scrollroutine - eine Tabelle mit der die Wellen- form festgelegt wird. - ausreichend GR.8-Zeilen - eine Tabelle mit den Anfangs- adressen der einzelnen Zeilen - Routinen zur vert. Verschiebung Als Zeichensatz würde der des Betriebs- systems genügen, aber der besseren Optik wegen installiere ich ab $7000 einen deutschen Zeichensatz. Danach wird die Display-List entpackt und ans Ende des Programms gelegt. Die für den schnelleren Zugriff benö- tigte Zeilenanfangstabelle wird, eben- falls aus Geschwindigkeitgründen, in Seite 0 eingerichtet. Die Scrollpara- meter sind dieselben wie beim letzten Mal, obwohl ich die Routine etwas abge- ändert habe. WVTB ist eine 128 Byte lange Tabelle, die den vertikalen Abstand von der obersten Grafikzeile in Form einer Sinus-Welle enthält. Im VBI wird das Softscrolling und das Kopieren der Zeichen in den Bild- speicher erledigt. Um dies korrekt aus- zuführen muß zunächst die Stelle des jeweiligen Zeichens im Zeichensatz berechnet werden (ATASCII*8+Basissei- te). Nun müssen die Daten aber auch ein Ziel haben. Die Adresse der Zeile, ab der kopiert werden soll, wird aus der zuvor eingerichteten Tabelle genommen und die Position in der Zeile hinzugezählt. Als Nächstes werden die Daten des Zeichens Byte für Byte kopiert. Hierbei wird auf eine Schleife verzichtet, da diese mehr Zeit verbrauchen würde. Zu Guter Letzt wird die Startposition innerhalb der Welle geändert, da der Scroller sonst in einer starren Welle "hängen" würde. (Probiert's mal aus.) Ließen wir den Bildschirm unverändert bis zum nächsten VBI, wäre das Chaos perfekt. Es wäre nur noch Müll übrig. Dies zu verhindern ist die Aufgabe des DLI. Er löscht die Zeichen aus dem Speicher. Aber auch hier ist Vorsicht geboten, denn dieser muß zwischen der letzten GR.8-Zeile und dem nächsten VBI liegen, da die Zeichen sonst flackern, oder gar nicht zu sehen sind. Wer sich das Listing näher anschaut, wird feststellen, daß der Scroller 40 Zeichen breit ist, aber die Schleife 41 Zeichen kopiert. Warum ? Ganz einfach ! Das 41. Zeichen wird sanft von rechts reingeschoben. Werden nur 40 Zeichen kopiert, macht es PLOPP und das 41. ist auf unschöne Weise plötzlich da (Mies, oder ?). Solltet Ihr Verständnisprobleme haben, schaut Euch den Source-Code genau an. Aber bitte auf keinen Fall aufgeben. Mein erster Versuch einen solchen Scroller zu schreiben war ein totaler Schlag ins Wasser. Damals kopierte ich die Zeichen mit einer Schleife und sowohl das Löschen, als auch das Ko- pieren wurde im VBI erledigt (das war vielleicht ein Geflackere !). Andert- halb Jahre später hatte ich den Geis- tesblitz und das Ergebnis läßt sich doch sehen, oder nicht ? Bevor ich jetzt zum Schluß komme, möch- te ich noch auf die Assembler-Ecke in der vorigen Ausgabe eingehen. Das Ruk- keln der Scroll-Line kommt dadurch zu- stande, daß im VBI, der für das Scrol- ling verantwortlich ist, eine Verzöger- ungsschleife eingebaut wurde. Dies ge- schah lediglich um die Lesbarkeit der Scroll-Line heraufzusetzen. Selbstver- ständlich kann man diese Verzögerung auch herausnehmen, so daß der Scroller wirklich butterweich scrollt. Damit habe ich hoffentlich einige aufgetauch- te Fragen beantwortet. Ich hoffe Euch wieder einmal weit in die Geheimnisse des XL/XE hineingeführt zu haben. Wieder einmal wurde bewiesen, daß der XL/XE das, was AMIGA & ST erst seit kurzem mit neuer Technik können, schon vor mehr als 10 Jahren hätte dar- stellen können. Lang lebe der XL/XE !