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)