/kernel/trunk/core/memory.inc |
---|
566,14 → 566,18 |
ret |
endp |
; param |
; eax= linear address |
; |
; retval |
; eax= phisical page address |
align 4 |
proc get_pg_addr stdcall, lin_addr:dword |
mov ebx, [lin_addr] |
shr ebx, 12 |
mov eax, [pages_tab+ebx*4] |
get_pg_addr: |
shr eax, 12 |
mov eax, [pages_tab+eax*4] |
and eax, 0xFFFFF000 |
ret |
endp |
align 4 |
proc page_fault_handler |
/kernel/trunk/drivers/ati2d.asm |
---|
981,7 → 981,7 |
dd (R9800XT shl 16)+VID_ATI |
dd 0 ;terminator |
version dd 0x00020002 |
version dd 0x00030003 |
sz_ati_srv db 'HWCURSOR',0 |
/kernel/trunk/drivers/imports.inc |
---|
40,7 → 40,7 |
extrn AllocPages |
end if |
if used FreePage |
extrn zFreePage |
extrn FreePage |
end if |
if used MapPage |
extrn MapPage |
/kernel/trunk/drivers/infinity.asm |
---|
190,22 → 190,22 |
mov [edi+STREAM.magic], 'WAVE' |
mov [edi+STREAM.size], STREAM_SIZE |
stdcall KernelAlloc, 180*1024 |
stdcall KernelAlloc, 172*1024 |
mov edi, [str] |
mov [edi+STREAM.base], eax |
add eax, 0x1000 |
mov [edi+STREAM.seg_0], eax |
mov [edi+STREAM.curr_seg], eax |
mov [edi+STREAM.notify_off1], eax |
add eax, 0x7FFF |
add eax, 0x8000 |
mov [edi+STREAM.lim_0], eax |
inc eax |
add eax, 0x1000 |
mov [edi+STREAM.seg_1], eax |
mov [edi+STREAM.notify_off2], eax |
add eax, 0x7FFF |
add eax, 0x8000 |
mov [edi+STREAM.limit], eax |
mov [edi+STREAM.lim_1], eax |
inc eax |
mov [edi+STREAM.work_buff], eax |
mov [edi+STREAM.work_read], eax |
213,8 → 213,6 |
mov [edi+STREAM.work_count], 0 |
add eax, 0x10000 |
mov [edi+STREAM.work_top], eax |
add eax, 1024*32 |
mov [edi+STREAM.r_buff], eax |
mov ebx, [CURRENT_TASK] |
shl ebx, 5 |
245,8 → 243,18 |
mov ebx, [resampler_params+eax+12] |
mov [edi+STREAM.resample], ebx |
mov edx, [edi+STREAM.base] |
lea eax, [edx+0x9000] |
call GetPgAddr ;eax |
call FreePage ;eax |
mov eax, edx |
lea ebx, [edx+0x9000] |
call GetPgAddr ;eax |
stdcall MapPage, ebx, eax, dword 3 |
mov edi, [edi+STREAM.base] |
mov ecx, 180*1024/4 |
mov ecx, (168*1024)/4 |
xor eax, eax |
rep stosd |
338,7 → 346,6 |
proc play_buffer stdcall, str:dword |
mov ebx, [str] |
cmp [ebx+STREAM.magic], 'WAVE' |
jne .fail |
345,46 → 352,51 |
cmp [ebx+STREAM.size], STREAM_SIZE |
jne .fail |
mov [ebx+STREAM.flags], SND_PLAY |
mov eax,[ebx+STREAM.work_buff] |
mov [ebx+STREAM.work_read], eax |
mov [ebx+STREAM.work_write], eax |
mov edi,[ebx+STREAM.work_buff] |
mov [ebx+STREAM.work_read], edi |
mov [ebx+STREAM.work_write], edi |
mov [ebx+STREAM.work_count], 0 |
mov eax, [ebx+STREAM.seg_0] |
mov [ebx+STREAM.curr_seg], eax |
mov edx, [ebx+STREAM.base] |
add edx, 0x1000 |
mov [ebx+STREAM.seg_0], edx |
mov [ebx+STREAM.curr_seg], edx |
add edx, 0x8000 |
mov [ebx+STREAM.lim_0], edx |
add edx, 0x1000 |
mov [ebx+STREAM.seg_1], edx |
add edx, 0x8000 |
mov [ebx+STREAM.lim_1], edx |
mov esi, [ebx+STREAM.curr_seg] |
mov edi, [ebx+STREAM.work_write] |
mov edx, [ebx+STREAM.r_buff] |
mov ecx, 32 |
mov edx, [ebx+STREAM.seg_0] |
mov ecx, -128 |
mov eax, [ebx+STREAM.r_silence] |
@@: |
mov [edx], eax |
add edx, 4 |
dec ecx |
mov [edx+ecx], eax |
add ecx, 4 |
jnz @B |
mov edx, [ebx+STREAM.r_buff] |
stdcall [ebx+STREAM.resample], edi, esi, edx,\ |
stdcall [ebx+STREAM.resample], edi, edx,\ |
[ebx+STREAM.r_dt],[ebx+STREAM.r_size],[ebx+STREAM.r_end] |
mov ebx, [str] |
add [ebx+STREAM.work_count], eax; |
add [ebx+STREAM.work_write], eax; |
add [ebx+STREAM.work_count], eax |
add [ebx+STREAM.work_write], eax |
mov eax, [ebx+STREAM.r_size] |
add [ebx+STREAM.curr_seg], eax |
mov edx, [ebx+STREAM.r_size] |
add [ebx+STREAM.curr_seg], edx |
; if DEBUG |
; mov esi, msgPlay |
; call [SysMsgBoardStr] |
; end if |
mov [ebx+STREAM.flags], SND_PLAY |
mov eax, [ebx+STREAM.r_silence] |
mov edi, [ebx+STREAM.work_write] |
mov ecx, [ebx+STREAM.work_top] |
sub ecx, edi |
shr ecx, 2 |
cld |
rep stosd |
stdcall dev_play, [hSound] |
xor eax, eax |
inc eax |
437,27 → 449,35 |
cmp esi, new_app_base |
jb .fail |
mov ecx, [size] |
test ecx, ecx |
jz .fail |
mov edi, [offs] |
mov ecx, 0x8000 |
mov eax, [edx+STREAM.base] |
add eax, [offs] |
sub ecx, edi |
jbe .seg_1 |
cmp eax, [edx+STREAM.base] |
sub [size], ecx |
jb .fail |
mov edi, eax |
add eax, ecx |
sub eax, 1 |
cmp eax, [edx+STREAM.limit] |
add edi, [edx+STREAM.base] |
add edi, 0x1000 |
shr ecx, 2 |
cld |
rep movsd |
jmp @F |
.seg_1: |
add edi, [edx+STREAM.base] |
add edi, 0x1000 |
@@: |
add edi, 0x1000 |
mov ecx, [size] |
test ecx, ecx |
jz .done |
cmp ecx, 0x8000 |
ja .fail |
shr ecx, 2 |
cld |
rep movsd |
.done: |
xor eax, eax |
inc eax |
ret |
505,34 → 525,7 |
ret |
endp |
if 0 |
align 4 |
proc check_stream |
xor edx, edx |
mov ecx, [play_count] |
.l1: |
mov esi, [play_list+edx] |
mov eax, [esi+STR.curr_seg] |
cmp eax, [esi+STR.lim_0] |
jb .next |
mov eax, [esi+STREAM.seg_0] |
mov ecx, [esi+STREAM.lim_0] |
xchg eax, [ebx+STREAM.seg_1] |
xchg ecx, [ebx+STREAM.lim_1] |
mov [esi+STREAM.seg_0], eax |
mov [esi+STREAM.lim_0], ecx |
mov [esi+STR.curr_seg], eax |
.next: |
add edx, 4 |
loop .l1 |
ret |
endp |
end if |
align 4 |
proc prepare_playlist |
.restart: |
723,7 → 716,7 |
mm_mask dq 0xFF00FF00FF00FF00 |
stream_map dd 0xFFFF ; 16 |
version dd 0x00020002 |
version dd 0x00030003 |
szInfinity db 'INFINITY',0 |
szSound db 'SOUND',0 |
/kernel/trunk/drivers/main.inc |
---|
91,7 → 91,6 |
.work_write dd 0 |
.work_count dd 0 |
.work_top dd 0 |
.r_buff dd 0 |
.r_size dd 0 |
.r_end dd 0 |
.r_dt dd 0 |
112,7 → 111,7 |
.resample dd 0 |
} |
STREAM_SIZE equ 27*4 |
STREAM_SIZE equ 26*4 |
virtual at 0 |
STREAM STREAM |
/kernel/trunk/drivers/mixer.asm |
---|
223,9 → 223,8 |
.m2: |
mov esi, [ebx+STREAM.curr_seg] |
mov edi, [ebx+STREAM.work_write] |
mov edx, [ebx+STREAM.r_buff] |
stdcall [ebx+STREAM.resample], edi, esi, edx,\ |
stdcall [ebx+STREAM.resample], edi, esi, \ |
[ebx+STREAM.r_dt],[ebx+STREAM.r_size],[ebx+STREAM.r_end] |
mov ebx, [str] |
238,6 → 237,13 |
cmp eax, [ebx+STREAM.lim_0] |
jb @f |
mov esi, [ebx+STREAM.seg_0] |
lea edi, [esi-128] |
add esi, 0x7F80 |
mov ecx, 128/4 |
cld |
rep movsd |
mov eax, [ebx+STREAM.seg_0] |
mov ecx, [ebx+STREAM.lim_0] |
xchg eax, [ebx+STREAM.seg_1] |
273,18 → 279,18 |
endp |
align 4 |
proc resample_1 stdcall, dest:dword,src:dword,r_buff:dword,\ |
proc resample_1 stdcall, dest:dword,src:dword,\ |
r_dt:dword, r_size:dword,r_end:dword |
mov edi, [r_buff] |
add edi, 32*2 |
mov esi, [src] |
mov ecx, [r_size] |
shr ecx, 2 |
rep movsd |
; dest equ esp+8 |
; src equ esp+12 |
; r_dt equ esp+16 |
; r_size equ esp+20 |
;r_end equ esp+24 |
mov edi, [dest] |
mov edx, [r_buff] |
mov edx, [src] |
sub edx, 32*2 |
mov eax, 16 |
align 16 |
318,25 → 324,12 |
mov [edi], ebx |
add edi, 4 |
add eax, [esp+20] ;rdt |
cmp eax, [esp+28] ;r_end |
add eax, [esp+16] |
cmp eax, [esp+24] |
jb .l1 |
mov ebp, esp |
mov esi, [src] |
add esi, [r_size] |
sub esi, 32*2 |
mov edx, [r_buff] |
mov ecx, 16 |
@@: |
mov ebx, [esi] |
mov [edx], ebx |
add esi, 4 |
add edx, 4 |
dec ecx |
jnz @B |
sub edi, [dest] |
mov eax, edi |
ret |
343,18 → 336,14 |
endp |
align 4 |
proc resample_18 stdcall, dest:dword,src:dword,r_buff:dword,\ |
proc resample_18 stdcall, dest:dword,src:dword,\ |
r_dt:dword, r_size:dword,r_end:dword |
mov edi, [r_buff] |
add edi, 32 |
mov esi, [src] |
mov ecx, [r_size] |
shr ecx, 2 |
rep movsd |
mov edi, [dest] |
mov edx, [r_buff] |
mov edx, [src] |
sub edx, 32 |
mov esi, 16 |
align 16 |
393,25 → 382,11 |
mov [edi], ebx |
add edi, 4 |
add esi, [esp+20] ;rdt |
cmp esi, [esp+28] ;r_end |
add esi, [esp+16] |
cmp esi, [esp+24] |
jb .l1 |
mov ebp, esp |
mov esi, [src] |
add esi, [r_size] |
sub esi, 32 |
mov edx, [r_buff] |
mov ecx, 8 |
@@: |
mov ebx, [esi] |
mov [edx], ebx |
add esi, 4 |
add edx, 4 |
dec ecx |
jnz @B |
sub edi, [dest] |
mov eax, edi |
ret |
418,7 → 393,7 |
endp |
align 4 |
proc copy_stream stdcall, dest:dword,src:dword,r_buff:dword,\ |
proc copy_stream stdcall, dest:dword,src:dword,\ |
r_dt:dword, r_size:dword,r_end:dword |
mov ecx, [r_size] |
432,17 → 407,11 |
endp |
align 4 |
proc resample_2 stdcall, dest:dword,src:dword,r_buff:dword,\ |
proc resample_2 stdcall, dest:dword,src:dword,\ |
r_dt:dword, r_size:dword,r_end:dword |
mov edi, [r_buff] |
add edi, 32*4 |
mov esi, [src] |
mov ecx, [r_size] |
shr ecx, 2 |
rep movsd ;call memcpy |
mov edx, [r_buff] |
mov edx, [src] |
sub edx, 32*4 |
mov edi, [dest] |
mov ebx, [r_dt] |
mov eax, 16 |
461,9 → 430,9 |
movd mm2, ecx |
punpcklwd mm2, mm2 |
movq mm3, qword [m7] ; // 0x8000 |
movq mm3, qword [m7] ;0x8000 |
psubw mm3, mm2 ; // 0x8000 - iconst |
psubw mm3, mm2 ; ;0x8000 - iconst |
punpckldq mm3, mm2 |
pmulhw mm0, mm3 |
483,19 → 452,6 |
jb .l1 |
emms |
mov esi, [src] |
add esi, [r_size] |
sub esi, 32*4 |
mov edx, [r_buff] |
mov ecx, 32 |
@@: |
mov ebx, [esi] |
mov [edx], ebx |
add esi, 4 |
add edx, 4 |
dec ecx |
jnz @B |
sub edi, [dest] |
mov eax, edi |
ret |
502,17 → 458,11 |
endp |
align 4 |
proc resample_28 stdcall, dest:dword,src:dword,r_buff:dword,\ |
proc resample_28 stdcall, dest:dword,src:dword,\ |
r_dt:dword, r_size:dword,r_end:dword |
mov edi, [r_buff] |
add edi, 32*2 |
mov esi, [src] |
mov ecx, [r_size] |
shr ecx, 2 |
rep movsd ;call memcpy |
mov edx, [r_buff] |
mov edx, [src] |
sub edx, 32*2 |
mov edi, [dest] |
mov ebx, [r_dt] |
mov eax, 16 |
559,18 → 509,6 |
jb .l1 |
emms |
mov esi, [src] |
add esi, [r_size] |
sub esi, 32*2 |
mov edx, [r_buff] |
mov ecx, 16 |
@@: |
mov ebx, [esi] |
mov [edx], ebx |
add esi, 4 |
add edx, 4 |
dec ecx |
jnz @B |
sub edi, [dest] |
mov eax, edi |
578,7 → 516,7 |
endp |
proc m16_stereo stdcall, dest:dword,src:dword,r_buff:dword,\ |
proc m16_stereo stdcall, dest:dword,src:dword,\ |
r_dt:dword, r_size:dword,r_end:dword |
mov esi, [src] |
607,7 → 545,7 |
endp |
align 4 |
proc s8_stereo stdcall, dest:dword,src:dword,r_buff:dword,\ |
proc s8_stereo stdcall, dest:dword,src:dword,\ |
r_dt:dword, r_size:dword,r_end:dword |
mov esi, [src] |
638,7 → 576,7 |
ret |
endp |
proc m8_stereo stdcall, dest:dword,src:dword,r_buff:dword,\ |
proc m8_stereo stdcall, dest:dword,src:dword,\ |
r_dt:dword, r_size:dword,r_end:dword |
mov esi, [src] |
/kernel/trunk/drivers/sceletone.asm |
---|
143,7 → 143,7 |
devices dd (DEVICE_ID shl 16)+VENDOR_ID |
dd 0 ;terminator |
version dd 0x00020002 |
version dd 0x00030003 |
my_service db 'MY_SERVICE',0 ;max 16 chars include zero |
/kernel/trunk/drivers/sis.asm |
---|
457,7 → 457,8 |
xor eax, eax |
rep stosd |
stdcall GetPgAddr, [ctrl.buffer] |
mov eax, [ctrl.buffer] |
call GetPgAddr |
mov ebx, 0xC0004000 |
mov ecx, 4 |
501,10 → 502,11 |
add edi, 4 |
loop @B |
mov ecx, pcmout_bdl |
stdcall GetPgAddr, ecx |
and ecx, 0xFFF |
add eax, ecx |
mov eax, pcmout_bdl |
mov ebx, eax |
call GetPgAddr ;eax |
and ebx, 0xFFF |
add eax, ebx |
mov edx, PCM_OUT_BDL |
call [ctrl.ctrl_write32] |
1130,7 → 1132,7 |
devices dd (CTRL_SIS shl 16)+VID_SIS,msg_AC, set_SIS |
dd 0 |
version dd 0x00020002 |
version dd 0x00030003 |
msg_AC db '7012 AC97 controller',13,10, 0 |
msg_SIS db 'Silicon Integrated Systems',13,10, 0 |
/kernel/trunk/drivers/unisound.asm |
---|
521,7 → 521,8 |
cld |
rep stosd |
stdcall GetPgAddr, [ctrl.buffer] |
mov eax, [ctrl.buffer] |
call GetPgAddr |
mov ebx, 0xC0002000 |
mov ecx, 4 |
572,10 → 573,11 |
add edi, 4 |
loop @B |
mov ecx, pcmout_bdl |
stdcall GetPgAddr, ecx |
and ecx, 0xFFF |
add eax, ecx |
mov eax, pcmout_bdl |
mov ebx, eax |
call GetPgAddr ;eax |
and ebx, 0xFFF |
add eax, ebx |
mov edx, PCM_OUT_BDL |
call [ctrl.ctrl_write32] |
1351,7 → 1353,7 |
dd 0 ;terminator |
version dd 0x00020002 |
version dd 0x00030003 |
msg_ICH db 'Intel ICH', 13,10, 0 |
msg_ICH0 db 'Intel ICH0', 13,10, 0 |