von Frederik Holst Diesmal soll es also mit der Textausgabe losgehen. Um die heutige Routine zu verstehen, müssen wir uns klarmachen, wie eine Textausgabe im ATARI abläuft. Wenn wir z.B. in BASIC eingeben PRINT "HALLO WELT !", dann holt sich das OS (Operating System, Betriebssystem) den String hinter dem PRINT und wandelt ihn in den BILDSCHIRMCODE um. Dieser Code unterscheidet sich etwas von dem ATASCII Code, die Werte sind etwas verschoben. Wenn diese Umwandlung erfolgt ist, wird der String in den BILDSCHIRMSPEICHER kopiert. Der Bildschirmspeicher ist ein Teil des RAMs, den sich der ANTIC (der Grafikchip) holt und auf dem Bildschirm darstellt. Was wir nun heute machen wollen, ist eine einfache Textausgabe, ohne OS usw. Als einfachste Möglichkeit bietet sich es an, einfach die Zeichen, die man ausgeben will, gleich in den Bildschirmspeicher zu kopieren. Das ist nach den Erfahrungen, die wir in der letzten Folge gewonnen haben, auch kein Problem mehr. Um die Umwandlung in den Bildschirmcode brauchen wir uns im übrigen auch nicht zu kümmern, doch dazu später mehr. Fangen wir an: Der Anfang des Assemblerlistings ist immer gleich: ORG $A800 Um zu kopieren brauchen wir immer eine Zählvariable, wir nehmen diesmal das Y-Register. LDY #0 LOOP LDA TEXT,Y Das LOOP kennen wir schon, hier wird später noch einmal hingesprungen werden. Doch was soll das LDA TEXD1W Das TEXT bezeichnet ein Feld, in dem wir nachher unseren Text ablegen werden. Mit dem LDA laden wir das erste Zeichen des Feldes in den Akku. Da wir aber mehr als ein Zeichen einlesen wollen, gibt das Y hier den Index an, ist Y=1, dann wird das zweite Zeichen eingelesen. Als nächstes soll das Zeichen irgendwo abgelegt werden, nicht wie letztes Mal bei 1536, sondern diesmal im Bildschrimspeicher. Bei Standard-Displaylists brauchen wir uns um dessen Adresse nicht zu kümmern, dafür gibt es einen Zeiger in 88,89. Wir wollen den Akku also an der Adresse ablegen, auf die 88,89 zeigt. Dazu soll dann aber auch noch das Y-Register gezählt werden, da es ja mehrere Zeichen sind, die nicht alle an der ersten Bildschirmposition abgelegt werden sollen. Wir schreiben also: STA (88),Y Hier zeigt es sich, daß wir das Y-Register wählen mußten, denn mit dem X-Register ginge das nicht. Im brigen läßt sich diese Art der ADRESSIERUNG mit Hilfe eines Zeigers nur mit Adressen in der Page null machen, also von null bis 255. Jetzt muß das Y erhöht werden, also: INY Dann erfolgt der Vergleich mit fünf: CPY #5 Wenn dies nicht der Fall ist, dann zurück zu LOOP: BNE LOOP Ansonsten 'raus: RTS Hier kommt dann unser Textfeld: TEXT ASC %HALLO% Mit ASC wird ein Text in einem bestimmten Format im Speicher abgelegt. Die Prozentzeichen bedeuten, daß der Text im Bildschirmcode abgelegt wird, das spart uns die Umrechnung. Hätten wir Anführungszeichen genommen, dann wäre der Text im normalen ATASCII Code im Speicher gelandet. Um sich das Programm in Aktion ansehen zu können, müssen Sie diesmal das Programm mit CTRL+Y kompilieren und dann mit CTRL+P in den Monitor wechseln und dann mit G A800 starten. Das war's für dieses Mal. Wenn Sie etwas experimentiert haben, werden Sie sehen, daß diese Routine nicht mehr als 255 Zeichen ausspuckt. Nächstes Mal werden wir uns mit einer anderen Textausgabe beschäftigen.