/kernel/trunk/core/dll.inc |
---|
1,8 → 1,8 |
DRV_ENTRY equ 1 |
DRV_EXIT equ -1 |
DRV_COMPAT equ 1 ;minimal required drivers version |
DRV_CURRENT equ 1 ;current drivers model version |
DRV_COMPAT equ 2 ;minimal required drivers version |
DRV_CURRENT equ 2 ;current drivers model version |
DRV_VERSION equ (DRV_COMPAT shl 16) or DRV_CURRENT |
371,10 → 371,10 |
mov ecx, [.handler] |
mov [eax+SRV.srv_proc], ecx |
ret |
ret 8 |
.fail: |
xor eax, eax |
ret |
ret 8 |
align 4 |
proc get_proc stdcall, exp:dword, sz_name:dword |
965,7 → 965,6 |
ret |
endp |
align 4 |
proc stop_all_services |
987,7 → 986,55 |
ret |
endp |
; param |
; eax= pid |
; ebx= size |
align 4 |
create_kernel_object: |
push ebx |
call malloc |
pop ebx |
test eax, eax |
jz .fail |
mov ecx,[CURRENT_TASK] |
shl ecx,8 |
add ecx, PROC_BASE+APP_OBJ_OFFSET |
mov edx, [ecx+APPOBJ.fd] |
mov [eax+APPOBJ.fd], edx |
mov [eax+APPOBJ.bk], ecx |
mov [eax+APPOBJ.pid], ebx |
mov [ecx+APPOBJ.fd], eax |
mov [edx+APPOBJ.bk], eax |
.fail: |
ret |
; param |
; eax= object |
align 4 |
destroy_kernel_object: |
mov ebx, [eax+APPOBJ.fd] |
mov ecx, [eax+APPOBJ.bk] |
mov [ebx+APPOBJ.bk], ecx |
mov [ecx+APPOBJ.fd], ebx |
xor edx, edx ;clear common header |
mov [eax], edx |
mov [eax+4], edx |
mov [eax+8], edx |
mov [eax+12], edx |
mov [eax+16], edx |
call free ;release object memory |
ret |
drv_sound db '/rd/1/drivers/unisound.obj', 0 |
drv_infinity db '/rd/1/drivers/infinity.obj', 0 |
drv_hw_mouse db '/rd/1/drivers/ati2d.obj',0 |
/kernel/trunk/core/exports.inc |
---|
2,54 → 2,94 |
iglobal |
szKernel db 'KERNEL', 0 |
szVersion db 'version',0 |
szRegService db 'RegService',0 |
szGetService db 'GetService',0 |
szServiceHandler db 'ServiceHandler',0 |
szAttachIntHandler db 'AttachIntHandler',0 |
szSysMsgBoardStr db 'SysMsgBoardStr', 0 |
szFpuSave db 'FpuSave',0 |
szFpuRestore db 'FpuRestore',0 |
szPciApi db 'PciApi', 0 |
szPciRead32 db 'PciRead32', 0 |
szPciRead8 db 'PciRead8', 0 |
szPciWrite8 db 'PciWrite8',0 |
szAllocPage db 'AllocPage',0 |
szAllocPages db 'AllocPages',0 |
szFreePage db 'FreePage',0 |
szGetPgAddr db 'GetPgAddr',0 |
szMapPage db 'MapPage',0 |
szMapSpace db 'MapSpace',0 |
szCommitPages db 'CommitPages',0 |
szReleasePages db 'ReleasePages',0 |
szAllocKernelSpace db 'AllocKernelSpace',0 |
szMapPage db 'MapPage',0 |
szRegService db 'RegService',0 |
szFreeKernelSpace db 'FreeKernelSpace',0 |
szKernelAlloc db 'KernelAlloc',0 |
szKernelFree db 'KernelFree',0 |
szGetPgAddr db 'GetPgAddr',0 |
szGetCurrentTask db 'GetCurrentTask',0 |
szGetService db 'GetService',0 |
szServiceHandler db 'ServiceHandler',0 |
szFpuSave db 'FpuSave',0 |
szFpuRestore db 'FpuRestore',0 |
szUserAlloc db 'UserAlloc',0 |
szUserFree db 'UserFree',0 |
szKmalloc db 'Kmalloc',0 |
szKfree db 'Kfree',0 |
szCreateObject db 'CreateObject',0 |
szDestroyObject db 'DestroyObject',0 |
szLoadCursor db 'LoadCursor',0 |
szSetHwCursor db 'SetHwCursor',0 |
szHwCursorRestore db 'HwCursorRestore', 0 |
szHwCursorCreate db 'HwCursorCreate', 0 |
szSysMsgBoardStr db 'SysMsgBoardStr', 0 |
szGetCurrentTask db 'GetCurrentTask',0 |
szLFBAddress db 'LFBAddress',0 |
szLoadFile db 'LoadFile',0 |
szSendEvent db 'SendEvent',0 |
align 16 |
kernel_export: |
dd szRegService , reg_service |
dd szGetService , get_service |
dd szServiceHandler , srv_handler |
dd szAttachIntHandler, attach_int_handler |
dd szSysMsgBoardStr , sys_msg_board_str |
dd szFpuSave , fpu_save |
dd szFpuRestore , fpu_restore |
dd szPciApi , pci_api |
dd szPciRead32 , pci_read32 |
dd szPciRead8 , pci_read8 |
dd szPciWrite8 , pci_write8 |
dd szAllocPage , alloc_page |
dd szAllocPages , alloc_pages |
dd szFreePage , free_page |
dd szMapPage , map_page |
dd szMapSpace , map_space |
dd szGetPgAddr , get_pg_addr |
dd szCommitPages , commit_pages ;not implemented |
dd szReleasePages , release_pages |
dd szAllocKernelSpace, alloc_kernel_space |
dd szMapPage , map_page |
dd szRegService , reg_service |
dd szFreeKernelSpace , free_kernel_space |
dd szKernelAlloc , kernel_alloc |
dd szKernelFree , kernel_free |
dd szGetPgAddr , get_pg_addr |
dd szGetCurrentTask , get_curr_task |
dd szGetService , get_service |
dd szServiceHandler , srv_handler |
dd szFpuSave , fpu_save |
dd szFpuRestore , fpu_restore |
dd szUserAlloc , user_alloc |
dd szUserFree , user_free |
dd szKmalloc , malloc |
dd szKfree , free |
dd szCreateObject , create_kernel_object |
dd szDestroyObject , destroy_kernel_object |
dd szLoadCursor , load_cursor |
dd szSetHwCursor , set_hw_cursor |
dd szHwCursorRestore , hw_restore |
dd szHwCursorCreate , create_cursor |
dd szSysMsgBoardStr , sys_msg_board_str |
dd szGetCurrentTask , get_curr_task |
dd szLoadFile , load_file |
dd szSendEvent , send_event |
exp_lfb: |
/kernel/trunk/core/heap.inc |
---|
578,7 → 578,7 |
and [heap_mutex], 0 |
mov ecx, [esi+block_size]; |
shr ecx, 12 |
call release_pages ;eax, ecx |
stdcall free_kernel_space, [base] |
ret |
643,7 → 643,6 |
mov edi, dword [ebx+PROC_BASE+APPDATA.heap_top]; heap_top |
add esi, new_app_base |
add edi, new_app_base |
l_0: |
cmp esi, edi |
jae m_exit |
/kernel/trunk/core/memory.inc |
---|
243,6 → 243,13 |
endp |
align 4 |
map_space: ;not implemented |
ret |
align 4 |
proc free_page |
;arg: eax page address |
pushfd |
265,8 → 272,19 |
endp |
; param |
; ecx= size |
; eax= page base |
; ebx= liear address |
; ecx= count |
align 4 |
commit_pages: ;not implemented |
ret |
; param |
; eax= base |
; ecx= count |
align 4 |
release_pages: |
274,7 → 292,6 |
mov ebx, pg_data.pg_mutex |
call wait_mutex ;ebx |
shr ecx, 12 |
mov esi, eax |
mov edi, eax |
/kernel/trunk/core/taskman.inc |
---|
996,16 → 996,20 |
@@: |
rep movsd |
mov ebx,[slot] |
cmp ebx,[TASK_COUNT] |
jle .noinc |
inc dword [TASK_COUNT] ;update number of processes |
mov ebx,[slot] |
cmp ebx,[TASK_COUNT] |
jle .noinc |
inc dword [TASK_COUNT] ;update number of processes |
.noinc: |
shl ebx,8 |
mov ecx, [def_cursor] |
mov [PROC_BASE+APPDATA.cursor+ebx],ecx |
shl ebx,8 |
lea edx, [ebx+PROC_BASE+APP_OBJ_OFFSET] |
mov [PROC_BASE+APPDATA.fd_obj+ebx],edx |
mov [PROC_BASE+APPDATA.bk_obj+ebx],edx |
shr ebx,3 |
mov ecx, [def_cursor] |
mov [PROC_BASE+APPDATA.cursor+ebx],ecx |
shr ebx,3 |
mov eax, new_app_base |
mov dword [CURRENT_TASK+ebx+0x10],eax |
1014,11 → 1018,14 |
mov edx,[edx] ;app_cmdline |
test edx,edx |
jz @F ;application don't need parameters |
mov eax, edx |
add eax, 256 |
jc @f |
cmp eax, [PROC_BASE+APPDATA.mem_size+ebx*8] |
ja @f |
mov eax, edx |
add eax, 256 |
jc @f |
cmp eax, [PROC_BASE+APPDATA.mem_size+ebx*8] |
ja @f |
add edx, new_app_base |
stdcall k_strncpy, edx, [cmd_line], 256 |
@@: |