IRQ-KURS (2.Teil)
Als nächstes behandelt die Routine den
XPos-Wert. Hierzu legt sie sich zunächst
eine Kopie von Lowund Highbyte in den
Labels AFA und AFB an, die den Zeropageadressen $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 korrigiert 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 Aufgaben erfüllt, müssen wir in
Ihm ebenfalls noch ein Bit seten, nämlich 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) aussprechen, ohne dessen unermüdlichen Bemühungen um extaktes Rastertiming dieser Kurs
bestimmt nicht zustande gekommen wäre.
(ih/ub