Fixed dos sound

This commit is contained in:
pagefault
2003-04-12 03:21:25 +00:00
parent c48bbd08bb
commit 98d4616568
2 changed files with 283 additions and 21 deletions

View File

@@ -670,13 +670,13 @@ NEWSYM AdjustFrequency
mov [SBToSPC],eax mov [SBToSPC],eax
mov [SBRateb],eax mov [SBRateb],eax
XOr EDX, EDX xor edx,edx
Mov EBX, EAX mov ebx,eax
Mov EAX, 32000 mov eax,32000
ShLD EDX, EAX, 20 shld edx,eax,20
ShL EAX, 20 shl eax,20
Div EBX div ebx
Mov [dspPAdj], EAX mov [dspPAdj],eax
; Init all rates ; Init all rates
mov esi,EchoRate mov esi,EchoRate
@@ -1307,7 +1307,11 @@ NEWSYM InitSPC
mov eax,Invalidopcode mov eax,Invalidopcode
mov ebp,0 mov ebp,0
.loop .loop
%ifdef __MSDOS__
mov [ds:opcjmptab+ebp],eax
%else
mov [opcjmptab+ebp],eax mov [opcjmptab+ebp],eax
%endif
add ebp,4 add ebp,4
dec ecx dec ecx
jnz .loop jnz .loop
@@ -3290,9 +3294,15 @@ section .text
ALIGN16 ALIGN16
NEWSYM NonEchoMonoPM NEWSYM NonEchoMonoPM
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0Volume+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
mov edx,[ds:BRRPlace0+ebp*8+3]
%else
mov al,[Voice0Volume+ebp] mov al,[Voice0Volume+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
mov edx,[BRRPlace0+ebp*8+3] mov edx,[BRRPlace0+ebp*8+3]
%endif
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
cmp byte[UniqueSoundv],0 cmp byte[UniqueSoundv],0
je .NotNoise1 je .NotNoise1
@@ -3319,15 +3329,25 @@ NEWSYM NonEchoMonoPM
add [DSPBuffer+esi*2],eax add [DSPBuffer+esi*2],eax
add esi,2 add esi,2
CalculatePMod ebp CalculatePMod ebp
%ifdef __MSDOS__
add [ds:BRRPlace0+ebp*8],ebx
%else
add [BRRPlace0+ebp*8],ebx add [BRRPlace0+ebp*8],ebx
%endif
ret ret
ALIGN16 ALIGN16
NEWSYM NonEchoStereoPM NEWSYM NonEchoStereoPM
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0VolumeR+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
mov edx,[ds:BRRPlace0+ebp*8+3]
%else
mov al,[Voice0VolumeR+ebp] mov al,[Voice0VolumeR+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
mov edx,[BRRPlace0+ebp*8+3] mov edx,[BRRPlace0+ebp*8+3]
%endif
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
cmp byte[UniqueSoundv],0 cmp byte[UniqueSoundv],0
je .NotNoise1b je .NotNoise1b
@@ -3356,7 +3376,11 @@ NEWSYM NonEchoStereoPM
add dword [DSPBuffer+esi*4],eax add dword [DSPBuffer+esi*4],eax
xor eax,eax xor eax,eax
mov al,[Voice0VolumeL+ebp] mov al,[Voice0VolumeL+ebp]
%ifdef __MSDOS__
mov ah,[ds:Voice0EnvInc+ebp*4+2]
%else
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
%endif
add esi,2 add esi,2
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
pop eax pop eax
@@ -3367,15 +3391,25 @@ NEWSYM NonEchoStereoPM
movsx eax,ax movsx eax,ax
add dword [DSPBuffer+esi*4-4],eax add dword [DSPBuffer+esi*4-4],eax
CalculatePMod ebp CalculatePMod ebp
%ifdef __MSDOS__
add [ds:BRRPlace0+ebp*8],ebx
%else
add [BRRPlace0+ebp*8],ebx add [BRRPlace0+ebp*8],ebx
ret %endif
ret
ALIGN16 ALIGN16
NEWSYM EchoMonoPM NEWSYM EchoMonoPM
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0Volume+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
mov edx,[ds:BRRPlace0+ebp*8+3]
%else
mov al,[Voice0Volume+ebp] mov al,[Voice0Volume+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
mov edx,[BRRPlace0+ebp*8+3] mov edx,[BRRPlace0+ebp*8+3]
%endif
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
cmp byte[UniqueSoundv],0 cmp byte[UniqueSoundv],0
je .NotNoise1 je .NotNoise1
@@ -3404,8 +3438,13 @@ NEWSYM EchoMonoPM
add [DSPBuffer+esi*2],eax add [DSPBuffer+esi*2],eax
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0Volumee+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
%else
mov al,[Voice0Volumee+ebp] mov al,[Voice0Volumee+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
%endif
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
pop eax pop eax
@@ -3418,15 +3457,25 @@ NEWSYM EchoMonoPM
add esi,2 add esi,2
CalculatePMod ebp CalculatePMod ebp
%ifdef __MSDOS__
add [ds:BRRPlace0+ebp*8],ebx
%else
add [BRRPlace0+ebp*8],ebx add [BRRPlace0+ebp*8],ebx
ret %endif
ret
ALIGN16 ALIGN16
NEWSYM EchoStereoPM NEWSYM EchoStereoPM
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0VolumeR+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
mov edx,[ds:BRRPlace0+ebp*8+3]
%else
mov al,[Voice0VolumeR+ebp] mov al,[Voice0VolumeR+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
mov edx,[BRRPlace0+ebp*8+3] mov edx,[BRRPlace0+ebp*8+3]
%endif
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
cmp byte[UniqueSoundv],0 cmp byte[UniqueSoundv],0
je .NotNoise1b je .NotNoise1b
@@ -3454,9 +3503,15 @@ NEWSYM EchoStereoPM
movsx eax,ax movsx eax,ax
add dword [DSPBuffer+esi*4],eax add dword [DSPBuffer+esi*4],eax
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0VolumeRe+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
mov cx,[ds:VolumeConvTable+eax*2]
%else
mov al,[Voice0VolumeRe+ebp] mov al,[Voice0VolumeRe+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
%endif
mov eax,ebx mov eax,ebx
imul cx imul cx
shr ax,7 shr ax,7
@@ -3466,8 +3521,13 @@ NEWSYM EchoStereoPM
add [EchoBuffer+esi*4],eax add [EchoBuffer+esi*4],eax
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0VolumeL+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
%else
mov al,[Voice0VolumeL+ebp] mov al,[Voice0VolumeL+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
%endif
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
mov eax,ebx mov eax,ebx
@@ -3478,8 +3538,13 @@ NEWSYM EchoStereoPM
movsx eax,ax movsx eax,ax
add dword [DSPBuffer+esi*4+4],eax add dword [DSPBuffer+esi*4+4],eax
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0VolumeLe+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
%else
mov al,[Voice0VolumeLe+ebp] mov al,[Voice0VolumeLe+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
%endif
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
mov eax,ebx mov eax,ebx
@@ -3488,13 +3553,21 @@ NEWSYM EchoStereoPM
add dl,dl add dl,dl
or ah,dl or ah,dl
movsx eax,ax movsx eax,ax
%ifdef __MSDOS__
mov ebx,[ds:Voice0Freq+ebp*4]
%else
mov ebx,[Voice0Freq+ebp*4] mov ebx,[Voice0Freq+ebp*4]
%endif
add [EchoBuffer+esi*4+4],eax add [EchoBuffer+esi*4+4],eax
add esi,2 add esi,2
CalculatePMod ebp CalculatePMod ebp
%ifdef __MSDOS__
add [ds:BRRPlace0+ebp*8],ebx
%else
add [BRRPlace0+ebp*8],ebx add [BRRPlace0+ebp*8],ebx
ret %endif
ret
; interpolation is only done when the rate < mixRate, so ebx always contains ; interpolation is only done when the rate < mixRate, so ebx always contains
; less than 100000h. ; less than 100000h.
@@ -3510,19 +3583,31 @@ SECTION .text
ALIGN16 ALIGN16
DSPInterpolate_4 DSPInterpolate_4
push edi push edi
%ifdef __MSDOS__
lea edi,[ds:ebp*2+ebp]
%else
lea edi,[ebp*2+ebp] lea edi,[ebp*2+ebp]
%endif
shl edi,5 shl edi,5
xor ebx,ebx xor ebx,ebx
%ifdef __MSDOS__
mov bl,[ds:BRRPlace0+ebp*8+2]
%else
mov bl,[BRRPlace0+ebp*8+2] mov bl,[BRRPlace0+ebp*8+2]
%endif
mov ax,[PSampleBuf+edx*4+8+edi] mov ax,[PSampleBuf+edx*4+8+edi]
mov dx,[DSPInterP+ebx*2+256*6] mov dx,[DSPInterP+ebx*2+256*6]
imul dx imul dx
shl edx,16 shl edx,16
mov dx,ax mov dx,ax
%ifdef __MSDOS__
mov eax,[ds:BRRPlace0+ebp*8+3]
%else
mov eax,[BRRPlace0+ebp*8+3] mov eax,[BRRPlace0+ebp*8+3]
%endif
mov ecx,edx mov ecx,edx
mov ax,[PSampleBuf+eax*4+12+edi] mov ax,[PSampleBuf+eax*4+12+edi]
@@ -3530,7 +3615,11 @@ DSPInterpolate_4
imul dx imul dx
shl edx,16 shl edx,16
mov dx,ax mov dx,ax
%ifdef __MSDOS__
mov eax,[ds:BRRPlace0+ebp*8+3]
%else
mov eax,[BRRPlace0+ebp*8+3] mov eax,[BRRPlace0+ebp*8+3]
%endif
add ecx,edx add ecx,edx
mov ax,[PSampleBuf+eax*4+16+edi] mov ax,[PSampleBuf+eax*4+16+edi]
@@ -3538,7 +3627,11 @@ DSPInterpolate_4
imul dx imul dx
shl edx,16 shl edx,16
mov dx,ax mov dx,ax
%ifdef __MSDOS__
mov eax,[ds:BRRPlace0+ebp*8+3]
%else
mov eax,[BRRPlace0+ebp*8+3] mov eax,[BRRPlace0+ebp*8+3]
%endif
add ecx,edx add ecx,edx
mov ax,[PSampleBuf+eax*4+20+edi] mov ax,[PSampleBuf+eax*4+20+edi]
@@ -3560,20 +3653,29 @@ DSPInterpolate_4
.sat2 .sat2
mov ax,cx mov ax,cx
pop edi pop edi
ret ret
ALIGN16 ALIGN16
DSPInterpolate_8: DSPInterpolate_8:
push edi push edi
%ifdef __MSDOS__
lea edi,[ds:ebp*2+ebp]
%else
lea edi,[ebp*2+ebp] lea edi,[ebp*2+ebp]
%endif
shl edi,5 shl edi,5
%if 1 %if 1
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov ebx,[ds:BRRPlace0+ebp*8]
mov al,[ds:BRRPlace0+ebp*8+3]
%else
mov ebx,[BRRPlace0+ebp*8] mov ebx,[BRRPlace0+ebp*8]
mov al,[BRRPlace0+ebp*8+3] mov al,[BRRPlace0+ebp*8+3]
%endif
shl eax,2 shl eax,2
and ebx,0FFFFFFh and ebx,0FFFFFFh
add ebx,1000h add ebx,1000h
@@ -3611,11 +3713,19 @@ ALIGN16
DSPInterpolate_4_mmx: DSPInterpolate_4_mmx:
push edi push edi
%ifdef __MSDOS__
lea edi,[ds:ebp*2+ebp]
%else
lea edi,[ebp*2+ebp] lea edi,[ebp*2+ebp]
%endif
shl edi,5 shl edi,5
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:BRRPlace0+ebp*8+2]
%else
mov al,[BRRPlace0+ebp*8+2] mov al,[BRRPlace0+ebp*8+2]
%endif
movq mm0,[edx*4+PSampleBuf+edi+8] movq mm0,[edx*4+PSampleBuf+edi+8]
packssdw mm0,[edx*4+PSampleBuf+edi+16] packssdw mm0,[edx*4+PSampleBuf+edi+16]
movq mm1,[DSPInterP+eax*8] movq mm1,[DSPInterP+eax*8]
@@ -3632,7 +3742,11 @@ DSPInterpolate_4_mmx:
ALIGN16 ALIGN16
NEWSYM NonEchoMonoInterpolated NEWSYM NonEchoMonoInterpolated
%ifdef __MSDOS__
mov edx,[ds:BRRPlace0+ebp*8+3]
%else
mov edx,[BRRPlace0+ebp*8+3] mov edx,[BRRPlace0+ebp*8+3]
%endif
cmp byte[UniqueSoundv],0 cmp byte[UniqueSoundv],0
je .NotNoise1 je .NotNoise1
powshithack powshithack
@@ -3654,9 +3768,15 @@ NEWSYM NonEchoMonoInterpolated
; DSPInterP (Samp*i+Samp2*i2+Samp3*i3+Samp4*i3)>>11 ; DSPInterP (Samp*i+Samp2*i2+Samp3*i3+Samp4*i3)>>11
.AfterNoise1 .AfterNoise1
xor edx,edx xor edx,edx
%ifdef __MSDOS__
mov dl,[ds:Voice0Volume+ebp]
mov dh,[ds:Voice0EnvInc+ebp*4+2]
mov ebx,[ds:Voice0Freq+ebp*4]
%else
mov dl,[Voice0Volume+ebp] mov dl,[Voice0Volume+ebp]
mov dh,[Voice0EnvInc+ebp*4+2] mov dh,[Voice0EnvInc+ebp*4+2]
mov ebx,[Voice0Freq+ebp*4] mov ebx,[Voice0Freq+ebp*4]
%endif
mov cx,[VolumeConvTable+edx*2] mov cx,[VolumeConvTable+edx*2]
imul cx imul cx
shr ax,7 shr ax,7
@@ -3665,12 +3785,20 @@ NEWSYM NonEchoMonoInterpolated
movsx eax,ax movsx eax,ax
add [DSPBuffer+esi*2],eax add [DSPBuffer+esi*2],eax
add esi,2 add esi,2
%ifdef __MSDOS__
add [ds:BRRPlace0+ebp*8],ebx
%else
add [BRRPlace0+ebp*8],ebx add [BRRPlace0+ebp*8],ebx
ret %endif
ret
ALIGN16 ALIGN16
NEWSYM EchoMonoInterpolated NEWSYM EchoMonoInterpolated
%ifdef __MSDOS__
mov edx,[ds:BRRPlace0+ebp*8+3]
%else
mov edx,[BRRPlace0+ebp*8+3] mov edx,[BRRPlace0+ebp*8+3]
%endif
cmp byte[UniqueSoundv],0 cmp byte[UniqueSoundv],0
je .NotNoise1 je .NotNoise1
powshithack powshithack
@@ -3691,9 +3819,15 @@ NEWSYM EchoMonoInterpolated
; mov ax,[edi+edx*2] ; mov ax,[edi+edx*2]
.AfterNoise1 .AfterNoise1
xor edx,edx xor edx,edx
%ifdef __MSDOS__
mov dl,[ds:Voice0Volume+ebp]
mov dh,[ds:Voice0EnvInc+ebp*4+2]
mov ebx,[ds:Voice0Freq+ebp*4]
%else
mov dl,[Voice0Volume+ebp] mov dl,[Voice0Volume+ebp]
mov dh,[Voice0EnvInc+ebp*4+2] mov dh,[Voice0EnvInc+ebp*4+2]
mov ebx,[Voice0Freq+ebp*4] mov ebx,[Voice0Freq+ebp*4]
%endif
mov cx,[VolumeConvTable+edx*2] mov cx,[VolumeConvTable+edx*2]
add [BRRPlace0+ebp*8],ebx ; *** add [BRRPlace0+ebp*8],ebx ; ***
@@ -3708,8 +3842,13 @@ NEWSYM EchoMonoInterpolated
add [DSPBuffer+esi*2-4],eax add [DSPBuffer+esi*2-4],eax
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0Volumee+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
%else
mov al,[Voice0Volumee+ebp] mov al,[Voice0Volumee+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
%endif
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
mov eax,ebx mov eax,ebx
@@ -3720,11 +3859,15 @@ NEWSYM EchoMonoInterpolated
or ah,dl or ah,dl
movsx eax,ax movsx eax,ax
add [EchoBuffer+esi*2-4],eax add [EchoBuffer+esi*2-4],eax
ret ret
ALIGN16 ALIGN16
NEWSYM NonEchoStereoInterpolated NEWSYM NonEchoStereoInterpolated
%ifdef __MSDOS__
mov edx,[ds:BRRPlace0+ebp*8+3]
%else
mov edx,[BRRPlace0+ebp*8+3] mov edx,[BRRPlace0+ebp*8+3]
%endif
cmp byte[UniqueSoundv],0 cmp byte[UniqueSoundv],0
je .NotNoise1b je .NotNoise1b
powshithack powshithack
@@ -3743,9 +3886,15 @@ NEWSYM NonEchoStereoInterpolated
call [DSPInterpolate]; %1 call [DSPInterpolate]; %1
.AfterNoise1b .AfterNoise1b
xor edx,edx xor edx,edx
%ifdef __MSDOS__
mov dl,[ds:Voice0VolumeR+ebp]
mov dh,[ds:Voice0EnvInc+ebp*4+2]
mov ebx,[ds:Voice0Freq+ebp*4]
%else
mov dl,[Voice0VolumeR+ebp] mov dl,[Voice0VolumeR+ebp]
mov dh,[Voice0EnvInc+ebp*4+2] mov dh,[Voice0EnvInc+ebp*4+2]
mov ebx,[Voice0Freq+ebp*4] mov ebx,[Voice0Freq+ebp*4]
%endif
mov cx,[VolumeConvTable+edx*2] mov cx,[VolumeConvTable+edx*2]
movsx eax,ax movsx eax,ax
@@ -3757,8 +3906,13 @@ NEWSYM NonEchoStereoInterpolated
movsx eax,ax movsx eax,ax
add dword [DSPBuffer+esi*4],eax add dword [DSPBuffer+esi*4],eax
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0VolumeL+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
%else
mov al,[Voice0VolumeL+ebp] mov al,[Voice0VolumeL+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
%endif
add esi,2 add esi,2
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
pop eax pop eax
@@ -3768,12 +3922,20 @@ NEWSYM NonEchoStereoInterpolated
or ah,dl or ah,dl
movsx eax,ax movsx eax,ax
add dword [DSPBuffer+esi*4-4],eax add dword [DSPBuffer+esi*4-4],eax
%ifdef __MSDOS__
add [BRRPlace0+ebp*8],ebx add [BRRPlace0+ebp*8],ebx
ret %else
add [BRRPlace0+ebp*8],ebx
%endif
ret
ALIGN16 ALIGN16
NEWSYM EchoStereoInterpolated NEWSYM EchoStereoInterpolated
%ifdef __MSDOS__
mov edx,[ds:BRRPlace0+ebp*8+3]
%else
mov edx,[BRRPlace0+ebp*8+3] mov edx,[BRRPlace0+ebp*8+3]
%endif
cmp byte[UniqueSoundv],0 cmp byte[UniqueSoundv],0
je .NotNoise1b je .NotNoise1b
powshithack powshithack
@@ -3793,8 +3955,13 @@ NEWSYM EchoStereoInterpolated
call [DSPInterpolate] ;%1 call [DSPInterpolate] ;%1
.AfterNoise1b .AfterNoise1b
xor edx,edx xor edx,edx
%ifdef __MSDOS__
mov dl,[ds:Voice0VolumeR+ebp]
mov dh,[ds:Voice0EnvInc+ebp*4+2]
%else
mov dl,[Voice0VolumeR+ebp] mov dl,[Voice0VolumeR+ebp]
mov dh,[Voice0EnvInc+ebp*4+2] mov dh,[Voice0EnvInc+ebp*4+2]
%endif
mov cx,[VolumeConvTable+edx*2] mov cx,[VolumeConvTable+edx*2]
movsx eax,ax movsx eax,ax
@@ -3806,8 +3973,13 @@ NEWSYM EchoStereoInterpolated
movsx eax,ax movsx eax,ax
add dword [DSPBuffer+esi*4],eax add dword [DSPBuffer+esi*4],eax
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0VolumeRe+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
%else
mov al,[Voice0VolumeRe+ebp] mov al,[Voice0VolumeRe+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
%endif
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
mov eax,ebx mov eax,ebx
imul cx imul cx
@@ -3818,8 +3990,13 @@ NEWSYM EchoStereoInterpolated
add [EchoBuffer+esi*4],eax add [EchoBuffer+esi*4],eax
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0VolumeL+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
%else
mov al,[Voice0VolumeL+ebp] mov al,[Voice0VolumeL+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
%endif
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
mov eax,ebx mov eax,ebx
@@ -3830,8 +4007,13 @@ NEWSYM EchoStereoInterpolated
movsx eax,ax movsx eax,ax
add dword [DSPBuffer+esi*4+4],eax add dword [DSPBuffer+esi*4+4],eax
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0VolumeLe+ebp]
mov ah,[dS:Voice0EnvInc+ebp*4+2]
%else
mov al,[Voice0VolumeLe+ebp] mov al,[Voice0VolumeLe+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
%endif
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
mov eax,ebx mov eax,ebx
@@ -3840,19 +4022,33 @@ NEWSYM EchoStereoInterpolated
add dl,dl add dl,dl
or ah,dl or ah,dl
movsx eax,ax movsx eax,ax
%ifdef __MSDOS__
mov ebx,[ds:Voice0Freq+ebp*4]
%else
mov ebx,[Voice0Freq+ebp*4] mov ebx,[Voice0Freq+ebp*4]
%endif
add [EchoBuffer+esi*4+4],eax add [EchoBuffer+esi*4+4],eax
add esi,2 add esi,2
%ifdef __MSDOS__
add [BRRPlace0+ebp*8],ebx add [BRRPlace0+ebp*8],ebx
ret %else
add [BRRPlace0+ebp*8],ebx
%endif
ret
ALIGN16 ALIGN16
NEWSYM NonEchoMono NEWSYM NonEchoMono
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0Volume+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
mov edx,[ds:BRRPlace0+ebp*8+3]
%else
mov al,[Voice0Volume+ebp] mov al,[Voice0Volume+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
mov edx,[BRRPlace0+ebp*8+3] mov edx,[BRRPlace0+ebp*8+3]
%endif
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
cmp byte[UniqueSoundv],0 cmp byte[UniqueSoundv],0
je .NotNoise1 je .NotNoise1
@@ -3878,15 +4074,25 @@ NEWSYM NonEchoMono
movsx eax,ax movsx eax,ax
add [DSPBuffer+esi*2],eax add [DSPBuffer+esi*2],eax
add esi,2 add esi,2
%ifdef __MSDOS__
add [ds:BRRPlace0+ebp*8],ebx
%else
add [BRRPlace0+ebp*8],ebx add [BRRPlace0+ebp*8],ebx
ret %endif
ret
ALIGN16 ALIGN16
NEWSYM NonEchoStereo NEWSYM NonEchoStereo
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0VolumeR+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
mov edx,[ds:BRRPlace0+ebp*8+3]
%else
mov al,[Voice0VolumeR+ebp] mov al,[Voice0VolumeR+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
mov edx,[BRRPlace0+ebp*8+3] mov edx,[BRRPlace0+ebp*8+3]
%endif
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
cmp byte[UniqueSoundv],0 cmp byte[UniqueSoundv],0
je .NotNoise1b je .NotNoise1b
@@ -3914,8 +4120,13 @@ NEWSYM NonEchoStereo
movsx eax,ax movsx eax,ax
add dword [DSPBuffer+esi*4],eax add dword [DSPBuffer+esi*4],eax
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0VolumeL+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
%else
mov al,[Voice0VolumeL+ebp] mov al,[Voice0VolumeL+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
%endif
add esi,2 add esi,2
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
pop eax pop eax
@@ -3925,15 +4136,25 @@ NEWSYM NonEchoStereo
or ah,dl or ah,dl
movsx eax,ax movsx eax,ax
add dword [DSPBuffer+esi*4-4],eax add dword [DSPBuffer+esi*4-4],eax
%ifdef __MSDOS__
add [ds:BRRPlace0+ebp*8],ebx
%else
add [BRRPlace0+ebp*8],ebx add [BRRPlace0+ebp*8],ebx
ret %endif
ret
ALIGN16 ALIGN16
NEWSYM EchoMono NEWSYM EchoMono
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0Volume+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
mov edx,[ds:BRRPlace0+ebp*8+3]
%else
mov al,[Voice0Volume+ebp] mov al,[Voice0Volume+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
mov edx,[BRRPlace0+ebp*8+3] mov edx,[BRRPlace0+ebp*8+3]
%endif
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
cmp byte[UniqueSoundv],0 cmp byte[UniqueSoundv],0
je .NotNoise1 je .NotNoise1
@@ -3962,8 +4183,14 @@ NEWSYM EchoMono
add [DSPBuffer+esi*2],eax add [DSPBuffer+esi*2],eax
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0Volumee+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
%else
mov al,[Voice0Volumee+ebp] mov al,[Voice0Volumee+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
%endif
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
pop eax pop eax
@@ -3975,15 +4202,25 @@ NEWSYM EchoMono
add [EchoBuffer+esi*2],eax add [EchoBuffer+esi*2],eax
add esi,2 add esi,2
%ifdef __MSDOS__
add [BRRPlace0+ebp*8],ebx add [BRRPlace0+ebp*8],ebx
ret %else
add [BRRPlace0+ebp*8],ebx
%endif
ret
ALIGN16 ALIGN16
NEWSYM EchoStereo NEWSYM EchoStereo
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0VolumeR+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
mov edx,[ds:BRRPlace0+ebp*8+3]
%else
mov al,[Voice0VolumeR+ebp] mov al,[Voice0VolumeR+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
mov edx,[BRRPlace0+ebp*8+3] mov edx,[BRRPlace0+ebp*8+3]
%endif
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
cmp byte[UniqueSoundv],0 cmp byte[UniqueSoundv],0
je .NotNoise1b je .NotNoise1b
@@ -4011,8 +4248,13 @@ NEWSYM EchoStereo
movsx eax,ax movsx eax,ax
add dword [DSPBuffer+esi*4],eax add dword [DSPBuffer+esi*4],eax
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0VolumeRe+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
%else
mov al,[Voice0VolumeRe+ebp] mov al,[Voice0VolumeRe+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
%endif
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
mov eax,ebx mov eax,ebx
imul cx imul cx
@@ -4023,8 +4265,14 @@ NEWSYM EchoStereo
add [EchoBuffer+esi*4],eax add [EchoBuffer+esi*4],eax
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0VolumeL+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
%else
mov al,[Voice0VolumeL+ebp] mov al,[Voice0VolumeL+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
%endif
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
mov eax,ebx mov eax,ebx
@@ -4035,8 +4283,13 @@ NEWSYM EchoStereo
movsx eax,ax movsx eax,ax
add dword [DSPBuffer+esi*4+4],eax add dword [DSPBuffer+esi*4+4],eax
xor eax,eax xor eax,eax
%ifdef __MSDOS__
mov al,[ds:Voice0VolumeLe+ebp]
mov ah,[ds:Voice0EnvInc+ebp*4+2]
%else
mov al,[Voice0VolumeLe+ebp] mov al,[Voice0VolumeLe+ebp]
mov ah,[Voice0EnvInc+ebp*4+2] mov ah,[Voice0EnvInc+ebp*4+2]
%endif
mov cx,[VolumeConvTable+eax*2] mov cx,[VolumeConvTable+eax*2]
mov eax,ebx mov eax,ebx
@@ -4045,12 +4298,20 @@ NEWSYM EchoStereo
add dl,dl add dl,dl
or ah,dl or ah,dl
movsx eax,ax movsx eax,ax
%ifdef __MSDOS__
mov ebx,[ds:Voice0Freq+ebp*4]
%else
mov ebx,[Voice0Freq+ebp*4] mov ebx,[Voice0Freq+ebp*4]
%endif
add [EchoBuffer+esi*4+4],eax add [EchoBuffer+esi*4+4],eax
add esi,2 add esi,2
%ifdef __MSDOS__
add [ds:BRRPlace0+ebp*8],ebx
%else
add [BRRPlace0+ebp*8],ebx add [BRRPlace0+ebp*8],ebx
ret %endif
ret
%macro ProcessVoiceStuff 4 %macro ProcessVoiceStuff 4
mov ax,[DSPMem+02h+%1*10h] mov ax,[DSPMem+02h+%1*10h]

View File

@@ -563,8 +563,9 @@ NEWSYM SBHandler16
Startprocsbdata: Startprocsbdata:
push ebp
call ProcessSoundBuffer call ProcessSoundBuffer
pop ebp
pop es pop es
pop esi pop esi
pop edi pop edi