von Frederik Holst Nachdem wir letztes Mal uns den STACK etwas näher angesehen haben, kommen wir diesmal zu einer praktischen Anwendung. Und zwar werden wir die beiden letzten Kursteile miteinander kombinieren: Es sollen mehrere Farbwechsel hintereinander entstehen, das ganze sieht dann wie eine Röhre aus. Erstmal das Programm: ORG $A800 LDA #0 STA $D40E LDA #DL:LO STA 560 LDA #DL:HI STA 561 LDA #DLI:LO STA 512 LDA #DLI:HI STA 513 LDA #192 STA $D40E RTS DL DFB 112,112,112 DFB 112,112+128 DFB 112,112,112 DFB 65 DFW DL DLI PHA TXA PHA LDX #0 LOOP LDA TABLE,X STA $D40A STA $D01A INX CPX #8 BNE LOOP PLA TAX PLA RTI TABLE DFB 0,2,4,6,8,10,12,14 Das ist also unser Listing. Gehen wir das ganze am besten von vorne an durch: Zu Beginn ist wieder die Initialisierung der DL und DLI Routinen. Alle Interrupts werden ausgeschaltet, die Vektoren verbogen und dann die Interrupts wieder eingeschaltet. Dann folgt eine Display List, die einfach nur aus Blank Lines besteht. Nach der fünften Zeile wird dann der DLI ausgelöst. Interessant ist nun der DLI: Zu beginn wird der Akku auf den Stack geschoben, dann das X-Register in den Akku transferiert und dieser dann abermals auf den Stack geschoben. Der Akku und das X-Register sind somit gerettet. In unserem Beispiel ist das nicht so wichtig, da das Hauptprogramm sowieso mit dem Aufruf des DLI beendet ist, aber bei größeren Programmiervorhaben ist dies schon wichtig. Nachdem dies also geschehen ist, wird das X-Register auf Null gesetzt. Dann erfolgt das Einlesen der Farbtabelle. Sie besteht aus einem Verlauf von 0 (Schwarz) bis 14 (Weiß). Damit auch immer eine neue Zeile pro Farbwert erreicht ist, wird der Wert auch gleichzeitig in die Adresse $D40A gesetzt. Das ist das Register für den Horizontalen Zeilensprung. Sobald irgendein Wert dorthon geschrieben wird, wartet der Computer bis die nächste Zeile erreicht ist. Dann wird der Farbwert zugewiesen und das X-Register erhöht. Wenn dies geschehen ist, wird verglichen, ob schon der achte Wert eingelesen worden ist. Wenn nicht, wird die Schleife weiter ausgeführt, ansonsten ist der DLI zuende. Dann wird der letzte Wert vom Stack geholt und ins X-Register geschrieben und dann der vorletzte Wert wieder normal in den Akku gesetzt, so als wäre nichts gewesen. So, wenn Sie das ganze heute gut verdaut haben, dann können wir uns nächstes Mal an die größeren Sachen wagen !