von Frederik Holst Diesmal wollen wir wie versprochen in dieser Assemblerecke die Textausgabe ein wenig erweitern. Wie wir letztes Mal schon feststellen konnten, brachte unsere kleine Routine nur 256 Zeichen auf den Schirm, und das auch nur in der oberen Ecke. Wie können wir das Problem denn nun beseitigen ? Dazu gibt es zwei Möglichkeiten. Zum einen tauscht man das STA (88),Y gegen den echten Anfang des Bildschirmspeichers aus, also z.B. 40000 und zählt dann, nachdem man die 256 Zeichen geschrieben hat zu den 40000 256 hinzu und wiederholt das ganze. Da dies aber keine große Kunst ist, will ich auf einen anderen Weg eingehen, der sich der Displaylist bedient. Was ist die Displaylist ? Außer unserer 6502 CPU besitzt unser XL auch noch mehrere ander Chips, die ihn bei seiner Arbeit entlasten. Einer von diesen ist die ANTIC. ANTIC ist für die Bildschirmdarstellung da, und sorgt dafür, daß die Zeichen, die wir auf der Tastatur eingeben auch auf dem Bildschirm erscheinen. Wie aber wohl alle wissen, besitzt der Atari 16 verschiedene Grafikstufen. ANTIC sorgt also auch dafür, daß die Zeichen im Grafikmodus richtig wiedergegeben werden. Jede Grafikstufe besteht aus einem Programm. Die "Befehle" bestehen aber nicht aus Mnemonics wie in Assembler, sondern einfach nur aus Zahlen. Da die ANTIC nämlich nur im XL verwendet wird, hat man sich nie auf eine feste Befehlsordnung geeinigt. Da ich auf dem mir zur Verfügung stehenden Platz nicht auf die ganze Programmierung der ANTIC eingehen kann, hier nur die Befehle, die uns interessieren: 02 Erzeugt eine GR.0 Zeile 112 Erzeugt einen schwarzen Balken in der Höhe einer GR.0 Zeile 65 Sprung zur nachfolgenden Adresse Wir können jetzt problemlos einen GR.0 Bildschirm anlegen, wenn wir folgendes eingeben: ORG $A800 DFB 112,112,112 * Dies sind die schwarzen Balken, die vor jeder Grafikstufe stehen DFB 2,2,2,2,2,2,2,2,2,2,2,2 DFB 2,2,2,2,2,2,2,2,2,2,2,2 * insgesamt 24 GR.0 Zeilen DFB 65 * Sprung DFB 0,$A8 * nach $a800 Zu dem Sprung nach $a800 ist noch anzumerken, daß solche Daten im XL immer in der Form Low-Byte, High-Byte abgelegt werden. D.h. zuerst wird die 00 von $a800 abgelegt, dann die $a8. Oder von $143a zuerst die $3a, dann die $14. Wir können dieses Programm dann assemblieren mit CTRL+Y, werden jedoch noch keine Veränderung feststellen. Erst wenn wir im Monitor (CTRL+P) eingeben, und dann noch die Speicherstelle $230, $231 mit C (für Change) in 00, $a8 verändern wird sich etwas tun. Aber wir werden keinen Text mehr sehen können, obwohl es klickt. Wir haben der Displaylist nämlich noch nicht mitgeteilt, wo sie den Text hernehmen soll. Dies geschieht mit dem Offset +64. Ab der Zeile, wo dieser Offset zu der eigentlichen Instruktion hinzugezählt wird, wird der Text auf dem Bildschirm dargestellt. Und gerade diesen Effekt machen wir uns nun zu Nutzen. Zuerst das fertige Listing, dann die Erklärung: ORG $a800 LDA #DL:LO STA 560 LDA #DL:HI STA 561 RTS DL DFB 112,112,112 DFB 2+64 DFW TEXT DFB 2,2,2,2,2,2,2,2,2,2,2 DFB 2,2,2,2,2,2,2,2,2,2,2,2 DFB 65 DFW DL TEXT ASC %Hallo ! Das ist der Text in der 1.Reihe!% ASC %Das ist die 2. Reihe % ASC %Auch diese Reihe hätten wir noch mit der% ASC %alten Routine geschafft... % ASC % % ASC % % ASC %am hier würde es kritisch... % ASC %Diese Reihe wäre nicht mehr möglich ! % Das Listing geht los mit der Initialisierung der Displaylist. Auch hier erfolgt die Abspeicherung in der Form "zuerst Low-Byte, dann Highbyte". Das Hauptprogramm wird dann abgeschlossen und man kehr mit RTS zurück. Die neue Displaylist, die erzeugt worden ist, gleicht einer GR.0 DL. Sie beginnt mit drei schwarzen Balken, die durch die 112en erzeugt werden. Dann kommt die Sache mit dem Offset. Zu der ersten GR.0 Zeile wird eine 64 hinzugezählt. ANTIC erwartet nun eine Adresse, aus der er die Daten für den darzustellenden Text holen soll. Wir geben hier einfach die Marke Text an. ATMAS-II rechnet uns dann automatisch die Startposition von TEXT aus und setzt es auch noch in die erforderliche Low-High Notation um. Anschließend folgen die restlichen 23 GR.0 Instruktionen. Wenn dies geschehen ist, kommt die Sprunganweisung 65. Als Sprungziel verwenden wir wieder eine Marke, diesmal die Marke DL. DL ist der Anfang unserer Displaylist, was ja auch logisch ist, denn es soll ja immer die selbe DL ausgeführt werden. Wichtig anzumerken ist noch, daß bei TEXT und DL immer ein DFW statt eines DFB stehen muß, da eine Adresse ja immer aus einem WORD besteht (0...65535) statt aus einem Byte (0...255) Der Text der dann kommt muß mit den Prozentzeichen immer als Bildschirmcode gekennzeichnet werden. Außerdem muß jede Zeile immer 40 Zeichen lang sein. Probieren Sie doch mal aus, was passiert, wenn man die Zeilen nicht auffüllt. Der eigentlich interessante Aspekt bei dieser Aktion ist aber, das es nun möglich ist, bei der Textausgabe verschiedene Graphikmodi zu mischen. Tauschen Sie doch einfach einmal die dritte zwei gegen eine sechs aus und sehen Sie was dann passiert... Wenn mehr Informationen zum Thema Displaylist gewünscht werden, so schreiben Sie mir... Frederik Holst Ulrich-Günther Str. 101 W-2322 Lütjenburg