IRQ-KURS (2.Teil) ----------------------------------------
Als nächstes behandelt die Routine den XPos-Wert. Hierzu legt sie sich zunächst eine Kopie von Low- und Highbyte in den Labels AFA und AFB an, die den Zeropage- adressen $07 und $08 zugewiesen sind. Anhand des 3. Bits aus dem Low-Byte von XPos kann ermittelt werden, ob eine gerade (Bit gelöscht) oder ungerade (Bit gesetzt) Anzahl Taktzyklen bei HSP verzögert werden muß. In letzterem Fall muß in REDU1 der Opcode für einen BEQ-Befehl eingesetzt werden. Im anderen Fall steht dort ein BNE-Opcode, der ganz am Anfang des folgenden Sourcode- Segmentes dort eingetragen wird:
ldx #$d0 ;Opcode für "BNE" in stx redu1 ; REDU1 eintragen lda <xpos+1 ;Hi-Byte XPos holen sta <afb ; und nach AFB kop. lda <xpos ;Lo-Byte XPos holen sta <afa ; nach AFA kop.
and #$08 ;3.Bit ausmask. bne co1 ;<>0 -> alles ok,weiter ldx #$f0 ;Sonst Opcode für "BEQ" stx redu1 ; in REDU1 eintr. Nachdem der einzelne Taktzyklus korri- giert wurde, müssen wir nun noch den Sprungoffset für den BNE-Befehl bei REDU1 ermitteln. Hierzu wird die Kopie des 16- Bit-Wertes von XPos zunächst durch 16 dividiert, das daraus resultierende 8-Bit Ergebnis muß nun noch von dem Wert 20 (der Anzahl der NOPs in der HSP-Routine) subtrahiert werden, bevor es in REDU2+1 abgelegt werden kann:
co1:lsr <afb ;Wert in AFA/AFB 4 Mal ror <afa ; nach rechts rotieren lsr <afb ; (=Division durch 16) ror <afa lsr <afb ror <afa lsr <afb ror <afa sec ;C-Bit f. Sub. setzen lda #$14 ;Akku=20 NOPS sbc <afa ;Ergebnis subtr. sta redu2+1 ;u. abl.
Folgt nun nur noch die Berechnung des horizontalen Softscrollwertes. Dieser entspricht den untersten 3 Bits von XPos. Da wir auch hier ein Register ($D016) beschreiben, das auch noch andere Aufga- ben erfüllt, müssen wir in Ihm ebenfalls noch ein Bit seten, näm- lich das dritte, daß die 40 Zeichen/ Zeile-Darstellung einschaltet. In AGSP2 setzen wir hier zusätzlich auch noch das vierte Bit, daß den Multicolor-Modus einschaltet:
lda <xpos ;XPos holen and #$07 ;unterste 3Bits ausmask. ora #$08 ;40 Zeichen/Zeile sta horizo+1 ;und ablegen rts ;ENDE
Das ist nun alles wichtige gewesen, was noch zu AGSP zu sagen war. Wir sind damit auch wirklich beim allerletzten Teil unseres Kurses über die Raster-IRQ- Programmierung angelangt. Ich hoffe es hat Ihnen die letzten 17 Monate viel Spaß bereitet, in die tiefsten Tiefen unseres "Brotkasten" vorzudringen, "where (almost) no man has gone before"! Einen besonderen Dank möchte ich auch meinem Kollegen Ivo Herzeg (ih) ausspre- chen, ohne dessen unermüdlichen Bemühun- gen um extaktes Rastertiming dieser Kurs bestimmt nicht zustande gekommen wäre.
(ih/ub