0,0 → 1,409 |
struc CTRL_INFO |
{ .pci_cmd dd ? |
.irq dd ? |
.glob_cntrl dd ? |
.glob_sta dd ? |
.codec_io_base dd ? |
.ctrl_io_base dd ? |
.codec_mem_base dd ? |
.ctrl_mem_base dd ? |
.codec_id dd ? |
} |
CTRL_INFO_SIZE equ 9*4 |
|
SRV_GETVERSION equ 0 |
SND_CREATE_BUFF equ 1 |
SND_DESTROY_BUFF equ 2 |
SND_SETFORMAT equ 3 |
SND_GETFORMAT equ 4 |
SND_RESET equ 5 |
SND_SETPOS equ 6 |
SND_GETPOS equ 7 |
SND_SETBUFF equ 8 |
SND_OUT equ 9 |
SND_PLAY equ 10 |
SND_STOP equ 11 |
SND_SETVOLUME equ 12 |
SND_GETVOLUME equ 13 |
SND_SETPAN equ 14 |
SND_GETPAN equ 15 |
SND_GETBUFFSIZE equ 16 |
SND_GETFREESPACE equ 17 |
SND_SETTIMEBASE equ 18 |
SND_GETTIMESTAMP equ 19 |
|
DEV_SET_BUFF equ 4 |
DEV_NOTIFY equ 5 |
DEV_SET_MASTERVOL equ 6 |
DEV_GET_MASTERVOL equ 7 |
DEV_GET_INFO equ 8 |
|
SOUND_VERSION equ 0x0101 |
PCM_ALL equ 0 |
|
PCM_OUT equ 0x08000000 |
PCM_RING equ 0x10000000 |
PCM_STATIC equ 0x20000000 |
PCM_FLOAT equ 0x40000000 |
PCM_FILTER equ 0x80000000 |
|
PCM_2_16_48 equ 1 |
PCM_1_16_48 equ 2 |
PCM_2_16_44 equ 3 |
PCM_1_16_44 equ 4 |
PCM_2_16_32 equ 5 |
PCM_1_16_32 equ 6 |
PCM_2_16_24 equ 7 |
PCM_1_16_24 equ 8 |
PCM_2_16_22 equ 9 |
PCM_1_16_22 equ 10 |
PCM_2_16_16 equ 11 |
PCM_1_16_16 equ 12 |
PCM_2_16_12 equ 13 |
PCM_1_16_12 equ 14 |
PCM_2_16_11 equ 15 |
PCM_1_16_11 equ 16 |
PCM_2_16_8 equ 17 |
PCM_1_16_8 equ 18 |
PCM_2_8_48 equ 19 |
PCM_1_8_48 equ 20 |
PCM_2_8_44 equ 21 |
PCM_1_8_44 equ 22 |
PCM_2_8_32 equ 23 |
PCM_1_8_32 equ 24 |
PCM_2_8_24 equ 25 |
PCM_1_8_24 equ 26 |
PCM_2_8_22 equ 27 |
PCM_1_8_22 equ 28 |
PCM_2_8_16 equ 29 |
PCM_1_8_16 equ 30 |
PCM_2_8_12 equ 31 |
PCM_1_8_12 equ 32 |
PCM_2_8_11 equ 33 |
PCM_1_8_11 equ 34 |
PCM_2_8_8 equ 35 |
PCM_1_8_8 equ 36 |
|
; i_data |
szInfinity db 'INFINITY',0 |
szSound db 'SOUND',0 |
; u_data |
hSound dd ? |
hrdwSound dd ? |
;------------------------------------------------------------------------------ |
align 4 |
_InitSound@4: ;p_ver:dword |
|
push ebx ecx |
mcall 68,16,szInfinity |
mov [hSound],eax |
test eax,eax |
jz .fail |
|
mcall 68,16,szSound |
mov [hrdwSound],eax |
test eax,eax |
jz .fail |
|
lea eax,[esp+12] ;p_ver |
xor ebx,ebx |
|
push 4 ;.out_size |
push eax ;.output |
push ebx ;.inp_size |
push ebx ;.input |
push SRV_GETVERSION ;.code |
push [hSound] ;.handle |
|
mov ecx,esp ;[handle] |
mcall 68,17 |
add esp,24 |
jmp .exit |
;-------------------------------------- |
align 4 |
.fail: |
or eax, -1 |
;-------------------------------------- |
align 4 |
.exit: |
pop ecx ebx |
ret 4 |
;------------------------------------------------------------------------------ |
align 4 |
_CreateBuffer@12: ;format:dword,size:dword,p_str:dword |
push ebx ecx |
lea eax,[esp+20] ;p_str |
lea ebx,[esp+12] ;format |
|
push 4 ;.out_size |
push eax ;.output |
push 8 ;.inp_size |
push ebx ;.input |
push SND_CREATE_BUFF;.code |
push [hSound] ;.handle |
|
mov ecx,esp |
mcall 68,17 |
add esp,24 ;io_cintrol |
pop ecx ebx |
ret 12 |
;------------------------------------------------------------------------------ |
align 4 |
_DestroyBuffer@4: ;str:dword |
push ebx ecx |
xor eax,eax |
lea ebx,[esp+12] ;[stream] |
|
push eax ;.out_size |
push eax ;.output |
push 4 ;.inp_size |
push ebx ;.input |
push SND_DESTROY_BUFF;.code |
push [hSound] ;.handle |
|
mov ecx, esp ;[handle] |
mcall 68,17 |
add esp,24 |
pop ecx ebx |
ret 4 |
;------------------------------------------------------------------------------ |
align 4 |
_WaveOut@12: ;str:dword, src:dword, size:dword |
push ebx ecx |
xor eax,eax |
lea ebx,[esp+12] ;[stream] |
|
push eax ;.out_size |
push eax ;.output |
push 12 ;.inp_size |
push ebx ;.input |
push SND_OUT ;.code |
push dword [hSound] ;.handle |
|
mov ecx,esp |
mcall 68,17 |
add esp,24 |
pop ecx ebx |
ret 12 |
;------------------------------------------------------------------------------ |
align 4 |
proc _test_wav@4 stdcall, hdr:dword |
mov eax,[hdr] |
cmp dword [eax],0x46464952 |
jne .fail |
|
cmp dword [eax+8],0x45564157 |
jne .fail |
|
cmp word [eax+20],1 |
jne .fail |
|
mov ecx,dword [eax+24] |
mov edx,22050 |
cmp ecx,edx |
ja .high |
je .l_22 |
|
cmp ecx,8000 |
je .l_8 |
|
cmp ecx,11025 |
je .l_11 |
|
cmp ecx,12000 |
je .l_12 |
|
cmp ecx,16000 |
je .l_16 |
;-------------------------------------- |
align 4 |
.fail: |
xor eax,eax |
ret |
;-------------------------------------- |
align 4 |
.high: |
cmp ecx,24000 |
je .LN56 |
|
cmp ecx,32000 |
je .LN65 |
|
cmp ecx,44100 |
je .LN74 |
|
cmp ecx,48000 |
jne .fail |
|
movzx ecx,word [eax+22] |
dec ecx |
je .LN79 |
|
dec ecx |
jne .LN74 |
|
mov edx,19 |
jmp .done |
;-------------------------------------- |
align 4 |
.LN79: |
mov edx,20 |
jmp .done |
;-------------------------------------- |
align 4 |
.LN74: |
movzx ecx,word [eax+22] |
dec ecx |
je .LN70 |
|
dec ecx |
jne .LN65 |
|
mov edx,21 |
jmp .done |
;-------------------------------------- |
align 4 |
.LN70: |
mov edx,22 |
jmp .done |
;-------------------------------------- |
align 4 |
.LN65: |
movzx ecx,word [eax+22] |
dec ecx |
je .LN61 |
|
dec ecx |
jne .LN56 |
|
mov edx,23 |
jmp .done |
;-------------------------------------- |
align 4 |
.LN61: |
mov edx,24 |
jmp .done |
;-------------------------------------- |
align 4 |
.LN56: |
movzx ecx,word [eax+22] |
dec ecx |
je .LN52 |
|
dec ecx |
je .LN50 |
;-------------------------------------- |
align 4 |
.l_22: |
movzx ecx,word [eax+22] |
dec ecx |
je .LN43 |
|
dec ecx |
je .LN41 |
;-------------------------------------- |
align 4 |
.l_16: |
movzx ecx,word [eax+22] |
dec ecx |
je .LN34 |
|
dec ecx |
je .LN32 |
;-------------------------------------- |
align 4 |
.l_12: |
movzx ecx,word [eax+22] |
dec ecx |
je .LN25 |
|
dec ecx |
je .LN23 |
;-------------------------------------- |
align 4 |
.l_11: |
movzx ecx,word [eax+22] |
dec ecx |
je .LN16 |
|
dec ecx |
je .LN14 |
;-------------------------------------- |
align 4 |
.l_8: |
movzx ecx,word [eax+22] |
dec ecx |
je .LN7 |
|
dec ecx |
jne .fail |
|
mov edx,35 |
jmp .done |
;-------------------------------------- |
align 4 |
.LN7: |
mov edx,36 |
jmp .done |
;-------------------------------------- |
align 4 |
.LN14: |
mov edx,33 |
jmp .done |
;-------------------------------------- |
align 4 |
.LN16: |
mov edx,34 |
jmp .done |
;-------------------------------------- |
align 4 |
.LN23: |
mov edx,31 |
jmp .done |
;-------------------------------------- |
align 4 |
.LN25: |
mov edx,32 |
jmp .done |
;-------------------------------------- |
align 4 |
.LN32: |
mov edx,29 |
jmp .done |
;-------------------------------------- |
align 4 |
.LN34: |
mov edx,30 |
jmp .done |
;-------------------------------------- |
align 4 |
.LN41: |
mov edx,27 |
jmp .done |
;-------------------------------------- |
align 4 |
.LN43: |
mov edx,28 |
jmp .done |
;-------------------------------------- |
align 4 |
.LN50: |
mov edx,25 |
jmp .done |
;-------------------------------------- |
align 4 |
.LN52: |
mov edx,26 |
;-------------------------------------- |
align 4 |
.done: |
xor ecx,ecx |
cmp word [eax+34],16 |
setne cl |
dec ecx |
and ecx,-18 |
add ecx,edx |
mov eax,ecx |
ret |
endp |
;------------------------------------------------------------------------------ |