von Frederik Holst Beginnen muß ich diese Assemblerecke leider mit einer Korrektur der letzten Ausgabe. Im Abi-Streß habe ich das Assemblerlisting aus dem Kopf aufgeschrieben und dabei leider vergessen, daß der 6502 Prozessor aus irgendeinem mir nicht erklärlichen Grund nicht in der Lage ist, die Instruktion STA (88),X auszuführen. Er verträgt diese Art der indirekten Indizierung nur mit dem Y-Register. Damit das Programm funktioniert, müssen alle INX, CPX und sonstigen X- Befehle von einem X in ein Y geändert werden, damit alles klappt. Vielen Dank für den Hinweis an Heiko Bornhorst ! Dieses Mal ein hoffentlich fehlerfreies Listing, das noch einmal den DLI zum Thema hat. Beim Durchsehen der älteren Teile ist mir aufgefallen, daß ich ein Versprechen noch nicht eingelöst habe. Nach der einfachen Röhrendarstellung ist das Thema DLI trotz versprochener Vertiefung nicht fortgesetzt worden. In diesem Teil sollen rotierende Röhren erzeugt werden. Zuerst das Listing: ORG $A800 LDA #DL:LO STA 560 LDA #DL:HI STA 561 LDA #VBI:LO STA 548 LDA #VBI:HI STA 549 LDA #DLI:LO STA 512 LDA #DLI:HI STA 513 LDA #192 STA $D40E RTS DL DFB 112,112,112 DFB 112+128,112,112+128,112 DFB 112+128,112,112+128,112 DFB 112+128,112,112+128,112 DFB 112+128,112,112+128,112 DFB 112+128,112,112+128,112 DFB 112+128,112,112+128,112 DFB 112+128,112 DFB 65 DFW DL DLI PHA TXA PHA LDX #0 LOOP LDA TABLE,X ADC $14 STA $D40A STA $D01A INX CPX #16 BNE LOOP LDA #0 STA $D01A PLA TAX PLA RTI VBI LDY #16 CONT DEY LDA TABLE,Y STA TABLE+1,Y CPY #0 BNE CONT LDA TABLE+16 STA TABLE END JMP $E462 TABLE DFB 14,12,10,8,6,4,2,0 DFB 0,2,4,6,8,10,12,14 Der Beginn ist wie gehabt der Initialisierungsteil. VBI, DLI und DL werden neue Werte zugewiesen und die DLIs und VBIs ermöglicht. Dann folgt die Displaylist. Hier wird der ganze Bildschirm mit schwarzen Balken gefüllt, wie sie sonst nur über den jeweiligen Grafikmodi vorkommen. Jede zweite Zeile bekommt dabei das Offset 128, was in der folgenden Zeile einen DLI auslöst. In unserem Listing soll nur eine Art von Röhre erzeugt werden. Das hat den Vorteil, daß wir nun nicht mehrere verschiedene DLIs programmieren müssen, sondern es bei einem belassen können. Nächstes Mal erkläre ich dann auch noch den Wechsel zwischen verschiedenen DLIs. Der DLI liest die Farbwerte von TABLE und legt sie Scanline für Scanline im Bildschirm ab. Wenn alle 16 Farbwerte eingelesen sind, wird noch einmal eine null gepoket, damit der untere Rest des Bildschirms schwarz bleibt. Um den Unterschied zu merken können Sie die beiden Zeilen ja einmal mit einem Stern versehen und damit als Bemerkung kennzeichnen. Der VBI verrichtet nun die Rollarbeit. Die Tabelle wird vom Ende an eingelesen und immer ein Stück nach vorne verlegt. Der letzte Wert kommt an Position eins. Die Tabelle ist nun einmal um eine Stelle rotiert worden. Nun kann man das Programm starten und sieht mehrere rotierende Röhren. Möchte man den Farbwechesel abstellen, dann muß man das ADC $14 entfernen. Hier wird der Wert der internen Uhr zum Farbwert addiert, was den Effekt erzeugt. Benutzt man nun einen anderen Interrupt, so kann man daraus einen netten Bildschirmschoner basteln, wenn man z.B. die Werte von DLI und DL erst dann ändert, wenn eine bestimmte Zeit keine Taste gedrückt wurde. Viel Spaß noch beim Experimentieren ! ## CrossPoint v3.02 ##