kolibrios/programs/games/rstearth/snd_api.inc
Marat Zakiyanov (Mario79) 0ce1475dad Rusty Earth - prototype of the game
git-svn-id: svn://kolibrios.org@5253 a494cfbc-eb01-0410-851d-a64ba20cac60
2014-12-21 20:22:09 +00:00

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
;------------------------------------------------------------------------------