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