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

  1.  
  2. ; Lezione9l1.s    copia di un rettangolo tra 2 zone sovrapposte
  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    copia        ; esegui la routine di copia
  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. ; ************************ LA ROUTINE DI COPIA ****************************
  55. ; viene copiato un rettangolo con larghezza=160 e altezza=20
  56. ; dalle coordinate X1=64, Y1=50 (sorgente)
  57. ; alle coordinate X2=64, Y2=40 (destinazione)
  58. ; notate che la sorgente e la destinazione si sovrappongono, e la destinazione
  59. ; si trova piu` in alto, quindi ad un indirizzo minore.
  60. ;****************************************************************************
  61.  
  62. ;         _______________
  63. ;        /      _       ¬\
  64. ;       /      / ¡__      \
  65. ;      /      / O|o \      \
  66. ;     /       \__l__/       \
  67. ;    /         (___)         \
  68. ;    \       (°              /
  69. ;     \_____________________/
  70. ;             T    T
  71. ;            _l____|_
  72. ;           | _    _ |
  73. ;           |_|    |_|
  74. ;           (_)--^-(_)
  75. ;             T  T T  xCz
  76. ;    ........ l__|_|__
  77. ;             (____)__)
  78.  
  79. copia:
  80.  
  81. ; Carica gli indirizzi sorgente e destinazione in 2 registri
  82.  
  83.     move.l    #bitplane+((20*3*50)+64/16)*2,d0    ; ind. sorgente
  84.     move.l    #bitplane+((20*3*40)+64/16)*2,d2    ; ind. destinazione
  85.  
  86.     btst    #6,2(a5)        ; aspetta che il blitter finisca
  87. waitblit:
  88.     btst    #6,2(a5)
  89.     bne.s    waitblit
  90.  
  91.     move.l    #$09f00000,$40(a5)    ; BLTCON0 e BLTCON1 - copia da A a D
  92.     move.l    #$ffffffff,$44(a5)    ; BLTAFWM e BLTALWM fanno passare tutto
  93.  
  94. ; carica i puntatori
  95.  
  96.     move.l    d0,$50(a5)        ; bltapt
  97.     move.l    d2,$54(a5)        ; bltdpt
  98.  
  99.     move.l #$00140014,$64(a5)    ; bltamod e bltdmod 
  100.  
  101.     move.w    #(3*20*64)+160/16,$58(a5)    ; bltsize
  102.                         ; altezza 20 linee e 3 planes
  103.                         ; largo 160 pixel (= 10 words)
  104.                         
  105.     btst    #6,$02(a5)        ; aspetta che il blitter finisca
  106. waitblit2:
  107.     btst    #6,$02(a5)
  108.     bne.s    waitblit2
  109.     rts
  110.  
  111. ;****************************************************************************
  112.  
  113.     SECTION    GRAPHIC,DATA_C
  114.  
  115. COPPERLIST:
  116.     dc.w    $8E,$2c81    ; DiwStrt
  117.     dc.w    $90,$2cc1    ; DiwStop
  118.     dc.w    $92,$38        ; DdfStart
  119.     dc.w    $94,$d0        ; DdfStop
  120.     dc.w    $102,0        ; BplCon1
  121.     dc.w    $104,0        ; BplCon2
  122.  
  123.                 ; QUI C'E` UNA DIFFERENZA RISPETTO
  124.                 ; ALLE IMMAGINI NORMALI!!!!!!
  125.     dc.w    $108,80        ; VALORE MODULO = 2*20*(3-1)= 80
  126.     dc.w    $10a,80        ; ENTRAMBI I MODULI ALLO STESSO VALORE.
  127.  
  128.     dc.w    $100,$3200    ; bplcon0 - 3 bitplanes lowres
  129.  
  130. BPLPOINTERS:
  131.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  132.     dc.w $e4,$0000,$e6,$0000
  133.     dc.w $e8,$0000,$ea,$0000
  134.  
  135.     dc.w    $0180,$000    ; color0
  136.     dc.w    $0182,$475    ; color1
  137.     dc.w    $0184,$fff    ; color2
  138.     dc.w    $0186,$ccc    ; color3
  139.     dc.w    $0188,$999    ; color4
  140.     dc.w    $018a,$232    ; color5
  141.     dc.w    $018c,$777    ; color6
  142.     dc.w    $018e,$444    ; color7
  143.  
  144.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  145.  
  146. ;****************************************************************************
  147.  
  148. BITPLANE:
  149.     incbin    "assembler2:sorgenti6/amiga.rawblit"
  150.                     ; qua carichiamo la figura in
  151.                     ; formato RAWBLIT (o interleaved),
  152.                     ; convertita col KEFCON.
  153.     end
  154.  
  155. ;****************************************************************************
  156.  
  157. In questo esempio copiamo un rettangolo tra 2 zone sovrapposte. Poiche`
  158. l'indirizzo della destinazione e` minore di quello della sorgente (sullo
  159. schermo la destinazione si trova piu` in alto) possiamo tranquillamente
  160. adoperare le tecniche che abbiamo usato finora (copia di un rettangolo su
  161. schermo interleaved). Infatti le routine di questo esempio sono identiche a
  162. quelle viste nell'esempio lezione9g2.s.
  163.  
  164.