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

  1.  
  2. ; Lezione11i1.s    - Scorrimento di colori a tutto schermo PAL
  3.  
  4.     SECTION    Scorricol,CODE
  5.  
  6. ;    Include    "DaWorkBench.s"    ; togliere il ; prima di salvare con "WO"
  7.  
  8. *****************************************************************************
  9.     include    "startup2.s"        ; Salva Copperlist Etc.
  10. *****************************************************************************
  11.  
  12.         ;5432109876543210
  13. DMASET    EQU    %1000001010000000    ; solo copper DMA
  14.  
  15. WaitDisk    EQU    30    ; 50-150 al salvataggio (secondo i casi)
  16.  
  17. START:
  18.     BSR.w    MAKECOP        ; Fai la copperlist
  19.  
  20.     lea    $dff000,a5
  21.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  22.                     ; e sprites.
  23.  
  24.     move.l    #MYCOP,$80(a5)        ; Puntiamo la nostra COP
  25.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  26.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  27.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  28.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  29.  
  30. mouse:
  31.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  32.     MOVE.L    #$12c00,d2    ; linea da aspettare = $12c
  33. Waity1:
  34.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  35.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  36.     CMPI.L    D2,D0        ; aspetta la linea $12c
  37.     BNE.S    Waity1
  38.  
  39.     btst    #2,$16(a5)    ; tasto destro premuto?
  40.     beq.s    Mouse2        ; se si non eseguire ColorScrollPAL
  41.  
  42.     bsr.s    ColorScrollPAL        ; Scorrimento dei colori
  43.  
  44. mouse2:
  45.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  46.     MOVE.L    #$12c00,d2    ; linea da aspettare = $12c
  47. Aspetta:
  48.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  49.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  50.     CMPI.L    D2,D0        ; aspetta la linea $12c
  51.     BEQ.S    Aspetta
  52.  
  53.     btst    #6,$bfe001    ; mouse premuto?
  54.     bne.s    mouse
  55.     rts
  56.  
  57. *****************************************************************************
  58. ;    Routine che crea la copperlist
  59. *****************************************************************************
  60.  
  61. ;       .__ _  __..... .   .    .
  62. ;    -\-'_ \\// _`-/-- -  -    -
  63. ;      \(-)____(-)/// /  /    /
  64. ;      -'_/V""V\_`- _  _    _
  65. ;        \ \    /__ _  _    _
  66. ;         \ \,,/__ _  _    _
  67. ;            \/-Mo!
  68.  
  69. MakeCop:
  70.     lea    MYCOP,a0        ; Indirizzo della copperlist da fare
  71.     move.l    #$1f07fffe,d0        ; Istruzione WAIT, prima linea $1f
  72.                     ; ossia WAIT di partenza
  73.     move.l    #$0007fffe,d1        ; Ultima linea NTSC per la Copperlist
  74.                     ; ossia WAIT finale
  75.     bsr.w    FaiColors        ; Fai Questo pezzo di Copperlist
  76.                     ; da $1f a $ff, ossia la parte NTSC
  77.  
  78.     move.l    #$ffdffffe,(a0)+    ; Wait Speciale per attendere la fine
  79.                     ; della zona NTSC.
  80.     move.l    #$0007fffe,d0        ; Prima linea della zona pal (WAIT)
  81.                     ; ossia WAIT di partenza
  82.     move.l    #$3707fffe,d1        ; Ultima linea in fondo allo schermo
  83.                     ; ossia WAIT finale
  84.     bsr.s    FaiColors2        ; Fai il pezzo PAL della copperlist
  85.     move.l    #$fffffffe,(a0)+    ; Fine della copperlist
  86.     rts
  87.  
  88.  
  89. *****************************************************************************
  90. ; SubRoutine che crea la copperlist - in a0 va immesso l'indirizzo della
  91. ; copperlist, in d0 il primo wait, in d1 l'ultimo da fare
  92. *****************************************************************************
  93.  
  94. ;      _    _  _ ___
  95. ;    (( _ \--/ _ ) )
  96. ;    \_\(°/__\°)/_/
  97. ;     \-'_/VV\_`-/
  98. ;     \\_\'  `/_/   
  99. ;      \ \\..//
  100. ;       \ `\/'
  101.  
  102. FaiColors:
  103.     lea    ColorTabel(PC),a1    ; Indirizzo tabella colori
  104. FaiColors2:
  105.     move.l    d0,(a0)+        ; Immetti il WAIT in coplist
  106.     move.w    #$0180,(a0)+        ; Immetti il registro COLOR0
  107.     move.w    (a1)+,(a0)+        ; E il colore dalla tabella
  108.     cmp.l    #ColorTabelEnd,a1    ; siamo all'ultimo colore della tab?
  109.     bne.s    labelok            ; Non ancora? allora non ripartire
  110.     lea    ColorTabel(PC),a1    ; altrimenti riparti dal primo colore
  111. labelok:
  112.     addi.l    #$01000000,d0        ; Incrementa la pos Y del WAIT
  113.     cmp.l    d0,d1            ; Siamo arrivati all'ultimo wait?
  114.     bne.s    FaiColors2        ; Se non ancora, fai un'altra linea
  115.     rts
  116.  
  117.  
  118. *****************************************************************************
  119. ; Routine che muove i colori
  120. *****************************************************************************
  121.  
  122. ;     \  /
  123. ;      oO
  124. ;     \__/
  125.  
  126. ColorScrollPAL:
  127.     move.l    PuntatorecolTab(PC),a0    ; PuntatorecolTab in a0
  128.     lea    MYCOP+6,a1        ; Indirizzo del primo colore in copper
  129.     move.l    #225-1,d0        ; 225 colori da muovere in zona NTSC
  130.     bsr.s    scroll            ; Scorri la parte ntsc dello schermo
  131.     addq.w    #4,a1            ; salta il WAIT speciale alla fine
  132.                     ; della zona NTSC ($FFDFFFFE)
  133.     moveq    #54-1,d0        ; 54 colori da muovere in zona PAL
  134.     bsr.s    scroll            ; Scorri la parte PAL dello schermo
  135.  
  136.     lea.l    PuntatorecolTab(PC),a0    ; PuntatorecolTab in a0
  137.     addq.l    #2,(a0)            ; Avanza di un colore per la prossima
  138.                     ; esecuzione della routine
  139.     cmp.l    #ColorTabelEnd,(a0)    ; siamo arrivati all'ultimo colore
  140.                     ; della tabella??
  141.     bne.s    NonRipartire        ; Se non ancora esci dalla routine
  142.     move.l #ColorTabel,(a0)        ; Altrimenti riparti dall'inizio
  143.                     ; della tabella
  144. NonRipartire:
  145.     rts
  146.  
  147. *****************************************************************************
  148. ;    Subroutine che muove i colori; il numero di colori va immesso in d0,
  149. ;    l'indirizzo della tabella colori in a0 e i colori in coplist in a1
  150. *****************************************************************************
  151.  
  152. scroll:
  153.     move.w    (a0)+,(a1)        ; copia il colore dalla tabella alla
  154.                     ; copperlist
  155.     cmp.l    #ColorTabelEnd,a0    ; Abbiamo copiato l'ultimo colore
  156.                     ; della tabella?
  157.     bne.s    okay            ; Se non ancora, continua
  158.     lea    ColorTabel(PC),a0    ; ColorTabel in a0 - riparti dal primo
  159.                     ; colore della tabella
  160. okay:
  161.     addq.w    #8,a1            ; Vai al prossimo colore in copperlist
  162.     dbra    d0,scroll        ; d0 = numero colori da immettere
  163.     rts
  164.  
  165.  
  166. ;    Tabella con i colori RGB
  167.  
  168. ColorTabel:
  169.     dc.w    $000,$100,$200,$300,$400,$500,$600,$700
  170.     dc.w    $800,$900,$a00,$b00,$c00,$d00,$e00,$f00
  171.     dc.w    $e00,$d00,$c00,$b00,$a00,$900,$800,$700
  172.     dc.w    $600,$500,$400,$300,$200,$100,$000,$010
  173.     dc.w    $020,$030,$040,$050,$060,$070,$080,$090
  174.     dc.w    $0a0,$0b0,$0c0,$0d0,$0e0,$0f0,$0e0,$0d0
  175.     dc.w    $0c0,$0b0,$0a0,$090,$080,$070,$060,$050
  176.     dc.w    $040,$030,$020,$010,$000,$001,$002,$003
  177.     dc.w    $004,$005,$006,$007,$008,$009,$00a,$00b
  178.     dc.w    $00c,$00d,$00e,$00f,$00e,$00d,$00c,$00b
  179.     dc.w    $00a,$009,$008,$007,$006,$005,$004,$003
  180.     dc.w    $002,$001
  181. ColorTabelEnd:
  182.  
  183. ;    Questo e' il puntatore alla tabella ColorTabel
  184.  
  185. PuntatorecolTab:
  186.     dc.l    ColorTabel+2
  187.  
  188. *****************************************************************************
  189. ;    Copperlist creata interamente dalla routine MAKECOP; in questo modo
  190. ;    basta fare una section BSS!
  191. *****************************************************************************
  192.  
  193.     Section    Copperlist,bss_C
  194.  
  195. MYCOP:
  196.     ds.b    225*8    ; spazio per la zona PAL
  197.     ds.b    4    ; spazio per il $FFDFFFFE
  198.     ds.b    55*8    ; spazio per la zona NTSC
  199.     ds.b    4    ; spazio per la fine della copperlist $FFDFFFFE
  200.  
  201.     end
  202.  
  203.