home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 109 / EnigmaAmiga109CD.iso / software / testi / corsoasm / sorgenti5 / lezione9d1.s < prev    next >
Text File  |  1995-10-23  |  5KB  |  161 lines

  1.  
  2. ; Lezione9d1.s    LOOP DI UNA BLITTATA CON ALTEZZA 6 LINEE E MODULI
  3.  
  4.  
  5.     SECTION    CiriCop,CODE
  6.  
  7. ;    Include    "DaWorkBench.s"    ; togliere il ; prima di salvare con "WO"
  8.  
  9. *****************************************************************************
  10.     include    "startup1.s"    ; Salva Copperlist Etc.
  11. *****************************************************************************
  12.  
  13.         ;5432109876543210
  14. DMASET    EQU    %1000001111000000    ; copper,bitplane,blitter DMA
  15.  
  16.  
  17. START:
  18. ;    Puntiamo la PIC "vuota"
  19.  
  20.     MOVE.L    #BITPLANE,d0    ; dove puntare
  21.     LEA    BPLPOINTERS,A1    ; puntatori COP
  22.     move.w    d0,6(a1)
  23.     swap    d0
  24.     move.w    d0,2(a1)
  25.  
  26.     lea    $dff000,a5        ; CUSTOM REGISTER in a5
  27.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  28.     move.l    #COPPERLIST,$80(a5)    ; Puntiamo la nostra COP
  29.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  30.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  31.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  32.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  33.  
  34.     lea    bitplane,a0    ; indirizzo bitplane destinazione
  35.     move.w    #(150-6)-1,d7    ; -6 perche' la figura e' alta 6 linee,
  36.                 ; percui "arriva" 6 linee piu' in basso di
  37.                 ; dove si blitta.
  38. BlitLoop:
  39.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  40.     MOVE.L    #$10800,d2    ; linea da aspettare = $108
  41. Waity1:
  42.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  43.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  44.     CMPI.L    D2,D0        ; aspetta la linea $108
  45.     BNE.S    Waity1
  46. Waity2:
  47.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  48.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  49.     CMPI.L    D2,D0        ; aspetta la linea $108
  50.     Beq.S    Waity2
  51.  
  52.     btst    #6,2(a5) ; dmaconr
  53. WBlit:
  54.     btst    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  55.     bne.s    wblit
  56.  
  57. ;    /\ ___
  58. ;    \ (_ _)
  59. ;     \ \ª/ )
  60. ;      \ , /
  61. ;      / \/\
  62. ;     /__I__\
  63.  
  64.     move.w    #$ffff,$44(a5)        ; BLTAFWM lo spieghiamo in seguito
  65.     move.w    #$ffff,$46(a5)        ; BLTALWM lo spieghiamo in seguito
  66.     move.w    #$09f0,$40(a5)        ; BLTCON0 (usa A+D)
  67.     move.w    #$0000,$42(a5)        ; BLTCON1 lo spieghiamo in seguito
  68.     move.w    #0,$64(a5)        ; BLTAMOD (=0)
  69.     move.w    #36,$66(a5)        ; BLTDMOD (40-4=36)
  70.     move.l    #figura,$50(a5)        ; BLTAPT  (fisso alla figura sorgente)
  71.     move.l    a0,$54(a5)        ; BLTDPT  (dest: linee di schermo)
  72.     move.w    #(64*6)+2,$58(a5)    ; BLTSIZE (via al blitter !)
  73.                     ; adesso, blitteremo una figura di
  74.                     ; 2 word X 6 linee con una sola
  75.                     ; blittata dai moduli opportunamente
  76.                     ; settati correttamente per lo schermo.
  77.  
  78.     add.w    #40,a0            ; andiamo a blittare alla prossima
  79.                     ; linea nel prossimo loop.
  80.                     ; 40 e` il numero di bytes in una riga.
  81.                     ; aggiungendo tale numero, ci spostiamo
  82.                     ; in basso di una riga.
  83.  
  84.     dbra    d7,blitloop
  85.  
  86. mouse:
  87.  
  88.     btst    #6,$bfe001    ; mouse premuto?
  89.     bne.s    mouse
  90.  
  91.     btst    #6,2(a5) ; dmaconr
  92. WBlit3:
  93.     btst    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  94.     bne.s    wblit3
  95.  
  96.     rts
  97.  
  98. ;****************************************************************************
  99.  
  100.     SECTION    GRAPHIC,DATA_C
  101.  
  102. COPPERLIST:
  103.     dc.w    $8E,$2c81    ; DiwStrt
  104.     dc.w    $90,$2cc1    ; DiwStop
  105.     dc.w    $92,$38        ; DdfStart
  106.     dc.w    $94,$d0        ; DdfStop
  107.     dc.w    $102,0        ; BplCon1
  108.     dc.w    $104,0        ; BplCon2
  109.     dc.w    $108,0        ; Bpl1Mod
  110.     dc.w    $10a,0        ; Bpl2Mod
  111.  
  112.     dc.w    $100,$1200    ; Bplcon0 - 1 bitplane lowres
  113.  
  114. BPLPOINTERS:
  115.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  116.  
  117.     dc.w    $0180,$000    ; color0
  118.     dc.w    $0182,$eee    ; color1
  119.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  120.  
  121. ;****************************************************************************
  122.  
  123. ; Definiamo in binario la figura, che e' larga 16 bits, ossia 2 words, e alta
  124. ; 6 linee
  125.  
  126. Figura:
  127.     dc.l    %00000000000000000000110001100000
  128.     dc.l    %00000000000000000011000110000000
  129.     dc.l    %00000000000000001100011000000000
  130.     dc.l    %00000110000000110001100000000000
  131.     dc.l    %00000001100011000110000000000000
  132.     dc.l    %00000000011100011000000000000000
  133.  
  134. ;****************************************************************************
  135.  
  136.     SECTION    PLANEVUOTO,BSS_C    
  137.  
  138. BITPLANE:
  139.     ds.b    40*256        ; bitplane azzerato lowres
  140.  
  141.     end
  142.  
  143. ;****************************************************************************
  144.  
  145. In questo esempio vediamo un esempio di animazione con il blitter.
  146. Molto semplicemente  si disegna con il blitter la figura in una posizione
  147. sempre piu' bassa ad ogni vertical blank.
  148. La posizione della figura viene determinata dall'indirizzo che viene scritto
  149. nel registro BLTDPT, notate infatti che il valore scritto in questo registro
  150. viene cambiato ad ogni frame:
  151.  
  152.     add.w    #40,a0            ; andiamo a blittare alla prossima
  153.                     ; linea nel prossimo loop.
  154.                     ; 40 e` il numero di bytes in una riga.
  155.                     ; aggiungendo tale numero, ci spostiamo
  156.                     ; in basso di una riga.
  157.  
  158. La figura "lascia la scia", perche' non cancelliamo ogni volta la figura che
  159. abbiamo blittato prima. E' come un brush (pennello) del DPaint.
  160.  
  161.