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

  1.  
  2. ; Lezione9m2.s    Sparizione tramite scorrimento verso sinistra di un immagine
  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    #BITPLANE,d0    ; dove puntare
  20.     LEA    BPLPOINTERS,A1    ; puntatori COP
  21.     MOVEQ    #3-1,D1        ; numero di bitplanes (qua sono 3)
  22. POINTBP:
  23.     move.w    d0,6(a1)
  24.     swap    d0
  25.     move.w    d0,2(a1)
  26.     swap    d0
  27.                 ; QUI C'E` LA UNA DIFFERENZA RISPETTO
  28.                 ; ALLE IMMAGINI NORMALI!!!!!!
  29.     ADD.L    #40,d0        ; + LUNGHEZZA DI UNA RIGA !!!!!
  30.     addq.w    #8,a1
  31.     dbra    d1,POINTBP
  32.  
  33.     lea    $dff000,a5        ; CUSTOM REGISTER in a5
  34.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  35.     move.l    #COPPERLIST,$80(a5)    ; Puntiamo la nostra COP
  36.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  37.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  38.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  39.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  40.  
  41. mouse1:
  42.     btst    #2,$dff016    ; tasto destro del mouse premuto?
  43.     bne.s    mouse1        ; se no, aspetta
  44.  
  45.     bsr.s    Scorri        ; esegui la routine di scorrimento
  46.  
  47. mouse2:
  48.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  49.     bne.s    mouse2        ; se no, torna a mouse2:
  50.  
  51.     rts
  52.  
  53.  
  54. ;****************************************************************************
  55. ; Questa routine fa scomparire progressivamente un immagine
  56. ; facendola scorrere verso sinistra
  57. ;****************************************************************************
  58.  
  59. ;          ___________ ))
  60. ;      (( /          ¬\
  61. ;        /   ___ ---   \
  62. ;        \¬\____ ____/ /
  63. ;        /   ( ·T. )  / ))
  64. ;    (( /     ¯¯!¯¯  /
  65. ;      /   _  (_ _) /
  66. ;      \ ( ¬   `-'_/ ))
  67. ;    (( \        /
  68. ;        \______/ xCz
  69.  
  70. Scorri:
  71.     move.w    #160-1,d7    ; il loop va eseguito una volta per ogni pixel
  72.                 ; l'immagine e` larga 160 pixel (10 words)
  73.  
  74. ; In questo esempio copiamo un'immagine su se stessa, ma shiftandola
  75. ; continuamente di un pixel, in modo da farla scorrere.
  76. ; Pertanto gli indirizzi sorgente e destinazione sono uguali.
  77. ; Per shiftare verso sinistra usiamo il modo discendente, e quindi
  78. ; puntiamo l'ultima word dell'immagine:
  79.  
  80.     move.l    #bitplane+((20*3*(50+20))+(64+160)/16-1)*2,d0    ; ind. sorg. e
  81.                                 ; destinazione
  82.  
  83. ScorriLoop:
  84.  
  85. ; Aspetta il vblank in modo da far scorrere l'immagine di un pixel ad
  86. ; ogni fotogramma.
  87.  
  88. WaitWblank:
  89.     CMP.b    #$ff,$dff006        ; aspetta la linea 255
  90.     bne.s    WaitWblank
  91. Aspetta:
  92.     CMP.b    #$ff,$dff006        ; ancora linea 255 ?
  93.     beq.s    Aspetta
  94.  
  95.     btst    #6,2(a5)        ; aspetta che il blitter finisca
  96. waitblit:
  97.     btst    #6,2(a5)
  98.     bne.s    waitblit
  99.  
  100.     move.l    #$19f00002,$40(a5)    ; BLTCON0 e BLTCON1 - copia da A a D
  101.                     ; in modo discendente con shift
  102.                     ; (verso sinistra) di un pixel
  103.  
  104.     move.l    #$ffff7fff,$44(a5)    ; BLTAFWM e BLTALWM
  105.                     ; BLTAFWM = $ffff - passa tutto
  106.                     ; BLTALWM = $7fff = %0111111111111111
  107.                     ;   cancella il bit piu` a sinistra
  108. ; carica i puntatori
  109.  
  110.     move.l    d0,$50(a5)            ; bltapt - sorgente
  111.     move.l    d0,$54(a5)            ; bltdpt - destinazione
  112.  
  113. ; il modulo e` calcolato come al solito
  114.  
  115.     move.l #$00140014,$64(a5)        ; bltamod e bltdmod 
  116.     move.w    #(3*20*64)+160/16,$58(a5)    ; bltsize
  117.                         ; altezza 20 linee e 3 planes
  118.                         ; largo 160 pixel (= 10 words)
  119.  
  120.     dbra    d7,ScorriLoop            ; ripeti per ogni pixel
  121.                         
  122.     btst    #6,$02(a5)        ; aspetta che il blitter finisca
  123. waitblit2:
  124.     btst    #6,$02(a5)
  125.     bne.s    waitblit2
  126.     rts
  127.  
  128. ;****************************************************************************
  129.  
  130.     SECTION    GRAPHIC,DATA_C
  131.  
  132. COPPERLIST:
  133.     dc.w    $8E,$2c81    ; DiwStrt
  134.     dc.w    $90,$2cc1    ; DiwStop
  135.     dc.w    $92,$38        ; DdfStart
  136.     dc.w    $94,$d0        ; DdfStop
  137.     dc.w    $102,0        ; BplCon1
  138.     dc.w    $104,0        ; BplCon2
  139.  
  140.                 ; QUI C'E` UNA DIFFERENZA RISPETTO
  141.                 ; ALLE IMMAGINI NORMALI!!!!!!
  142.     dc.w    $108,80        ; VALORE MODULO = 2*20*(3-1)= 80
  143.     dc.w    $10a,80        ; ENTRAMBI I MODULI ALLO STESSO VALORE.
  144.  
  145.     dc.w    $100,$3200    ; bplcon0 - 3 bitplanes lowres
  146.  
  147. BPLPOINTERS:
  148.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  149.     dc.w $e4,$0000,$e6,$0000
  150.     dc.w $e8,$0000,$ea,$0000
  151.  
  152.     dc.w    $0180,$000    ; color0
  153.     dc.w    $0182,$475    ; color1
  154.     dc.w    $0184,$fff    ; color2
  155.     dc.w    $0186,$ccc    ; color3
  156.     dc.w    $0188,$999    ; color4
  157.     dc.w    $018a,$232    ; color5
  158.     dc.w    $018c,$777    ; color6
  159.     dc.w    $018e,$444    ; color7
  160.  
  161.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  162.  
  163.  
  164. BITPLANE:
  165.     incbin    "assembler2:sorgenti6/amiga.rawblit"
  166.                     ; qua carichiamo la figura in
  167.                     ; formato RAWBLIT (o interleaved),
  168.                     ; convertita col KEFCON.
  169.     end
  170.  
  171. ;****************************************************************************
  172.  
  173. In questo esempio riproponiamo l'effetto visto in lezione9h4.s solo che
  174. effettuiamo lo scorrimento verso sinistra. Per shiftare verso sinistra,
  175. dobbiamo usare il blitter in modo discendente. La blittata e` sempre una
  176. copia di un immagine su se stessa (indirizzi sorgente e destinazione uguali)
  177. ma lo shift avviene verso sinistra. Dobbiamo mascherare la word piu` a sinistra
  178. per cancellare la colonna di pixel piu` a sinistra. In modo discendente la
  179. word piu` a sinistra e` mascherata da BLTALWM. Per cancellare la colonna di
  180. pixel piu` a sinistra dobbiamo porre in BLTALWM il valore %0111111111111111
  181. che cancella il bit piu` a sinistra e lascia passare gli altri.
  182. Notate la differenza con lezione9h4 dove invece mascheravamo il bit piu` a
  183. destra.
  184.  
  185.