Rev 285 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 285 | Rev 291 | ||
---|---|---|---|
Line 17... | Line 17... | ||
17 | 17 | ||
18 | include 'proc32.inc' |
18 | include 'proc32.inc' |
19 | include 'main.inc' |
19 | include 'main.inc' |
Line -... | Line 20... | ||
- | 20 | include 'imports.inc' |
|
- | 21 | ||
- | 22 | USE_MMX equ 0 |
|
- | 23 | USE_MMX_128 equ 0 |
|
20 | include 'imports.inc' |
24 | USE_SSE equ 0 |
Line 21... | Line 25... | ||
21 | 25 | ||
Line 22... | Line 26... | ||
22 | DEBUG equ 1 |
26 | DEBUG equ 1 |
Line 69... | Line 73... | ||
69 | stdcall KernelAlloc, 16*512 |
73 | stdcall KernelAlloc, 16*512 |
70 | test eax, eax |
74 | test eax, eax |
71 | jz .out_of_mem |
75 | jz .out_of_mem |
72 | mov [mix_buff], eax |
76 | mov [mix_buff], eax |
Line 73... | Line 77... | ||
73 | 77 | ||
74 | mov edi, stream_list |
- | |
75 | mov ecx, 17 |
78 | mov eax, str.fd-FD_OFFSET |
76 | xor eax, eax |
- | |
77 | cld |
- | |
78 | rep stosd |
- | |
79 | 79 | mov [str.fd], eax |
|
80 | mov edi, stream |
- | |
81 | mov ecx, 4*STREAM_SIZE |
- | |
82 | rep stosd |
- | |
Line 83... | Line 80... | ||
83 | mov [stream_count],0 |
80 | mov [str.bk], eax |
84 | 81 | ||
85 | stdcall set_handler, [hSound], new_mix |
82 | stdcall set_handler, [hSound], new_mix |
86 | stdcall RegService, szInfinity, service_proc |
83 | stdcall RegService, szInfinity, service_proc |
Line 151... | Line 148... | ||
151 | ret |
148 | ret |
152 | @@: |
149 | @@: |
153 | cmp eax, SND_DESTROY_BUFF |
150 | cmp eax, SND_DESTROY_BUFF |
154 | jne @F |
151 | jne @F |
Line 155... | Line 152... | ||
155 | 152 | ||
- | 153 | mov eax, [edi+input] |
|
156 | mov ebx, [edi+input] |
154 | mov eax, [eax] |
157 | stdcall DestroyBuffer, [ebx] |
155 | call DestroyBuffer ;eax |
158 | ret |
156 | ret |
159 | @@: |
157 | @@: |
160 | xor eax, eax |
158 | xor eax, eax |
161 | ret |
159 | ret |
Line 175... | Line 173... | ||
175 | proc CreateBuffer stdcall, format:dword |
173 | proc CreateBuffer stdcall, format:dword |
176 | locals |
174 | locals |
177 | str dd ? |
175 | str dd ? |
178 | endl |
176 | endl |
Line -... | Line 177... | ||
- | 177 | ||
- | 178 | mov ebx, [CURRENT_TASK] ;hack: direct accsess |
|
- | 179 | shl ebx, 5 ;to kernel data |
|
- | 180 | mov ebx, [0x3000+ebx+4] |
|
- | 181 | mov eax, STREAM_SIZE |
|
179 | 182 | ||
180 | call alloc_stream |
183 | call CreateObject |
181 | and eax, eax |
184 | test eax, eax |
182 | jz .fail |
185 | jz .fail |
183 | mov [str], eax |
- | |
Line 184... | Line 186... | ||
184 | mov edi, eax |
186 | mov [str], eax |
185 | 187 | ||
186 | mov edx, [stream_count] |
188 | mov [eax+STREAM.magic], 'WAVE' |
Line -... | Line 189... | ||
- | 189 | mov [eax+STREAM.destroy], DestroyBuffer.destroy |
|
- | 190 | mov [eax+STREAM.size], STREAM_SIZE |
|
- | 191 | ||
- | 192 | pushf |
|
- | 193 | cli |
|
- | 194 | mov ebx, str.fd-FD_OFFSET |
|
187 | mov [stream_list+edx*4], eax |
195 | mov edx, [ebx+STREAM.str_fd] |
188 | inc [stream_count] |
196 | mov [eax+STREAM.str_fd], edx |
- | 197 | mov [eax+STREAM.str_bk], ebx |
|
Line 189... | Line 198... | ||
189 | 198 | mov [ebx+STREAM.str_fd], eax |
|
Line 190... | Line 199... | ||
190 | mov [edi+STREAM.magic], 'WAVE' |
199 | mov [edx+STREAM.str_bk], eax |
191 | mov [edi+STREAM.size], STREAM_SIZE |
200 | popf |
192 | 201 | ||
193 | stdcall KernelAlloc, 172*1024 |
202 | stdcall KernelAlloc, 168*1024 |
Line 212... | Line 221... | ||
212 | mov [edi+STREAM.work_write], eax |
221 | mov [edi+STREAM.work_write], eax |
213 | mov [edi+STREAM.work_count], 0 |
222 | mov [edi+STREAM.work_count], 0 |
214 | add eax, 0x10000 |
223 | add eax, 0x10000 |
215 | mov [edi+STREAM.work_top], eax |
224 | mov [edi+STREAM.work_top], eax |
Line 216... | Line -... | ||
216 | - | ||
217 | mov ebx, [CURRENT_TASK] |
- | |
218 | shl ebx, 5 |
- | |
219 | mov eax, [0x3000+ebx+4] |
- | |
220 | - | ||
221 | mov [edi+STREAM.notify_task], eax |
- | |
222 | 225 | ||
223 | mov eax, [format] |
226 | mov eax, [format] |
224 | mov [edi+STREAM.format], eax |
227 | mov [edi+STREAM.format], eax |
Line 225... | Line 228... | ||
225 | mov [edi+STREAM.flags], SND_STOP |
228 | mov [edi+STREAM.flags], SND_STOP |
Line 292... | Line 295... | ||
292 | mov eax,ecx |
295 | mov eax,ecx |
293 | pop ecx |
296 | pop ecx |
294 | pop ebx |
297 | pop ebx |
295 | ret |
298 | ret |
Line 296... | Line 299... | ||
296 | 299 | ||
297 | align 4 |
300 | ;param |
Line -... | Line 301... | ||
- | 301 | ; eax= buffer handle |
|
298 | proc DestroyBuffer stdcall, str:dword |
302 | |
Line 299... | Line 303... | ||
299 | 303 | align 4 |
|
300 | mov esi, [str] |
304 | DestroyBuffer: |
Line 301... | Line 305... | ||
301 | 305 | ||
302 | cmp [esi+STREAM.magic], 'WAVE' |
306 | cmp [eax+STREAM.magic], 'WAVE' |
- | 307 | jne .fail |
|
- | 308 | ||
- | 309 | cmp [eax+STREAM.size], STREAM_SIZE |
|
- | 310 | jne .fail |
|
- | 311 | .destroy: |
|
- | 312 | pushf |
|
- | 313 | cli |
|
- | 314 | mov ebx, [eax+STREAM.str_fd] |
|
Line 303... | Line -... | ||
303 | jne .fail |
- | |
304 | - | ||
305 | cmp [esi+STREAM.size], STREAM_SIZE |
- | |
306 | jne .fail |
- | |
307 | - | ||
308 | stdcall KernelFree, [esi+STREAM.base] |
- | |
309 | - | ||
310 | mov eax, [str] |
- | |
311 | call free_stream |
- | |
312 | - | ||
313 | mov edi, [str] |
- | |
314 | mov ecx, STREAM_SIZE/4 |
- | |
315 | xor eax, eax |
- | |
316 | cld |
- | |
317 | rep stosd |
- | |
318 | - | ||
319 | mov eax, [str] |
- | |
320 | mov esi, stream_list |
- | |
321 | mov ecx, 16 |
315 | mov ecx, [eax+STREAM.str_bk] |
322 | @@: |
- | |
323 | cmp [esi], eax |
316 | mov [ebx+STREAM.str_bk], ecx |
324 | je .remove |
317 | mov [ecx+STREAM.str_fd], ebx |
325 | add esi, 4 |
- | |
326 | dec ecx |
- | |
327 | jnz @B |
- | |
328 | xor eax, eax |
- | |
329 | inc eax |
- | |
330 | ret |
- | |
331 | .remove: |
318 | popf |
332 | mov edi, esi |
- | |
333 | add esi, 4 |
- | |
334 | cld |
319 | |
335 | rep movsd |
320 | push eax |
336 | dec [stream_count] |
- | |
337 | xor eax, eax |
321 | stdcall KernelFree, [eax+STREAM.base] |
338 | inc eax |
- | |
Line 339... | Line 322... | ||
339 | ret |
322 | pop eax |
340 | .fail: |
323 | call DestroyObject ;eax |
Line 341... | Line 324... | ||
341 | xor eax, eax |
324 | ret |
Line 485... | Line 468... | ||
485 | xor eax, eax |
468 | xor eax, eax |
486 | ret |
469 | ret |
487 | endp |
470 | endp |
Line 488... | Line 471... | ||
488 | 471 | ||
489 | align 4 |
472 | align 4 |
490 | proc alloc_stream |
- | |
491 | - | ||
492 | mov esi, stream_map |
- | |
493 | - | ||
494 | pushf |
- | |
Line 495... | Line -... | ||
495 | cli |
- | |
496 | - | ||
497 | bsf eax, [esi] |
- | |
498 | jnz .find |
- | |
499 | popf |
- | |
500 | xor eax, eax |
- | |
501 | ret |
- | |
502 | .find: |
- | |
503 | btr [esi], eax |
- | |
504 | popf |
- | |
505 | mov ebx, STREAM_SIZE |
- | |
506 | mul ebx |
- | |
507 | add eax, stream |
- | |
508 | ret |
- | |
509 | endp |
- | |
510 | - | ||
511 | align 4 |
- | |
512 | proc free_stream |
- | |
513 | sub eax, stream |
- | |
514 | mov ebx, STREAM_SIZE |
- | |
515 | xor edx, edx |
- | |
516 | div ebx |
- | |
517 | - | ||
518 | and edx, edx |
- | |
519 | jnz .err |
- | |
520 | - | ||
521 | bts [stream_map], eax |
- | |
522 | ret |
- | |
523 | .err: |
- | |
524 | xor eax, eax |
- | |
525 | ret |
- | |
526 | endp |
- | |
527 | - | ||
528 | align 4 |
- | |
529 | proc prepare_playlist |
- | |
530 | - | ||
531 | .restart: |
473 | prepare_playlist: |
532 | xor ebx, ebx |
474 | |
533 | xor edx, edx |
475 | xor edx, edx |
534 | mov [play_count], 0 |
476 | mov [play_count], edx |
535 | mov ecx, [stream_count] |
477 | mov esi, str.fd-FD_OFFSET |
536 | jcxz .exit |
- | |
537 | .l1: |
478 | mov edi, [esi+STREAM.str_fd] |
538 | mov esi, [stream_list+ebx] |
479 | @@: |
Line 539... | Line 480... | ||
539 | test esi, esi |
480 | cmp edi, esi |
540 | jz .next |
481 | je .done |
Line 541... | Line 482... | ||
541 | 482 | ||
542 | cmp [esi+STREAM.magic], 'WAVE' |
483 | cmp [edi+STREAM.magic], 'WAVE' |
Line 543... | Line 484... | ||
543 | jne .next |
484 | jne .next |
544 | 485 | ||
545 | cmp [esi+STREAM.size], STREAM_SIZE |
486 | cmp [edi+STREAM.size], STREAM_SIZE |
- | 487 | jne .next |
|
- | 488 | ||
- | 489 | ; mov eax,[edi+STREAM.pid] |
|
Line 546... | Line -... | ||
546 | jne .next |
- | |
547 | - | ||
548 | mov eax,[esi+STREAM.notify_task] |
- | |
549 | cmp eax, -1 |
- | |
550 | je .fail |
490 | ; cmp eax, -1 |
551 | 491 | ; je .next |
|
552 | call pid_to_slot |
492 | ; call pid_to_slot |
553 | test eax, eax |
493 | ; test eax, eax |
Line 554... | Line 494... | ||
554 | jz .fail |
494 | ; jz .next |
555 | - | ||
556 | cmp [esi+STREAM.flags], SND_PLAY; |
- | |
557 | jne .next |
- | |
558 | cmp [esi+STREAM.work_count], 16384 |
- | |
559 | jb .next |
- | |
560 | - | ||
561 | mov [play_list+edx], esi |
- | |
562 | inc [play_count] |
- | |
563 | add edx, 4 |
- | |
564 | .next: |
- | |
565 | add ebx, 4 |
- | |
566 | loop .l1 |
- | |
567 | .exit: |
- | |
568 | ret |
- | |
569 | .fail: |
- | |
570 | stdcall DestroyBuffer, esi |
- | |
571 | jmp .restart |
- | |
572 | endp |
- | |
573 | - | ||
574 | align 4 |
- | |
575 | proc prepare_updatelist |
- | |
576 | - | ||
577 | xor ebx, ebx |
- | |
578 | xor edx, edx |
- | |
579 | mov [play_count], 0 |
- | |
580 | mov ecx, [stream_count] |
- | |
581 | jcxz .exit |
- | |
582 | .l1: |
- | |
583 | mov eax, [stream_list+ebx] |
495 | |
584 | test eax, eax |
496 | cmp [edi+STREAM.flags], SND_PLAY; |
585 | jz .next |
497 | jne .next |
586 | cmp [eax+STREAM.flags], SND_PLAY |
498 | cmp [edi+STREAM.work_count], 16384 |
587 | jne .next |
499 | jb .next |
588 | 500 | ||
589 | mov [play_list+edx], eax |
501 | mov [play_list+edx], edi |
590 | inc [play_count] |
- | |
Line 591... | Line 502... | ||
591 | add edx, 4 |
502 | inc [play_count] |
592 | .next: |
503 | add edx, 4 |
593 | add ebx, 4 |
504 | .next: |
594 | loop .l1 |
505 | mov edi, [edi+STREAM.str_fd] |
Line 651... | Line 562... | ||
651 | ret |
562 | ret |
652 | endp |
563 | endp |
Line 653... | Line 564... | ||
653 | 564 | ||
Line -... | Line 565... | ||
- | 565 | include 'mixer.asm' |
|
- | 566 | ||
- | 567 | ;if USE_MMX |
|
- | 568 | ; include 'mix_mmx.inc' |
|
- | 569 | ;end if |
|
- | 570 | ||
- | 571 | if USE_MMX_128 |
|
- | 572 | include 'mix_sse2.inc' |
|
- | 573 | end if |
|
- | 574 | ||
- | 575 | ;if USE_SSE |
|
- | 576 | ; include 'mix_sse.inc' |
|
654 | include 'mixer.asm' |
577 | ;end if |
655 | 578 | ||
656 | align 16 |
579 | align 16 |
657 | resampler_params: |
580 | resampler_params: |
658 | ;r_size r_end r_dt resampler_func |
581 | ;r_size r_end r_dt resampler_func |
Line 713... | Line 636... | ||
713 | 636 | ||
714 | m7 dw 0x8000,0x8000,0x8000,0x8000 |
637 | m7 dw 0x8000,0x8000,0x8000,0x8000 |
715 | mm80 dq 0x8080808080808080 |
638 | mm80 dq 0x8080808080808080 |
Line 716... | Line 639... | ||
716 | mm_mask dq 0xFF00FF00FF00FF00 |
639 | mm_mask dq 0xFF00FF00FF00FF00 |
717 | 640 | ||
Line 718... | Line 641... | ||
718 | stream_map dd 0xFFFF ; 16 |
641 | ;stream_map dd 0xFFFF ; 16 |
719 | version dd 0x00030003 |
642 | version dd 0x00030003 |
Line 725... | Line 648... | ||
725 | msgFail db 'Sound service not loaded',13,10,0 |
648 | msgFail db 'Sound service not loaded',13,10,0 |
726 | msgPlay db 'Play buffer',13,10,0 |
649 | msgPlay db 'Play buffer',13,10,0 |
727 | msgStop db 'Stop',13,10,0 |
650 | msgStop db 'Stop',13,10,0 |
728 | msgUser db 'User callback',13,10,0 |
651 | msgUser db 'User callback',13,10,0 |
729 | msgMem db 'Not enough memory',13,10,0 |
652 | msgMem db 'Not enough memory',13,10,0 |
- | 653 | msgDestroy db 'Destroy sound buffer', 13,10,0 |
|
730 | end if |
654 | end if |
Line 731... | Line 655... | ||
731 | 655 | ||
Line 732... | Line -... | ||
732 | section '.data' data readable writable align 16 |
- | |
733 | - | ||
734 | stream rb STREAM_SIZE*16 |
656 | section '.data' data readable writable align 16 |
735 | 657 | ||
736 | play_list rd 16 |
- | |
737 | mix_input rd 16 |
- | |
738 | 658 | play_list rd 16 |
|
739 | stream_list rd 17 |
- | |
740 | play_count rd 1 |
659 | mix_input rd 16 |
741 | stream_count rd 1 |
660 | play_count rd 1 |
742 | hSound rd 1 |
661 | hSound rd 1 |
- | 662 | mix_buff rd 1 |
|
- | 663 | mix_buff_map rd 1 |
|
- | 664 | str.fd rd 1 |
|
- | 665 | str.bk rd 1 |
|
- | 666 | ||
- | 667 | mix_2_1.core rd 1 |