home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 109 / EnigmaAmiga109CD.iso / software / testi / corsoasm / sorgenti8 / lezione14-10b.s < prev    next >
Text File  |  1995-09-29  |  6KB  |  178 lines

  1.  
  2. ;  Lezione14-10b.s - Uso della routine player6.1a per un modulo compresso
  3.  
  4. ; Routine P61_Music chiamata ogni vertical blank
  5.  
  6.     SECTION    Usoplay61a,CODE
  7.  
  8. ;    Include    "DaWorkBench.s"    ; togliere il ; prima di salvare con "WO"
  9.  
  10. *****************************************************************************
  11.     include    "startup2.s" ; Salva Copperlist Etc.
  12. *****************************************************************************
  13.  
  14.         ;5432109876543210
  15. DMASET    EQU    %1000001111000000    ; solo copper DMA
  16.  
  17. WaitDisk    EQU    30    ; 50-150 al salvataggio (secondo i casi)
  18.  
  19. START:
  20.  
  21. ;­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  22. ;­ Call P61_Init to initialize the playroutine    ­
  23. ;­ D0 --> Timer detection (for CIA-version)    ­
  24. ;­ A0 --> Address to the module            ­
  25. ;­ A1 --> Address to samples/0            ­
  26. ;­ A2 --> Address to sample buffer        ­
  27. ;­ D0 <-- 0 if succeeded            ­
  28. ;­ A6 <-- $DFF000                ­
  29. ;­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  30.  
  31.     movem.l    d0-d7/a0-a6,-(SP)
  32.     lea    P61_data,a0    ; Indirizzo del modulo in a0
  33.     lea    $dff000,a6    ; Ricordiamoci il $dff000 in a6!
  34.     sub.l    a1,a1        ; I samples non sono a parte, mettiamo zero
  35.     lea    samples,a2    ; modulo compattato! Buffer destinazione per
  36.                 ; i samples (in chip ram) da indicare!
  37.     bsr.w    P61_Init    ; Nota: impiega alcuni secondi per decompress!
  38.     movem.l    (SP)+,d0-d7/a0-a6
  39.  
  40.     lea    $dff000,a5
  41.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  42.                     ; e sprites.
  43.  
  44.     move.w    #$e000,$9a(a5)        ; INTENA - Abilito Master and lev6
  45.     move.l    #COPPERLIST,$80(a5)    ; Puntiamo la nostra COP
  46.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  47.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  48.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  49.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  50.  
  51. mouse:
  52.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  53.     MOVE.L    #$08000,d2    ; linea da aspettare = $80
  54. Waity1:
  55.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  56.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  57.     CMPI.L    D2,D0        ; aspetta la linea $12c
  58.     BNE.S    Waity1
  59. Aspetta:
  60.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  61.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  62.     CMPI.L    D2,D0        ; aspetta la linea $12c
  63.     BEQ.S    Aspetta
  64.  
  65. ;­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  66. ;­ Call P61_Music every frame to play the music    ­
  67. ;­      _NOT_ if CIA-version is used!        ­
  68. ;­ A6 --> Customchip baseaddress ($DFF000)    ­
  69. ;­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  70.  
  71.     move.w    #$f00,$180(a5)    ; color0 rosso -> per fare il copper monitor
  72.  
  73.     movem.l    d0-d7/a0-a6,-(SP)
  74.     lea    $dff000,a6    ; Ricordiamoci il $dff000 in a6!
  75.     bsr.w    P61_Music
  76.     movem.l    (SP)+,d0-d7/a0-a6
  77.  
  78.     move.w    #$003,$180(a5)    ; color0 nero
  79.  
  80.     btst    #6,$bfe001    ; mouse premuto?
  81.     bne.s    mouse
  82.  
  83. ;­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  84. ;­ Call P61_End to stop the music        ­
  85. ;­   A6 --> Customchip baseaddress ($DFF000)    ­
  86. ;­        Uses D0/D1/A0/A1/A3        ­
  87. ;­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  88.  
  89.     lea    $dff000,a6    ; Ricordiamoci il $dff000 in a6!
  90.     bsr.w    P61_End
  91.  
  92.     rts
  93.  
  94.  
  95. *****************************************************************************
  96. *         The Player 6.1A for Asm-One 1.09 and later             *
  97. *****************************************************************************
  98.  
  99. fade  = 0    ;0 = Normal, NO master volume control possible
  100.         ;1 = Use master volume (P61_Master)
  101.  
  102. jump = 0    ;0 = do NOT include position jump code (P61_SetPosition)
  103.         ;1 = Include
  104.  
  105. system = 0    ;0 = killer
  106.         ;1 = friendly
  107.  
  108. CIA = 0        ;0 = CIA disabled
  109.         ;1 = CIA enabled
  110.  
  111. exec = 1    ;0 = ExecBase destroyed
  112.         ;1 = ExecBase valid
  113.  
  114. opt020 = 0    ;0 = MC680x0 code
  115.         ;1 = MC68020+ or better
  116.  
  117. use = $b55a    ; Usecode (mettete il valore dato dal p61con al salvataggio
  118.         ; diverso per ogni modulo!)
  119.  
  120. *****************************************************************************
  121.     include    "play.s"    ; La routine vera e propria!
  122. *****************************************************************************
  123.  
  124.  
  125. *****************************************************************************
  126. ;    Copperlist
  127. *****************************************************************************
  128.  
  129.     SECTION    COP,DATA_C
  130.  
  131. COPPERLIST:
  132.     dc.w    $100,$200    ; bplcon0 - no bitplanes
  133.     DC.W    $180,$003    ; color0 nero
  134.     dc.W    $FFFF,$FFFE    ; fine della copperlist
  135.  
  136. *****************************************************************************
  137. ;    Modulo musicale convertito in formato P61, COMPRESSO! (opzione pack!)
  138. *****************************************************************************
  139.  
  140.     Section    modulozzo,data    ; Non occorre sia in chip ram, perche' e'
  141.                 ; compresso e sara' scompattato altrove!
  142.  
  143. ; Il modulo e' di Jester/Sanity. Originale 153676, packed 71950
  144.  
  145. P61_data:
  146.     incbin    "P61.stardust"    ; Compresso, (opzione PACK SAMPLES), per cui
  147.                 ; si puo' mettere anche in fast ram: sara'
  148.                 ; usato per scompattare i samples nel buffer
  149.                 ; samples, e non sara' "suonato" direttamente,
  150.                 ; quindi non dovra' passare per i canali DMA
  151.                 ; audio, ma solo dalla routine di depack del
  152.                 ; processore. Quindi, basta un DATA (non _C!)
  153.  
  154.  
  155. *****************************************************************************
  156. ;    Dove saranno scompattati i samples (section bss in chip ram!)
  157. *****************************************************************************
  158.  
  159.     section    smp,bss_c
  160.  
  161. samples:
  162.     ds.b    132112    ; lunghezza riportata dal p61con
  163.  
  164.     end
  165.  
  166. Questo esempio e' come quello precedente, solo che il modulo ha i sample
  167. compressi (opzione "Pack Samples" attiva, ma senza "Delta" attivo, che pero'
  168. che sia attivo o no ho notato che non cambia quasi niente!!!)
  169. Prima di prendere la decisione di compattare il sample, pensateci due o tre
  170. volte, infatti occorre usare piu' memoria, per creare un buffer dove mettere
  171. i sample scompattati, si perde del tempo nello scompattarli, e si puo' perdere
  172. qualita' audio. A tal proposito, se si sceglie di compattare i sample di un
  173. modulo, appare un requester che ci permette di scegliere sample per sample
  174. quali compattare e quali no, e di ascoltare l'originale e l'eventuale versione
  175. compattata. Ascoltando i vari sample in versione normale e compattata noterete
  176. che alcuni in particolare perdono molto di qualita'.......
  177.  
  178.