home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 109 / EnigmaAmiga109CD.iso / software / testi / corsoasm / sorgenti7 / lezione11g1.s < prev    next >
Text File  |  1995-09-29  |  4KB  |  107 lines

  1.  
  2. ; Lezione11g1.s -  Uso della caratteristica del copper di richiedere 8 pixel
  3. ;           orizzontali per eseguire un suo "MOVE".
  4.  
  5.     Section    HorizCop,CODE
  6.  
  7. ;    Include    "DaWorkBench.s"    ; togliere il ; prima di salvare con "WO"
  8.  
  9. *****************************************************************************
  10.     include    "startup2.s"    ; salva interrupt, dma eccetera.
  11. *****************************************************************************
  12.  
  13. ; Con DMASET decidiamo quali canali DMA aprire e quali chiudere
  14.  
  15.         ;5432109876543210
  16. DMASET    EQU    %1000001010000000    ; copper DMA abilitato
  17.  
  18. WaitDisk    EQU    30    ; 50-150 al salvataggio (secondo i casi)
  19.  
  20. START:
  21.     BSR.W    MAKE_IT        ; Prepara la copperlist
  22.  
  23.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  24.                     ; e sprites.
  25.     move.l    #COPLIST,$80(a5)    ; Puntiamo la nostra COP
  26.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  27.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  28.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  29.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  30. MOUSE:
  31.     BTST    #$06,$BFE001    ; Aspetta la presisone del mouse
  32.     BNE.S    MOUSE
  33.     RTS
  34.  
  35. *************************************************************************
  36. *   Questa routine crea una copperlist con 40 registri COLOR0 per    *
  37. *   Linea, per cui, dato che ogni move della copperlist impiega 8    *
  38. *   pixel (lowres) di tempo per essere eseguita, il color0 viene    *
  39. *   cambiato 40 volte ORIZZONTALMENTE a scatti di 8 pixel lowres    *
  40. *************************************************************************
  41.  
  42. ;       .:::::.
  43. ;      ¦:::·:::¦
  44. ;      |· ¯ ¯ ·|
  45. ;     C|  ° °  l)
  46. ;     /__ (_) __\
  47. ;    / \ \___/ / \
  48. ;    \__\_   _/__/
  49. ;      \_`---'_/xCz
  50. ;        ¯¯¯¯¯
  51.  
  52. LINSTART    EQU    $A041fffe    ; Cambiare "$a0" per iniziare ad un
  53.                     ; altra linea verticale.
  54. LINUM        EQU    25        ; Numero di linee da fare.
  55.  
  56. MAKE_IT:
  57.     lea    CopBuf,a1
  58.     move.l    #LINSTART,d0    ; Primo "wait"
  59.     move.w    #LINUM-1,d1    ; Numero di linee da fare
  60. colcon1:
  61.     lea    cols(pc),a0    ; Indirizzo tabella con i colori in a0
  62.     move.w    #39-1,d2    ; 39 colori per linea
  63.     move.l    d0,(a1)+    ; Metti il WAIT in copperlist
  64. colcon2:
  65.     move.w    #$0180,(a1)+    ; Metti il registro COLOR0
  66.     move.w    (a0)+,(a1)+    ; Metti il valore del COLOR0 (dalla tabella)
  67.     dbra    d2,colcon2    ; Esegui tutta una linea
  68.     add.l    #$01000000,d0    ; Fai "waitare" alla linea sotto
  69.     dbra    d1,colcon1    ; ripeti per il numero di linee da fare
  70.     rts
  71.  
  72.  
  73. ;    Tabella con i 39 colori di una linea orizzontale.
  74.  
  75. cols:
  76.     dc.w    $000,$111,$222,$333,$444,$555,$666,$777
  77.     dc.w    $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
  78.     dc.w    $fff,$fff,$fff,$fff,$fff,$fff,$fff,$fff
  79.     dc.w    $eee,$ddd,$ccc,$bbb,$aaa,$999,$888,$777
  80.     dc.w    $666,$555,$444,$333,$222,$111,$000
  81.  
  82. *****************************************************************************
  83.  
  84.     section    coppa,data_C
  85.  
  86. COPLIST:
  87.     DC.W    $100,$200    ; BplCon0 - no bitplanes
  88.     DC.W    $180,$003    ; Color0 - blu
  89. CopBuf:
  90.     dcb.w    80*LINUM,0    ; Spazio dove sara' creata la copperlist.
  91.  
  92.     DC.W    $180,$003    ; Color0 - blu
  93.     dc.w    $ffff,$fffe    ; Fine copperlist
  94.  
  95.     END
  96.  
  97. Questo listato dimostra come mettendo una fila di COLOR0 (o di qualsiasi altro
  98. MOVE del WAIT), ci vuole un certo tempo per eseguirne ciascuno, e precisamente
  99. 8 pixel lowres. Infatti se si mette la risoluzione hires questo non cambia,
  100. e si puo' parlare di "16" pixel hires... ma e' inutile, se volete potete
  101. misurare la larghezza di uno "scatto" orizzontale con un righello e noterete
  102. che e' sempre quella. Oltre a essere un fatto utile per effetti come il PLASMI
  103. o quello visto in questo esempio, e' una limitazione, nel senso che se si
  104. vuol cambiare tutta la palette ad ogni riga ci vuole "un certo tempo" e questa
  105. non cambierebbe completamente che a meta' linea o addirittura alla linea sotto.
  106.  
  107.