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

  1.  
  2. ; Lezione9c1.s    PRIMA BLITTATA CON ALTEZZA MAGGIORE DI 1 E MODULI
  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. ;          oooo
  51. ;         /    \
  52.  
  53.     move.w    #$ffff,$44(a5)        ; BLTAFWM lo spiegheremo dopo
  54.     move.w    #$ffff,$46(a5)        ; BLTALWM lo spiegheremo dopo
  55.     move.w    #$09f0,$40(a5)        ; BLTCON0 (usa A+D)
  56.     move.w    #$0000,$42(a5)        ; BLTCON1 lo spiegheremo dopo
  57.     move.w    #0,$64(a5)        ; BLTAMOD =0 perche` il rettangolo
  58.                     ; sorgente ha le righe consecutive
  59.                     ; in memoria.
  60.  
  61.     move.w    #36,$66(a5)        ; BLTDMOD 40-4=36 il rettangolo
  62.                     ; destinazione e` all'interno di un
  63.                     ; bitplane largo 20 words, ovvero 40
  64.                     ; bytes. Il rettangolo blittato
  65.                     ; e` largo 2 words, cioe` 4 bytes.
  66.                     ; Il valore del modulo e` dato dalla
  67.                     ; differenza tra le larghezze
  68.  
  69.     move.l    #figura,$50(a5)        ; BLTAPT  (fisso alla figura sorgente)
  70.     move.l    #bitplane,$54(a5)    ; BLTDPT  (linee dello schermo)
  71.     move.w    #(64*6)+2,$58(a5)    ; BLTSIZE (via al blitter !)
  72.                     ; adesso, blitteremo una figura di
  73.                     ; 2 word X 6 linee con una sola
  74.                     ; blittata coi moduli opportunamente
  75.                     ; settati per lo schermo.
  76. mouse:
  77.     btst    #2,$16(a5)    ; tasto destro del mouse premuto?
  78.     bne.s    mouse
  79.  
  80.     btst.b    #6,2(a5) ; dmaconr
  81. WBlit2:
  82.     btst.b    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  83.     bne.s    wblit2
  84.  
  85.     rts
  86.  
  87. ;*****************************************************************************
  88.  
  89.     SECTION    GRAPHIC,DATA_C
  90.  
  91. COPPERLIST:
  92.     dc.w    $8E,$2c81    ; DiwStrt
  93.     dc.w    $90,$2cc1    ; DiwStop
  94.     dc.w    $92,$38        ; DdfStart
  95.     dc.w    $94,$d0        ; DdfStop
  96.     dc.w    $102,0        ; BplCon1
  97.     dc.w    $104,0        ; BplCon2
  98.     dc.w    $108,0        ; Bpl1Mod
  99.     dc.w    $10a,0        ; Bpl2Mod
  100.  
  101.     dc.w    $100,$1200    ; bplcon0 - 1 bitplane lowres
  102.  
  103. BPLPOINTERS:
  104.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  105.  
  106.     dc.w    $0180,$000    ; color0
  107.     dc.w    $0182,$eee    ; color1
  108.  
  109.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  110.  
  111. ;*****************************************************************************
  112.  
  113. ; Definiamo in binario la figura, che e' larga 16 bits, ossia 2 words, e alta
  114. ; 6 linee. Notate che le linee sono disposte consecutivamente in memoria.
  115.  
  116. Figura:
  117.     dc.l    %00000000000000000000110001100000    ; linea 1
  118.     dc.l    %00000000000000000011000110000000    ; linea 2
  119.     dc.l    %00000000000000001100011000000000
  120.     dc.l    %00000110000000110001100000000000
  121.     dc.l    %00000001100011000110000000000000
  122.     dc.l    %00000000011100011000000000000000    ; linea 6
  123.  
  124. ;*****************************************************************************
  125.  
  126.     SECTION    PLANEVUOTO,BSS_C
  127.  
  128. BITPLANE:
  129.     ds.b    40*256        ; bitplane azzerato lowres
  130.  
  131.     end
  132.  
  133. *****************************************************************************
  134.  
  135. In questo esempio vedete come effettuare la copia di un rettangolo.
  136. Innanzitutto notate ancora una volta la formula da utilizzare per scrivere
  137. le dimensioni del rettangolo in BLTSIZE. Prestate poi molta attenzione a come
  138. sono calcolati i moduli. Per quanto riguarda la sorgente, che inizia alla
  139. label "Figura", le righe del rettangolo sono disposte consecutivamente in
  140. memoria. Pertanto, il valore del modulo per la sorgente (il canale A) vale 0.
  141. Per quanto riguarda la destinazione invece, poiche` dobbiamo copiare il
  142. rettangolo all'interno di un bitplane piu` largo del rettangolo in questione,
  143. le righe non sono consecutive in memoria e si deve specificare un valore del
  144. modulo calcolato con le formule viste nella lezione.
  145.  
  146.