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

  1.  
  2. ; Lezione10c2.s    BLITTATA, in cui costruiamo la maschera di un disegno
  3. ;        Tasto destro per eseguire la blittata, sinistro per uscire.
  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.  
  19.     MOVE.L    #BITPLANE1,d0    ; dove puntare
  20.     LEA    BPLPOINTERS,A1    ; puntatori COP
  21.     MOVEQ    #3-1,D1        ; numero di bitplanes
  22. POINTBP:
  23.     move.w    d0,6(a1)
  24.     swap    d0
  25.     move.w    d0,2(a1)
  26.     swap    d0
  27.     ADD.L    #40*256,d0    ; + lunghezza bitplane (qua e' alto 256 linee)
  28.     addq.w    #8,a1
  29.     dbra    d1,POINTBP
  30.  
  31.     lea    $dff000,a5        ; CUSTOM REGISTER in a5
  32.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  33.     move.l    #COPPERLIST,$80(a5)    ; Puntiamo la nostra COP
  34.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  35.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  36.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  37.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  38.  
  39. ; copia l'immagine normalmente
  40.  
  41.     lea    FiguraPlane1,a0        ; copia il primo plane
  42.     lea    BITPLANE1,a1
  43.     bsr.s    copia
  44.  
  45.     lea    FiguraPlane2,a0        ; copia secondo plane
  46.     lea    BITPLANE2,a1
  47.     bsr.s    copia
  48.  
  49.     lea    FiguraPlane3,a0        ; copia terzo plane
  50.     lea    BITPLANE3,a1
  51.     bsr.s    copia
  52.  
  53. mouse1:
  54.     btst    #2,$dff016    ; tasto destro del mouse premuto?
  55.     bne.s    mouse1
  56.  
  57. ; copia primo bitplane
  58.  
  59.     lea    FiguraPlane1,a0
  60.     lea    FiguraPlane2,a1
  61.     lea    FiguraPlane3,a2
  62.     lea    BITPLANE1+14,a3
  63.     bsr.s    BlitOR        ; esegue un OR tra i planes della figura
  64.                 ; e copia il risultato
  65. mouse2:
  66.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  67.     bne.s    mouse2        ; se no, torna a mouse2:
  68.     rts
  69.  
  70. ;****************************************************************************
  71. ; Questa routine copia la figura sullo schermo.
  72. ;
  73. ; A0 - indirizzo sorgente
  74. ; A1 - indirizzo destinazione
  75. ;****************************************************************************
  76.  
  77. Copia:
  78.     btst    #6,2(a5) ; dmaconr
  79. WBlit1:
  80.     btst    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  81.     bne.s    wblit1
  82.  
  83.     move.l    #$ffffffff,$44(a5)    ; maschere
  84.     move.l    #$09f00000,$40(a5)    ; BLTCON0  e BLTCON1 (usa A+D)
  85.                     ; copia normale
  86.     move.w    #0,$64(a5)        ; BLTAMOD (=0)
  87.     move.w    #34,$66(a5)        ; BLTDMOD (40-6=34)
  88.     move.l    a0,$50(a5)        ; BLTAPT  puntatore sorgente
  89.     move.l    a1,$54(a5)        ; BLTDPT  puntatore destinazione
  90.     move.w    #(64*42)+3,$58(a5)    ; BLTSIZE (via al blitter !)
  91.                     ; larghezza 3 word
  92.     rts                ; altezza 42 linee
  93.  
  94. ;****************************************************************************
  95. ; Questa routine esegue un OR tra i 3 canali A,B e C.
  96. ;
  97. ; A0 - indirizzo canale A
  98. ; A1 - indirizzo canale B
  99. ; A2 - indirizzo canale C
  100. ; A3 - indirizzo destinazione
  101. ;****************************************************************************
  102.  
  103. ;                     _____
  104. ;                    (_____)
  105. ;                      ,,,
  106. ;     __n____________.|o o|.____________n__
  107. ;    == _o_|         |  -  |         |_o_ ==
  108. ;     ¯¯ . |   ____  |\ O /|  ____   |   ¯¯
  109. ;          |__/    \ ||`*'|| /    \_#| :
  110. ;        :         | ||   || |      `:
  111. ;        .         |#._______|         .
  112. ;                  ! |  o  |
  113. ;                    (     )
  114. ;                    |  U  |
  115. ;                    :  !  :
  116.  
  117. BlitOR:
  118.     btst    #6,2(a5) ; dmaconr
  119. WBlit2:
  120.     btst    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  121.     bne.s    wblit2
  122.  
  123.     move.l    #$FFFFFFFF,$44(a5)    ; BLTFWM e BLTLWM
  124.     move.l    #$0FFE0000,$40(a5)    ; BLTCON0 e BLTCON1
  125.                     ; attiva tutti i canali
  126.                     ; esegue un OR tra A,B e C
  127.                     ; D=A OR B OR C
  128.     move.w    #0,$60(a5)        ; BLTCMOD (=0)
  129.     move.w    #0,$62(a5)        ; BLTBMOD (=0)
  130.     move.w    #0,$64(a5)        ; BLTAMOD (=0)
  131.     move.w    #34,$66(a5)        ; BLTDMOD (40-6=34)
  132.     move.l    a0,$48(a5)        ; BLTCPT  puntatore sorgente
  133.     move.l    a1,$4c(a5)        ; BLTBPT  puntatore destinazione
  134.     move.l    a2,$50(a5)        ; BLTAPT  puntatore destinazione
  135.     move.l    a3,$54(a5)        ; BLTDPT  puntatore destinazione
  136.     move.w    #(64*42)+3,$58(a5)    ; BLTSIZE (via al blitter !)
  137.                     ; larghezza 3 word
  138.     rts                ; altezza 42 linee
  139.  
  140. ;****************************************************************************
  141.  
  142.     SECTION    GRAPHIC,DATA_C
  143.  
  144. COPPERLIST:
  145.     dc.w    $8E,$2c81    ; DiwStrt
  146.     dc.w    $90,$2cc1    ; DiwStop
  147.     dc.w    $92,$38        ; DdfStart
  148.     dc.w    $94,$d0        ; DdfStop
  149.     dc.w    $102,0        ; BplCon1
  150.     dc.w    $104,0        ; BplCon2
  151.     dc.w    $108,0        ; Bpl1Mod
  152.     dc.w    $10a,0        ; Bpl2Mod
  153.  
  154.     dc.w    $100,$3200    ; bplcon0
  155.  
  156. BPLPOINTERS:
  157.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  158.     dc.w $e4,$0000,$e6,$0000
  159.     dc.w $e8,$0000,$ea,$0000
  160.  
  161.     dc.w    $180,$000    ; color0
  162.     dc.w    $182,$aaa    ; color1
  163.     dc.w    $184,$b00    ; color2
  164.     dc.w    $186,$080    ; color3
  165.     dc.w    $188,$24c
  166.     dc.w    $18a,$eb0
  167.     dc.w    $18c,$b52
  168.     dc.w    $18e,$0cc
  169.  
  170.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  171.  
  172. ;****************************************************************************
  173.  
  174. ; Questa e` la figura
  175.  
  176. FiguraPlane1:
  177.     dc.l    $ffffc000,$ffff,$c0000000,$ffffc000,$ffff,$c0000000
  178.     dc.l    $ffffc000,$ffff,$c0000000,$ffffc000,$ffff,$c0000000
  179.     dc.l    $ffffc000,$ffff,$c0000000,$ffffc000,$ffff,$c0000000
  180.     dc.l    $ffffc000,$ffff,$c0000000,$ffffc000,$ffff,$c0000000
  181.     dc.l    0,0,0,0,0,0
  182.     dc.l    0,0,0,0,0,$3fffff80
  183.     dc.l    $3fff,$ff800000,$3fffff80,$3fff,$ff800000,$3fffff80
  184.     dc.l    $3fff,$ff800000,$3fffff80,$3fff,$ff800000,$3fffff80
  185.     dc.l    $3fff,$ff800000,$3fffff80,$3fff,$ff800000,$3fffff80
  186.     dc.l    $3fff,$ff800000,$3fffff80,$3fff,$ff800000,$3fffff80
  187.     dc.l    $3fff,$ff800000,0
  188.  
  189. FiguraPlane2:
  190.     dc.l    $3fff,$ff800000,$3fffff80,$3fff,$ff800000,$3fffff80
  191.     dc.l    $3fff,$ff800000,$3fffff80,$3fff,$ff800000,$3fffff80
  192.     dc.l    $3fff,$ff800000,$3fffff80,$3fff,$ff800000,$3fffff80
  193.     dc.l    $3fff,$ff800000,$3fffff80,$3fff,$ff800000,$3fffff80
  194.     dc.l    $3fff,$ff800000,$3fffff80,$3fff,$ff800000,$3fffff80
  195.     dc.l    $3fff,$ff800000,$3fffff80,$3fff,$ff800000,0
  196.     dc.l    0,0,0,0,0,0
  197.     dc.l    0,0,0,0,0,0
  198.     dc.l    0,0,0,0,0,0
  199.     dc.l    0,0,0,0,0,0
  200.     dc.l    0,0,0
  201.  
  202. FiguraPlane3:
  203.     dc.l    0,0,0,0,0,0
  204.     dc.l    0,0,0,0,0,0
  205.     dc.l    0,0,0,0,0,0
  206.     dc.l    0,0,0,0,0,0
  207.     dc.l    $ffffc000,$ffff,$c0000000,$ffffc000,$ffff,$c0000000
  208.     dc.l    $ffffc000,$ffff,$c0000000,$ffffc000,$ffff,$ffffff80
  209.     dc.l    $ffffffff,$ff80ffff,$ffffff80,$ffffffff,$ff80ffff,$ffffff80
  210.     dc.l    $f000ffff,$ff80f000,$ffffff80,$f000ffff,$ff80f000,$ffffff80
  211.     dc.l    $f000ffff,$ff80f000,$ffffff80,$f000ffff,$ff80f000,$ffffff80
  212.     dc.l    $f000ffff,$ff80f000,$ffffff80,$f000ffff,$ff80f000,$ffffff80
  213.     dc.l    $ffffffff,$ff800000,0
  214.  
  215. ;****************************************************************************
  216.  
  217.     SECTION    bitplane,BSS_C
  218.  
  219. BITPLANE1:
  220.     ds.b    40*256
  221. BITPLANE2:
  222.     ds.b    40*256
  223. BITPLANE3:
  224.     ds.b    40*256
  225.  
  226. ;****************************************************************************
  227.  
  228.     end
  229.  
  230. In questo esempio costruiamo con il blitter la maschera di una figura,
  231. utilizzando una tecnica differente da quella impiegata in lezione10c1.s.
  232. Questa volta infatti eseguiamo una sola blittata, usando tutti i canali.
  233. Poiche` la nostra figura ha 3 bitplanes, possiamo leggerli contemporaneamente
  234. attraverso i canali A,B e C e scrivere l'OR attraverso il canale D.
  235. Questo e` il primo esempio che facciamo attivando tutti i canali del blitter
  236. contemporaneamente. Notate, infatti, che i bit da 8 a 11 di BLTCON0 vengono
  237. settati tutti a 1. Il valore di LF si calcola alla solita maniera, settando
  238. cioe` a 1 tutti i minterms corrispondenti a combinazioni d'ingresso che abbiano
  239. A=1 oppure B=1 oppure C=1. Naturalmente si tratta di 7 combinazioni
  240. (l'unica non compresa e` quella con A=0, B=0 e C=0).
  241. Notate che questa tecnica, a differenza di quella vista in lezione10c1.s
  242. puo` essere applicata solo se la figura ha 3 bitplanes.
  243.  
  244.