/kernel/trunk/const.inc |
---|
439,7 → 439,8 |
APP_EV_OFFSET equ 40 |
struc CURSOR |
{;common object header |
{ |
;common object header |
.magic dd ? ;'CURS' |
.destroy dd ? ;internal destructor |
.fd dd ? ;next object in list |
450,6 → 451,7 |
.base dd ? ;allocated memory |
.hot_x dd ? ;hotspot coords |
.hot_y dd ? |
.sizeof: |
} |
virtual at 0 |
CURSOR CURSOR |
511,7 → 513,38 |
SMAP SMAP |
end virtual |
struc display_t |
{ |
.x dd ? |
.y dd ? |
.width dd ? |
.height dd ? |
.bpp dd ? |
.vrefresh dd ? |
.pitch dd ? |
.lfb dd ? |
.modes dd ? |
.ddev dd ? |
.connector dd ? |
.crtc dd ? |
.cr_list.next dd ? |
.cr_list.prev dd ? |
.cursor dd ? |
.init_cursor dd ? |
.select_cursor dd ? |
.show_cursor dd ? |
.move_cursor dd ? |
.restore_cursor dd ? |
} |
virtual at 0 |
display_t display_t |
end virtual |
struc HEAP_DATA |
{ |
.mutex rd 1 |
595,7 → 628,8 |
;} |
struc SRV |
{ .srv_name rb 16 ;ASCIIZ string |
{ |
.srv_name rb 16 ;ASCIIZ string |
.magic dd ? ;+0x10 ;'SRV ' |
.size dd ? ;+0x14 ;size of structure SRV |
.fd dd ? ;+0x18 ;next SRV descriptor |
603,10 → 637,10 |
.base dd ? ;+0x20 ;service base address |
.entry dd ? ;+0x24 ;service START function |
.srv_proc dd ? ;+0x28 ;main service handler |
.sizeof: |
} |
SRV_FD_OFFSET equ 0x18 |
SRV_SIZE equ 44 |
DRV_ENTRY equ 1 |
DRV_EXIT equ -1 |
/kernel/trunk/core/dll.inc |
---|
315,7 → 315,7 |
cmp [edi+SRV.magic], ' SRV' |
jne .fail |
cmp [edi+SRV.size], SRV_SIZE |
cmp [edi+SRV.size], SRV.sizeof |
jne .fail |
stdcall [edi+SRV.srv_proc], esi |
347,7 → 347,7 |
cmp [eax+SRV.magic], ' SRV' |
jne .fail |
cmp [eax+SRV.size], SRV_SIZE |
cmp [eax+SRV.size], SRV.sizeof |
jne .fail |
stdcall [eax+SRV.srv_proc], ebx |
402,8 → 402,8 |
cmp [handler], eax |
je .fail |
mov eax, SRV_SIZE |
call malloc ;call alloc_service |
mov eax, SRV.sizeof |
call malloc |
test eax, eax |
jz .fail |
411,13 → 411,15 |
push edi |
mov edi, eax |
mov esi, [name] |
mov ecx, 16/4 |
rep movsd |
movsd |
movsd |
movsd |
movsd |
pop edi |
pop esi |
mov [eax+SRV.magic], ' SRV' |
mov [eax+SRV.size], SRV_SIZE |
mov [eax+SRV.size], SRV.sizeof |
mov ebx, srv.fd-SRV_FD_OFFSET |
mov edx, [ebx+SRV.fd] |
611,7 → 613,10 |
jz .cleanup |
mov [file2], eax |
pushfd |
cli |
stdcall unpack, [file], eax |
popfd |
stdcall kernel_free, [file] |
mov eax, [file2] |
mov ebx, [file_size] |
1084,8 → 1089,8 |
endp |
align 4 |
proc stop_all_services |
stop_all_services: |
push ebp |
mov edx, [srv.fd] |
.next: |
cmp edx, srv.fd-SRV_FD_OFFSET |
1092,7 → 1097,7 |
je .done |
cmp [edx+SRV.magic], ' SRV' |
jne .next |
cmp [edx+SRV.size], SRV_SIZE |
cmp [edx+SRV.size], SRV.sizeof |
jne .next |
mov ebx, [edx+SRV.entry] |
1105,8 → 1110,8 |
pop edx |
jmp .next |
.done: |
pop ebp |
ret |
endp |
; param |
; eax= size |
/kernel/trunk/core/memory.inc |
---|
167,7 → 167,7 |
@@: |
mov [page_tabs+eax*4], edx |
; push eax |
; invlpg [ebx] |
invlpg [ebx] |
; pop eax |
inc eax |
add ebx, edi |
205,7 → 205,7 |
@@: |
mov [page_tabs+ebx*4], eax |
; push eax |
; invlpg [edi] |
invlpg [edi] |
; pop eax |
add edi, edx |
add eax, edx |
991,19 → 991,19 |
align 4 |
f68call: |
dd f68.11 |
dd f68.12 |
dd f68.13 |
dd f68.14 |
dd f68.11 ; init_heap |
dd f68.12 ; user_alloc |
dd f68.13 ; user_free |
dd f68.14 ; get_event_ex |
dd f68.fail ;moved to f68.24 |
dd f68.16 |
dd f68.17 |
dd f68.16 ; get_service |
dd f68.17 ; call_service |
dd f68.fail ;moved to f68.25 |
dd f68.19 |
dd f68.20 |
dd f68.21 |
dd f68.22 |
dd f68.23 |
dd f68.19 ; load_dll |
dd f68.20 ; user_realloc |
dd f68.21 ; load_driver |
dd f68.22 ; shmem_open |
dd f68.23 ; shmem_close |
dd f68.24 |
dd f68.25 |
1038,13 → 1038,6 |
call get_event_ex |
mov [esp+36], eax |
ret |
.24: |
mov eax, [current_slot] |
xchg ebx, [eax+APPDATA.exc_handler] |
xchg ecx, [eax+APPDATA.except_mask] |
mov [esp+36], ebx ; reg_eax+8 |
mov [esp+24], ecx ; reg_ebx+8 |
ret |
.16: |
test ebx, ebx |
jz .fail |
1057,15 → 1050,6 |
call srv_handlerEx ;ebx |
mov [esp+36], eax |
ret |
.25: |
cmp ebx,32 |
jae .fail |
mov eax, [current_slot] |
btr [eax+APPDATA.except_mask],ebx |
setc byte[esp+36] |
jecxz @f |
bts [eax+APPDATA.except_mask],ebx |
@@: ret |
.19: |
cmp ebx, OS_BASE |
jae .fail |
1113,6 → 1097,23 |
stdcall shmem_close, ebx |
mov [esp+36], eax |
ret |
.24: |
mov eax, [current_slot] |
xchg ebx, [eax+APPDATA.exc_handler] |
xchg ecx, [eax+APPDATA.except_mask] |
mov [esp+36], ebx ; reg_eax+8 |
mov [esp+24], ecx ; reg_ebx+8 |
ret |
.25: |
cmp ebx,32 |
jae .fail |
mov eax, [current_slot] |
btr [eax+APPDATA.except_mask],ebx |
setc byte[esp+36] |
jecxz @f |
bts [eax+APPDATA.except_mask],ebx |
@@: |
ret |
.fail: |
xor eax, eax |
/kernel/trunk/core/peload.inc |
---|
280,6 → 280,8 |
__exports: |
export 'KERNEL', \ |
alloc_kernel_space, 'AllocKernelSpace', \ ; stdcall |
alloc_page, 'AllocPage', \ ; gcc ABI |
alloc_pages, 'AllocPages', \ ; stdcall |
commit_pages, 'CommitPages', \ ; eax, ebx, ecx |
create_kernel_object, 'CreateObject', \ |
create_ring_buffer, 'CreateRingBuffer', \ ; stdcall |
287,7 → 289,6 |
free_kernel_space, 'FreeKernelSpace', \ ; stdcall |
kernel_alloc, 'KernelAlloc', \ ; stdcall |
kernel_free, 'KernelFree', \ ; stdcall |
alloc_pages, 'AllocPages', \ ; stdcall |
malloc, 'Kmalloc', \ |
free, 'Kfree', \ |
map_io_mem, 'MapIoMem', \ ; stdcall |
307,6 → 308,7 |
pci_write16, 'PciWrite16', \ ; stdcall |
pci_write32, 'PciWrite32', \ ; stdcall |
\ |
get_service, 'GetService', \ ; |
reg_service, 'RegService', \ ; stdcall |
attach_int_handler, 'AttachIntHandler', \ ; stdcall |
user_alloc, 'UserAlloc', \ ; stdcall |
/kernel/trunk/data32.inc |
---|
329,6 → 329,8 |
srv.fd rd 1 |
srv.bk rd 1 |
_display display_t |
scr_width rd 1 |
scr_height rd 1 |
/kernel/trunk/kernel.asm |
---|
349,14 → 349,19 |
; mov [0xF604],byte 1 ;al |
mov al, [BOOT_VAR+0x901F] ; DMA access |
mov [allow_dma_access], al |
mov al,[BOOT_VAR+0x9000] ; bpp |
movzx eax, byte [BOOT_VAR+0x9000] ; bpp |
mov [ScreenBPP],al |
mov [_display.bpp], eax |
mov [_display.vrefresh], 60 |
movzx eax,word [BOOT_VAR+0x900A] ; X max |
mov [_display.width], eax |
dec eax |
mov [Screen_Max_X],eax |
mov [screen_workarea.right],eax |
movzx eax,word [BOOT_VAR+0x900C] ; Y max |
mov [_display.height], eax |
dec eax |
mov [Screen_Max_Y],eax |
mov [screen_workarea.bottom],eax |
369,8 → 374,9 |
je @f |
cmp [SCR_MODE],word 0x12 ; VGA 640x480 |
je @f |
mov ax,[BOOT_VAR+0x9001] ; for other modes |
movzx eax, word[BOOT_VAR+0x9001] ; for other modes |
mov [BytesPerScanLine],ax |
mov [_display.pitch], eax |
@@: |
mov esi, BOOT_VAR+0x9080 |
movzx ecx, byte [esi-1] |