Magic Disk 64

home to index to text: MD9503-KURSE-IRQ-KURS_17.2.txt
            IRQ-KURS (2.Teil)           

Als nächstes behandelt die Routine den XPos-Wert. Hierzu legt sie sich zunächst eine Kopie von Lowund Highbyte in den Labels AFA und AFB an, die den Zeropageadressen $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 korrigiert 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 Aufgaben erfüllt, müssen wir in Ihm ebenfalls noch ein Bit seten, nämlich 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) aussprechen, ohne dessen unermüdlichen Bemühungen um extaktes Rastertiming dieser Kurs bestimmt nicht zustande gekommen wäre.

                                  (ih/ub

Valid HTML 4.0 Transitional Valid CSS!