forked from KolibriOS/kolibrios
1)unisound.asm - added all known NV controllers
2)DLL loader git-svn-id: svn://kolibrios.org@198 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
7206330557
commit
40b1c24dc3
@ -543,6 +543,8 @@ proc get_proc_ex stdcall, proc_name:dword, imports:dword
|
|||||||
|
|
||||||
.look_up:
|
.look_up:
|
||||||
mov edx, [imports]
|
mov edx, [imports]
|
||||||
|
test edx, edx
|
||||||
|
jz .end
|
||||||
mov edx, [edx]
|
mov edx, [edx]
|
||||||
test edx, edx
|
test edx, edx
|
||||||
jz .end
|
jz .end
|
||||||
@ -806,6 +808,112 @@ proc load_driver stdcall, file_name:dword
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
align 4
|
||||||
|
proc load_library stdcall, file_name:dword
|
||||||
|
locals
|
||||||
|
coff dd ?
|
||||||
|
sym dd ?
|
||||||
|
strings dd ?
|
||||||
|
img_size dd ?
|
||||||
|
img_base dd ?
|
||||||
|
exports dd ?
|
||||||
|
endl
|
||||||
|
|
||||||
|
cli
|
||||||
|
|
||||||
|
stdcall load_file, [file_name]
|
||||||
|
|
||||||
|
test eax, eax
|
||||||
|
jz .fail
|
||||||
|
|
||||||
|
mov [coff], eax
|
||||||
|
movzx ecx, [eax+CFH.nSections]
|
||||||
|
xor ebx, ebx
|
||||||
|
|
||||||
|
lea edx, [eax+20]
|
||||||
|
@@:
|
||||||
|
add ebx, [edx+CFS.SizeOfRawData]
|
||||||
|
add ebx, 15
|
||||||
|
and ebx, not 15
|
||||||
|
add edx, 18
|
||||||
|
dec ecx
|
||||||
|
jnz @B
|
||||||
|
mov [img_size], ebx
|
||||||
|
|
||||||
|
call init_heap
|
||||||
|
stdcall user_alloc, [img_size]
|
||||||
|
|
||||||
|
test eax, eax
|
||||||
|
jz .fail
|
||||||
|
mov [img_base], eax
|
||||||
|
|
||||||
|
mov edx, [coff]
|
||||||
|
movzx ebx, [edx+CFH.nSections]
|
||||||
|
mov edi, [img_base]
|
||||||
|
lea eax, [edx+20]
|
||||||
|
@@:
|
||||||
|
mov [eax+CFS.VirtualAddress], edi
|
||||||
|
mov esi, [eax+CFS.PtrRawData]
|
||||||
|
test esi, esi
|
||||||
|
jnz .copy
|
||||||
|
add edi, [eax+CFS.SizeOfRawData]
|
||||||
|
jmp .next
|
||||||
|
.copy:
|
||||||
|
add esi, edx
|
||||||
|
add edi, new_app_base
|
||||||
|
mov ecx, [eax+CFS.SizeOfRawData]
|
||||||
|
cld
|
||||||
|
rep movsb
|
||||||
|
.next:
|
||||||
|
add edi, 15-new_app_base
|
||||||
|
and edi, not 15
|
||||||
|
add eax, 40
|
||||||
|
dec ebx
|
||||||
|
jnz @B
|
||||||
|
|
||||||
|
mov ebx, [edx+CFH.pSymTable]
|
||||||
|
add ebx, edx
|
||||||
|
mov [sym], ebx
|
||||||
|
mov ecx, [edx+CFH.nSymbols]
|
||||||
|
add ecx,ecx
|
||||||
|
lea ecx,[ecx+ecx*8] ;ecx*=18 = nSymbols*CSYM_SIZE
|
||||||
|
add ecx, [sym]
|
||||||
|
mov [strings], ecx
|
||||||
|
|
||||||
|
lea eax, [edx+20]
|
||||||
|
|
||||||
|
stdcall fix_coff_symbols, eax, [sym], [edx+CFH.nSymbols],\
|
||||||
|
[strings], dword 0
|
||||||
|
test eax, eax
|
||||||
|
jnz @F
|
||||||
|
|
||||||
|
@@:
|
||||||
|
mov edx, [coff]
|
||||||
|
movzx ebx, [edx+CFH.nSections]
|
||||||
|
mov edi, new_app_base
|
||||||
|
lea eax, [edx+20]
|
||||||
|
@@:
|
||||||
|
add [eax+CFS.VirtualAddress], edi ;patch user space offset
|
||||||
|
add eax, 40
|
||||||
|
dec ebx
|
||||||
|
jnz @B
|
||||||
|
|
||||||
|
add edx, 20
|
||||||
|
stdcall fix_coff_relocs, [coff], edx, [sym]
|
||||||
|
|
||||||
|
mov ebx, [coff]
|
||||||
|
stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szEXPORTS
|
||||||
|
mov [exports], eax
|
||||||
|
|
||||||
|
stdcall kernel_free, [coff]
|
||||||
|
mov eax, [exports]
|
||||||
|
ret
|
||||||
|
.fail:
|
||||||
|
xor eax, eax
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
|
||||||
drv_sound db '/rd/1/unisound.obj', 0
|
drv_sound db '/rd/1/unisound.obj', 0
|
||||||
drv_infinity db '/rd/1/infinity.obj', 0
|
drv_infinity db '/rd/1/infinity.obj', 0
|
||||||
|
|
||||||
|
@ -972,14 +972,21 @@ new_services:
|
|||||||
mov [ecx+PROC_BASE+APPDATA.sse_handler], ebx
|
mov [ecx+PROC_BASE+APPDATA.sse_handler], ebx
|
||||||
mov [esp+36], eax
|
mov [esp+36], eax
|
||||||
ret
|
ret
|
||||||
|
@@:
|
||||||
|
cmp eax, 19
|
||||||
|
ja @f
|
||||||
|
add ebx, new_app_base
|
||||||
|
cmp ebx, new_app_base
|
||||||
|
jb .fail
|
||||||
|
stdcall load_library, ebx
|
||||||
|
mov [esp+36], eax
|
||||||
|
ret
|
||||||
@@:
|
@@:
|
||||||
.fail:
|
.fail:
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
mov [esp+36], eax
|
mov [esp+36], eax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc strncmp stdcall, str1:dword, str2:dword, count:dword
|
proc strncmp stdcall, str1:dword, str2:dword, count:dword
|
||||||
|
|
||||||
|
@ -1111,7 +1111,11 @@ proc new_sys_threads
|
|||||||
mov edi,edx
|
mov edi,edx
|
||||||
mov ecx,11
|
mov ecx,11
|
||||||
rep movsb ;copy process name
|
rep movsb ;copy process name
|
||||||
mov eax,[ebx+0x8c]
|
mov eax,[ebx+APPDATA.heap_base]
|
||||||
|
mov [edx+APPDATA.heap_base], eax
|
||||||
|
mov ecx,[ebx+APPDATA.heap_top]
|
||||||
|
mov [edx+APPDATA.heap_top], ecx
|
||||||
|
mov eax,[ebx+APPDATA.mem_size]
|
||||||
mov [app_mem],eax ;set memory size
|
mov [app_mem],eax ;set memory size
|
||||||
mov eax,[ebx+0xb8]
|
mov eax,[ebx+0xb8]
|
||||||
mov [edx+0xb8],eax ;copy page directory
|
mov [edx+0xb8],eax ;copy page directory
|
||||||
|
@ -614,7 +614,6 @@ proc prepare_updatelist
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc set_handler stdcall, hsrv:dword, handler_proc:dword
|
proc set_handler stdcall, hsrv:dword, handler_proc:dword
|
||||||
locals
|
locals
|
||||||
|
@ -65,6 +65,11 @@ CTRL_ICH7 equ 0x27DE
|
|||||||
CTRL_NFORCE equ 0x01B1
|
CTRL_NFORCE equ 0x01B1
|
||||||
CTRL_NFORCE2 equ 0x006A
|
CTRL_NFORCE2 equ 0x006A
|
||||||
CTRL_NFORCE3 equ 0x00DA
|
CTRL_NFORCE3 equ 0x00DA
|
||||||
|
CTRL_MCP04 equ 0x003A
|
||||||
|
CTRL_CK804 equ 0x0059
|
||||||
|
CTRL_CK8 equ 0x008A
|
||||||
|
CTRL_CK8S equ 0x00EA
|
||||||
|
CTRL_MCP51 equ 0x026B
|
||||||
|
|
||||||
|
|
||||||
PCM_OUT_BDL equ 0x10 ; PCM out buffer descriptors list
|
PCM_OUT_BDL equ 0x10 ; PCM out buffer descriptors list
|
||||||
@ -1312,6 +1317,11 @@ devices dd (CTRL_ICH shl 16)+VID_INTEL,msg_ICH, set_ICH
|
|||||||
dd (CTRL_NFORCE shl 16)+VID_NVIDIA,msg_NForce, set_ICH
|
dd (CTRL_NFORCE shl 16)+VID_NVIDIA,msg_NForce, set_ICH
|
||||||
dd (CTRL_NFORCE2 shl 16)+VID_NVIDIA,msg_NForce2,set_ICH
|
dd (CTRL_NFORCE2 shl 16)+VID_NVIDIA,msg_NForce2,set_ICH
|
||||||
dd (CTRL_NFORCE3 shl 16)+VID_NVIDIA,msg_NForce3,set_ICH
|
dd (CTRL_NFORCE3 shl 16)+VID_NVIDIA,msg_NForce3,set_ICH
|
||||||
|
dd (CTRL_MCP04 shl 16)+VID_NVIDIA,msg_MCP04,set_ICH
|
||||||
|
dd (CTRL_CK804 shl 16)+VID_NVIDIA,msg_CK804,set_ICH
|
||||||
|
dd (CTRL_CK8 shl 16)+VID_NVIDIA,msg_CK8,set_ICH
|
||||||
|
dd (CTRL_CK8S shl 16)+VID_NVIDIA,msg_CK8S,set_ICH
|
||||||
|
dd (CTRL_MCP51 shl 16)+VID_NVIDIA,msg_MCP51,set_ICH
|
||||||
|
|
||||||
dd 0 ;terminator
|
dd 0 ;terminator
|
||||||
|
|
||||||
@ -1325,10 +1335,16 @@ msg_ICH6 db 'Intel ICH6', 13,10, 0
|
|||||||
msg_ICH7 db 'Intel ICH7', 13,10, 0
|
msg_ICH7 db 'Intel ICH7', 13,10, 0
|
||||||
msg_Intel db 'Intel Corp. ', 0
|
msg_Intel db 'Intel Corp. ', 0
|
||||||
|
|
||||||
msg_NForce db 'NForce', 13,10, 0
|
msg_NForce db 'NForce', 13,10, 0
|
||||||
msg_NForce2 db 'NForce 2', 13,10, 0
|
msg_NForce2 db 'NForce 2', 13,10, 0
|
||||||
msg_NForce3 db 'NForce 3', 13,10, 0
|
msg_NForce3 db 'NForce 3', 13,10, 0
|
||||||
msg_NVidia db 'NVidea', 0
|
msg_MCP04 db 'NForce MCP04',13,10, 0
|
||||||
|
msg_CK804 db 'NForce CK804',13,10, 0
|
||||||
|
msg_CK8 db 'NForce CK8', 13,10, 0
|
||||||
|
msg_CK8S db 'NForce CK8S', 13,10, 0
|
||||||
|
msg_MCP51 db 'NForce MCP51',13,10, 0
|
||||||
|
|
||||||
|
msg_NVidia db 'NVidia', 0
|
||||||
|
|
||||||
szKernel db 'KERNEL', 0
|
szKernel db 'KERNEL', 0
|
||||||
sz_sound_srv db 'SOUND',0
|
sz_sound_srv db 'SOUND',0
|
||||||
|
Loading…
Reference in New Issue
Block a user