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

  1.  
  2. ; Lezione9h1.s        Esempio di uso delle Mask
  3.  
  4. ; Premete alternativamente i tasti destro e sinistro del mouse per vedere
  5. ; varie blittate con maschere diverse.
  6.  
  7.  
  8.     SECTION    CiriCop,CODE
  9.  
  10. ;    Include    "DaWorkBench.s"    ; togliere il ; prima di salvare con "WO"
  11.  
  12. *****************************************************************************
  13.     include    "startup1.s"    ; Salva Copperlist Etc.
  14. *****************************************************************************
  15.  
  16.         ;5432109876543210
  17. DMASET    EQU    %1000001111000000    ; copper,bitplane,blitter DMA
  18.  
  19.  
  20. START:
  21. ;    Puntiamo la PIC "vuota"
  22.  
  23.     MOVE.L    #BITPLANE,d0    ; dove puntare
  24.     LEA    BPLPOINTERS,A1    ; puntatori COP
  25.     move.w    d0,6(a1)
  26.     swap    d0
  27.     move.w    d0,2(a1)
  28.  
  29.     lea    $dff000,a5        ; CUSTOM REGISTER in a5
  30.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  31.     move.l    #COPPERLIST,$80(a5)    ; Puntiamo la nostra COP
  32.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  33.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  34.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  35.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  36.  
  37. ; prepara i parametri
  38.  
  39.     move.w    #$ffff,d0        ; maschera prima word
  40.                     ; fa passare tutti i bit
  41.     move.w    #$ffff,d1        ; maschera ultima word
  42.                     ; fa passare tutti i bit
  43.     lea    bitplane+2,a0        ; indirizzo destinazione
  44.     bsr.w    Copia
  45.  
  46. mouse2:
  47.     btst    #2,$dff016        ; tasto destro del mouse premuto?
  48.     bne.s    mouse2
  49.  
  50. ; prepara i parametri
  51.  
  52.     moveq    #$0000,d0        ; maschera prima word
  53.                     ; cancella tutto
  54.     move.w    #$ffff,d1        ; maschera ultima word
  55.                     ; fa passare tutti i bit
  56.     move.l    #bitplane+30*40+2,a0    ; indirizzo destinazione
  57.     bsr.s    Copia
  58. mouse3:
  59.     btst    #6,$bfe001        ; mouse premuto?
  60.     bne.s    mouse3
  61.  
  62. ; prepara i parametri
  63.  
  64.     move.w    #%1010101010101010,d0    ; maschera prima word
  65.                     ; un bit si e uno no
  66.     move.w    #%0000000000000001,d1    ; maschera ultima word
  67.                     ; solo bit piu` a destra
  68.     lea    bitplane+60*40+2,a0    ; indirizzo destinazione
  69.     bsr.s    Copia
  70.  
  71. mouse4:
  72.     btst    #2,$dff016        ; tasto destro del mouse premuto?
  73.     bne.s    mouse4
  74.  
  75. ; prepara i parametri
  76.  
  77.     moveq    #$0000,d0        ; maschera prima word
  78.                     ; cancella tutto
  79.     moveq    #$0000,d1        ; maschera ultima word
  80.                     ; cancella tutto
  81.     lea    bitplane+90*40+2,a0    ; indirizzo destinazione
  82.     bsr.s    Copia
  83.  
  84. mouse5:
  85.     btst    #6,$bfe001        ; mouse premuto?
  86.     bne.s    mouse5
  87.  
  88. ; prepara i parametri
  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.     lea    bitplane+120*40+2,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.     move.w    #%0000000001111111,d0    ; maschera prima word
  102.                     ; cancella i 9 bit piu` a sinistra
  103.     move.w    #%1111111000000000,d1    ; maschera ultima word
  104.                     ; cancella i 9 bit piu` a destra
  105.     lea    bitplane+150*40+2,a0    ; indirizzo destinazione
  106.     bsr.s    Copia
  107.  
  108. mouse:
  109.     btst    #6,$bfe001
  110.     bne.s    mouse
  111.  
  112.     rts
  113.  
  114. ;****************************************************************************
  115. ; Questa routine copia la figura sullo schermo.
  116. ;
  117. ; A0   - indirizzo destinazione
  118. ; D0.w - maschera prima word
  119. ; D1.w - maschera ultima word
  120. ;****************************************************************************
  121.  
  122. ;        .....        ___
  123. ;     .:::::::::.  /\////
  124. ;    :¦::·_  _·:¦. \  _/
  125. ;    :|   ¤,¸¤  l: / /
  126. ;    :\ \/\___T /:/ /
  127. ;    ::\_______/:: /
  128. ;    · __|  l__/ :/
  129. ;     /_,       _/
  130. ;    / (__°_X_°__)
  131. ;    \  j      |
  132. ;     \ \   .  |
  133. ;      \ \_____|
  134. ;       \ \__" \
  135. ;       (_,_,)  \
  136. ;       | ¯ ¯T   \
  137. ;       |    l_  _)
  138. ;       |    |   /
  139. ;      _l____l__/
  140. ;     (_____)\  \
  141. ;             \__)
  142.  
  143. Copia:
  144.     btst    #6,2(a5) ; dmaconr
  145. WBlit1:
  146.     btst    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  147.     bne.s    wblit1
  148.  
  149.     move.w    d0,$44(a5)        ; BLTAFWM carica il parametro
  150.     move.w    d1,$46(a5)        ; BLTALWM carica il parametro
  151.     move.w    #$09f0,$40(a5)        ; BLTCON0 (usa A+D)
  152.     move.w    #$0000,$42(a5)        ; BLTCON1 lo spieghiamo dopo
  153.     move.w    #0,$64(a5)        ; BLTAMOD (=0)
  154.     move.w    #34,$66(a5)        ; BLTDMOD (40-6=34)
  155.     move.l    #figura,$50(a5)        ; BLTAPT  (fisso alla figura sorgente)
  156.     move.l    a0,$54(a5)        ; BLTDPT  carica il parametro
  157.     move.w    #(64*7)+3,$58(a5)    ; BLTSIZE (via al blitter !)
  158.                     ; larghezza 3 word
  159.     rts                ; altezza 7 linee (1 plane)
  160.  
  161. ;****************************************************************************
  162.  
  163.     SECTION    GRAPHIC,DATA_C
  164.  
  165. COPPERLIST:
  166.     dc.w    $8E,$2c81    ; DiwStrt
  167.     dc.w    $90,$2cc1    ; DiwStop
  168.     dc.w    $92,$38        ; DdfStart
  169.     dc.w    $94,$d0        ; DdfStop
  170.     dc.w    $102,0        ; BplCon1
  171.     dc.w    $104,0        ; BplCon2
  172.     dc.w    $108,0        ; Bpl1Mod
  173.     dc.w    $10a,0        ; Bpl2Mod
  174.     dc.w    $100,$1200    ; bplcon0 - 1 bitplane Lowres
  175.  
  176. BPLPOINTERS:
  177.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  178.  
  179.     dc.w    $0180,$000    ; color0
  180.     dc.w    $0182,$eee    ; color1
  181.  
  182.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  183.  
  184. ;****************************************************************************
  185.  
  186. ; Definiamo in binario la figura, che e' larga 3 words, e alta 7 linee
  187.  
  188. Figura:
  189. ;         0123456789012345  0123456789012345  0123456789012345
  190.     dc.w    %1111111111000000,%0000001111000000,%0000001111111111
  191.     dc.w    %1111111111000000,%0000111111110000,%0000001111111111
  192.     dc.w    %1111111111000000,%0011111111111100,%0000001111111111
  193.     dc.w    %1111111111111111,%1111111111111111,%1111111111111111
  194.     dc.w    %1111111111000000,%0011111111111100,%0000001111111111
  195.     dc.w    %1111111111000000,%0000111111110000,%0000001111111111
  196.     dc.w    %1111111111000000,%0000001111000000,%0000001111111111
  197.  
  198. ;****************************************************************************
  199.  
  200.     SECTION    PLANEVUOTO,BSS_C    
  201.  
  202. BITPLANE:
  203.     ds.b    40*256        ; bitplane azzerato lowres
  204.  
  205.     end
  206.  
  207. ;****************************************************************************
  208.  
  209. In questo esempio mostriamo come le maschere influiscano sulla blittata.
  210. Abbiamo una figura (ad un solo plane) che viene copiata piu` volte sullo
  211. schermo in posizioni diverse.
  212. Ogni copia, pero` viene eseguita con delle maschere diverse, producendo gli
  213. effetti che vedete.
  214. Abbiamo utilizzato una routine che prende come parametri i valori delle
  215. maschere e l'indirizzo destinazioine della blittata.
  216. In tal modo eseguiamo tutte le copie con una sola routine, cambiando solo il
  217. valore dei parametri.
  218. I parametri vengono passati alla routine attraverso dei registri del 68000.
  219. Per capire l'effetto che hanno i diversi valori delle maschere, leggete i
  220. commenti nel listato.
  221.  
  222.