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

  1.  
  2. ; Lezione9d3.s    BLITTA VERSO DESTRA, a scatti di 1 word (senza usare shift)
  3.  
  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.     lea    bitplane,a0        ; destinazione
  35.     moveq    #50-1,d7        ; Num. di spostamenti a destra
  36. MoveLoop:
  37.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  38.     MOVE.L    #$10800,d2    ; linea da aspettare = $108
  39. Waity1:
  40.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  41.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  42.     CMPI.L    D2,D0        ; aspetta la linea $108
  43.     BNE.S    Waity1
  44. Waity2:
  45.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  46.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  47.     CMPI.L    D2,D0        ; aspetta la linea $108
  48.     Beq.S    Waity2
  49.  
  50.     btst    #6,2(a5) ; dmaconr
  51. WBlit1:
  52.     btst    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  53.     bne.s    wblit1
  54.  
  55. ;    Cancellazione dello schermo
  56.  
  57.     move.w    #$0100,$40(a5)        ; BLTCON0 - accende solo il canale D,
  58.                     ; questo provoca la cancellazione della
  59.                     ; DESTINAZIONE, dato che non c'e' la
  60.                     ; sorgente!!!
  61.     move.w    #$0000,$42(a5)        ; BLTCON1 - lo spieghiamo dopo
  62.     move.w    #$0000,$66(a5)        ; BLTDMOD = 0
  63.     move.l    #bitplane,$54(a5)    ; BLTDPT - destinazione = bitplane
  64.     move.w    #(64*256)+20,$58(a5)    ; BLTSIZE - alt.256 linee, largh. 20 w.
  65.                     ; cancella TUTTO LO SCHERMO, infatti
  66.                     ; le linee sono 256, (64*256) e i
  67.                     ; byte per linea sono 40 (20 words)
  68.  
  69.     btst    #6,2(a5) ; dmaconr
  70. WBlit2:
  71.     btst    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  72.     bne.s    wblit2
  73.  
  74. ;      ..........
  75. ;    .· ..  ...  :
  76. ;    |.· _·· _ ·.|
  77. ;    l  ¯_   _¯  |
  78. ;    |  (º),(º)  |
  79. ;    | \_______/ |
  80. ;    |  |-+-+-|  |
  81. ;    l__`-^-^-'__|xCz
  82. ;      `-------'
  83.  
  84.     move.w    #$ffff,$44(a5)        ; BLTAFWM lo spieghiamo dopo
  85.     move.w    #$ffff,$46(a5)        ; BLTALWM lo spieghiamo dopo
  86.     move.w    #$09f0,$40(a5)        ; BLTCON0 (usa A+D)
  87.     move.w    #$0000,$42(a5)        ; BLTCON1 lo spieghiamo dopo
  88.     move.w    #0,$64(a5)        ; BLTAMOD (=0)
  89.     move.w    #36,$66(a5)        ; BLTDMOD (40-4=36)
  90.     move.l    #figura,$50(a5)        ; BLTAPT  (fisso alla figura sorgente)
  91.     move.l    a0,$54(a5)        ; BLTDPT  (linee di schermo)
  92.     move.w    #(64*6)+2,$58(a5)    ; BLTSIZE (via al blitter !)
  93.                     ; adesso, blitteremo una figura di
  94.                     ; 2 word X 6 linee con una sola
  95.                     ; blittata dai moduli opportunamente
  96.                     ; settati correttamente per lo schermo.
  97.  
  98.     addq.w    #2,a0            ; modifica l'indirizzo, puntando alla
  99.                     ; word seguente per la prossima
  100.                     ; blittata. La figura scatta in avanti
  101.                     ; di 16 pixel
  102.     dbra    d7,moveloop
  103.  
  104. mouse:
  105.  
  106.     btst    #6,$bfe001    ; mouse premuto?
  107.     bne.s    mouse
  108.  
  109.     btst    #6,2(a5) ; dmaconr
  110. WBlit3:
  111.     btst    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  112.     bne.s    wblit3
  113.  
  114.     rts
  115.  
  116. ;****************************************************************************
  117.  
  118.     SECTION    GRAPHIC,DATA_C
  119.  
  120. COPPERLIST:
  121.     dc.w    $8E,$2c81    ; DiwStrt
  122.     dc.w    $90,$2cc1    ; DiwStop
  123.     dc.w    $92,$38        ; DdfStart
  124.     dc.w    $94,$d0        ; DdfStop
  125.     dc.w    $102,0        ; BplCon1
  126.     dc.w    $104,0        ; BplCon2
  127.     dc.w    $108,0        ; Bpl1Mod
  128.     dc.w    $10a,0        ; Bpl2Mod
  129.     dc.w    $100,$1200    ; bplcon0 - 1 bitplane Lowres
  130.  
  131. BPLPOINTERS:
  132.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  133.  
  134.     dc.w    $0180,$000    ; color0
  135.     dc.w    $0182,$eee    ; color1
  136.  
  137.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  138.  
  139. ;****************************************************************************
  140.  
  141. ; Definiamo in binario la figura, che e' larga 16 bits, ossia 2 words, e alta
  142. ; 6 linee
  143.  
  144. Figura:
  145.     dc.l    %00000000000000000000110001100000
  146.     dc.l    %00000000000000000011000110000000
  147.     dc.l    %00000000000000001100011000000000
  148.     dc.l    %00000110000000110001100000000000
  149.     dc.l    %00000001100011000110000000000000
  150.     dc.l    %00000000011100011000000000000000
  151.  
  152. ;****************************************************************************
  153.  
  154.     SECTION    PLANEVUOTO,BSS_C    
  155.  
  156. BITPLANE:
  157.     ds.b    40*256        ; bitplane azzerato lowres
  158.  
  159.     end
  160.  
  161. ;****************************************************************************
  162.  
  163. Questo esempio e` analogo a lezione9d2.s, solo che ci spostiamo a destra invece
  164. che in basso. Lo spostamento avviane modificando l'indirizzo destinazione
  165. sul quale blittiamo, spostandoci di una word alla volta. Cio` equivale
  166. a spostarci di 16 pixel alla volta (bleah!).
  167.  
  168.