Magic Disk 64

home to index to html: MD9503-KURSE-IRQ-KURS_17.2.html
            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



Valid HTML 4.0 Transitional Valid CSS!