home *** CD-ROM | disk | FTP | other *** search
/ PC Interdit / pc-interdit.iso / sound / sbmod / modmix.asm < prev    next >
Assembly Source File  |  1994-10-13  |  3KB  |  159 lines

  1. .386
  2. .MODEL TPascal
  3.   b equ byte ptr
  4.   w equ word ptr
  5.   d equ dword ptr
  6.  
  7.  
  8. .DATA
  9.  
  10. extrn voix_actuelle       : word;
  11. extrn calc_size           : word;
  12. extrn Mixed_data          : dword;
  13. extrn Mixed_posi          : word;
  14. extrn Mixed_data_st       : dword;
  15.  
  16. extrn Mixingproc_voix     : dword;
  17. extrn Voixvide            : dword;
  18.  
  19. extrn Longueur_voix       : dword
  20. extrn Position_voix       : dword
  21. extrn Loop_Longueur_voix  : dword
  22. extrn Loop_Start_Voix   : dword
  23. extrn Segment_Voix      : dword
  24. extrn Notvol_Voix       : dword
  25. extrn Incval_Voix       : dword
  26.  
  27.  
  28. .CODE
  29.  
  30.  
  31. public Voix_normale
  32. Voix_normale proc pascal ;voix_actuelle : word;
  33.  pusha
  34.  mov si,voix_actuelle
  35.  dec si
  36.  shl si,2                    ; Accès au DWord     
  37.  
  38.  mov cx,calc_size
  39.  
  40. @Loop_Charge:
  41.  
  42. ;{ La voix est parvenue à son terme ? }
  43.   mov bx,w Longueur_voix[si]
  44.   sub bx,20
  45.   cmp bx,word ptr Position_voix[si+2]
  46.   ja  @Voix_non_au_terme
  47.  
  48. ;{ Voix à son terme entre-t-elle dans un loop ? }
  49.   cmp Loop_Longueur_voix[si],10
  50.   jae @Voix_en_boucle
  51.  
  52. ;{Voix au terme et non en boucle  => on sort }
  53.   mov eax,Voixvide
  54.   mov Mixingproc_voix[si],eax
  55.   mov Notvol_Voix[si],0
  56.   jmp @fin_Voix_normal
  57.  
  58. ; {Paramètres pour voix1 au début de la boucle }
  59. @Voix_en_boucle:
  60.   mov bx,w Loop_Start_Voix[si]
  61.   mov word ptr Position_voix[si + 2],bx
  62.  
  63. ; {Charge un octet à partir du sample Voix1 }
  64. @Voix_non_au_terme:
  65.   mov bx,w Segment_Voix[si]
  66.   mov es,bx
  67.   mov bx,word ptr Position_voix[si + 2]
  68.   mov al,es:[bx]
  69.   sub al,128
  70.   mul b Notvol_Voix[si]
  71.   shr ax,6
  72.  
  73. @Voix_Sortie:
  74.   les di,mixed_data
  75.   add di,mixed_posi
  76.   add es:[di],ax
  77.   add mixed_posi,2
  78.  
  79. ; {Redéfinir le pointeur }
  80.   mov ebx,Incval_Voix[si]
  81.   add dword ptr Position_voix[si],ebx
  82.  
  83.   loop @Loop_Charge
  84.  
  85. @fin_Voix_normal:
  86.   popa
  87.   ret
  88. Voix_normale endp
  89.  
  90.  
  91.  
  92. public Voix_normale_st
  93. Voix_normale_st proc pascal ;voix_actuelle : word;
  94.  pusha
  95.  mov si,voix_actuelle
  96.  dec si
  97.  shl si,2   
  98.  
  99.  mov cx,calc_size
  100.  
  101. @loop_Charge_st:
  102.  
  103. ;{ La voix est parvenue à son terme ? }
  104.   mov bx,w Longueur_voix[si]
  105.   sub bx,20
  106.   cmp bx,word ptr Position_voix[si+2]
  107.   ja  @Voix_non_au_terme_st
  108.  
  109. ;{ Voix à son terme entre-t-elle dans un loop ? }
  110.   cmp Loop_Longueur_voix[si],10
  111.   jae @Voix_en_boucle_st
  112.  
  113. ;{Voix au terme et non en boucle  => on sort }
  114.   mov eax,Voixvide
  115.   mov Mixingproc_voix[si],eax
  116.   mov ax,127
  117.   mov Notvol_Voix[si],0
  118.   jmp @fin_Voix_normale_st
  119.  
  120. ; {Paramètres pour voix1 au début de la boucle }
  121. @Voix_en_boucle_st:
  122.   mov bx,w Loop_Start_Voix[si]
  123.   mov word ptr Position_voix[si + 2],bx
  124.  
  125. ; {Charge un octet à partir du sample Voix1 }
  126. @Voix_non_au_terme_st:
  127.   mov bx,w Segment_Voix[si]
  128.   mov es,bx
  129.   mov bx,word ptr Position_voix[si + 2]
  130.   mov al,es:[bx]
  131.   sub al,128
  132.   mul b Notvol_Voix[si]
  133.   shr ax,6
  134.  
  135. @Voix_Sortie_st:
  136.   les di,mixed_data_st
  137.   add di,mixed_posi
  138.   add es:[di],ax
  139.   add mixed_posi,2
  140.  
  141. ; {Redéfinir le pointeur }
  142.   mov ebx,Incval_Voix[si]
  143.   add dword ptr Position_voix[si],ebx
  144.  
  145.   loop @loop_Charge_st
  146.  
  147. @fin_Voix_normale_st:
  148.   popa
  149.   ret
  150. Voix_normale_st endp
  151.  
  152.  
  153. public Voix_vide
  154. Voix_vide proc pascal
  155.   ret
  156. Voix_vide endp
  157.  
  158. END
  159.