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

  1.  
  2. ; Lezione9m1.s    Esempio di uso delle Mask con il modo discendente
  3. ; premete alternativamente i tasti destro e sinistro del mouse per vedere
  4. ; varie blittate con maschere diverse.
  5.  
  6.  
  7.     SECTION    CiriCop,CODE
  8.  
  9. ;    Include    "DaWorkBench.s"    ; togliere il ; prima di salvare con "WO"
  10.  
  11. *****************************************************************************
  12.     include    "startup1.s"    ; Salva Copperlist Etc.
  13. *****************************************************************************
  14.  
  15.         ;5432109876543210
  16. DMASET    EQU    %1000001111000000    ; copper,bitplane,blitter DMA
  17.  
  18.  
  19. START:
  20. ;    Puntiamo la PIC "vuota"
  21.  
  22.     MOVE.L    #BITPLANE,d0    ; dove puntare
  23.     LEA    BPLPOINTERS,A1    ; puntatori COP
  24.     move.w    d0,6(a1)
  25.     swap    d0
  26.     move.w    d0,2(a1)
  27.  
  28.     lea    $dff000,a5        ; CUSTOM REGISTER in a5
  29.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  30.     move.l    #COPPERLIST,$80(a5)    ; Puntiamo la nostra COP
  31.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  32.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  33.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  34.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  35.  
  36. ; prepara i parametri
  37.  
  38.     move.w    #$ffff,d0        ; maschera prima word (piu` a destra)
  39.                     ; fa passare tutti i bit
  40.     move.w    #$ffff,d1        ; maschera ultima word (piu` a sinistra
  41.                     ; fa passare tutti i bit
  42.     move.l    #bitplane+7*40+6,a0    ; indirizzo destinazione
  43.     bsr.w    Copia
  44.  
  45. mouse2:
  46.     btst    #2,$dff016        ; tasto destro del mouse premuto?
  47.     bne.s    mouse2
  48.  
  49. ; prepara i parametri
  50.  
  51.     moveq    #$0000,d0        ; maschera prima word
  52.                     ; cancella tutto
  53.     move.w    #$ffff,d1        ; maschera ultima word
  54.                     ; fa passare tutti i bit
  55.     move.l    #bitplane+37*40+6,a0    ; indirizzo destinazione
  56.     bsr.s    Copia
  57. mouse3:
  58.     btst    #6,$bfe001        ; mouse premuto?
  59.     bne.s    mouse3
  60.  
  61. ; prepara i parametri
  62.  
  63.     move.w    #%1010101010101010,d0    ; maschera prima word
  64.                     ; un bit si e uno no
  65.     move.w    #%0000000000000001,d1    ; maschera ultima word
  66.                     ; solo bit piu` a destra
  67.     move.l    #bitplane+67*40+6,a0    ; indirizzo destinazione
  68.     bsr.s    Copia
  69.  
  70. mouse4:
  71.     btst    #2,$dff016        ; tasto destro del mouse premuto?
  72.     bne.s    mouse4
  73.  
  74. ; prepara i parametri
  75.  
  76.     move.w    #$0000,d0        ; maschera prima word
  77.                     ; cancella tutto
  78.     move.w    #$0000,d1        ; maschera ultima word
  79.                     ; cancella tutto
  80.     move.l    #bitplane+97*40+6,a0    ; indirizzo destinazione
  81.     bsr.s    Copia
  82.  
  83. mouse5:
  84.     btst    #6,$bfe001        ; mouse premuto?
  85.     bne.s    mouse5
  86.  
  87. ; prepara i parametri
  88.  
  89.     move.w    #%1111000011110000,d0    ; maschera prima word
  90.                     ; 4 bit si e 4 no
  91.     move.w    #%0000011010011100,d1    ; maschera ultima word
  92.                     ; fa passare solo i bit 2,3,4,7,9 e 10
  93.     move.l    #bitplane+127*40+6,a0    ; indirizzo destinazione
  94.     bsr.s    Copia
  95.  
  96. mouse6:
  97.     btst    #2,$dff016        ; tasto destro del mouse premuto?
  98.     bne.s    mouse6
  99.  
  100. ; prepara i parametri
  101.  
  102.     move.w    #%0000000001111111,d0    ; maschera prima word
  103.                     ; cancella i 9 bit piu` a sinistra
  104.     move.w    #%1111111000000000,d1    ; maschera ultima word
  105.                     ; cancella i 9 bit piu` a destra
  106.     move.l    #bitplane+157*40+6,a0    ; indirizzo destinazione
  107.     bsr.s    Copia
  108.  
  109. mouse:
  110.     btst    #6,$bfe001
  111.     bne.s    mouse
  112.  
  113.     rts
  114.  
  115. ;****************************************************************************
  116. ; Questa routine copia la figura sullo schermo in modo discendente
  117. ; Prende come parametri
  118. ; A0 - indirizzo destinazione
  119. ; D0 - maschera prima word
  120. ; D1 - maschera ultima word
  121. ;****************************************************************************
  122.  
  123. ;       _/\________
  124. ;       \__¯ ¯ ¯ ¯¬\
  125. ;        (_--'      \-,
  126. ;        /¬\         _)
  127. ;     __(©__)        /
  128. ;    (.       ___   /
  129. ;     ¯T_____/  /  (
  130. ;       l_T    /   ¯\
  131. ;             /  /   \
  132. ;     .______/  /\ u  \
  133. ;     l_      _/  \    \
  134. ;      `------'   T     ·
  135. ;             xCz ¦
  136. ;                 :
  137. ;                 .
  138.  
  139. Copia:
  140.     btst    #6,2(a5) ; dmaconr
  141. WBlit1:
  142.     btst    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  143.     bne.s    wblit1
  144.  
  145.     move.w    d0,$44(a5)        ; BLTAFWM carica il parametro
  146.     move.w    d1,$46(a5)        ; BLTALWM carica il parametro
  147.     move.w    #$09f0,$40(a5)        ; BLTCON0 (usa A+D)
  148.     move.w    #$0002,$42(a5)        ; BLTCON1 modo discendente
  149.     move.w    #0,$64(a5)        ; BLTAMOD (=0)
  150.     move.w    #34,$66(a5)        ; BLTDMOD (40-6=34)
  151.     move.l    #figura+7*6-2,$50(a5)    ; BLTAPT  (fisso alla figura sorgente)
  152.                     ; puntiamo l'ultima word della figura
  153.                     ; per via del modo discendente
  154.     move.l    a0,$54(a5)        ; BLTDPT  carica il parametro
  155.     move.w    #(64*7)+3,$58(a5)    ; BLTSIZE (via al blitter !)
  156.                     ; larghezza 3 word
  157.     rts                ; altezza 7 linee (1 plane)
  158.  
  159. ;****************************************************************************
  160.  
  161.     SECTION    GRAPHIC,DATA_C
  162.  
  163. COPPERLIST:
  164.     dc.w    $8E,$2c81    ; DiwStrt
  165.     dc.w    $90,$2cc1    ; DiwStop
  166.     dc.w    $92,$38        ; DdfStart
  167.     dc.w    $94,$d0        ; DdfStop
  168.     dc.w    $102,0        ; BplCon1
  169.     dc.w    $104,0        ; BplCon2
  170.     dc.w    $108,0        ; Bpl1Mod
  171.     dc.w    $10a,0        ; Bpl2Mod
  172.     dc.w    $100,$1200    ; bplcon0 - 1 bitplane Lowres
  173.  
  174. BPLPOINTERS:
  175.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  176.  
  177.     dc.w    $0180,$000    ; color0
  178.     dc.w    $0182,$eee    ; color1
  179.  
  180.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  181.  
  182. ;****************************************************************************
  183.  
  184. ; Definiamo in binario la figura, che e' larga 3 words, e alta 7 linee
  185.  
  186. Figura:
  187. ;         0123456789012345  0123456789012345  0123456789012345
  188.     dc.w    %1111111111000000,%0000001111000000,%0000001111111111
  189.     dc.w    %1111111111000000,%0000111111110000,%0000001111111111
  190.     dc.w    %1111111111000000,%0011111111111100,%0000001111111111
  191.     dc.w    %1111111111111111,%1111111111111111,%1111111111111111
  192.     dc.w    %1111111111000000,%0011111111111100,%0000001111111111
  193.     dc.w    %1111111111000000,%0000111111110000,%0000001111111111
  194.     dc.w    %1111111111000000,%0000001111000000,%0000001111111111
  195.  
  196. ;****************************************************************************
  197.  
  198.     SECTION    PLANEVUOTO,BSS_C    
  199.  
  200. BITPLANE:
  201.     ds.b    40*256        ; bitplane azzerato lowres
  202.  
  203.     end
  204.  
  205. ;****************************************************************************
  206.  
  207. Questo esempio e` quasi identico all' esempio lezione9h1.s. L'unica differenza
  208. e` che la copia viene effettuata in modo discendente. Blittando in questo modo
  209. la prima word di ogni riga e` la riga che appare piu` a destra sullo schermo,
  210. e l'ultima e` la word che appare piu` a sinistra. Pertanto, al contrario di
  211. quanto accade usando il modo ascendente, la maschera della prima word
  212. (contenuta in BLTAFWM) si applica alla word piu` a destra e la maschera
  213. dell'ultima word (BLTALWM) alla word piu` a sinistra.
  214. Eseguendo il programma vedrete come le maschere si applichino in modo
  215. rovesciato rispetto all' esempio lezione9h1.s.
  216.  
  217.