Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5253 | mario79 | 1 | struc CTRL_INFO |
2 | { .pci_cmd dd ? |
||
3 | .irq dd ? |
||
4 | .glob_cntrl dd ? |
||
5 | .glob_sta dd ? |
||
6 | .codec_io_base dd ? |
||
7 | .ctrl_io_base dd ? |
||
8 | .codec_mem_base dd ? |
||
9 | .ctrl_mem_base dd ? |
||
10 | .codec_id dd ? |
||
11 | } |
||
12 | CTRL_INFO_SIZE equ 9*4 |
||
13 | |||
14 | SRV_GETVERSION equ 0 |
||
15 | SND_CREATE_BUFF equ 1 |
||
16 | SND_DESTROY_BUFF equ 2 |
||
17 | SND_SETFORMAT equ 3 |
||
18 | SND_GETFORMAT equ 4 |
||
19 | SND_RESET equ 5 |
||
20 | SND_SETPOS equ 6 |
||
21 | SND_GETPOS equ 7 |
||
22 | SND_SETBUFF equ 8 |
||
23 | SND_OUT equ 9 |
||
24 | SND_PLAY equ 10 |
||
25 | SND_STOP equ 11 |
||
26 | SND_SETVOLUME equ 12 |
||
27 | SND_GETVOLUME equ 13 |
||
28 | SND_SETPAN equ 14 |
||
29 | SND_GETPAN equ 15 |
||
30 | SND_GETBUFFSIZE equ 16 |
||
31 | SND_GETFREESPACE equ 17 |
||
32 | SND_SETTIMEBASE equ 18 |
||
33 | SND_GETTIMESTAMP equ 19 |
||
34 | |||
35 | DEV_SET_BUFF equ 4 |
||
36 | DEV_NOTIFY equ 5 |
||
37 | DEV_SET_MASTERVOL equ 6 |
||
38 | DEV_GET_MASTERVOL equ 7 |
||
39 | DEV_GET_INFO equ 8 |
||
40 | |||
41 | SOUND_VERSION equ 0x0101 |
||
42 | PCM_ALL equ 0 |
||
43 | |||
44 | PCM_OUT equ 0x08000000 |
||
45 | PCM_RING equ 0x10000000 |
||
46 | PCM_STATIC equ 0x20000000 |
||
47 | PCM_FLOAT equ 0x40000000 |
||
48 | PCM_FILTER equ 0x80000000 |
||
49 | |||
50 | PCM_2_16_48 equ 1 |
||
51 | PCM_1_16_48 equ 2 |
||
52 | PCM_2_16_44 equ 3 |
||
53 | PCM_1_16_44 equ 4 |
||
54 | PCM_2_16_32 equ 5 |
||
55 | PCM_1_16_32 equ 6 |
||
56 | PCM_2_16_24 equ 7 |
||
57 | PCM_1_16_24 equ 8 |
||
58 | PCM_2_16_22 equ 9 |
||
59 | PCM_1_16_22 equ 10 |
||
60 | PCM_2_16_16 equ 11 |
||
61 | PCM_1_16_16 equ 12 |
||
62 | PCM_2_16_12 equ 13 |
||
63 | PCM_1_16_12 equ 14 |
||
64 | PCM_2_16_11 equ 15 |
||
65 | PCM_1_16_11 equ 16 |
||
66 | PCM_2_16_8 equ 17 |
||
67 | PCM_1_16_8 equ 18 |
||
68 | PCM_2_8_48 equ 19 |
||
69 | PCM_1_8_48 equ 20 |
||
70 | PCM_2_8_44 equ 21 |
||
71 | PCM_1_8_44 equ 22 |
||
72 | PCM_2_8_32 equ 23 |
||
73 | PCM_1_8_32 equ 24 |
||
74 | PCM_2_8_24 equ 25 |
||
75 | PCM_1_8_24 equ 26 |
||
76 | PCM_2_8_22 equ 27 |
||
77 | PCM_1_8_22 equ 28 |
||
78 | PCM_2_8_16 equ 29 |
||
79 | PCM_1_8_16 equ 30 |
||
80 | PCM_2_8_12 equ 31 |
||
81 | PCM_1_8_12 equ 32 |
||
82 | PCM_2_8_11 equ 33 |
||
83 | PCM_1_8_11 equ 34 |
||
84 | PCM_2_8_8 equ 35 |
||
85 | PCM_1_8_8 equ 36 |
||
86 | |||
87 | ; i_data |
||
88 | szInfinity db 'INFINITY',0 |
||
89 | szSound db 'SOUND',0 |
||
90 | ; u_data |
||
91 | hSound dd ? |
||
92 | hrdwSound dd ? |
||
93 | ;------------------------------------------------------------------------------ |
||
94 | align 4 |
||
95 | _InitSound@4: ;p_ver:dword |
||
96 | |||
97 | push ebx ecx |
||
98 | mcall 68,16,szInfinity |
||
99 | mov [hSound],eax |
||
100 | test eax,eax |
||
101 | jz .fail |
||
102 | |||
103 | mcall 68,16,szSound |
||
104 | mov [hrdwSound],eax |
||
105 | test eax,eax |
||
106 | jz .fail |
||
107 | |||
108 | lea eax,[esp+12] ;p_ver |
||
109 | xor ebx,ebx |
||
110 | |||
111 | push 4 ;.out_size |
||
112 | push eax ;.output |
||
113 | push ebx ;.inp_size |
||
114 | push ebx ;.input |
||
115 | push SRV_GETVERSION ;.code |
||
116 | push [hSound] ;.handle |
||
117 | |||
118 | mov ecx,esp ;[handle] |
||
119 | mcall 68,17 |
||
120 | add esp,24 |
||
121 | jmp .exit |
||
122 | ;-------------------------------------- |
||
123 | align 4 |
||
124 | .fail: |
||
125 | or eax, -1 |
||
126 | ;-------------------------------------- |
||
127 | align 4 |
||
128 | .exit: |
||
129 | pop ecx ebx |
||
130 | ret 4 |
||
131 | ;------------------------------------------------------------------------------ |
||
132 | align 4 |
||
133 | _CreateBuffer@12: ;format:dword,size:dword,p_str:dword |
||
134 | push ebx ecx |
||
135 | lea eax,[esp+20] ;p_str |
||
136 | lea ebx,[esp+12] ;format |
||
137 | |||
138 | push 4 ;.out_size |
||
139 | push eax ;.output |
||
140 | push 8 ;.inp_size |
||
141 | push ebx ;.input |
||
142 | push SND_CREATE_BUFF;.code |
||
143 | push [hSound] ;.handle |
||
144 | |||
145 | mov ecx,esp |
||
146 | mcall 68,17 |
||
147 | add esp,24 ;io_cintrol |
||
148 | pop ecx ebx |
||
149 | ret 12 |
||
150 | ;------------------------------------------------------------------------------ |
||
5274 | mario79 | 151 | ;align 4 |
152 | ;_DestroyBuffer@4: ;str:dword |
||
153 | ; push ebx ecx |
||
154 | ; xor eax,eax |
||
155 | ; lea ebx,[esp+12] ;[stream] |
||
156 | ; |
||
157 | ; push eax ;.out_size |
||
158 | ; push eax ;.output |
||
159 | ; push 4 ;.inp_size |
||
160 | ; push ebx ;.input |
||
161 | ; push SND_DESTROY_BUFF;.code |
||
162 | ; push [hSound] ;.handle |
||
163 | ; |
||
164 | ; mov ecx, esp ;[handle] |
||
165 | ; mcall 68,17 |
||
166 | ; add esp,24 |
||
167 | ; pop ecx ebx |
||
168 | ; ret 4 |
||
169 | ;------------------------------------------------------------------------------ |
||
170 | ;align 4 |
||
171 | ;_WaveOut@12: ;str:dword, src:dword, size:dword |
||
172 | ; push ebx ecx |
||
173 | ; xor eax,eax |
||
174 | ; lea ebx,[esp+12] ;[stream] |
||
175 | ; |
||
176 | ; push eax ;.out_size |
||
177 | ; push eax ;.output |
||
178 | ; push 12 ;.inp_size |
||
179 | ; push ebx ;.input |
||
180 | ; push SND_OUT ;.code |
||
181 | ; push dword [hSound] ;.handle |
||
182 | ; |
||
183 | ; mov ecx,esp |
||
184 | ; mcall 68,17 |
||
185 | ; add esp,24 |
||
186 | ; pop ecx ebx |
||
187 | ; ret 12 |
||
188 | ;------------------------------------------------------------------------------ |
||
5253 | mario79 | 189 | align 4 |
5274 | mario79 | 190 | _GetBufferSize@8: ;str:dword, p_size:dword |
5253 | mario79 | 191 | push ebx ecx |
5274 | mario79 | 192 | lea eax,[esp+16] |
5253 | mario79 | 193 | lea ebx,[esp+12] ;[stream] |
194 | |||
5274 | mario79 | 195 | push 4 ;.out_size |
5253 | mario79 | 196 | push eax ;.output |
197 | push 4 ;.inp_size |
||
198 | push ebx ;.input |
||
5274 | mario79 | 199 | push SND_GETBUFFSIZE;.code |
200 | push dword [hSound] ;.handle |
||
5253 | mario79 | 201 | |
5274 | mario79 | 202 | mov ecx,esp |
5253 | mario79 | 203 | mcall 68,17 |
204 | add esp,24 |
||
205 | pop ecx ebx |
||
5274 | mario79 | 206 | ret 8 |
207 | ;------------------------------------------------------------------------------ |
||
208 | ;align 4 |
||
209 | ;_GetBufferFree@8: ;str:dword, p_free:dword |
||
210 | ; push ebx ecx |
||
211 | ; lea ebx,[esp+12] ;[stream] |
||
212 | ; push 0 ;storage for free_space |
||
213 | ; mov eax,esp |
||
214 | ; |
||
215 | ; push 4 ;.out_size |
||
216 | ; push eax ;.output |
||
217 | ; push 4 ;.inp_size |
||
218 | ; push ebx ;.input |
||
219 | ; push SND_GETFREESPACE ;.code |
||
220 | ; push dword [hSound] ;.handle |
||
221 | ; |
||
222 | ; mov ecx,esp |
||
223 | ; mcall 68,17 |
||
224 | ; add esp, 24 |
||
225 | ; mov ecx,[esp+20] ; p_free |
||
226 | ; pop dword [ecx] |
||
227 | ; pop ecx ebx |
||
228 | ; ret 8 |
||
5253 | mario79 | 229 | ;------------------------------------------------------------------------------ |
230 | align 4 |
||
5274 | mario79 | 231 | _SetBuffer@16: ;str:dword, src:dword, offs:dword, size:dword |
5253 | mario79 | 232 | push ebx ecx |
233 | xor eax,eax |
||
234 | lea ebx,[esp+12] ;[stream] |
||
5274 | mario79 | 235 | |
236 | push eax ;.out_size |
||
237 | push eax ;.output |
||
238 | push 16 ;.inp_size |
||
239 | push ebx ;.input |
||
240 | push SND_SETBUFF ;.code |
||
241 | push dword [hSound] ;.handle |
||
242 | |||
243 | mov ecx,esp |
||
244 | mcall 68,17 |
||
245 | add esp,24 |
||
246 | pop ecx ebx |
||
247 | ret 16 |
||
248 | ;------------------------------------------------------------------------------ |
||
249 | align 4 |
||
250 | _PlayBuffer@8: ;str:dword,flags:dword |
||
251 | push ebx ecx |
||
252 | xor eax,eax |
||
253 | lea ebx,[esp+12] ;[stream] |
||
5253 | mario79 | 254 | |
255 | push eax ;.out_size |
||
256 | push eax ;.output |
||
5274 | mario79 | 257 | push 8 ;.inp_size |
5253 | mario79 | 258 | push ebx ;.input |
5274 | mario79 | 259 | push SND_PLAY ;.code |
5253 | mario79 | 260 | push dword [hSound] ;.handle |
5274 | mario79 | 261 | |
262 | mov ecx, esp |
||
263 | mcall 68,17 |
||
264 | add esp, 24 |
||
265 | pop ecx ebx |
||
266 | ret 8 |
||
267 | ;------------------------------------------------------------------------------ |
||
268 | align 4 |
||
269 | _StopBuffer@4: ;str:dword |
||
270 | push ebx ecx |
||
271 | xor eax,eax |
||
272 | lea ebx,[esp+12] ;[stream] |
||
5253 | mario79 | 273 | |
5274 | mario79 | 274 | push eax ;.out_size |
275 | push eax ;.output |
||
276 | push 4 ;.inp_size |
||
277 | push ebx ;.input |
||
278 | push SND_STOP ;.code |
||
279 | push dword [hSound] ;.handle |
||
280 | |||
5253 | mario79 | 281 | mov ecx,esp |
282 | mcall 68,17 |
||
283 | add esp,24 |
||
284 | pop ecx ebx |
||
5274 | mario79 | 285 | ret 4 |
5253 | mario79 | 286 | ;------------------------------------------------------------------------------ |
5274 | mario79 | 287 | ;align 4 |
288 | ;_GetBufferPos@8: ;str:dword, p_pos:dword |
||
289 | ; push ebx ecx |
||
290 | ; lea eax,[esp+16] |
||
291 | ; lea ebx,[esp+12] ;[stream] |
||
292 | ; |
||
293 | ; push 4 ;.out_size |
||
294 | ; push eax ;.output |
||
295 | ; push 4 ;.inp_size |
||
296 | ; push ebx ;.input |
||
297 | ; push SND_GETPOS ;.code |
||
298 | ; push dword [hSound] ;.handle |
||
299 | ; |
||
300 | ; mov ecx,esp |
||
301 | ; mcall 68,17 |
||
302 | ; add esp,24 |
||
303 | ; pop ecx ebx |
||
304 | ; ret 8 |
||
305 | ;------------------------------------------------------------------------------ |
||
306 | ;align 4 |
||
307 | ;_SetBufferPos@8: ;str:dword, offs:dword |
||
308 | ; push ebx ecx |
||
309 | ; xor eax,eax |
||
310 | ; lea ebx,[esp+12] ;[stream] |
||
311 | ; |
||
312 | ; push eax ;.out_size |
||
313 | ; push eax ;.output |
||
314 | ; push 8 ;.inp_size |
||
315 | ; push ebx ;.input |
||
316 | ; push SND_SETPOS ;.code |
||
317 | ; push dword [hSound] ;.handle |
||
318 | ; |
||
319 | ; mov ecx,esp |
||
320 | ; mcall 68,17 |
||
321 | ; add esp,24 |
||
322 | ; pop ecx ebx |
||
323 | ; ret 8 |
||
324 | ;------------------------------------------------------------------------------ |
||
5253 | mario79 | 325 | align 4 |
326 | proc _test_wav@4 stdcall, hdr:dword |
||
327 | mov eax,[hdr] |
||
328 | cmp dword [eax],0x46464952 |
||
329 | jne .fail |
||
330 | |||
331 | cmp dword [eax+8],0x45564157 |
||
332 | jne .fail |
||
333 | |||
334 | cmp word [eax+20],1 |
||
335 | jne .fail |
||
336 | |||
337 | mov ecx,dword [eax+24] |
||
338 | mov edx,22050 |
||
339 | cmp ecx,edx |
||
340 | ja .high |
||
341 | je .l_22 |
||
342 | |||
343 | cmp ecx,8000 |
||
344 | je .l_8 |
||
345 | |||
346 | cmp ecx,11025 |
||
347 | je .l_11 |
||
348 | |||
349 | cmp ecx,12000 |
||
350 | je .l_12 |
||
351 | |||
352 | cmp ecx,16000 |
||
353 | je .l_16 |
||
354 | ;-------------------------------------- |
||
355 | align 4 |
||
356 | .fail: |
||
357 | xor eax,eax |
||
358 | ret |
||
359 | ;-------------------------------------- |
||
360 | align 4 |
||
361 | .high: |
||
362 | cmp ecx,24000 |
||
363 | je .LN56 |
||
364 | |||
365 | cmp ecx,32000 |
||
366 | je .LN65 |
||
367 | |||
368 | cmp ecx,44100 |
||
369 | je .LN74 |
||
370 | |||
371 | cmp ecx,48000 |
||
372 | jne .fail |
||
373 | |||
374 | movzx ecx,word [eax+22] |
||
375 | dec ecx |
||
376 | je .LN79 |
||
377 | |||
378 | dec ecx |
||
379 | jne .LN74 |
||
380 | |||
381 | mov edx,19 |
||
382 | jmp .done |
||
383 | ;-------------------------------------- |
||
384 | align 4 |
||
385 | .LN79: |
||
386 | mov edx,20 |
||
387 | jmp .done |
||
388 | ;-------------------------------------- |
||
389 | align 4 |
||
390 | .LN74: |
||
391 | movzx ecx,word [eax+22] |
||
392 | dec ecx |
||
393 | je .LN70 |
||
394 | |||
395 | dec ecx |
||
396 | jne .LN65 |
||
397 | |||
398 | mov edx,21 |
||
399 | jmp .done |
||
400 | ;-------------------------------------- |
||
401 | align 4 |
||
402 | .LN70: |
||
403 | mov edx,22 |
||
404 | jmp .done |
||
405 | ;-------------------------------------- |
||
406 | align 4 |
||
407 | .LN65: |
||
408 | movzx ecx,word [eax+22] |
||
409 | dec ecx |
||
410 | je .LN61 |
||
411 | |||
412 | dec ecx |
||
413 | jne .LN56 |
||
414 | |||
415 | mov edx,23 |
||
416 | jmp .done |
||
417 | ;-------------------------------------- |
||
418 | align 4 |
||
419 | .LN61: |
||
420 | mov edx,24 |
||
421 | jmp .done |
||
422 | ;-------------------------------------- |
||
423 | align 4 |
||
424 | .LN56: |
||
425 | movzx ecx,word [eax+22] |
||
426 | dec ecx |
||
427 | je .LN52 |
||
428 | |||
429 | dec ecx |
||
430 | je .LN50 |
||
431 | ;-------------------------------------- |
||
432 | align 4 |
||
433 | .l_22: |
||
434 | movzx ecx,word [eax+22] |
||
435 | dec ecx |
||
436 | je .LN43 |
||
437 | |||
438 | dec ecx |
||
439 | je .LN41 |
||
440 | ;-------------------------------------- |
||
441 | align 4 |
||
442 | .l_16: |
||
443 | movzx ecx,word [eax+22] |
||
444 | dec ecx |
||
445 | je .LN34 |
||
446 | |||
447 | dec ecx |
||
448 | je .LN32 |
||
449 | ;-------------------------------------- |
||
450 | align 4 |
||
451 | .l_12: |
||
452 | movzx ecx,word [eax+22] |
||
453 | dec ecx |
||
454 | je .LN25 |
||
455 | |||
456 | dec ecx |
||
457 | je .LN23 |
||
458 | ;-------------------------------------- |
||
459 | align 4 |
||
460 | .l_11: |
||
461 | movzx ecx,word [eax+22] |
||
462 | dec ecx |
||
463 | je .LN16 |
||
464 | |||
465 | dec ecx |
||
466 | je .LN14 |
||
467 | ;-------------------------------------- |
||
468 | align 4 |
||
469 | .l_8: |
||
470 | movzx ecx,word [eax+22] |
||
471 | dec ecx |
||
472 | je .LN7 |
||
473 | |||
474 | dec ecx |
||
475 | jne .fail |
||
476 | |||
477 | mov edx,35 |
||
478 | jmp .done |
||
479 | ;-------------------------------------- |
||
480 | align 4 |
||
481 | .LN7: |
||
482 | mov edx,36 |
||
483 | jmp .done |
||
484 | ;-------------------------------------- |
||
485 | align 4 |
||
486 | .LN14: |
||
487 | mov edx,33 |
||
488 | jmp .done |
||
489 | ;-------------------------------------- |
||
490 | align 4 |
||
491 | .LN16: |
||
492 | mov edx,34 |
||
493 | jmp .done |
||
494 | ;-------------------------------------- |
||
495 | align 4 |
||
496 | .LN23: |
||
497 | mov edx,31 |
||
498 | jmp .done |
||
499 | ;-------------------------------------- |
||
500 | align 4 |
||
501 | .LN25: |
||
502 | mov edx,32 |
||
503 | jmp .done |
||
504 | ;-------------------------------------- |
||
505 | align 4 |
||
506 | .LN32: |
||
507 | mov edx,29 |
||
508 | jmp .done |
||
509 | ;-------------------------------------- |
||
510 | align 4 |
||
511 | .LN34: |
||
512 | mov edx,30 |
||
513 | jmp .done |
||
514 | ;-------------------------------------- |
||
515 | align 4 |
||
516 | .LN41: |
||
517 | mov edx,27 |
||
518 | jmp .done |
||
519 | ;-------------------------------------- |
||
520 | align 4 |
||
521 | .LN43: |
||
522 | mov edx,28 |
||
523 | jmp .done |
||
524 | ;-------------------------------------- |
||
525 | align 4 |
||
526 | .LN50: |
||
527 | mov edx,25 |
||
528 | jmp .done |
||
529 | ;-------------------------------------- |
||
530 | align 4 |
||
531 | .LN52: |
||
532 | mov edx,26 |
||
533 | ;-------------------------------------- |
||
534 | align 4 |
||
535 | .done: |
||
536 | xor ecx,ecx |
||
537 | cmp word [eax+34],16 |
||
538 | setne cl |
||
539 | dec ecx |
||
540 | and ecx,-18 |
||
541 | add ecx,edx |
||
542 | mov eax,ecx |
||
543 | ret |
||
544 | endp |
||
545 | ;------------------------------------------------------------------------------ |