/kernel/trunk/core/dll.inc |
---|
18,34 → 18,34 |
proc attach_int_handler stdcall, irq:dword, handler:dword, access_rights:dword |
mov ebx, [irq] ;irq num |
test ebx, ebx |
jz .err |
test ebx, ebx |
jz .err |
cmp ebx, 15 ; hidnplayr says: we only have 16 IRQ's |
ja .err |
mov eax, [handler] |
test eax, eax |
jz .err |
cmp [irq_owner + 4 * ebx], 0 |
je @f |
ja .err |
mov eax, [handler] |
test eax, eax |
jz .err |
cmp [irq_owner + 4 * ebx], 0 |
je @f |
mov ecx, [irq_rights + 4 * ebx] ; Rights : 0 - full access, 1 - read only, 2 - forbidden |
test ecx, ecx |
jnz .err |
test ecx, ecx |
jnz .err |
@@: |
mov [irq_tab+ebx*4], eax |
mov [irq_tab+ebx*4], eax |
mov eax, [access_rights] |
mov [irq_rights + 4 * ebx], eax |
mov eax, [access_rights] |
mov [irq_rights + 4 * ebx], eax |
mov [irq_owner + 4 * ebx], PID_KERNEL ; all handlers belong to a kernel |
stdcall enable_irq, [irq] |
stdcall enable_irq, [irq] |
mov eax, 1 |
ret |
ret |
.err: |
xor eax, eax |
ret |
xor eax, eax |
ret |
endp |
uglobal |
1056,11 → 1056,10 |
test eax, eax |
jnz @F |
mov ebx, [coff] |
mov ebx, [coff] |
stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],sz_EXPORTS |
@@: |
mov [exports], eax |
mov [exports], eax |
stdcall kernel_free, [coff] |
mov eax, [exports] |
ret |
/kernel/trunk/core/exports.inc |
---|
72,7 → 72,7 |
szLoadFile db 'LoadFile',0 |
szSendEvent db 'SendEvent',0 |
szSetMouseData db 'SetMouseData',0 |
szSleep db 'Sleep',0 |
szSleep db 'Sleep',0 |
szGetTimerTicks db 'GetTimerTicks',0 |
szStrncat db 'strncat',0 |
103,27 → 103,27 |
dd szPciWrite16 , pci_write16 |
dd szPciWrite32 , pci_write32 |
dd szAllocPage , alloc_page ;stdcall |
dd szAllocPages , alloc_pages ;stdcall |
dd szAllocPage , alloc_page ;stdcall |
dd szAllocPages , alloc_pages ;stdcall |
dd szFreePage , free_page |
dd szMapPage , map_page ;stdcall |
dd szMapPage , map_page ;stdcall |
dd szMapSpace , map_space |
dd szMapIoMem , map_io_mem ;stdcall |
dd szMapIoMem , map_io_mem ;stdcall |
dd szGetPgAddr , get_pg_addr |
dd szCommitPages , commit_pages ;not implemented |
dd szCommitPages , commit_pages ;not implemented |
dd szReleasePages , release_pages |
dd szAllocKernelSpace, alloc_kernel_space ;stdcall |
dd szFreeKernelSpace , free_kernel_space ;stdcall |
dd szKernelAlloc , kernel_alloc ;stdcall |
dd szKernelFree , kernel_free ;stdcall |
dd szUserAlloc , user_alloc ;stdcall |
dd szUserFree , user_free ;stdcall |
dd szKmalloc , malloc |
dd szKfree , free |
dd szKernelAlloc , kernel_alloc ;stdcall |
dd szKernelFree , kernel_free ;stdcall |
dd szUserAlloc , user_alloc ;stdcall |
dd szUserFree , user_free ;stdcall |
dd szKmalloc , malloc |
dd szKfree , free |
dd szCreateRingBuffer, create_ring_buffer ;stdcall |
dd szGetPid , get_pid |
dd szGetPid , get_pid |
dd szCreateObject , create_kernel_object |
dd szDestroyObject , destroy_kernel_object |
dd szCreateEvent , create_event |
132,17 → 132,17 |
dd szDestroyEvent , destroy_event |
dd szClearEvent , clear_event |
dd szLoadCursor , load_cursor ;stdcall |
dd szLoadCursor , load_cursor ;stdcall |
dd szSelectHwCursor , select_hw_cursor ;import stdcall |
dd szSetHwCursor , set_hw_cursor ;import stdcall |
dd szHwCursorRestore , hw_restore ;import |
dd szHwCursorCreate , create_cursor ;import |
dd szHwCursorRestore , hw_restore ;import |
dd szHwCursorCreate , create_cursor ;import |
dd szSysMsgBoardStr , sys_msg_board_str |
dd szSysMsgBoardChar , sys_msg_board |
dd szGetCurrentTask , get_curr_task |
dd szLoadFile , load_file ;retval eax, ebx |
dd szLoadFile , load_file ;retval eax, ebx |
dd szSendEvent , send_event |
dd szSetMouseData , set_mouse_data ;stdcall |
dd szSleep , delay_ms |
/kernel/trunk/core/memory.inc |
---|
241,7 → 241,9 |
@@: |
xor eax, eax |
xchg eax, [esi] |
push eax |
invlpg [edi] |
pop eax |
test eax, 1 |
jz .next |
417,7 → 419,9 |
mov dword [app_page_tabs+edi*4], 2 |
mov ebx, edi |
shl ebx, 12 |
push eax |
invlpg [ebx] |
pop eax |
call free_page |
.next: add edi, 1 |
1283,6 → 1287,8 |
@@: |
mov [page_tabs+edi], eax |
mov [page_tabs+edi+edx], eax |
invlpg [ebx] |
invlpg [ebx+0x10000] |
add eax, 0x1000 |
add ebx, 0x1000 |
add edi, 4 |
1302,3 → 1308,182 |
endp |
if 0 |
; under constuction |
shmem_list: |
.bk dd shmem_list |
.fd dd shmem_list |
shmem |
.bk dd ? |
.fd dd ? |
.base dd ? |
.size dd ? |
.access dd ? |
.refcount dd ? |
.name rb 32 |
align 4 |
proc shmem_open stdcall name:dword, size:dword, access:dword |
locals |
mapped dd ? |
shm dd ? |
pages dd ? |
endl |
push esi |
push edi |
mov [mapped], 0 |
mov eax, [name] |
test eax, eax |
jz .exit |
pushfd ;mutex required |
cli |
mov ebx, [shmem_list.fd] |
@@: |
cmp ebx, shmem_list |
je .not_found |
lea edx, [edx+24] ; link , base, size |
stdcall strncmp, edx, eax, 32 |
test eax, eax |
je .found |
mov ebx, [ebx+4] |
jmp @B |
.found: ;check access rights |
mov eax, [access] |
test eax, SHM_CREATE |
mov ecx, [ebx+8] |
jnz .fail_exist |
and eax, ACC_MASK |
and ecx, ACC_MASK |
cmp eax, ecx |
jne .fail_acc |
stdcall user_alloc, [ebx+12] |
test eax, eax |
mov [mapped], eax |
jz .fail_mem |
mov eax, [ebx+4] |
mov ecx, [ebx+12] |
shr ecx, 12 |
mov ebx, [mapped] |
call commit_pages |
.exit: |
mov eax, [mapped] |
pop edi |
pop esi |
ret |
.not_found: |
mov eax, [access] |
test eax, SHM_CREATE |
mov ebx, E_NOTFOUND |
jz .exit |
;create shmem |
mov ecx, [size] |
test ecx, ecx |
mov ebx, E_PARAM |
jz .exit |
add ecx, 4095 |
and ecx, -4096 |
mov [size], ecx |
stdcall user_alloc, ecx |
test eax, eax |
mov [mapped], eax |
mov ebx, E_NOMEM |
jz .exit |
mov eax, 24+32 |
call malloc |
test eax, eax |
mov [shm], eax |
mov ebx, E_NOMEM |
jz .exit ;FIXME cleanup |
mov [eax+24+28], dword 0 |
lea edx, [eax+24] |
stdcall strncpy, edx, [name], 31 |
mov eax, [size] |
shr eax, 12 |
mov esi, eax |
stdcall alloc_pages, eax |
test eax, eax |
mov [pages], eax |
mov ebx, E_NOMEM |
jz .exit ;FIXME cleanup |
mov edi, eax |
add edi, [size] |
and esi, 7 |
add esi, -8 |
jz @F |
;release unused pages |
.release: |
mov eax, edi |
add edi, 4096 |
call free_page |
dec esi |
jnz .release |
mov eax, [ebx+4] |
mov ecx, [ebx+12] |
shr ecx, 12 |
mov ebx, [mapped] |
call commit_pages |
mov eax, [access] |
and eax, ACC_MASK |
or eax, [pages] |
mov ebx, [mapped] |
mov ecx, [size] |
shr ecx, 12 |
call commit_pages |
mov edx, [shm] |
mov ecx, [pages] |
mov [edx+8], ecx |
mov ecx, [size] |
mov [edx+12], ecx |
; mov [edx], shmem |
; mov [edx+4], [shmem.fd] |
; mov [shmem.fd.bk], edx |
; mov [shmem.fd], edx |
xor ebx, ebx |
jmp .exit |
.fail_exist: |
mov ebx, E_EXIST |
xor eax, eax |
ret |
.fail_access: |
mov ebx, E_ACCESS |
xor eax, eax |
ret |
.fail_mem: |
mov ebx, E_NOMEM |
xor eax, eax |
ret |
endp |
end if |
/kernel/trunk/core/peload.inc |
---|
310,7 → 310,9 |
user_alloc, 'UserAlloc', \ ; stdcall |
user_free, 'UserFree', \ ; stdcall |
unmap_pages, 'UnmapPages', \ ; eax, ecx |
sys_msg_board_str, 'SysMsgBoardStr' |
sys_msg_board_str, 'SysMsgBoardStr', \ |
delay_hs, 'Delay', \ ; ebx |
set_mouse_data, 'SetMouseData' |
/kernel/trunk/core/syscall.inc |
---|
163,9 → 163,9 |
dd sys_pcibios ; 57-PCI BIOS32 |
dd file_system ; 58-Common file system interface |
dd 0 |
dd sys_IPC ; 60-Inter Process Communication |
dd sys_gs ; 61-Direct graphics access |
dd sys_pci ; 62-PCI functions |
dd sys_IPC ; 60-Inter Process Communication |
dd sys_gs ; 61-Direct graphics access |
dd sys_pci ; 62-PCI functions |
dd sys_msg_board ; 63-System message board |
dd sys_resize_app_memory ; 64-Resize application memory usage |
dd syscall_putimage_palette; 65-PutImagePalette |
183,79 → 183,79 |
align 4 |
servetable2: |
dd sys_drawwindow ; 0-DrawWindow |
dd syscall_setpixel ; 1-SetPixel |
dd sys_getkey ; 2-GetKey |
dd sys_clock ; 3-GetTime |
dd syscall_writetext ; 4-WriteText |
dd delay_hs ; 5-DelayHs |
dd sys_drawwindow ; 0-DrawWindow |
dd syscall_setpixel ; 1-SetPixel |
dd sys_getkey ; 2-GetKey |
dd sys_clock ; 3-GetTime |
dd syscall_writetext ; 4-WriteText |
dd delay_hs ; 5-DelayHs |
dd syscall_openramdiskfile ; 6-OpenRamdiskFile |
dd syscall_putimage ; 7-PutImage |
dd sys_button ; 8-DefineButton |
dd sys_cpuusage ; 9-GetProcessInfo |
dd sys_waitforevent ; 10-WaitForEvent |
dd sys_getevent ; 11-CheckForEvent |
dd sys_redrawstat ; 12-BeginDraw and EndDraw |
dd syscall_drawrect ; 13-DrawRect |
dd syscall_putimage ; 7-PutImage |
dd sys_button ; 8-DefineButton |
dd sys_cpuusage ; 9-GetProcessInfo |
dd sys_waitforevent ; 10-WaitForEvent |
dd sys_getevent ; 11-CheckForEvent |
dd sys_redrawstat ; 12-BeginDraw and EndDraw |
dd syscall_drawrect ; 13-DrawRect |
dd syscall_getscreensize ; 14-GetScreenSize |
dd sys_background ; 15-bgr |
dd sys_background ; 15-bgr |
dd sys_cachetodiskette ; 16-FlushFloppyCache |
dd sys_getbutton ; 17-GetButton |
dd sys_system ; 18-System Services |
dd paleholder ; 19-reserved |
dd cross_order ; 20-ResetMidi and OutputMidi |
dd cross_order ; 21-SetMidiBase,SetKeymap,SetShiftKeymap,. |
dd cross_order ; 22-setting date,time,clock and alarm-clock |
dd sys_getbutton ; 17-GetButton |
dd sys_system ; 18-System Services |
dd paleholder ; 19-reserved |
dd cross_order ; 20-ResetMidi and OutputMidi |
dd cross_order ; 21-SetMidiBase,SetKeymap,SetShiftKeymap,. |
dd cross_order ; 22-setting date,time,clock and alarm-clock |
dd sys_wait_event_timeout ; 23-TimeOutWaitForEvent |
dd cross_order ; 24-PlayCdTrack,StopCd and GetCdPlaylist |
dd cross_order ; 24-PlayCdTrack,StopCd and GetCdPlaylist |
dd undefined_syscall ; 25-reserved |
dd cross_order ; 26-GetMidiBase,GetKeymap,GetShiftKeymap,. |
dd undefined_syscall ; 27-reserved |
dd cross_order ; 26-GetMidiBase,GetKeymap,GetShiftKeymap,. |
dd undefined_syscall ; 27-reserved |
dd undefined_syscall ; 28-reserved |
dd sys_date ; 29-GetDate |
dd cross_order ; 30-Get/SetCurrentDirectory |
dd undefined_syscall ; 31-reserved |
dd undefined_syscall ; 32-reserved |
dd undefined_syscall ; 33-reserved |
dd undefined_syscall ; 34-reserved |
dd syscall_getpixel ; 35-GetPixel |
dd syscall_getarea ; 36-GetArea |
dd cross_order ; 37-GetMousePosition_ScreenRelative,. |
dd syscall_drawline ; 38-DrawLine |
dd cross_order ; 39-GetBackgroundSize,ReadBgrData,. |
dd set_app_param ; 40-WantEvents |
dd sys_date ; 29-GetDate |
dd cross_order ; 30-Get/SetCurrentDirectory |
dd undefined_syscall ; 31-reserved |
dd undefined_syscall ; 32-reserved |
dd undefined_syscall ; 33-reserved |
dd undefined_syscall ; 34-reserved |
dd syscall_getpixel ; 35-GetPixel |
dd syscall_getarea ; 36-GetArea |
dd cross_order ; 37-GetMousePosition_ScreenRelative,. |
dd syscall_drawline ; 38-DrawLine |
dd cross_order ; 39-GetBackgroundSize,ReadBgrData,. |
dd set_app_param ; 40-WantEvents |
dd syscall_getirqowner ; 41-GetIrqOwner |
dd get_irq_data ; 42-ReadIrqData |
dd cross_order ; 43-SendDeviceData |
dd sys_programirq ; 44-ProgramIrqs |
dd reserve_free_irq ; 45-ReserveIrq and FreeIrq |
dd cross_order ; 46-ReservePortArea and FreePortArea |
dd cross_order ; 47-WriteNum |
dd cross_order ; 48-SetRedrawType and SetButtonType |
dd cross_order ; 49-Advanced Power Management (APM) |
dd cross_order ; 50-Window shape & scale |
dd cross_order ; 51-Threads |
dd cross_order ; 52-Stack driver status |
dd cross_order ; 53-Socket interface |
dd undefined_syscall ; 54-reserved |
dd cross_order ; 55-Sound interface |
dd undefined_syscall ; 56-reserved |
dd cross_order ; 57-PCI BIOS32 |
dd cross_order ; 58-Common file system interface |
dd undefined_syscall ; 59-reserved |
dd cross_order ; 60-Inter Process Communication |
dd cross_order ; 61-Direct graphics access |
dd cross_order ; 62-PCI functions |
dd cross_order ; 63-System message board |
dd cross_order ; 64-Resize application memory usage |
dd cross_order ; 65-PutImagePalette |
dd cross_order ; 66-Process definitions - keyboard |
dd cross_order ; 67-Window move or resize |
dd cross_order ; 68-Some internal services |
dd cross_order ; 69-Debug |
dd cross_order ; 70-Common file system interface, version 2 |
dd cross_order ; 71-Window settings |
dd cross_order ; 72-Send window message |
dd get_irq_data ; 42-ReadIrqData |
dd cross_order ; 43-SendDeviceData |
dd sys_programirq ; 44-ProgramIrqs |
dd reserve_free_irq ; 45-ReserveIrq and FreeIrq |
dd cross_order ; 46-ReservePortArea and FreePortArea |
dd cross_order ; 47-WriteNum |
dd cross_order ; 48-SetRedrawType and SetButtonType |
dd cross_order ; 49-Advanced Power Management (APM) |
dd cross_order ; 50-Window shape & scale |
dd cross_order ; 51-Threads |
dd cross_order ; 52-Stack driver status |
dd cross_order ; 53-Socket interface |
dd undefined_syscall ; 54-reserved |
dd cross_order ; 55-Sound interface |
dd undefined_syscall ; 56-reserved |
dd cross_order ; 57-PCI BIOS32 |
dd cross_order ; 58-Common file system interface |
dd undefined_syscall ; 59-reserved |
dd cross_order ; 60-Inter Process Communication |
dd cross_order ; 61-Direct graphics access |
dd cross_order ; 62-PCI functions |
dd cross_order ; 63-System message board |
dd cross_order ; 64-Resize application memory usage |
dd cross_order ; 65-PutImagePalette |
dd cross_order ; 66-Process definitions - keyboard |
dd cross_order ; 67-Window move or resize |
dd cross_order ; 68-Some internal services |
dd cross_order ; 69-Debug |
dd cross_order ; 70-Common file system interface, version 2 |
dd cross_order ; 71-Window settings |
dd cross_order ; 72-Send window message |
times 255 - ( ($-servetable2) /4 ) dd undefined_syscall |
dd sys_end ; -1-end application |
/kernel/trunk/kernel.asm |
---|
890,8 → 890,6 |
setnz [dma_hdd] |
mov [timer_ticks_enable],1 ; for cd driver |
; stdcall init_uart_service, DRV_ENTRY |
sti |
call change_task |