home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 109 / EnigmaAmiga109CD.iso / software / testi / corsoasm / sorgenti_darkcoder / skip / lezioneskip3.s < prev    next >
Encoding:
Text File  |  1995-12-06  |  3.6 KB  |  136 lines

  1.  
  2. ; Lezione skip3
  3. ;        Tasto sinistro per uscire.
  4.  
  5.     SECTION    bau,code
  6.  
  7. ;    Include    "DaWorkBench.s"    ; togliere il ; prima di salvare con "WO"
  8.  
  9. *****************************************************************************
  10.     include    "startup2.s"    ; Salva Copperlist Etc.
  11. *****************************************************************************
  12.  
  13.         ;5432109876543210
  14. DMASET    EQU    %1000001010000000    ; copper,bitplane,blitter DMA
  15.  
  16. Waitdisk    EQU    10
  17.  
  18. START:
  19.  
  20.     lea    $dff000,a5        ; CUSTOM REGISTER in a5
  21.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  22.     move.l    #COPPERLIST,$80(a5)    ; Puntiamo la nostra COP
  23.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  24.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  25.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  26.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  27.  
  28.     move.l    #copperloop,$84(a5)    ; carica l'indirizzo del loop
  29.                     ; in COP2LC
  30.  
  31. mouse:
  32.     bsr.s    CambiaCopper
  33.  
  34. ; notare il doppio controllo sulla sincronia
  35. ; necessario perche` la muovicopper richiede MENO di UNA rasterline su 68020+
  36.  
  37.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  38.     MOVE.L    #$13000,d2    ; linea da aspettare = $130, ossia 304
  39. Waity1:
  40.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  41.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  42.     CMPI.L    D2,D0        ; aspetta la linea $130 (304)
  43.     BNE.S    Waity1
  44.  
  45. Waity2:
  46.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  47.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  48.     CMPI.L    D2,D0        ; aspetta la fine della linea $130 (304)
  49.     BEQ.S    Waity2
  50.  
  51.     btst    #6,$bfe001        ; tasto sinistro del mouse premuto?
  52.     bne.s    mouse            ; se no, torna a mouse:
  53.     rts
  54.  
  55. *****************************************************************************
  56. * Questa routine cicla i colori nella copperlist
  57. *****************************************************************************
  58.  
  59. CambiaCopper:
  60.     add.w    #$010,verde    ; aumenta luminosita`
  61.     and.w    #$0f0,verde    ; evita il riporto sulla componente rossa
  62.  
  63.     add.w    #$111,bianco    ; aumenta luminosita`
  64.     cmp.w    #$fff,bianco    ; evita il riporto
  65.     bls.s    no_reset
  66.     move.w    #$000,bianco    ; ricomincia dal nero
  67. no_reset
  68.  
  69.     add.w    #$100,rosso    ; aumenta luminosita`
  70.     and.w    #$f00,rosso    ; evita il riporto
  71.  
  72.     rts
  73.  
  74. *****************************************************************************
  75.  
  76.     SECTION    MY_COPPER,CODE_C
  77.  
  78. COPPERLIST:
  79.  
  80. ; barra 1
  81.     dc.l $01800111
  82.     dc.l $2901fffe
  83.     dc.l $01800a0a
  84.     dc.l $2a01fffe
  85.     dc.l $0180011f
  86.     dc.l $2b01fffe
  87.     dc.l $01800000
  88.  
  89.     dc.w    $9007,$FFFE    ; aspetta la linea $30
  90.  
  91. copperloop:            ; da qui inizia il loop
  92.     dc.w    $180
  93. verde:    dc.w    $080        ; colore verde
  94.  
  95.     dc.w    $806b,$00fe    ; aspetta primo terzo di schermo
  96.     dc.w    $180
  97. bianco    dc.w    $888        ; bianco
  98.  
  99.     dc.w    $80a5,$00fe    ; aspetta secondo terzo di schermo
  100.  
  101.     dc.w    $180
  102. rosso    dc.w    $800    ; rosso
  103.  
  104.     dc.w    $80e1,$00FE    ; aspetta la fine della riga
  105.  
  106.     dc.w    $e001,$ff01    ; SKIP alla linea $60
  107.     dc.w    $8a,0        ; scrive in COPJMP2 - salta ad inizio loop
  108.  
  109.     dc.w    $180,$000
  110.     dc.w $FFDF,$FFFE    ; aspetta la linea 255
  111.  
  112. ; barra 2
  113.     dc.l $01800000
  114.     dc.l $1401fffe
  115.     dc.l $0180011f
  116.     dc.l $1501fffe
  117.     dc.l $01800a0a
  118.     dc.l $1601fffe
  119.     dc.l $01800111
  120.  
  121.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  122.  
  123.     end
  124.  
  125. Questo esempio mostra un uso dei copperloop.
  126. Vogliamo cambiare il COLOR0 3 volte all'interno di una riga di raster e
  127. vogliamo ripetere gli stessi colori ad ogni riga. E` molto comodo usare
  128. un copperloop. Le wait all'interno del loop hanno le posizioni verticali
  129. mascherate, in modo da funzionare ad ogni riga di raster.
  130. Per cambiare i colori, e` necessario modificare 3 sole istruzioni copper.
  131. Se non usasassimo il copperloop dovremmo ripetere le 3 modifiche per ogni riga
  132. di raster. Poiche` l'effetto va dalla riga $90 alla $e0, in totale abbiamo
  133. $e0-$90=$50=80 righe di raster.
  134. Grazie al copperloop andiamo 80 volte piu` veloci!!!
  135.  
  136.