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

  1.  
  2. ; Lezione10g2.s    Esempio di OR tra con un canale abilitato e uno disabilitato
  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    #BITPLANE1,d0    ; dove puntare
  20.     LEA    BPLPOINTERS,A1    ; puntatori COP
  21.     MOVEQ    #1-1,D1        ; numero di bitplanes
  22. POINTBP:
  23.     move.w    d0,6(a1)
  24.     swap    d0
  25.     move.w    d0,2(a1)
  26.     swap    d0
  27.     ADD.L    #40*256,d0    ; + lunghezza bitplane (qua e' alto 256 linee)
  28.     addq.w    #8,a1
  29.     dbra    d1,POINTBP
  30.  
  31.     lea    $dff000,a5        ; CUSTOM REGISTER in a5
  32.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  33.     move.l    #COPPERLIST,$80(a5)    ; Puntiamo la nostra COP
  34.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  35.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  36.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  37.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  38.  
  39.     lea    Figura,a0
  40.     lea    BITPLANE1+20,a1
  41.     bsr.s    copia        ; esegui copia figura 2
  42.  
  43. mouse1:
  44.     btst    #2,$dff016    ; tasto destro del mouse premuto?
  45.     bne.s    mouse1        ; se no, non cancellare
  46.  
  47.     bsr.s    BlitOR        ; esegui l'OR tra le 2 figure
  48.  
  49. mouse2:
  50.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  51.     bne.s    mouse2        ; se no, torna a mouse2:
  52.     rts
  53.  
  54.  
  55. ;****************************************************************************
  56. ; Questa routine copia la figura sullo schermo.
  57. ; Prende come parametri
  58. ; A0 - indirizzo sorgente
  59. ; A1 - indirizzo destinazione
  60. ;****************************************************************************
  61.  
  62. Copia:
  63.     btst    #6,2(a5) ; dmaconr
  64. WBlit1:
  65.     btst    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  66.     bne.s    wblit1
  67.  
  68.     move.l    #$ffffffff,$44(a5)    ; maschere
  69.     move.l    #$09f00000,$40(a5)    ; BLTCON0  e BLTCON1 (usa A+D)
  70.                     ; copia normale
  71.     move.w    #0,$64(a5)        ; BLTAMOD (=0)
  72.     move.w    #30,$66(a5)        ; BLTDMOD (40-10=30)
  73.     move.l    a0,$50(a5)        ; BLTAPT  puntatore sorgente
  74.     move.l    a1,$54(a5)        ; BLTDPT  puntatore destinazione
  75.     move.w    #(64*71)+5,$58(a5)    ; BLTSIZE (via al blitter !)
  76.                     ; larghezza 5 word
  77.     rts                ; altezza 71 linee
  78.  
  79. ;****************************************************************************
  80. ; Questa routine l'OR tra una figura letta attraverso il canale B
  81. ; e il valore costante contenuto in BLTADAT
  82. ;****************************************************************************
  83.  
  84. ;      |\__/,|   (`\
  85. ;      |_ _  |.--.) )
  86. ;      ( T   )     /
  87. ;     (((^_(((/(((_>
  88.  
  89. BlitOR:
  90.     btst    #6,2(a5) ; dmaconr
  91. WBlit2:
  92.     btst    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  93.     bne.s    wblit2
  94.  
  95.     move.l    #$ffffffff,$44(a5)    ; maschere
  96.     move.l    #$05fc0000,$40(a5)    ; BLTCON0 e BLTCON1
  97.                     ; usa i canali B e D
  98.                     ; esegue l'OR tra A e B (LF=$FC)
  99.     move.w    #0,$62(a5)        ; BLTBMOD (=0)
  100.     move.w    #30,$66(a5)        ; BLTDMOD (40-10=30)
  101.     move.w    #$CCCC,$74(a5)        ; valore di OR in BLTADAT 
  102.  
  103.     move.l    #Figura,$4c(a5)        ; BLTBPT  puntatore sorgente
  104.     move.l    #BITPLANE1+100*40+10,$54(a5)    ; BLTDPT  puntatore dest.
  105.     move.w    #(64*71)+5,$58(a5)    ; BLTSIZE (via al blitter !)
  106.                     ; larghezza 5 word
  107.     rts                ; altezza 71 linee
  108.  
  109. ;****************************************************************************
  110.  
  111.     SECTION    GRAPHIC,DATA_C
  112.  
  113. COPPERLIST:
  114.     dc.w    $8E,$2c81    ; DiwStrt
  115.     dc.w    $90,$2cc1    ; DiwStop
  116.     dc.w    $92,$38        ; DdfStart
  117.     dc.w    $94,$d0        ; DdfStop
  118.     dc.w    $102,0        ; BplCon1
  119.     dc.w    $104,0        ; BplCon2
  120.     dc.w    $108,0        ; Bpl1Mod
  121.     dc.w    $10a,0        ; Bpl2Mod
  122.  
  123.     dc.w    $100,$1200    ; bplcon0 - 1 bitplane lowres
  124.  
  125. BPLPOINTERS:
  126.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  127.  
  128.     dc.w    $0180,$000    ; color0
  129.     dc.w    $0182,$aaa    ; color1
  130.  
  131.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  132.  
  133. ;****************************************************************************
  134.  
  135. Figura:
  136.     dc.w    $ffff,$ffff,$ffff,$ffff,$fe00,$8000,0,0,0,$0200
  137.     dc.w    $8000,0,0,0,$0200,$8000,0,0,0,$0200
  138.     dc.w    $8000,0,0,0,$0200,$8000,0,0,0,$0200
  139.     dc.w    $8000,0,0,0,$0200,$8000,0,0,0,$0200
  140.     dc.w    $8000,0,0,0,$0200,$8000,0,0,0,$0200
  141.     dc.w    0,0,0,0,0,0,0,0,0,0
  142.     dc.w    0,0,0,0,0,0,0,0,0,0
  143.     dc.w    0,0,0,0,0,0,0,0,0,0
  144.     dc.w    0,0,0,0,0,0,0,0,0,0
  145.     dc.w    0,0,0,0,0,0,0,0,0,0
  146.     dc.w    0,0,0,0,0,0,0,0,0,0
  147.     dc.w    0,0,0,0,0,0,0,0,0,0
  148.     dc.w    0,0,0,0,0,0,0,$3800,0,0
  149.     dc.w    0,$0003,$ff80,0,0,0,$001f,$fff0,0,0
  150.     dc.w    0,$01ff,$ffff,0,0,0,$0fff,$ffff,$e000,0
  151.     dc.w    0,$ffff,$ffff,$fe00,0,$0007,$ffff,$ffff,$ffc0,0
  152.     dc.w    $007f,$ffff,$ffff,$fffc,0,$03ff,$ffff,$ffff,$ffff,$8000
  153.     dc.w    $3fff,$ffff,$ffff,$ffff,$f800,$7fff,$ffff,$ffff,$ffff,$fc00
  154.     dc.w    $3fff,$ffff,$ffff,$ffff,$f800,$03ff,$ffff,$ffff,$ffff,$8000
  155.     dc.w    $007f,$ffff,$ffff,$fffc,0,$0007,$ffff,$ffff,$ffc0,0
  156.     dc.w    0,$ffff,$ffff,$fe00,0,0,$0fff,$ffff,$e000,0
  157.     dc.w    0,$01ff,$ffff,0,0,0,$001f,$fff0,0,0
  158.     dc.w    0,$0003,$ff80,0,0,0,0,$3800,0,0
  159.     dc.w    0,0,0,0,0,0,0,0,0,0
  160.     dc.w    0,0,0,0,0,0,0,0,0,0
  161.     dc.w    0,0,0,0,0,0,0,0,0,0
  162.     dc.w    0,0,0,0,0,0,0,0,0,0
  163.     dc.w    0,0,0,0,0,0,0,0,0,0
  164.     dc.w    0,0,0,0,0,0,0,0,0,0
  165.     dc.w    0,0,0,0,0,0,0,0,0,0
  166.     dc.w    0,0,0,0,0,$8000,0,0,0,$0200
  167.     dc.w    $8000,0,0,0,$0200,$8000,0,0,0,$0200
  168.     dc.w    $8000,0,0,0,$0200,$8000,0,0,0,$0200
  169.     dc.w    $8000,0,0,0,$0200,$8000,0,0,0,$0200
  170.     dc.w    $8000,0,0,0,$0200,$8000,0,0,0,$0200
  171.     dc.w    $ffff,$ffff,$ffff,$ffff,$fe00
  172.  
  173. ;****************************************************************************
  174.  
  175.     SECTION    bitplane,BSS_C
  176. BITPLANE1:
  177.     ds.b    40*256
  178.  
  179.     end
  180.  
  181. ;****************************************************************************
  182.  
  183. In questo esempio eseguiamo un OR tra una figura letta attraverso il canale B
  184. e un valore costante contenuto nel registro BLTADAT.
  185. Per questo teniamo abilitati i canali B e D, e programmiamo il byte LF
  186. in modo che venga eseguito un OR tra le sorgenti A e B.
  187.  
  188.