home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC Interdit
/
pc-interdit.iso
/
sound
/
sbmod
/
modmix.asm
< prev
next >
Wrap
Assembly Source File
|
1994-10-13
|
3KB
|
159 lines
.386
.MODEL TPascal
b equ byte ptr
w equ word ptr
d equ dword ptr
.DATA
extrn voix_actuelle : word;
extrn calc_size : word;
extrn Mixed_data : dword;
extrn Mixed_posi : word;
extrn Mixed_data_st : dword;
extrn Mixingproc_voix : dword;
extrn Voixvide : dword;
extrn Longueur_voix : dword
extrn Position_voix : dword
extrn Loop_Longueur_voix : dword
extrn Loop_Start_Voix : dword
extrn Segment_Voix : dword
extrn Notvol_Voix : dword
extrn Incval_Voix : dword
.CODE
public Voix_normale
Voix_normale proc pascal ;voix_actuelle : word;
pusha
mov si,voix_actuelle
dec si
shl si,2 ; Accès au DWord
mov cx,calc_size
@Loop_Charge:
;{ La voix est parvenue à son terme ? }
mov bx,w Longueur_voix[si]
sub bx,20
cmp bx,word ptr Position_voix[si+2]
ja @Voix_non_au_terme
;{ Voix à son terme entre-t-elle dans un loop ? }
cmp Loop_Longueur_voix[si],10
jae @Voix_en_boucle
;{Voix au terme et non en boucle => on sort }
mov eax,Voixvide
mov Mixingproc_voix[si],eax
mov Notvol_Voix[si],0
jmp @fin_Voix_normal
; {Paramètres pour voix1 au début de la boucle }
@Voix_en_boucle:
mov bx,w Loop_Start_Voix[si]
mov word ptr Position_voix[si + 2],bx
; {Charge un octet à partir du sample Voix1 }
@Voix_non_au_terme:
mov bx,w Segment_Voix[si]
mov es,bx
mov bx,word ptr Position_voix[si + 2]
mov al,es:[bx]
sub al,128
mul b Notvol_Voix[si]
shr ax,6
@Voix_Sortie:
les di,mixed_data
add di,mixed_posi
add es:[di],ax
add mixed_posi,2
; {Redéfinir le pointeur }
mov ebx,Incval_Voix[si]
add dword ptr Position_voix[si],ebx
loop @Loop_Charge
@fin_Voix_normal:
popa
ret
Voix_normale endp
public Voix_normale_st
Voix_normale_st proc pascal ;voix_actuelle : word;
pusha
mov si,voix_actuelle
dec si
shl si,2
mov cx,calc_size
@loop_Charge_st:
;{ La voix est parvenue à son terme ? }
mov bx,w Longueur_voix[si]
sub bx,20
cmp bx,word ptr Position_voix[si+2]
ja @Voix_non_au_terme_st
;{ Voix à son terme entre-t-elle dans un loop ? }
cmp Loop_Longueur_voix[si],10
jae @Voix_en_boucle_st
;{Voix au terme et non en boucle => on sort }
mov eax,Voixvide
mov Mixingproc_voix[si],eax
mov ax,127
mov Notvol_Voix[si],0
jmp @fin_Voix_normale_st
; {Paramètres pour voix1 au début de la boucle }
@Voix_en_boucle_st:
mov bx,w Loop_Start_Voix[si]
mov word ptr Position_voix[si + 2],bx
; {Charge un octet à partir du sample Voix1 }
@Voix_non_au_terme_st:
mov bx,w Segment_Voix[si]
mov es,bx
mov bx,word ptr Position_voix[si + 2]
mov al,es:[bx]
sub al,128
mul b Notvol_Voix[si]
shr ax,6
@Voix_Sortie_st:
les di,mixed_data_st
add di,mixed_posi
add es:[di],ax
add mixed_posi,2
; {Redéfinir le pointeur }
mov ebx,Incval_Voix[si]
add dword ptr Position_voix[si],ebx
loop @loop_Charge_st
@fin_Voix_normale_st:
popa
ret
Voix_normale_st endp
public Voix_vide
Voix_vide proc pascal
ret
Voix_vide endp
END