Magic Disk 64

home to index to text: MD9410-KURSE-IRQ-KURS_12.2.txt
    Fortsetzung IRQ-Kurs 12 - 2. Teil   

Nachdem nun die Spritepointer vorinitialisiert wurden, muß die " MOVESPR"- Routine, die Sie bestimmt noch von unseren alten Moviescroller-Routinen her kennen, so modifiziert werden, daß sie die IRQ-Routine derart ändert, daß in jeder Spritezeile auch der richtige Video- 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 eigentliche, für uns wichtige Teil der Routine befindet sich am Ende und heißt " ROL-LON" . Er wurde der ESCOS-Routine angepasst 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 #$0 d ; 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 Abarbeitung gelangt sie automatisch zum Teil " ROLLON", zu dem auch am Anfang verzweigt 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 Rastersta $ 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+$0 D, y; Wert f.14 . SprZeile sta v0 D,+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 Zeropageadressen $ F8 und $ F9 stehen." SOFTROLL" ist dabei ein Zähler für den Scrolloffset, 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ähler einen Unterlauf meldet, und wieder auf 21 zurückgesetzt wird. Gleichzeitig muß dann die soeben weggescrollte Spritezeile am unteren Bildschirmrand, mit neuem Text wiedereingefügt werden, was vom Abschnitt " NEWLINE" schon durchgefü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 hochgezählt, da nun ja die ehemals zweite Spritezeile zur Ersten wird. Damit tut unser neuer " ROLLON"- Teil nichts anderes, als für jede Spritezeile einen Wert aus der Tabelle zu lesen und in eins der Labels von " V00" bis " V0 D" 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 Labeladressen 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 einzuschalten. 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 Rastereffekte miteinander kombiniert, ohne große Änderungen vornehmen zu müssen. Das Ergebnis ist quasi ein Moviescroller mit ESCOS-IRQ- Routine. Auf diese Weise ist es auch möglich ganz andere Effekte miteinander zu kombinieren, was Ihre Phantasie 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 werden. 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 versprochenen, Routinen zum Dehnen von Sprites besprechen.

                                 (ih/ub)

Valid HTML 4.0 Transitional Valid CSS!