Added 8-point interpolation and new lowpass filter

This commit is contained in:
pagefault
2001-09-03 21:37:19 +00:00
parent ace679d23d
commit db6ce1cfd2
5 changed files with 719 additions and 119 deletions

View File

@@ -125,7 +125,7 @@ EXTSYM WDSPRegFC,WDSPRegFD,WDSPRegFE,WDSPRegFF,RaisePitch
EXTSYM delay
EXTSYM spcBuffera
EXTSYM DSPMem
EXTSYM InterSound
EXTSYM SoundInterpType
EXTSYM NoiseData,SoundCompD,Voice0Disable,csounddisable,dssel,spcRamcmp
EXTSYM cfgecho,Surround,SoundBufEn
EXTSYM echobuf,ENVDisable
@@ -170,8 +170,7 @@ tempstuff db 0
; If A is not zero, goto FFD6
; Jump to Address [0000]
ALIGN32
section .data
DSPInterP:
times 1024 dw 0
@@ -416,6 +415,9 @@ NEWSYM NoiseSpeeds
dd 800,1000,1300,1600,2000,2700,3200,4000,5300,6400,8000,10700,
dd 16000,32000
section .text
NEWSYM conv2speedb
.next
mov eax,[esi]
@@ -506,8 +508,12 @@ NEWSYM conv2speed
NEWSYM AdjustFrequency
cmp byte[UseCubicSpline],1
mov al,[SoundInterpType]
or al,al
je .notgaussian
cmp al,2
je .cubicspline
ja .notgaussian
; Copy from Gaussian to DSPInterP
mov ebx,DSPInterP
mov edx,DSPInterP+2046
@@ -1592,6 +1598,8 @@ NEWSYM DeInitSPC
out dx,al
ret
section .data
;SoundBlaster DSP Ports
NEWSYM SBPort, dw 220
NEWSYM SBInt, db 5+8
@@ -1601,6 +1609,7 @@ NEWSYM SBDMAPage, db 83
NEWSYM SBHDMA, db 0
NEWSYM SBHDMAPage, db 0
NEWSYM vibracard, db 0
dw 0 ; padding
; ViBRA16X fixes!
EXTSYM MsgCount ; points to counter
@@ -1608,6 +1617,8 @@ EXTSYM MessageOn ; points to "message" delay counter
EXTSYM Msgptr ; points to the message to be displayed
NEWSYM vibmsg, db 'VIBRA16X MODE ENABLED', 0
section .text
NEWSYM ResetSBDSP
mov dx,[SBPort]
add dl,06h
@@ -1648,7 +1659,9 @@ NEWSYM ResetSBDSP
int 21h ;to print a string
jmp DosExit
section .data
NEWSYM initfailed, db 'Sound card failed to initialize!',13,10,'$'
section .text
; Write AL into DSP port
NEWSYM WriteDSP
@@ -1688,17 +1701,21 @@ NEWSYM Interror
int 21h ;to print a string
call DosExit
section .data
.nohand db 'Cannot process interrupt handler!',13,10,'$'
NEWSYM oldhandSBs, dw 0
NEWSYM oldhandSBo, dd 0
NEWSYM SBswitch, db 0 ; which block to process next
PSampleBuf times 22*8 dd 0
PSampleBuf times 26*8 dd 0
NEWSYM LPFsample1, dd 0
NEWSYM LPFsample2, dd 0
NEWSYM DLPFsamples, times 8*26 dd 0
section .text
%macro ProcessA 0
shr al,4
%endmacro
@@ -1732,6 +1749,7 @@ NEWSYM LPFsample2, dd 0
add edx,eax
mov eax,[prev0]
mov [prev0],edx
mov [prev1],eax
cmp edx,-32768
jnl %%notless
@@ -1743,10 +1761,208 @@ NEWSYM LPFsample2, dd 0
mov edx,32767
mov byte[filteron],1
%%notgreater
movsx edx,dx
mov [prev0],edx
%endmacro
EXTSYM fir_downsample
%macro ProcessDynamicLowPass 0
mov ecx,[curvoice]
mov edx, [Voice0Freq+ecx*4]
cmp edx, dword 1000000h
ja %%DLPF
ret
%%DLPF
lea ebx,[ecx*4]
lea ebx,[ebx*4]
lea ecx,[ecx*4+ecx]
lea ebx,[ecx*2+ebx]
lea ebx,[DLPFsamples+ebx*4]
cmp byte[LowPassFilterType],3
je near %%DLPF_fir
DLPF_dynamic:
mov eax,[ebx+21*4]
mov [ebx],eax
mov eax,[ebx+22*4]
mov [ebx+1*4],eax
mov eax,[ebx+23*4]
mov [ebx+2*4],eax
mov eax,[ebx+24*4]
mov [ebx+3*4],eax
mov eax,[ebx+25*4]
mov [ebx+4*4],eax
sub edi,32
movsx eax,word[edi+22]
mov [ebx+21*4],eax
movsx eax,word[edi+24]
mov [ebx+22*4],eax
movsx eax,word[edi+26]
mov [ebx+23*4],eax
movsx eax,word[edi+28]
mov [ebx+24*4],eax
movsx eax,word[edi+30]
mov [ebx+25*4],eax
mov ecx,16
shr edx,24
cmp dl,2
jle %%dlpf_by_2
cmp dl,3
jle %%dlpf_by_3
cmp dl,4
jle %%dlpf_by_4
jmp %%dlpf_by_5
%%dlpf_by_2
mov eax,[ebx+4*4]
jmp Short %%dlpf_by_2_loop
ALIGN16
%%dlpf_by_2_loop
movsx edx,word[edi]
add eax,edx
sar eax,1
mov [edi],ax
mov eax,edx
add edi,2
dec ecx
jnz %%dlpf_by_2_loop
ret
%%dlpf_by_3
push ebx
mov eax,[ebx+3*4]
mov ebp,[ebx+4*4]
jmp Short %%dlpf_by_3_loop
ALIGN16
%%dlpf_by_3_loop
movsx ebx,word[edi]
add eax,ebx
add eax,ebp
mov edx,55555555h ; (1/3)
imul edx
mov [edi],dx
add edi,2
mov eax,ebp
mov ebp,ebx
dec ecx
jnz %%dlpf_by_3_loop
pop ebx
ret
%%dlpf_by_4
push ebx
mov ebp,[ebx+2*4]
mov edx,[ebx+3*4]
mov eax,[ebx+4*4]
jmp Short %%dlpf_by_4_loop
ALIGN16
%%dlpf_by_4_loop
movsx ebx,word[edi]
add eax,ebx
add eax,edx
add eax,ebp
sar eax,2
mov [edi],ax
add edi,2
mov eax,edx
mov edx,ebp
mov ebp,ebx
dec ecx
jnz %%dlpf_by_4_loop
pop ebx
ret
%%dlpf_by_5
push ebx
push ecx
mov ecx,[ebx+1*4]
mov ebp,[ebx+2*4]
mov esi,[ebx+3*4]
mov eax,[ebx+4*4]
jmp Short %%dlpf_by_5_loop
ALIGN16
%%dlpf_by_5_loop
movsx ebx,word[edi]
add eax,ebx
add eax,esi
add eax,ebp
add eax,ecx
mov edx,33333333h ; 1/5
mov [edi],dx
add edi,2
mov eax,esi
mov esi,ebp
mov ebp,ecx
mov ecx,ebx
dec dword [esp]
jnz %%dlpf_by_5_loop
pop ecx
pop ebx
ret
%%DLPF_fir
mov eax,[ebx+21*4]
mov [ebx],eax
mov eax,[ebx+22*4]
mov [ebx+4],eax
mov eax,[ebx+23*4]
mov [ebx+2*4],eax
mov eax,[ebx+24*4]
mov [ebx+3*4],eax
mov eax,[ebx+25*4]
mov [ebx+4*4],eax
sub edi,32
movsx eax,word[edi]
mov [ebx+5*4],eax
movsx eax,word[edi+2]
mov [ebx+6*4],eax
movsx eax,word[edi+4]
mov [ebx+7*4],eax
movsx eax,word[edi+6]
mov [ebx+8*4],eax
movsx eax,word[edi+8]
mov [ebx+9*4],eax
movsx eax,word[edi+10]
mov [ebx+10*4],eax
movsx eax,word[edi+12]
mov [ebx+11*4],eax
movsx eax,word[edi+14]
mov [ebx+12*4],eax
movsx eax,word[edi+16]
mov [ebx+13*4],eax
movsx eax,word[edi+18]
mov [ebx+14*4],eax
movsx eax,word[edi+20]
mov [ebx+15*4],eax
movsx eax,word[edi+22]
mov [ebx+16*4],eax
mov [ebx+21*4],eax
movsx eax,word[edi+24]
mov [ebx+17*4],eax
mov [ebx+22*4],eax
movsx eax,word[edi+26]
mov [ebx+18*4],eax
mov [ebx+23*4],eax
movsx eax,word[edi+28]
mov [ebx+19*4],eax
mov [ebx+24*4],eax
movsx eax,word[edi+30]
mov [ebx+20*4],eax
mov [ebx+25*4],eax
push edi
push ebx
push edx
call fir_downsample
add esp,+12
add edi,32
ret
%endmacro
section .data
NEWSYM lastblockbrr, times 8 dd 0
NEWSYM curvoice, dd 0
@@ -1816,7 +2032,7 @@ BRRDecode:
pop ecx
cmp byte[VoiceNoiseEn+ecx],10
je .yesfilter
je near .yesfilter
cmp byte[VoiceNoiseEn+ecx],0
je .nofilter2
cmp byte[VoiceNoiseEn+ecx],10
@@ -1828,9 +2044,9 @@ BRRDecode:
inc byte[VoiceNoiseEn+ecx]
.nofilter2
cmp byte[filteron],1
jne .nofilter
jne near .nofilter
cmp byte[NoiseDisTemp+ecx],0
jne .nofilter
jne near .nofilter
cmp byte[VoiceNoiseEn+ecx],100
je .strfilter
cmp byte[VoiceNoiseEn+ecx],101
@@ -1842,11 +2058,13 @@ BRRDecode:
test byte[esi+9],01h
jnz .nofilter
mov byte[VoiceNoiseEn+ecx],10
.nofilter
ret
;.nofilter
; ret
jmp .nofilter
.strfilter
mov byte[VoiceNoiseEn+ecx],8
ret
jmp .nofilter
; ret
.yesfilter
cmp byte[SoundNoiseDis],1
@@ -1868,6 +2086,16 @@ BRRDecode:
pop ecx
ret
.nofilter
cmp byte[LowPassFilterType],1
ja .dlpf
ret
.dlpf
ProcessDynamicLowPass
section .data
ALIGN32
; Original Values
@@ -2559,7 +2787,7 @@ dspconvb equ marksave-Voice0Freq
NEWSYM PHdspsave, dd dspsave
NEWSYM PHdspconvb, dd dspconvb
section .text
NEWSYM PrepareSaveState
@@ -2881,9 +3109,11 @@ spc700temp dd 0,0
mov byte [Voice0Loop+%1],0
mov byte[VoiceNoiseEn+%1],0
mov dword[WaveIndex+%1*4],0
mov dword[PSampleBuf+%1*22*4+19*4],0
mov dword[PSampleBuf+%1*22*4+20*4],0
mov dword[PSampleBuf+%1*22*4+21*4],0
mov dword[PSampleBuf+%1*26*4+21*4],0
mov dword[PSampleBuf+%1*26*4+22*4],0
mov dword[PSampleBuf+%1*26*4+23*4],0
mov dword[PSampleBuf+%1*26*4+24*4],0
mov dword[PSampleBuf+%1*26*4+25*4],0
mov byte[SoundLooped0+%1],0
mov byte[echoon0+%1],0
test byte[DSPMem+4Dh],%2
@@ -2999,9 +3229,11 @@ NEWSYM Voice7Start
mov byte [Voice0Loop+%1],0
mov byte[VoiceNoiseEn+%1],0
mov dword[WaveIndex+%1*4],0
mov dword[PSampleBuf+%1*22*4+19*4],0
mov dword[PSampleBuf+%1*22*4+20*4],0
mov dword[PSampleBuf+%1*22*4+21*4],0
mov dword[PSampleBuf+%1*26*4+21*4],0
mov dword[PSampleBuf+%1*26*4+22*4],0
mov dword[PSampleBuf+%1*26*4+23*4],0
mov dword[PSampleBuf+%1*26*4+24*4],0
mov dword[PSampleBuf+%1*26*4+25*4],0
pop edx
ret
%%nope
@@ -3018,9 +3250,11 @@ NEWSYM VoiceStarter
VoiceStarterM 7
ret
section .data
NEWSYM NoiseInc, dd 0
NEWSYM NoisePointer, dd 0
NEWSYM LastNoise, dd 0
section .text
%macro CalculatePMod 1
xor eax,eax
@@ -3281,11 +3515,17 @@ WaveIndex times 8 dd 0
; add eax,edx ;
;%%DontFilter1 ;
EXTSYM fir_interpolate
%macro DSPInterpolate 1
cmp byte[SoundInterpType],3
je near %%fir_interpolate
xor ebx,ebx
mov bl,[BRRPlace0+%1*8+2]
mov ax,[PSampleBuf+edx*4+0+%1*22*4]
mov ax,[PSampleBuf+edx*4+8+%1*26*4]
mov dx,[DSPInterP+ebx*2+256*6]
imul dx
shl edx,16
@@ -3293,7 +3533,7 @@ WaveIndex times 8 dd 0
mov eax,[BRRPlace0+%1*8+3]
mov ecx,edx
mov ax,[PSampleBuf+eax*4+4+%1*22*4]
mov ax,[PSampleBuf+eax*4+12+%1*26*4]
mov dx,[DSPInterP+ebx*2+256*4]
imul dx
shl edx,16
@@ -3301,7 +3541,7 @@ WaveIndex times 8 dd 0
mov eax,[BRRPlace0+%1*8+3]
add ecx,edx
mov ax,[PSampleBuf+eax*4+8+%1*22*4]
mov ax,[PSampleBuf+eax*4+16+%1*26*4]
mov dx,[DSPInterP+ebx*2+256*2]
imul dx
shl edx,16
@@ -3309,7 +3549,7 @@ WaveIndex times 8 dd 0
mov eax,[BRRPlace0+%1*8+3]
add ecx,edx
mov ax,[PSampleBuf+eax*4+12+%1*22*4]
mov ax,[PSampleBuf+eax*4+20+%1*26*4]
mov dx,[DSPInterP+ebx*2]
imul dx
shl edx,16
@@ -3318,6 +3558,22 @@ WaveIndex times 8 dd 0
sar ecx,11
mov ax,cx
jmp %%end
%%fir_interpolate
push dword PSampleBuf+(%1*26*4)
push dword [BRRPlace0+%1*8]
call fir_interpolate
add esp,+8
cmp eax,32767
jle %%clip1
mov eax,32767
%%clip1
cmp eax,-32768
jge %%clip2
mov eax,-32768
%%clip2
%%end
%endmacro
%macro NonEchoMonoInterpolated 4
@@ -4023,8 +4279,8 @@ WaveIndex times 8 dd 0
mov ebx,[Voice0Freq+%1*4]
; cmp byte[VoiceNoiseEn+%1],10
; je %%notinterpsound
cmp byte [InterSound],1
jne %%notinterpsound
cmp byte [SoundInterpType],0
je %%notinterpsound
cmp byte [StereoSound],1
je near %%EndofProcessNEnvsi
jmp %%EndofProcessNEnvi
@@ -4066,8 +4322,8 @@ WaveIndex times 8 dd 0
mov ebx,[Voice0Freq+%1*4]
; cmp byte[VoiceNoiseEn+%1],10
; je %%notinterpsound2
cmp byte [InterSound],1
jne %%notinterpsound2
cmp byte [SoundInterpType],0
je %%notinterpsound2
cmp byte [StereoSound],1
je near %%EndofProcessNEnvsi
jmp %%EndofProcessNEnvi
@@ -4083,8 +4339,8 @@ WaveIndex times 8 dd 0
mov ebx,[Voice0Freq+%1*4]
; cmp byte[VoiceNoiseEn+%1],10
; je %%notinterpsound3
cmp byte [InterSound],1
jne %%notinterpsound3
cmp byte [SoundInterpType],0
je %%notinterpsound3
cmp byte [StereoSound],1
je near %%EndofProcessNEnvsi
jmp %%EndofProcessNEnvi
@@ -4093,6 +4349,11 @@ WaveIndex times 8 dd 0
je near %%EndofProcessNEnvs
jmp %%EndofProcessNEnv
%%EndofSamp
mov dword[DLPFsamples+%1*26+21*4],0
mov dword[DLPFsamples+%1*26+22*4],0
mov dword[DLPFsamples+%1*26+23*4],0
mov dword[DLPFsamples+%1*26+24*4],0
mov dword[DLPFsamples+%1*26+25*4],0
mov dword[Voice0EnvInc+%1*4],0
mov dword[Voice0IncNumber+%1*4],0
mov byte [Voice0Status+%1],0
@@ -4216,8 +4477,8 @@ WaveIndex times 8 dd 0
; cmp byte[VoiceNoiseEn+%1],10
; je %%notinterpsound4
cmp byte [InterSound],1
jne %%notinterpsound4
cmp byte [SoundInterpType],0
je %%notinterpsound4
cmp byte [StereoSound],1
je near %%NextSampleSi
jmp %%NextSamplei
@@ -4331,12 +4592,16 @@ WaveIndex times 8 dd 0
; cmp byte[Voice0Looped+%1],0
; je %%nobrrcheck
mov eax,[PSampleBuf+19*4+%1*22*4]
mov [PSampleBuf+0*4+%1*22*4],eax
mov eax,[PSampleBuf+20*4+%1*22*4]
mov [PSampleBuf+1*4+%1*22*4],eax
mov eax,[PSampleBuf+21*4+%1*22*4]
mov [PSampleBuf+2*4+%1*22*4],eax
mov eax,[PSampleBuf+21*4+%1*26*4]
mov [PSampleBuf+0*4+%1*26*4],eax
mov eax,[PSampleBuf+22*4+%1*26*4]
mov [PSampleBuf+1*4+%1*26*4],eax
mov eax,[PSampleBuf+23*4+%1*26*4]
mov [PSampleBuf+2*4+%1*26*4],eax
mov eax,[PSampleBuf+24*4+%1*26*4]
mov [PSampleBuf+3*4+%1*26*4],eax
mov eax,[PSampleBuf+25*4+%1*26*4]
mov [PSampleBuf+4*4+%1*26*4],eax
cmp byte[SoundBufEn],0
je near %%convertBRR2
@@ -4373,46 +4638,48 @@ WaveIndex times 8 dd 0
mov ebx,[Voice0Freq+%1*4]
mov [Voice0BufPtr+%1*4],edi
mov ax,[edi]
mov [PSampleBuf+3*4+%1*22*4],eax
mov ax,[edi+2*1]
mov [PSampleBuf+4*4+%1*22*4],eax
mov ax,[edi+2*2]
mov [PSampleBuf+5*4+%1*22*4],eax
mov ax,[edi+2*3]
mov [PSampleBuf+6*4+%1*22*4],eax
mov ax,[edi+2*4]
mov [PSampleBuf+7*4+%1*22*4],eax
mov ax,[edi+2*5]
mov [PSampleBuf+8*4+%1*22*4],eax
mov ax,[edi+2*6]
mov [PSampleBuf+9*4+%1*22*4],eax
mov ax,[edi+2*7]
mov [PSampleBuf+10*4+%1*22*4],eax
mov ax,[edi+2*8]
mov [PSampleBuf+11*4+%1*22*4],eax
mov ax,[edi+2*9]
mov [PSampleBuf+12*4+%1*22*4],eax
mov ax,[edi+2*10]
mov [PSampleBuf+13*4+%1*22*4],eax
mov ax,[edi+2*11]
mov [PSampleBuf+14*4+%1*22*4],eax
mov ax,[edi+2*12]
mov [PSampleBuf+15*4+%1*22*4],eax
mov ax,[edi+2*13]
mov [PSampleBuf+16*4+%1*22*4],eax
mov [PSampleBuf+19*4+%1*22*4],eax
mov ax,[edi+2*14]
mov [PSampleBuf+17*4+%1*22*4],eax
mov [PSampleBuf+20*4+%1*22*4],eax
mov ax,[edi+2*15]
mov [PSampleBuf+18*4+%1*22*4],eax
mov [PSampleBuf+21*4+%1*22*4],eax
movsx eax,word [edi]
mov [PSampleBuf+5*4+%1*26*4],eax
movsx eax,word [edi+2*1]
mov [PSampleBuf+6*4+%1*26*4],eax
movsx eax,word [edi+2*2]
mov [PSampleBuf+7*4+%1*26*4],eax
movsx eax,word [edi+2*3]
mov [PSampleBuf+8*4+%1*26*4],eax
movsx eax,word[edi+2*4]
mov [PSampleBuf+9*4+%1*26*4],eax
movsx eax,word [edi+2*5]
mov [PSampleBuf+10*4+%1*26*4],eax
movsx eax,word [edi+2*6]
mov [PSampleBuf+11*4+%1*26*4],eax
movsx eax,word [edi+2*7]
mov [PSampleBuf+12*4+%1*26*4],eax
movsx eax,word [edi+2*8]
mov [PSampleBuf+13*4+%1*26*4],eax
movsx eax,word [edi+2*9]
mov [PSampleBuf+14*4+%1*26*4],eax
movsx eax,word [edi+2*10]
mov [PSampleBuf+15*4+%1*26*4],eax
movsx eax,word [edi+2*11]
mov [PSampleBuf+16*4+%1*26*4],eax
mov [PSampleBuf+21*4+%1*26*4],eax
movsx eax,word [edi+2*12]
mov [PSampleBuf+17*4+%1*26*4],eax
mov [PSampleBuf+22*4+%1*26*4],eax
movsx eax,word [edi+2*13]
mov [PSampleBuf+18*4+%1*26*4],eax
mov [PSampleBuf+23*4+%1*26*4],eax
movsx eax,word [edi+2*14]
mov [PSampleBuf+19*4+%1*26*4],eax
mov [PSampleBuf+24*4+%1*26*4],eax
movsx eax,word [edi+2*15]
mov [PSampleBuf+20*4+%1*26*4],eax
mov [PSampleBuf+25*4+%1*26*4],eax
; cmp byte[VoiceNoiseEn+%1],10
; je %%notinterpsound5
cmp byte [InterSound],1
jne %%notinterpsound5
cmp byte [SoundInterpType],0
je %%notinterpsound5
cmp byte [StereoSound],1
je near %%NextSampleSi
jmp %%NextSamplei
@@ -4443,41 +4710,43 @@ WaveIndex times 8 dd 0
pop esi
mov edi,[Voice0BufPtr+%1*4]
mov ax,[edi]
mov [PSampleBuf+3*4+%1*22*4],eax
mov ax,[edi+2*1]
mov [PSampleBuf+4*4+%1*22*4],eax
mov ax,[edi+2*2]
mov [PSampleBuf+5*4+%1*22*4],eax
mov ax,[edi+2*3]
mov [PSampleBuf+6*4+%1*22*4],eax
mov ax,[edi+2*4]
mov [PSampleBuf+7*4+%1*22*4],eax
mov ax,[edi+2*5]
mov [PSampleBuf+8*4+%1*22*4],eax
mov ax,[edi+2*6]
mov [PSampleBuf+9*4+%1*22*4],eax
mov ax,[edi+2*7]
mov [PSampleBuf+10*4+%1*22*4],eax
mov ax,[edi+2*8]
mov [PSampleBuf+11*4+%1*22*4],eax
mov ax,[edi+2*9]
mov [PSampleBuf+12*4+%1*22*4],eax
mov ax,[edi+2*10]
mov [PSampleBuf+13*4+%1*22*4],eax
mov ax,[edi+2*11]
mov [PSampleBuf+14*4+%1*22*4],eax
mov ax,[edi+2*12]
mov [PSampleBuf+15*4+%1*22*4],eax
mov ax,[edi+2*13]
mov [PSampleBuf+16*4+%1*22*4],eax
mov [PSampleBuf+19*4+%1*22*4],eax
mov ax,[edi+2*14]
mov [PSampleBuf+17*4+%1*22*4],eax
mov [PSampleBuf+20*4+%1*22*4],eax
mov ax,[edi+2*15]
mov [PSampleBuf+18*4+%1*22*4],eax
mov [PSampleBuf+21*4+%1*22*4],eax
movsx eax,word [edi]
mov [PSampleBuf+5*4+%1*26*4],eax
movsx eax,word [edi+2*1]
mov [PSampleBuf+6*4+%1*26*4],eax
movsx eax,word [edi+2*2]
mov [PSampleBuf+7*4+%1*26*4],eax
movsx eax,word [edi+2*3]
mov [PSampleBuf+8*4+%1*26*4],eax
movsx eax,word[edi+2*4]
mov [PSampleBuf+9*4+%1*26*4],eax
movsx eax,word [edi+2*5]
mov [PSampleBuf+10*4+%1*26*4],eax
movsx eax,word [edi+2*6]
mov [PSampleBuf+11*4+%1*26*4],eax
movsx eax,word [edi+2*7]
mov [PSampleBuf+12*4+%1*26*4],eax
movsx eax,word [edi+2*8]
mov [PSampleBuf+13*4+%1*26*4],eax
movsx eax,word [edi+2*9]
mov [PSampleBuf+14*4+%1*26*4],eax
movsx eax,word [edi+2*10]
mov [PSampleBuf+15*4+%1*26*4],eax
movsx eax,word [edi+2*11]
mov [PSampleBuf+16*4+%1*26*4],eax
mov [PSampleBuf+21*4+%1*26*4],eax
movsx eax,word [edi+2*12]
mov [PSampleBuf+17*4+%1*26*4],eax
mov [PSampleBuf+22*4+%1*26*4],eax
movsx eax,word [edi+2*13]
mov [PSampleBuf+18*4+%1*26*4],eax
mov [PSampleBuf+23*4+%1*26*4],eax
movsx eax,word [edi+2*14]
mov [PSampleBuf+19*4+%1*26*4],eax
mov [PSampleBuf+24*4+%1*26*4],eax
movsx eax,word [edi+2*15]
mov [PSampleBuf+20*4+%1*26*4],eax
mov [PSampleBuf+25*4+%1*26*4],eax
mov eax,dword [prev0]
mov [Voice0Prev0+%1*4],eax
@@ -4491,8 +4760,8 @@ WaveIndex times 8 dd 0
add dword [Voice0Ptr+%1*4],9
; cmp byte[VoiceNoiseEn+%1],10
; je %%notinterpsound6
cmp byte [InterSound],1
jne %%notinterpsound6
cmp byte [SoundInterpType],0
je %%notinterpsound6
cmp byte [StereoSound],1
je near %%NextSampleSi
jmp %%NextSamplei
@@ -4548,6 +4817,11 @@ WaveIndex times 8 dd 0
or byte [DSPMem+7Ch],%3
mov byte [DSPMem+08h+%1*10h],0
%%SkipStuff4
mov dword[DLPFsamples+%1*26+21*4],0
mov dword[DLPFsamples+%1*26+22*4],0
mov dword[DLPFsamples+%1*26+23*4],0
mov dword[DLPFsamples+%1*26+24*4],0
mov dword[DLPFsamples+%1*26+25*4],0
; and byte [DSPMem+5Ch],%4
mov dword[Voice0EnvInc+%1*4],0
mov dword[Voice0IncNumber+%1*4],0
@@ -5020,7 +5294,9 @@ NEWSYM handlersbseg
sti
jmp Startprocsbdata
echowrittento db 0
section .data
echowrittento db 0 ,0,0,0 ; padding
section .text
NEWSYM stopsbsound
; mov byte[Voice0Status],0
@@ -5092,7 +5368,9 @@ NEWSYM stopsbsound
sti
iretd
section .data
NEWSYM sbhandexec, dd 0
section .text
; Process 20 blocks * 8 voices (no pitch yet)
NEWSYM SBHandler16
@@ -5334,8 +5612,8 @@ NEWSYM ProcessVoice816
loop .revstloop
.norevstereo
cmp byte[LowPassFilterType],0
je near LPFexit
cmp byte[LowPassFilterType],1
jne near LPFexit
mov esi,DSPBuffer
cmp byte[StereoSound],1
jz near LPFstereo
@@ -5466,11 +5744,13 @@ NEWSYM stopsbsound16
; Sound Blaster Initialization Stuff
;****************************************************
section .data
NEWSYM memoryloc, dd 0 ; Memory offset in conventional memory
NEWSYM memoryloc2, dd 0 ; Memory offset in conventional memory
NEWSYM sbselec, dw 0 ; Selector of Memory location
NEWSYM sbselec, dw 0 ,0,0,0 ; Selector of Memory location
NEWSYM sbpmofs, dd 0 ; offset of Memory location
SBDeinitType db 0
section .text
NEWSYM initSB
mov eax,[SoundQuality]