Magic Disk 64

home to index to html: MD9410-KURSE-IRQ-KURS_12.2.html
    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)



Valid HTML 4.0 Transitional Valid CSS!