From b2e313b0d99483a3d89c36607ffdb845819b335d Mon Sep 17 00:00:00 2001 From: "Sergey Semyonov (Serge)" Date: Wed, 30 Jul 2008 08:32:24 +0000 Subject: [PATCH] boot time allocator git-svn-id: svn://kolibrios.org@841 a494cfbc-eb01-0410-851d-a64ba20cac60 --- kernel/branches/kolibri_pe/const.inc | 6 +- kernel/branches/kolibri_pe/core/heap.inc | 4 +- kernel/branches/kolibri_pe/core/memory.inc | 11 +++ kernel/branches/kolibri_pe/data32.inc | 5 +- kernel/branches/kolibri_pe/kernel.asm | 96 +++++++++++----------- 5 files changed, 68 insertions(+), 54 deletions(-) diff --git a/kernel/branches/kolibri_pe/const.inc b/kernel/branches/kolibri_pe/const.inc index fa93060dfe..3dd08a0d52 100644 --- a/kernel/branches/kolibri_pe/const.inc +++ b/kernel/branches/kolibri_pe/const.inc @@ -324,13 +324,15 @@ BgrDrawMode equ (OS_BASE+0x033BFF4) BgrDataWidth equ (OS_BASE+0x033BFF8) BgrDataHeight equ (OS_BASE+0x033BFFC) -;display_data equ (OS_BASE+0x033C000) ;1024*1280=0x140000 +;display_data equ (OS_BASE+0x033C000) ;1024*1280=0x140000 virtual at (OS_BASE+0x033CF80) tss TSS end virtual -sys_pgmap equ (OS_BASE+0x033F000) +LAST_PAGE equ 0x0340000 + +sys_pgmap equ (OS_BASE+LAST_PAGE) twdw equ 0x3000 ;(CURRENT_TASK-window_data) diff --git a/kernel/branches/kolibri_pe/core/heap.inc b/kernel/branches/kolibri_pe/core/heap.inc index 6bc336dd33..a715c31128 100644 --- a/kernel/branches/kolibri_pe/core/heap.inc +++ b/kernel/branches/kolibri_pe/core/heap.inc @@ -102,8 +102,8 @@ init_kernel_heap: not eax rep stosd - stdcall alloc_pages, dword 32 - add eax, OS_BASE + mov ecx, 128*1024 + fastcall _balloc mov [mem_block_start], mem_block_map mov [mem_block_end], mem_block_map+512 diff --git a/kernel/branches/kolibri_pe/core/memory.inc b/kernel/branches/kolibri_pe/core/memory.inc index 9379577232..70a758c0ef 100644 --- a/kernel/branches/kolibri_pe/core/memory.inc +++ b/kernel/branches/kolibri_pe/core/memory.inc @@ -1306,3 +1306,14 @@ proc create_ring_buffer stdcall, size:dword, flags:dword endp +align 4 +_balloc: ; gcc fastcall + + mov eax, [_last_page] + add ecx, 4095 + and ecx, -4096 + add ecx, eax + mov [_last_page], ecx + add eax, OS_BASE + ret + diff --git a/kernel/branches/kolibri_pe/data32.inc b/kernel/branches/kolibri_pe/data32.inc index 19969b255a..4481558514 100644 --- a/kernel/branches/kolibri_pe/data32.inc +++ b/kernel/branches/kolibri_pe/data32.inc @@ -109,7 +109,10 @@ vrr_m db 'VRR_M',0 kernel_file db 'KERNEL MNT' align 4 - ;supported videomodes + +_last_page dd LAST_PAGE + + ;supported videomodes mode_1280_1024_32: dw 1280,1024,32,60 mode_1280_1024_24: diff --git a/kernel/branches/kolibri_pe/kernel.asm b/kernel/branches/kolibri_pe/kernel.asm index b81c35bb82..3b52d1ac09 100644 --- a/kernel/branches/kolibri_pe/kernel.asm +++ b/kernel/branches/kolibri_pe/kernel.asm @@ -58,6 +58,8 @@ include 'macros.inc' $Revision$ +fastcall equ call + USE_COM_IRQ equ 1 ;make irq 3 and irq 4 available for PCI devices include "proc32.inc" @@ -320,7 +322,8 @@ init_mem: shr eax, 3 and eax, -4 mov [pg_data.pagemap_size], eax - + mov ecx, eax + fastcall _balloc ret align 4 @@ -333,7 +336,9 @@ init_page_map: cld rep stosd - mov ecx, 0x800000 ;reserve 8 Mb + xchg bx, bx + + mov ecx, [_last_page] mov edx, [pg_data.pages_count] shr ecx, 12 sub edx, ecx @@ -395,6 +400,43 @@ high_code: call init_mem + mov ecx, 1280*1024 + fastcall _balloc + mov [_display_data], eax + + mov ecx, (unpack.LZMA_BASE_SIZE+(unpack.LZMA_LIT_SIZE shl \ + (unpack.lc+unpack.lp)))*4 + fastcall _balloc + mov [unpack.p], eax + + mov ecx, (RING0_STACK_SIZE+512) + fastcall _balloc + mov [os_stack_seg], eax + + lea esp, [eax+RING0_STACK_SIZE] + + mov [tss._ss0], os_stack + mov [tss._esp0], esp + mov [tss._esp], esp + mov [tss._cs],os_code + mov [tss._ss],os_stack + mov [tss._ds],app_data + mov [tss._es],app_data + mov [tss._fs],app_data + mov [tss._gs],app_data + mov [tss._io],128 +;Add IO access table - bit array of permitted ports + mov edi, tss._io_map_0 + xor eax, eax + not eax + mov ecx, 8192/4 + rep stosd ; access to 4096*8=65536 ports + + mov ax,tss0 + ltr ax + + call init_kernel_heap ; FIXME initialize heap after pager + call init_page_map @@ -548,37 +590,9 @@ high_code: call build_interrupt_table lidt [idtreg] - call init_kernel_heap - - stdcall alloc_pages, (RING0_STACK_SIZE+512) shr 12 - add eax, OS_BASE - mov [os_stack_seg], eax - - lea esp, [eax+RING0_STACK_SIZE] - - mov [tss._ss0], os_stack - mov [tss._esp0], esp - mov [tss._esp], esp - mov [tss._cs],os_code - mov [tss._ss],os_stack - mov [tss._ds],app_data - mov [tss._es],app_data - mov [tss._fs],app_data - mov [tss._gs],app_data - mov [tss._io],128 -;Add IO access table - bit array of permitted ports - mov edi, tss._io_map_0 - xor eax, eax - not eax - mov ecx, 8192/4 - rep stosd ; access to 4096*8=65536 ports - - mov ax,tss0 - ltr ax - - mov [LFBSize], 0x800000 + mov [LFBSize], 0x800000 call init_LFB - call init_fpu + call init_fpu call init_malloc stdcall alloc_kernel_space, 0x51000 @@ -609,15 +623,6 @@ high_code: add eax, ebx mov [ipc_ptab], eax - stdcall alloc_pages, (1280*1024)/4096 - add eax, OS_BASE - mov [_display_data], eax - - stdcall kernel_alloc, (unpack.LZMA_BASE_SIZE+(unpack.LZMA_LIT_SIZE shl \ - (unpack.lc+unpack.lp)))*4 - - mov [unpack.p], eax - call init_events mov eax, srv.fd-SRV_FD_OFFSET mov [srv.fd], eax @@ -933,18 +938,11 @@ first_app_found: ; wait until 8042 is ready xor ecx,ecx - @@: +@@: in al,64h and al,00000010b loopnz @b - ; mov al, 0xED ; svetodiody - only for testing! - ; call kb_write - ; call kb_read - ; mov al, 111b - ; call kb_write - ; call kb_read - mov al, 0xF3 ; set repeat rate & delay call kb_write ; call kb_read