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

  1.  
  2. ; Lezione11h2.s    - Routine che genera delle barre sfumate - USARE IL TASTO
  3. ;          DESTRO DEL MOUSE PER AUMENTARE l'ALTEZZA DELLE BARRE.
  4.  
  5.     SECTION    Barrex,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    ; solo copper DMA
  15.  
  16. WaitDisk    EQU    30    ; 50-150 al salvataggio (secondo i casi)
  17.  
  18. LINEE:    equ    211
  19.  
  20. START:
  21.     bsr.s    FaiCopp1
  22.  
  23.     lea    $dff000,a5
  24.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  25.                     ; e sprites.
  26.  
  27.     move.l    #OURCOPPER,$80(a5)    ; Puntiamo la nostra COP
  28.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  29.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  30.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  31.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  32.  
  33. mouse:
  34.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  35.     MOVE.L    #$10500,d2    ; linea da aspettare = $105
  36. Waity1:
  37.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  38.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  39.     CMPI.L    D2,D0        ; aspetta la linea $105
  40.     BNE.S    Waity1
  41.  
  42.      BSR.s    changecop    ; chiama la routine che cambia il copper
  43.  
  44.     btst    #6,$bfe001    ; mouse premuto?
  45.     bne.s    mouse
  46.     rts
  47.  
  48. *****************************************************************************
  49. ; routine che crea la copperlist
  50. *****************************************************************************
  51.  
  52. FaiCopp1:
  53.     LEA    copcols,a0    ; indirizzo buffer in copperlist
  54.     MOVE.L    #$2c07fffe,d1    ; istruzione copper wait, che inizia
  55.                 ; attendendo alla linea $2c
  56.     MOVE.L    #$1800000,d2    ; $dff180 = colore 0 per il copper
  57.     MOVE.w    #LINEE-1,d0    ; numero di linee per il loop
  58.     MOVEQ    #$000,d3    ; colore da mettere = nero
  59. coploop:
  60.     MOVE.L    d1,(a0)+    ; Metti il WAIT
  61.     MOVE.L    d2,(a0)+    ; Metti il $180 (color0) azzerato al NERO
  62.     ADD.L    #$01000000,d1    ; Fai aspettare il WAIT 1 linea dopo
  63.     DBRA    d0,coploop    ; ripeti fino alla fine delle linee
  64.     rts
  65.  
  66. *****************************************************************************
  67. ; routine che cambia i colori nella copperlist
  68. *****************************************************************************
  69.  
  70. ;                ________________________
  71. ;               /                        \
  72. ;      ___   ___\       ehHHHHhHh?        \
  73. ;     /_  ¯¯¯  _\\_ ______________________/
  74. ;     \ \_____/ / / /
  75. ;      \_(°I°)_/ / /
  76. ;      _l_¯U¯_l_ \/
  77. ;     /  T¯¬¯T  \
  78. ;    / _________ \ xCz
  79. ;    ¯¯         ¯¯
  80.  
  81. changecop:
  82.     btst    #2,$dff016    ; tasto destro premuto?
  83.     bne.s    noadd        ; se no, salta a noadd
  84.     cmp.b    #$24,barlen    ; altrimenti controlla se siamo gia' a $24
  85.     beq.s    noadd        ; in tal caso salta a noadd
  86.     addq.b    #1,barlen    ; oppure ingrandisci la barra (BARLEN)
  87. noadd:
  88.     LEA    copcols,a0    ; indirizzo buffer in copperlist
  89.     MOVE.w    #LINEE-1,d0    ; numero linee per il loop
  90.     MOVE.L    PuntatoreTABCol(PC),a1    ; inizio della tabella colori in a1
  91.     move.l    a1,PuntatTemporaneo    ; salvato nel PuntatoreTemporaneo
  92.     moveq    #0,d1            ; azzero d1
  93. LineeLoop:
  94.     move.w    (a1)+,6(a0)    ; copia il colore dalla tabella alla copperlist
  95.     addq.w    #8,a0        ; prossimo color0 in copperlist
  96.      addq.b    #1,d1        ; annoto in d1 la lunghezza della sotto-barra
  97.      cmp.b    barlen(PC),d1    ; fine della sotto-barra?
  98.     bne.s    AspettaSottoBarra
  99.  
  100.     MOVE.L    PuntatTemporaneo(PC),a1
  101.     addq.w    #2,a1            ; punto al colore dopo
  102.     cmp.l    #FINETABColBarra,PuntatTemporaneo    ; siamo a fine tab?
  103.     bne.s    NonRipartire        ; se non ancora, vai a NonRipartire
  104.     lea    TABColoriBarra(pc),a1    ; altrimenti riparti dal primo col!
  105. NonRipartire:
  106.     move.l    a1,PuntatTemporaneo    ; e salva il valore nel Pun. temporaneo
  107.     moveq    #0,d1            ; azzero d1
  108. AspettaSottoBarra:
  109.     dbra d0,LineeLoop    ; fai tutte le linee
  110.  
  111.  
  112.     addq.l    #2,PuntatoreTABCol         ; prossimo colore
  113.     cmp.l    #FINETABColBarra+2,PuntatoreTABCol ; siamo alla fine della
  114.                          ; tabella colori?
  115.     bne.s FineRoutine             ; se no, esci, altrimenti...
  116.     move.l #TABColoriBarra,PuntatoreTABCol     ; riparti dal primo valore di
  117.                          ; TABColoriBarra
  118. FineRoutine:
  119.     rts
  120.  
  121. ;    altezza barre
  122.  
  123. barlen:
  124.     dc.b    1
  125.  
  126.     even
  127.  
  128.  
  129. ;    Tabella con i valori RGB dei colori. in questo caso sono toni di BLU
  130.  
  131. TABColoriBarra:
  132.     dc.w    $000,$001,$002,$003,$004,$005,$006,$007
  133.     dc.w    $008,$009,$00A,$00B,$00C,$00D,$00D,$00E
  134.     dc.w    $00E,$00F,$00F,$00F,$00E,$00E,$00D,$00D
  135.     dc.w    $00C,$00B,$00A,$009,$008,$007,$006,$005
  136.     dc.w    $004,$003,$002,$001,$000,$000,$000,$000
  137.     dcb.w    10,$000
  138. FINETABColBarra:
  139.     dc.w    $000,$001,$002,$003,$004,$005,$006,$007    ; questi valori servono
  140.     dc.w    $008,$009,$00A,$00B,$00C,$00D,$00D,$00E ; per le sotto-barre
  141.     dc.w    $00E,$00F,$00F,$00F,$00E,$00E,$00D,$00D
  142.     dc.w    $00C,$00B,$00A,$009,$008,$007,$006,$005
  143.     dc.w    $004,$003,$002,$001,$000,$000,$000,$000
  144.  
  145.  
  146. PuntatTemporaneo:
  147.      dc.l    TABColoriBarra
  148.  
  149. PuntatoreTABCol:
  150.      DC.L    TABColoriBarra
  151.  
  152. *****************************************************************************
  153.  
  154.     Section    Coppy,data_C
  155.  
  156. OURCOPPER:
  157.     dc.w    $180,$000    ; Color0 nero
  158.     dc.w    $100,$200    ; bplcon0 - no bitplanes
  159.  
  160. copcols:
  161.     dcb.b    LINEE*8,0    ; spazio per 100 linee in questo formato:
  162.                 ; WAIT xx07,$fffe
  163.                 ; MOVE $xxx,$180    ; color0
  164.     dc.w    $ffdf,$fffe
  165.     dc.w    $0107,$fffe
  166.     dc.w    $180,$010
  167.     dc.w    $0207,$fffe
  168.     dc.w    $180,$020
  169.     dc.w    $0307,$fffe
  170.     dc.w    $180,$030
  171.     dc.w    $0507,$fffe
  172.     dc.w    $180,$040
  173.     dc.w    $0707,$fffe
  174.     dc.w    $180,$050
  175.     dc.w    $0907,$fffe
  176.     dc.w    $180,$060
  177.     dc.w    $0c07,$fffe
  178.     dc.w    $180,$070
  179.     dc.w    $0f07,$fffe
  180.     dc.w    $180,$080
  181.     dc.w    $1207,$fffe
  182.     dc.w    $180,$090
  183.     dc.w    $1507,$fffe
  184.     dc.w    $180,$0a0
  185.  
  186.     dc.w    $180,$000    ; color0 nero
  187.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  188.  
  189.     end
  190.  
  191.