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

  1.  
  2. ; Lezione9b1.s    BLITTATA, in cui copiamo 8 word in un bitplane azzerato.
  3. ;        Tasto sinistro per eseguire la blittata, destro 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. ;    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. Aspettasin:
  35.     btst    #6,$bfe001    ; aspetta la pressione del tasto sin. mouse
  36.     bne.s    Aspettasin
  37.  
  38.     btst.b    #6,2(a5) ; dmaconr
  39. WBlit:
  40.     btst.b    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  41.     bne.s    wblit
  42.  
  43. ;     |\/\/\/|
  44. ;     |      |
  45. ;     |      |
  46. ;     | (o)(o)
  47. ;     c      _)
  48. ;      | ,___|
  49. ;      |   /
  50. ;     /____\
  51. ;    /      \        ; i 2 registri seguenti li spiegheremo in
  52.                 ; seguito:
  53.  
  54.     move.w    #$ffff,$44(a5)    ; bltafwm - maschera canale A, prima word
  55.     move.w    #$ffff,$46(a5)    ; bltalwm - mask canale A, seconda word
  56.  
  57.     move.w    #$09f0,$40(a5)    ; bltcon0 - canali A e D abilitati, 
  58.                 ; MINTERMS=$f0, ossia copia da A a D
  59.     move.w    #$0000,$42(a5)        ; bltcon1 - lo spiegheremo in seguito
  60.     move.l    #figura_a_caso,$50(a5)    ; bltapt - indirizzo figura sorgente
  61.  
  62. ; l'indirizzo della destinazione dipende dalla posizione X,Y in cui vogliamo
  63. ; disegnare il primo pixel della figura. Si applicano le regole della lezione
  64. ; In questo caso X=32 e Y=4.
  65.  
  66.     move.l    #bitplane+(4*20+32/16)*2,$54(a5)    ; bltdpt - ind. dest.
  67.     move.w    #64*1+8,$58(a5)            ; bltsize - altezza 1 linea,
  68.                         ; larghezza 8 words.
  69.  
  70. mouse:
  71.     btst    #2,$dff016    ; tasto destro del mouse premuto?
  72.     bne.s    mouse
  73.  
  74.     btst    #6,2(a5) ; dmaconr
  75. WBlit2:
  76.     btst    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  77.     bne.s    wblit2
  78.  
  79.     rts
  80.  
  81. ;*****************************************************************************
  82.  
  83.     SECTION    GRAPHIC,DATA_C
  84.  
  85. COPPERLIST:
  86.     dc.w    $8E,$2c81    ; DiwStrt
  87.     dc.w    $90,$2cc1    ; DiwStop
  88.     dc.w    $92,$38        ; DdfStart
  89.     dc.w    $94,$d0        ; DdfStop
  90.     dc.w    $102,0        ; BplCon1
  91.     dc.w    $104,0        ; BplCon2
  92.     dc.w    $108,0        ; Bpl1Mod
  93.     dc.w    $10a,0        ; Bpl2Mod
  94.  
  95.     dc.w    $100,$1200    ; bplcon0 - 1 bitplane lowres
  96.  
  97. BPLPOINTERS:
  98.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  99.  
  100.     dc.w    $0180,$000    ; color0
  101.     dc.w    $0182,$eee    ; color1
  102.  
  103.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  104.  
  105. ;****************************************************************************
  106.  
  107. ; Questa e' la "figura" che viene copiata nel BITPLANE con una blittata:
  108.  
  109. Figura_a_caso:    
  110.     dc.w    $1111,$1010,$2044,$235a
  111.     dc.w    $18f0,$97ff,$ca54,$90a2
  112.  
  113. ;****************************************************************************
  114.  
  115.     SECTION    PLANEVUOTO,BSS_C
  116.  
  117. BITPLANE:
  118.     ds.b    40*256        ; bitplane azzerato lowres
  119.  
  120.     end
  121.  
  122. ;***************************************************************************
  123.  
  124. In questo esempio copiamo una zona di memoria con il blitter.
  125. Piu` precisamente leggiamo 8 words (considerandole come un rettangolo largo
  126. 8 words e alto una sola linea) a partire dall'indirizzo identificato
  127. dalla label "Figura_a_caso:" e le riscriamo a partire dall'indirizzo
  128. identificato dalla label "BITPLANE:", che, come si capisce dal nome della
  129. label e` l'indirizzo di una zona di memoria che contiene un bitplane.
  130. In realta' li copiamo in BITPLANE+offset, ossia scostati dall'angolo d'inizio.
  131. Pertanto i dati che copieremo vengono visualizzati sullo schermo.
  132. Per eseguire un operazione di copia e` necessario utilizzare 2 canali
  133. DMA, uno per leggere e uno per scrivere. In questo caso usiamo il canale
  134. A per leggere, e ovviamente il D per scrivere. Pertanto solo questi 2 canali
  135. sono abilitati settando a 1 i relativi bit nel registro BLTCON0.
  136. Per indicare al blitter che deve eseguire una copia dal canale A al canale
  137. D e` necessario porre il byte che contiene i MINTERMS al valore $f0.
  138. Provate a variare la posizione nella quale viene disegnata la figura variando
  139. l'indirizzo destinazione della blittata. Applicate le regole viste nella
  140. lezione.
  141.  
  142.