Fortsetzung IRQ-Kurs 12 - 2. Teil
----------------------------------------
Nachdem nun die Spritepointer vorinitia-
lisiert wurden, muß die "MOVESPR"-
Routine, die Sie bestimmt noch von unse-
ren alten Moviescroller-Routinen her
kennen, so modifiziert werden, daß sie
die IRQ-Routine derart ändert, daß in
jeder Spritezeile auch der richtige Vi-
deo-RAM-Bereich eingeschaltet wird. Da
die "MOVESPR"-Routine schon im 10. Teil
des IRQ-Kurses ausfühlich beschrieben
wurde soll hier nur das kommentierte
Listing die Funktionsweise der Routine
wieder ins Gedächtnis rufen. Der eigent-
liche, für uns wichtige Teil der Routine
befindet sich am Ende und heißt "ROL-
LON". Er wurde der ESCOS-Routine ange-
passt und soll anschließend aufgeführt
werden. Zunächst jedoch die MOVESPR-
Routine:
movespr:
lda softroll ;Scroll-Offs. holen
sbc #$01 ;Und 1 subtrahieren
sta softroll ;neuen Scroll-Offs. abl.
bpl rollon ;Wenn >0, dann weiter
newline:
inc showline ;1.Spr-Zeilen-Ind. erh.
sec ;C-Bit f. Subtr. setzen
lda showline ;Showline holen
sbc #$0d ; und 13 subtr.
bmi noloop ;Bei Unterlauf weiter
sta showline ;Sonst Wert abl.
noloop:
lda tpoint
cmp #<estext+($34*$18)
bne continue
lda tpoint+1
cmp #<estext+($34*$18)
bne continue
lda #$00
sta showline
lda #<estext
sta tpoint+0
lda #>estext
sta tpoint+1
continue:
clc ;C-Bit f.Add. löschen
lda softroll;SOFTROLL laden
adc #$18 ;24 addieren
sta softroll;und wieder ablegen
lda #$20 ;Op-Code für "JSR"
sta mt ;in MT eintragen
Ab dem Label "NEWLINE" ist die Routine
damit beschäftigt, die neue Spritezeile
aufzubauen, sowie die Zeiger für diese
Zeile neu zu setzen. Nach ihrer Abarbei-
tung gelangt sie automatisch zum Teil
"ROLLON", zu dem auch am Anfang verz-
weigt wird, wenn keine neue Spritezeile
eingefügt werden muß. Hier geschehen nun
die für uns wesentlichen Dinge, nämlich
das Voreinstellen der richtigen Video-
RAM-Werte innerhalb der IRQ-Routine.
Zunächst das Listing:
rollon:
lda softroll ;nächsten Raster-
sta $d012 ;IRQ vorbereiten
ldy showline ;SprZeilen-Ind.holen
lda pointer+$00,y;Wert f. 1. SprZeile
sta v00,+1 ; in IRQ setzen
lda pointer+$01,y;Wert f. 2. SprZeile
sta v01,+1 ; in IRQ setzen
...
lda pointer+$0D,y;Wert f. 14.SprZeile
sta v0D,+1 ; in IRQ setzen
rts
Alles in Allem also keine schwierige
Aufgabe. Zur Erinnerung sollte ich noch
erwähnen, daß die beiden Labels "SOFT-
ROLL" und "SHOWLINE" für die Zeropage-
adressen $F8 und $F9 stehen. "SOFTROLL"
ist dabei ein Zähler für den Scrolloff-
set, der pro Bildschirmdurchlauf einmal
erniedrigt wird. Dieser Zähler gibt
gleichzeitig auch die Rasterzeile an, an
der der nächste Raster-IRQ auftreten
muß. Dadurch, daß dieser Wert am Anfang
der "MOVESPR"-Routine um eins erniedrigt
wurde, und er hier nun als Auslöser für
die nächste Rasterzeile eingetragen
wird, erreichen wir den Scrolleffekt, da
die Spritezeilen pro Rasterdurchlauf
immer 1 Rasterzeile früher dargestellt
werden, solange bis "SOFTROLL" als Zäh-
ler einen Unterlauf meldet, und wieder
auf 21 zurückgesetzt wird. Gleichzeitig
muß dann die soeben weggescrollte Spri-
tezeile am unteren Bildschirmrand, mit
neuem Text wiedereingefügt werden, was
vom Abschnitt "NEWLINE" schon durch-
geführt wurde. "SHOWLINE" ist ein Zeiger
auf die Tabelle "POINTER". Er gibt an,
welche der 14 Spritezeilen momentan an
der obersten Position steht. Er wird bei
einem "SOFTROLL"-Unterlauf um eins hoch-
gezählt, da nun ja die ehemals zweite
Spritezeile zur Ersten wird. Damit tut
unser neuer "ROLLON"-Teil nichts ande-
res, als für jede Spritezeile einen Wert
aus der Tabelle zu lesen und in eins der
Labels von "V00" bis "V0D" einzutragen.
Wie aus dem obigen Auszug der IRQ-
Routine ersichtlich, so ist dies jeweils
der LDA-Befehl, der vor jedem "JSR
OPEN21" steht. Da wir auf die Label-
adressen den Wert 1 addieren, schreiben
wir also einfach einen neuen Operanden
für den LDA-Befehl in das Programm, so
daß die IRQ-Routine automatisch den
richtigen Pointerwert übergibt. Die
Pointertabelle sieht nun wiefolgt aus:
POINTER:
.by $00,$10,$20,$30
.by $40,$50,$60,$70
.by $80,$90,$A0,$B0
.by $C0,$D0
.by $00,$10,$20,$30
.by $40,$50,$60,$70
.by $80,$90,$A0,$B0
.by $C0,$D0
Wie Sie sehen, enthält sie einfach die
benötigten Werte für das VIC-Register
$D018, um der Reihe nach die Video-RAM-
Bereiche zwischen $4000 und $7400 einzu-
schalten. Die Tabelle enthält, wie auch
schon bei den alten Moviescroller-
Routinen, alle Pointerdaten doppelt,
damit "SHOWLINE" auch bis zum Wert 13
hochgezählt werden kann, und dennoch die
Werte korrekt gesetzt werden.
Damit wären nun alle relevanten Teile
der Änderung einer ESCOS-Routine zum
Moviescroller erklärt worden. Wie Sie
sehen, haben wir auf recht einfach Art
und Weise zwei verschiedene Rastereffek-
te miteinander kombiniert, ohne große
Änderungen vornehmen zu müssen. Das Er-
gebnis ist quasi ein Moviescroller mit
ESCOS-IRQ-Routine. Auf diese Weise ist
es auch möglich ganz andere Effekte mit-
einander zu kombinieren, was Ihre Phan-
tasie bezüglich der Raster-IRQ-
Programmierung ein wenig beflügeln soll.
Das hier besprochene Programmbeispiel
befindet sich wie immer auch auf dieser
MD und kann von Ihnen begutachtet wer-
den. Es heißt "MOVIE V1.2" und muß mit
",8,1" geladen und durch ein "SYS4096"
gestartet werden. Im nächsten Kursteil
werden wir dann die, schon versproche-
nen, Routinen zum Dehnen von Sprites
besprechen.
(ih/ub)