409 lines
7.1 KiB
PHP
409 lines
7.1 KiB
PHP
|
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
|
||
|
;------------------------------------------------------------------------------
|