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

  1.  
  2. ; Lezione9h4r.s    Sparizione tramite scorrimento verso destra di un immagine
  3. ;        (in formato rawblit) tramite shift + maschera BLTALWM.
  4. ;        Tasto destro per eseguire la blittata, sinistro per uscire.
  5.  
  6.     SECTION    CiriCop,CODE
  7.  
  8. ;    Include    "DaWorkBench.s"    ; togliere il ; prima di salvare con "WO"
  9.  
  10. *****************************************************************************
  11.     include    "startup1.s"    ; Salva Copperlist Etc.
  12. *****************************************************************************
  13.  
  14.         ;5432109876543210
  15. DMASET    EQU    %1000001111000000    ; copper,bitplane,blitter DMA
  16.  
  17.  
  18. START:
  19.  
  20.     MOVE.L    #BITPLANE,d0    ; dove puntare
  21.     LEA    BPLPOINTERS,A1    ; puntatori COP
  22.     MOVEQ    #3-1,D1        ; numero di bitplanes (qua sono 3)
  23. POINTBP:
  24.     move.w    d0,6(a1)
  25.     swap    d0
  26.     move.w    d0,2(a1)
  27.     swap    d0
  28.                 ; QUI C'E` LA UNA DIFFERENZA RISPETTO
  29.                 ; ALLE IMMAGINI NORMALI!!!!!!
  30.     ADD.L    #40,d0        ; + LUNGHEZZA DI UNA RIGA !!!!!
  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.     bsr.s    Scorri        ; esegui la routine di scorrimento
  47.  
  48. mouse2:
  49.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  50.     bne.s    mouse2        ; se no, torna a mouse2:
  51.  
  52.     rts
  53.  
  54.  
  55. ;******************************************************************************
  56. ; Questa routine fa scomparire progressivamente un immagine
  57. ; facendola scorrere verso destra
  58. ;******************************************************************************
  59.  
  60. ;         .----------.
  61. ;         ¦          ¦
  62. ;         |          |
  63. ;         |          |
  64. ;         | ¯¯¯  --- |
  65. ;        _l___    ___|_
  66. ;       /   _¬\  / _  ¬\
  67. ;     _/   ( °/--\° )   \_
  68. ;    /¬\_____/¯¯¯¯\_____/¬\
  69. ;    \ ____(_,____,_)____ /
  70. ;     \_\ `----------' /_/
  71. ;       \\___      ___//
  72. ;        \__`------'__/
  73. ;          |  ¯¯¯¯  | xCz
  74. ;          `--------'
  75.  
  76. Scorri:
  77.     move.w    #160-1,d7    ; Il loop va eseguito una volta per ogni pixel
  78.                 ; l'immagine e` larga 160 pixel (10 words)
  79.  
  80. ; In questo esempio copiamo un'immagine su se stessa, ma shiftandola
  81. ; continuamente di un pixel, in modo da farla scorrere.
  82. ; Pertanto gli indirizzi sorgente e destinazione sono uguali
  83.  
  84.     move.l    #bitplane+((20*3*50)+64/16)*2,d0    ; ind. sorgente e
  85.                             ; destinazione
  86.  
  87. ScorriLoop:
  88.  
  89. ; Aspetta il vblank in modo da far scorrere l'immagine di un pixel ad ogni
  90. ; fotogramma.
  91.  
  92. WaitWblank:
  93.     CMP.b    #$ff,$dff006        ; aspetta la linea 255
  94.     bne.s    WaitWblank
  95. Aspetta:
  96.     CMP.b    #$ff,$dff006        ; ancora linea 255 ?
  97.     beq.s    Aspetta
  98.  
  99.     btst    #6,2(a5)    ; dmaconr - aspetta che il blitter finisca
  100. waitblit:
  101.     btst    #6,2(a5)
  102.     bne.s    waitblit
  103.  
  104.     move.l    #$19f00000,$40(a5)    ; BLTCON0 e BLTCON1 - copia da A a D
  105.                     ; con shift di un pixel
  106.  
  107.     move.l    #$fffffffe,$44(a5)    ; BLTAFWM e BLTALWM
  108.                     ; BLTAFWM = $ffff - passa tutto
  109.                     ; BLTALWM = $fffe = %1111111111111110
  110.                     ;        cancella l'ultimo bit
  111.  
  112. ; carica i puntatori
  113.  
  114.     move.l    d0,$50(a5)            ; bltapt - sorgente
  115.     move.l    d0,$54(a5)            ; bltdpt - destinazione
  116.  
  117. ; il modulo e` calcolato come al solito
  118.  
  119.     move.l    #$00140014,$64(a5)        ; bltamod e bltdmod 
  120.     move.w    #(3*20*64)+160/16,$58(a5)    ; bltsize
  121.                         ; altezza 20 linee e 3 planes
  122.                         ; largo 160 pixel (= 10 words)
  123.  
  124.     dbra    d7,ScorriLoop            ; ripeti per ogni pixel
  125.  
  126.     btst    #6,$02(a5)    ; dmaconr - aspetta che il blitter finisca
  127. waitblit2:
  128.     btst    #6,$02(a5)
  129.     bne.s    waitblit2
  130.     rts
  131.  
  132. ;****************************************************************************
  133.  
  134.     SECTION    GRAPHIC,DATA_C
  135.  
  136. COPPERLIST:
  137.     dc.w    $8E,$2c81    ; DiwStrt
  138.     dc.w    $90,$2cc1    ; DiwStop
  139.     dc.w    $92,$38        ; DdfStart
  140.     dc.w    $94,$d0        ; DdfStop
  141.     dc.w    $102,0        ; BplCon1
  142.     dc.w    $104,0        ; BplCon2
  143.  
  144.                 ; QUI C'E` UNA DIFFERENZA RISPETTO
  145.                 ; ALLE IMMAGINI NORMALI!!!!!!
  146.     dc.w    $108,80        ; VALORE MODULO = 2*20*(3-1)= 80
  147.     dc.w    $10a,80        ; 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.rawblit"
  171.                     ; qua carichiamo la figura in
  172.                     ; formato RAWBLIT (o interleaved),
  173.                     ; convertita col KEFCON.
  174.     end
  175.  
  176. ;****************************************************************************
  177.  
  178. Questo esempio e` la versione rawblit di lezione9h4.s.
  179. Confrontate le differenze nelle formule per il calcolo dei valori da scrivere
  180. nei registri del blitter.
  181.  
  182.