von Bernd Dongus Bis jetzt drehten sich alle meine Bei- träge um die Diskettenstation und ich könnte noch ein paar darüber schreiben. Aber ich will Euch und mich schonen und ein angenehmeres Thema angreifen. Die horizontale Feinverschiebung -------------------------------- Besser bekannt dürfte der Ausdruck ho- rizontales Finescrolling sein. Diesen Effekt kennt jeder von euch. Wenn nicht von Spielen oder Demos, dann doch von der USER-MAG-Einleitung am Anfang jedes Magazins. Nun soll das Geheimnis dieser sich "ma- gisch" bewegenden Zeile gelüftet wer- den. Damit jeder alles nachvollziehen kann, befindet sich ein Demo im BIBO- Assembler-Format auf dieser Diskette. Im Gegensatz zu manch anderen Computern besitzt der ATARI 8-Bit Hardware- Scrolling, d.h. ein Chip (hier der ANTIC) übernimmt die Verschiebearbeit. Für die einzige Arbeit, die uns bleibt, benötigen wir die Display-Liste und das Register HSCROL ($D404). Zuerst muß in der Display-Liste (DL) festgelegt werden, welche Zeilen ver- schoben werden sollen. Dies geschieht durch Setzen von Bit 4 des entsprechen- den Befehls in der DL. Z.B.: DL .HX 70707052 .DA SCROLLTEXT .HX ... Mit $52 wird dem ANTIC mitgeteilt, daß die folgenden zwei Byte die neue Bild- speicheradresse darstellen, und diese Zeile als horizontal verschiebbare GRAPHICS 0-Zeile dargestellt wird. Eine so gekennzeichnete Zeile stellt ANTIC um die in HSCROL stehenden Farbtakte nach rechts verschoben dar. Gültig sind nur die untersten 4 Bit, was die Ver- schiebung auf null bis fünfzehn Farb- takte einschränkt. ANTIC benötigt zur Darstellung einer verschobenen Zeile mehr Daten, als bei einer normalen Zeile. Auf dem Monitor hat sie nach wie vor 160 Farbtakte, im Speicher verhält sie sich aber wie eine mit 192 Farbtakten. D.h. also, daß eine Zeile, die normal 40 Byte lang ist nun 48 Byte lang ist. Nun aber zu der von mir geschriebenen Includedatei. Am Anfang des Listings stehen die im Hauptprogramm zu defin- ierenden Labels. Hier ist zu beachten, daß TXTPT als eine zwei Byte lange Zeropageadresse und STOP als Scroll- endzeichen definiert sein müssen. Damit die Routine richtig arbeitet, müssen überall 'sinnvolle' Werte eingetragen sein. In HSCRL setzt man je nach Richtung und Grafikstufe den Wert 0,3 oder 7 ein und in HVERZ und HPTS am Besten eine Null. TXTPT muß auf den Anfang des Textes zeigen, der mit dem Zeichen STOP auf- hört. Die Bits null bis vier von HSPD ent- halten die Verzögerung bis zum nächsten Schritt der Feinverschiebung, und die Bits fünf bis sieben enthalten die je Schritt zu verschiebenden Farb- takte. Die Verschiebungsrichtung wird mit HSFLG festgelegt. 0 = kein Scrolling 64 = Scrolling nach rechts 128 = Scrolling nach links Dies klingt zunächst verwirrend und kompliziert, ist aber auf einen ein- fachen Nenner zu bringen. In der In- cludedatei sind zwei Scrollroutinen, die jeweils nur gewisse Stellen in der Hauptscrollroutine ändern. HORSCRL2 : kann für Scroller in GRAPHICS 1 und 2 verwendet werden. HORSCRL0 : kann für GRAPHICS 0,7,8 und 15 benutzt werden. Bei nur einer Scroll-Zeile wird die, der Grafikstufe entsprechende, Routine mit einem JSR aufgerufen und meldet im Akku und in HSCRL den Wert zurück, der ins Hardwarereg. des ANTIC eingetragen werden muß. TXTPT enthält die Start- adresse der Zeile und sollte in die DL übertragen werden. Der Text hat das Ende erreicht, sobald HSFLG den Wert null annimmt. Bei mehreren Scroll-Zeilen, müssen die Werte der in der Routine benutzten Labels nach Aufruf zwischengespeichert und vor Aufruf wieder in die entsprech- enden Labels geschrieben werden. HCROL muß dann jeweils vor der Zeile mit dem richtigen Werte gefüttert werden. Was macht die Routine nun ? Wie bereits erwähnt werden zunächst die auflösungsabhängigen Parameter richtig eingestellt. Danach wird überprüft, ob die Verzögerung beendet ist und je nach Richtung HSCRL um HPTS erhöht oder er- niedrigt. Ist dadurch ein Zeichen fein- gescrollt worden, wird grobgescrollt, d.h. TXTPT um eins hoch- bzw. runter- gezählt. Zu guter Letzt wird getestet, ob der Text sein Ende erreicht hat und ggf. HSFLG null gesetzt. Am Besten schaut ihr euch das Beispiel an, danach sollte eigentlich alles klar sein. Der Einfachheit halber habe ich nur eine Scroll-Zeile eingebaut. Da das Magazin und das menschliche Gehirn nur ein begrenztes Fassungsver- mögen hat (nicht Dummheit, sondern Fähigkeit neue Informationen zu ver- arbeiten und zu speichern), habe ich es unterlassen Die DL, die Interrupts und den Aufbau eines Bildes zu erklären. Aber jetzt viel Spaß bei Experimentiern mit der Scrollroutine. Nächstes Mal machen wir uns dann über den sogenannten 'Wellenscroller' her. Man darf gespannt sein, denn darüber hat noch seit bestehen von Zeitschrif- ten und Magazinen für den XL/XE noch niemand berichtet !!! Das USER-MAG ist wieder einmal allen einen Schritt voraus !