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

  1.  
  2. ; Lezione9b1.s    Esempio di OR tra 2 canali
  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    Figura1,a0
  40.     lea    BITPLANE1,a1
  41.     bsr.s    copia        ; esegui copia figura 1
  42.  
  43.     lea    Figura2,a0
  44.     lea    BITPLANE1+20,a1
  45.     bsr.s    copia        ; esegui copia figura 2
  46.  
  47. mouse1:
  48.     btst    #2,$dff016    ; tasto destro del mouse premuto?
  49.     bne.s    mouse1        ; se no, non cancellare
  50.  
  51.     bsr.s    BlitOR        ; esegui l'OR tra le 2 figure
  52.  
  53. mouse2:
  54.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  55.     bne.s    mouse2        ; se no, torna a mouse2:
  56.     rts
  57.  
  58.  
  59. ;****************************************************************************
  60. ; Questa routine copia la figura sullo schermo.
  61. ; Prende come parametri
  62. ; A0 - indirizzo sorgente
  63. ; A1 - indirizzo destinazione
  64. ;****************************************************************************
  65.  
  66. Copia:
  67.     btst    #6,2(a5) ; dmaconr
  68. WBlit1:
  69.     btst    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  70.     bne.s    wblit1
  71.  
  72.     move.l    #$ffffffff,$44(a5)    ; maschere
  73.     move.l    #$09f00000,$40(a5)    ; BLTCON0  e BLTCON1 (usa A+D)
  74.                     ; copia normale
  75.     move.w    #0,$64(a5)        ; BLTAMOD (=0)
  76.     move.w    #30,$66(a5)        ; BLTDMOD (40-10=30)
  77.     move.l    a0,$50(a5)        ; BLTAPT  puntatore sorgente
  78.     move.l    a1,$54(a5)        ; BLTDPT  puntatore destinazione
  79.     move.w    #(64*71)+5,$58(a5)    ; BLTSIZE (via al blitter !)
  80.                     ; larghezza 5 word
  81.     rts                ; altezza 71 linee
  82.  
  83. ;****************************************************************************
  84. ; Questa routine l'OR tra 2 figura lette attraverso i canali A e B
  85. ;****************************************************************************
  86.  
  87. ;               /#\    ...
  88. ;              /   \  :   :
  89. ;             / /\  \c o o ø
  90. ;            /%/  \  (  ^  )    /)OO
  91. ;           (  u  / __\ O / \   \)(/
  92. ;           UUU_ ( /)  `-'`  \  /%/
  93. ;            /  \| /   <  :\  )/ /
  94. ;           /  . \::.   >.( \ ' /
  95. ;          /  /\   '::./|. ) \#/
  96. ;         /  /  \    ': ). )
  97. ;     __ û%,/    \   / (.  )
  98. ;    (  \% /     /  /  ) .'
  99. ;     \_ò /     /  /   `:'
  100. ;      \_/     /  /
  101. ;             /\./
  102. ;            /.%
  103. ;           / %
  104. ;          (  %
  105. ;           \ ~\
  106. ;            \__)
  107.  
  108. BlitOR:
  109.     btst    #6,2(a5) ; dmaconr
  110. WBlit2:
  111.     btst    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  112.     bne.s    wblit2
  113.  
  114.     move.l    #$ffffffff,$44(a5)    ; maschere
  115.     move.l    #$0dfc0000,$40(a5)    ; BLTCON0 e BLTCON1
  116.                     ; usa i canali A,B e D
  117.                     ; esegue l'OR tra A e B (LF=$FC)
  118.     move.w    #0,$64(a5)        ; BLTAMOD (=0)
  119.     move.w    #0,$62(a5)        ; BLTBMOD (=0)
  120.     move.w    #30,$66(a5)        ; BLTDMOD (40-10=30)
  121.  
  122.     move.l    #Figura1,$50(a5)        ; BLTBPT  puntatore sorgente
  123.     move.l    #Figura2,$4c(a5)        ; BLTAPT  puntatore sorgente
  124.     move.l    #BITPLANE1+100*40+10,$54(a5)    ; BLTDPT  puntatore dest.
  125.     move.w    #(64*71)+5,$58(a5)    ; BLTSIZE (via al blitter !)
  126.                     ; larghezza 5 word
  127.     rts                ; altezza 71 linee
  128.  
  129. ;****************************************************************************
  130.  
  131.     SECTION    GRAPHIC,DATA_C
  132.  
  133. COPPERLIST:
  134.     dc.w    $8E,$2c81    ; DiwStrt
  135.     dc.w    $90,$2cc1    ; DiwStop
  136.     dc.w    $92,$38        ; DdfStart
  137.     dc.w    $94,$d0        ; DdfStop
  138.     dc.w    $102,0        ; BplCon1
  139.     dc.w    $104,0        ; BplCon2
  140.     dc.w    $108,0        ; Bpl1Mod
  141.     dc.w    $10a,0        ; Bpl2Mod
  142.  
  143.     dc.w    $100,$1200    ; bplcon0 - 1 bitplane lowres
  144.  
  145. BPLPOINTERS:
  146.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  147.  
  148.     dc.w    $0180,$000    ; color0
  149.     dc.w    $0182,$aaa    ; color1
  150.  
  151.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  152.  
  153. ;****************************************************************************
  154.  
  155. Figura1:
  156.     dc.w    $ffc0,0,0,$0007,$fe00,$8000,0,$1000,0,$0200
  157.     dc.w    $8000,0,$3800,0,$0200,$8000,0,$3800,0,$0200
  158.     dc.w    $8000,0,$3800,0,$0200,$8000,0,$3800,0,$0200
  159.     dc.w    $8000,0,$7c00,0,$0200,$8000,0,$7c00,0,$0200
  160.     dc.w    $8000,0,$7c00,0,$0200,$8000,0,$fe00,0,$0200
  161.     dc.w    $8000,0,$fe00,0,$0200,$8000,0,$fe00,0,$0200
  162.     dc.w    $8000,0,$fe00,0,$0200,$8000,$0001,$ff00,0,$0200
  163.     dc.w    $8000,$0001,$ff00,0,$0200,$8000,$0001,$ff00,0,$0200
  164.     dc.w    $8000,$0003,$ff80,0,$0200,$8000,$0003,$ff80,0,$0200
  165.     dc.w    $8000,$0003,$ff80,0,$0200,$8000,$0003,$ff80,0,$0200
  166.     dc.w    $8000,$0007,$ffc0,0,$0200,$8000,$0007,$ffc0,0,$0200
  167.     dc.w    $8000,$0007,$ffc0,0,$0200,$8000,$000f,$ffe0,0,$0200
  168.     dc.w    $8000,$000f,$ffe0,0,$0200,$8000,$000f,$ffe0,0,$0200
  169.     dc.w    $8000,$000f,$ffe0,0,$0200,$8000,$001f,$fff0,0,$0200
  170.     dc.w    $8000,$001f,$fff0,0,$0200,$8000,$001f,$fff0,0,$0200
  171.     dc.w    $8000,$003f,$fff8,0,$0200,$8000,$003f,$fff8,0,$0200
  172.     dc.w    $8000,$003f,$fff8,0,$0200,$8000,$003f,$fff8,0,$0200
  173.     dc.w    $8000,$007f,$fffc,0,$0200,$8000,$007f,$fffc,0,$0200
  174.     dc.w    $8000,$007f,$fffc,0,$0200,$8000,$003f,$fff8,0,$0200
  175.     dc.w    $8000,$003f,$fff8,0,$0200,$8000,$003f,$fff8,0,$0200
  176.     dc.w    $8000,$003f,$fff8,0,$0200,$8000,$001f,$fff0,0,$0200
  177.     dc.w    $8000,$001f,$fff0,0,$0200,$8000,$001f,$fff0,0,$0200
  178.     dc.w    $8000,$000f,$ffe0,0,$0200,$8000,$000f,$ffe0,0,$0200
  179.     dc.w    $8000,$000f,$ffe0,0,$0200,$8000,$000f,$ffe0,0,$0200
  180.     dc.w    $8000,$0007,$ffc0,0,$0200,$8000,$0007,$ffc0,0,$0200
  181.     dc.w    $8000,$0007,$ffc0,0,$0200,$8000,$0003,$ff80,0,$0200
  182.     dc.w    $8000,$0003,$ff80,0,$0200,$8000,$0003,$ff80,0,$0200
  183.     dc.w    $8000,$0003,$ff80,0,$0200,$8000,$0001,$ff00,0,$0200
  184.     dc.w    $8000,$0001,$ff00,0,$0200,$8000,$0001,$ff00,0,$0200
  185.     dc.w    $8000,0,$fe00,0,$0200,$8000,0,$fe00,0,$0200
  186.     dc.w    $8000,0,$fe00,0,$0200,$8000,0,$fe00,0,$0200
  187.     dc.w    $8000,0,$7c00,0,$0200,$8000,0,$7c00,0,$0200
  188.     dc.w    $8000,0,$7c00,0,$0200,$8000,0,$3800,0,$0200
  189.     dc.w    $8000,0,$3800,0,$0200,$8000,0,$3800,0,$0200
  190.     dc.w    $8000,0,$3800,0,$0200,$8000,0,$1000,0,$0200
  191.     dc.w    $ffc0,0,0,$0007,$fe00
  192.  
  193. Figura2:
  194.     dc.w    $ffff,$ffff,$ffff,$ffff,$fe00,$8000,0,0,0,$0200
  195.     dc.w    $8000,0,0,0,$0200,$8000,0,0,0,$0200
  196.     dc.w    $8000,0,0,0,$0200,$8000,0,0,0,$0200
  197.     dc.w    $8000,0,0,0,$0200,$8000,0,0,0,$0200
  198.     dc.w    $8000,0,0,0,$0200,$8000,0,0,0,$0200
  199.     dc.w    0,0,0,0,0,0,0,0,0,0
  200.     dc.w    0,0,0,0,0,0,0,0,0,0
  201.     dc.w    0,0,0,0,0,0,0,0,0,0
  202.     dc.w    0,0,0,0,0,0,0,0,0,0
  203.     dc.w    0,0,0,0,0,0,0,0,0,0
  204.     dc.w    0,0,0,0,0,0,0,0,0,0
  205.     dc.w    0,0,0,0,0,0,0,0,0,0
  206.     dc.w    0,0,0,0,0,0,0,$3800,0,0
  207.     dc.w    0,$0003,$ff80,0,0,0,$001f,$fff0,0,0
  208.     dc.w    0,$01ff,$ffff,0,0,0,$0fff,$ffff,$e000,0
  209.     dc.w    0,$ffff,$ffff,$fe00,0,$0007,$ffff,$ffff,$ffc0,0
  210.     dc.w    $007f,$ffff,$ffff,$fffc,0,$03ff,$ffff,$ffff,$ffff,$8000
  211.     dc.w    $3fff,$ffff,$ffff,$ffff,$f800,$7fff,$ffff,$ffff,$ffff,$fc00
  212.     dc.w    $3fff,$ffff,$ffff,$ffff,$f800,$03ff,$ffff,$ffff,$ffff,$8000
  213.     dc.w    $007f,$ffff,$ffff,$fffc,0,$0007,$ffff,$ffff,$ffc0,0
  214.     dc.w    0,$ffff,$ffff,$fe00,0,0,$0fff,$ffff,$e000,0
  215.     dc.w    0,$01ff,$ffff,0,0,0,$001f,$fff0,0,0
  216.     dc.w    0,$0003,$ff80,0,0,0,0,$3800,0,0
  217.     dc.w    0,0,0,0,0,0,0,0,0,0
  218.     dc.w    0,0,0,0,0,0,0,0,0,0
  219.     dc.w    0,0,0,0,0,0,0,0,0,0
  220.     dc.w    0,0,0,0,0,0,0,0,0,0
  221.     dc.w    0,0,0,0,0,0,0,0,0,0
  222.     dc.w    0,0,0,0,0,0,0,0,0,0
  223.     dc.w    0,0,0,0,0,0,0,0,0,0
  224.     dc.w    0,0,0,0,0,$8000,0,0,0,$0200
  225.     dc.w    $8000,0,0,0,$0200,$8000,0,0,0,$0200
  226.     dc.w    $8000,0,0,0,$0200,$8000,0,0,0,$0200
  227.     dc.w    $8000,0,0,0,$0200,$8000,0,0,0,$0200
  228.     dc.w    $8000,0,0,0,$0200,$8000,0,0,0,$0200
  229.     dc.w    $ffff,$ffff,$ffff,$ffff,$fe00
  230.  
  231. ;****************************************************************************
  232.  
  233.     SECTION    bitplane,BSS_C
  234. BITPLANE1:
  235.     ds.b    40*256
  236.  
  237.     end
  238.  
  239. ;****************************************************************************
  240.  
  241. In questo esempio vediamo l'OR tra 2 figure. Si tratta di una semplice
  242. blittata che esegue l'OR tra i 2 canali A e B, usando il valore di LF
  243. calcolato nella lezione. Per esercizio potete modificarlo utilizzando
  244. per la lettura il canale C al posto del B. Le modifiche da fare sono
  245. le seguenti:
  246. Sostiuire i registri modulo e puntatore del canale B con quelli del C;
  247. attivare il canale C invece che il B;
  248. Calcolare il giusto valore di LF per eseguira l'OR tra A e C.
  249. Il calcolo di LF e` semplice: basta osservare la tabella in fig.27 e
  250. settare ad 1 tutti i minterms corrispondenti a combinazioni con A=1 oppure
  251. con C=1. Si ottiene LF=$FA.
  252. Ripetete lo stesso esercizio per fare l'OR tra i canali B e C.
  253.  
  254.