33,6 → 33,7 |
PROC_BASE equ OS_BASE+0x0080000 |
|
CAPS_SSE2 equ 26 |
PG_SW equ 0x003 |
|
|
public START |
113,7 → 114,7 |
mov [mix_3_core], mmx_mix_3 |
mov [mix_4_core], mmx_mix_4 |
jmp @F |
.mmx128: ;new 128-bit sse2 extensions |
.mmx128: ;128-bit integer sse2 extensions |
mov [mix_2_core], mmx128_mix_2 |
mov [mix_3_core], mmx128_mix_3 |
mov [mix_4_core], mmx128_mix_4 |
209,7 → 210,7 |
TASK_COUNT equ 0x0003004 |
CURRENT_TASK equ 0x0003000 |
|
align 8 |
align 4 |
proc CreateBuffer stdcall, format:dword |
locals |
str dd ? |
239,7 → 240,7 |
mov [edx+STREAM.str_bk], eax |
popf |
|
stdcall KernelAlloc, 168*1024 |
stdcall KernelAlloc, dword 72*1024 |
|
mov edi, [str] |
mov [edi+STREAM.base], eax |
256,13 → 257,33 |
mov [edi+STREAM.limit], eax |
mov [edi+STREAM.lim_1], eax |
|
; create ring buffer |
|
stdcall AllocKernelSpace, dword 128*1024 |
|
mov edi, [str] |
mov [edi+STREAM.work_buff], eax |
mov [edi+STREAM.work_read], eax |
mov [edi+STREAM.work_write], eax |
mov [edi+STREAM.work_count], 0 |
add eax, 0x10000 |
add eax, 64*1024 |
mov [edi+STREAM.work_top], eax |
|
stdcall AllocPages, dword 64/4 |
mov edi, [str] |
mov ebx, [edi+STREAM.work_buff] |
mov ecx, 16 |
or eax, PG_SW |
push eax |
push ebx |
call CommitPages ;eax, ebx, ecx |
mov ecx, 16 |
pop ebx |
pop eax |
add ebx, 64*1024 |
call CommitPages ;double mapped |
|
mov edi, [str] |
mov eax, [format] |
mov [edi+STREAM.format], eax |
mov [edi+STREAM.flags], SND_STOP |
297,10 → 318,16 |
stdcall MapPage, ebx, eax, dword 3 |
|
mov edi, [edi+STREAM.base] |
mov ecx, (168*1024)/4 |
mov ecx, (72*1024)/4 |
xor eax, eax |
cld |
rep stosd |
|
mov edi, [str] |
mov edi, [edi+STREAM.work_buff] |
mov ecx, (64*1024)/4 |
rep stosd |
|
mov eax, [str] |
ret |
.fail: |
308,6 → 335,7 |
ret |
endp |
|
if 0 |
align 4 |
pid_to_slot: |
|
337,11 → 365,14 |
pop ebx |
ret |
|
end if |
|
;param |
; eax= buffer handle |
|
align 4 |
DestroyBuffer: |
.handle equ esp ;local |
|
cmp [eax+STREAM.magic], 'WAVE' |
jne .fail |
349,6 → 380,8 |
cmp [eax+STREAM.size], STREAM_SIZE |
jne .fail |
.destroy: |
push eax |
|
pushf |
cli |
mov ebx, [eax+STREAM.str_fd] |
357,11 → 390,12 |
mov [ecx+STREAM.str_fd], ebx |
popf |
|
push eax |
stdcall KernelFree, [eax+STREAM.base] |
pop eax |
mov eax, [.handle] |
stdcall KernelFree, [eax+STREAM.work_buff] |
|
pop eax ;restore stack |
call DestroyObject ;eax |
ret |
.fail: |
ret |
|
526,13 → 560,6 |
cmp [edi+STREAM.size], STREAM_SIZE |
jne .next |
|
; mov eax,[edi+STREAM.pid] |
; cmp eax, -1 |
; je .next |
; call pid_to_slot |
; test eax, eax |
; jz .next |
|
cmp [edi+STREAM.flags], SND_PLAY; |
jne .next |
cmp [edi+STREAM.work_count], 16384 |
673,7 → 700,7 |
mm_mask dq 0xFF00FF00FF00FF00 |
|
;stream_map dd 0xFFFF ; 16 |
version dd 0x00030003 |
version dd 0x00030004 |
|
szInfinity db 'INFINITY',0 |
szSound db 'SOUND',0 |