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

  1.  
  2. ; Lezione9h2.s    BLITTATA, in cui copiamo un rettangolo (in una pic normale)
  3. ;        non allineato con una word, usando le maschere per "tappare".
  4. ;        Premendo il tasto destro si esegue la blittata "sporca"
  5. ;        Poi,premendo il tasto sinistro si esegue la blittata giusta
  6. ;        e infine premendo ancora il tasto destro si usce.
  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.  
  22.     MOVE.L    #BITPLANE,d0    ; dove puntare
  23.     LEA    BPLPOINTERS,A1    ; puntatori COP
  24.     MOVEQ    #3-1,D1        ; numero di bitplanes (qua sono 3)
  25. POINTBP:
  26.     move.w    d0,6(a1)
  27.     swap    d0
  28.     move.w    d0,2(a1)
  29.     swap    d0
  30.     ADD.L    #40*256,d0        ; + LUNGHEZZA DI UNA PLANE !!!!!
  31.     addq.w    #8,a1
  32.     dbra    d1,POINTBP
  33.  
  34.     lea    $dff000,a5        ; CUSTOM REGISTER in a5
  35.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  36.     move.l    #COPPERLIST,$80(a5)    ; Puntiamo la nostra COP
  37.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  38.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  39.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  40.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  41.  
  42. mouse1:
  43.     btst    #2,$dff016        ; tasto destro del mouse premuto?
  44.     bne.s    mouse1            ; se no, aspetta
  45.  
  46. ; Prima Blittata, con le maschere che lasciano passare anche dati non
  47. ; desiderati
  48.  
  49.     lea    bitplane+((20*170)+80/16)*2,a0        ; ind. destinazione
  50.     move.w    #$ffff,d0                ; passa tutto
  51.     move.w    #$ffff,d1                ; passa tutto
  52.     bsr.s    copia
  53.  
  54. mouse2:
  55.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  56.     bne.s    mouse2        ; se no, torna a mouse2:
  57.  
  58. ; Seconda blittata, grazie alle maschere viene copiata solo 
  59. ; lettera "I"
  60.  
  61.     lea    bitplane+((20*170)+160/16)*2,a0        ; ind. destinazione
  62.     move.w    #%0000000000001111,d0    ; passano i 4 bit piu` a destra
  63.     move.w    #%1111000000000000,d1    ; passano i 4 bit piu` a sinistra
  64.     bsr.s    copia
  65.  
  66. mouse3:
  67.     btst    #2,$dff016    ; tasto destro del mouse premuto?
  68.     bne.s    mouse3        ; se no, aspetta
  69.  
  70.     rts
  71.  
  72. ;****************************************************************************
  73. ; Questa routine copia la figura sullo schermo.
  74. ;
  75. ; A0   - indirizzo destinazione
  76. ; D0.w - maschera prima word
  77. ; D1.w - maschera ultima word
  78. ;****************************************************************************
  79.  
  80. ;      ___________   
  81. ;     (_____ _____)  
  82. ;     /(_o(___)O_)\  
  83. ;    / ___________ \
  84. ;    \ \____l____/ /|
  85. ;    |\_`---'---'_/ |
  86. ;    | `---------'  |
  87. ;    |  T  xCz   T  |
  88. ;    l__|        l__|
  89. ;    (__)---^----(__)
  90. ;      T    T     |  
  91. ;     _l____l_____|_ 
  92. ;    (______X_______)
  93.  
  94. copia:
  95.  
  96.     lea    bitplane+((20*78)+128/16)*2,a1    ; indirizzo sorgente fisso
  97.  
  98.     moveq    #3-1,d7        ; ripeti per ogni plane
  99. PlaneLoop:
  100.     btst    #6,2(a5)    ; aspetta che il blitter finisca
  101. waitblit:
  102.     btst    #6,2(a5)
  103.     bne.s    waitblit
  104.  
  105.     move.l    #$09f00000,$40(a5)    ; BLTCON0 e BLTCON1 - copia da A a D
  106.  
  107.                     ; carica i parametri nelle maschere
  108.     move.w    d0,$44(a5)        ; BLTAFWM mask a sinistra
  109.     move.w    d1,$46(a5)        ; BLTALWM mask a destra
  110.  
  111. ; carica i puntatori
  112.  
  113.     move.l    a1,$50(a5)        ; bltapt - sorgente 
  114.     move.l    a0,$54(a5)        ; bltdpt - destinazione
  115.  
  116.     move.l #$00240024,$64(a5)    ; bltamod e bltdmod 
  117.  
  118.     move.w    #(60*64)+2,$58(a5)    ; bltsize
  119.                     ; altezza 60 linee
  120.                     ; larghezza 2 words
  121.  
  122.     lea    40*256(a1),a1        ; punta al prossimo plane sorgente
  123.     lea    40*256(a0),a0        ; punta al prossimo plane destinazione
  124.  
  125.     dbra    d7,PlaneLoop
  126.  
  127.     btst    #6,$02(a5)    ; aspetta che il blitter finisca
  128. waitblit2:
  129.     btst    #6,$02(a5)
  130.     bne.s    waitblit2
  131.     rts
  132.  
  133. ;****************************************************************************
  134.  
  135.     SECTION    GRAPHIC,DATA_C
  136.  
  137. COPPERLIST:
  138.     dc.w    $8E,$2c81    ; DiwStrt
  139.     dc.w    $90,$2cc1    ; DiwStop
  140.     dc.w    $92,$38        ; DdfStart
  141.     dc.w    $94,$d0        ; DdfStop
  142.     dc.w    $102,0        ; BplCon1
  143.     dc.w    $104,0        ; BplCon2
  144.  
  145.                 ; IMMAGINI NORMALI!!!!!!
  146.     dc.w    $108,0        ; VALORE MODULO = 0
  147.     dc.w    $10a,0        ; ENTRAMBI I MODULI ALLO STESSO VALORE.
  148.  
  149.     dc.w    $100,$3200    ; bplcon0 - 3 bitplanes lowres
  150.  
  151. BPLPOINTERS:
  152.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  153.     dc.w $e4,$0000,$e6,$0000
  154.     dc.w $e8,$0000,$ea,$0000
  155.  
  156.     dc.w    $0180,$000    ; color0
  157.     dc.w    $0182,$475    ; color1
  158.     dc.w    $0184,$fff    ; color2
  159.     dc.w    $0186,$ccc    ; color3
  160.     dc.w    $0188,$999    ; color4
  161.     dc.w    $018a,$232    ; color5
  162.     dc.w    $018c,$777    ; color6
  163.     dc.w    $018e,$444    ; color7
  164.  
  165.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  166.  
  167. ;****************************************************************************
  168.  
  169. BITPLANE:
  170.     incbin    "assembler2:sorgenti6/amiga.raw"
  171.                     ; qua carichiamo la figura in
  172.                     ; formato RAW convertita col KEFCON.
  173.     end
  174.  
  175. ;****************************************************************************
  176.  
  177. In questo esempio mettiamo in evidenza come mediante l'uso delle maschere
  178. sia possibile estrarre "pezzi" di immagine cancellando delle parti non
  179. desiderate. In questo caso vogliamo copiare solo la lettera "I" della
  180. scritta Amiga. Tale lettera e` contenuta in un rettangolo largo 2 words.
  181. Nel rettangolo pero` ci sono anche pezzi di altre lettere.
  182. La prima blittata viene eseguita con le maschere al valore $ffff, cioe`
  183. settate in modo tale da far passare tutti i pixel.
  184. Come vedete vengono copiati anche i pezzi di altre lettere.
  185. La seconda blittata, invece ha le maschere settate a dei valori opportuni
  186. tali da far passare solo i pixel che formano la lettera "I"
  187.  
  188.