forked from KolibriOS/kolibrios
align heap_base on 4Mb border
move sys_pgmap at the top of kernel memory git-svn-id: svn://kolibrios.org@513 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
0b7151a256
commit
4c1ad6f2c7
@ -266,6 +266,9 @@ TMP_STACK_TOP equ 0x003EC00
|
|||||||
FONT_II equ (OS_BASE+0x003EC00)
|
FONT_II equ (OS_BASE+0x003EC00)
|
||||||
FONT_I equ (OS_BASE+0x003F600)
|
FONT_I equ (OS_BASE+0x003F600)
|
||||||
DRIVE_DATA equ (OS_BASE+0x0040000)
|
DRIVE_DATA equ (OS_BASE+0x0040000)
|
||||||
|
|
||||||
|
sys_pgdir equ (OS_BASE+0x0050000)
|
||||||
|
|
||||||
SLOT_BASE equ (OS_BASE+0x0080000)
|
SLOT_BASE equ (OS_BASE+0x0080000)
|
||||||
|
|
||||||
;unused
|
;unused
|
||||||
@ -304,9 +307,10 @@ end virtual
|
|||||||
WinMapAddress equ (OS_BASE+0x043F000)
|
WinMapAddress equ (OS_BASE+0x043F000)
|
||||||
display_data equ (OS_BASE+0x043F000)
|
display_data equ (OS_BASE+0x043F000)
|
||||||
|
|
||||||
tmp_page_tab equ 0x057F000;
|
sys_pgmap equ (OS_BASE+0x057F000)
|
||||||
|
|
||||||
HEAP_BASE equ (OS_BASE+tmp_page_tab)
|
|
||||||
|
HEAP_BASE equ (OS_BASE+0x0800000)
|
||||||
HEAP_MIN_SIZE equ 0x01000000
|
HEAP_MIN_SIZE equ 0x01000000
|
||||||
|
|
||||||
page_tabs equ 0xFDC00000
|
page_tabs equ 0xFDC00000
|
||||||
@ -316,9 +320,6 @@ master_tab equ (page_tabs+ (page_tabs shr 10)) ;0xFDFF70000
|
|||||||
|
|
||||||
LFB_BASE equ 0xFE000000
|
LFB_BASE equ 0xFE000000
|
||||||
|
|
||||||
sys_pgdir equ (OS_BASE+0x00050000)
|
|
||||||
sys_pgmap equ (OS_BASE+0x00052000)
|
|
||||||
|
|
||||||
|
|
||||||
new_app_base equ 0;
|
new_app_base equ 0;
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ full_file_name_table dd 0 ; 㪠
|
|||||||
; ¯¥à¥¡¨à ¥â ¯® ä ©«ã ¢ ਠâë § ¬¥
|
; ¯¥à¥¡¨à ¥â ¯® ä ©«ã ¢ ਠâë § ¬¥
|
||||||
proc full_file_name stdcall,sourc,dest
|
proc full_file_name stdcall,sourc,dest
|
||||||
locals
|
locals
|
||||||
tmpsrc rb 60 ; ¢à¥¬¥®¥ åà ¥¨¥ ¯à¥®¡à §®¢ ¨ï
|
tmpsrc rb 260 ; ¢à¥¬¥®¥ åà ¥¨¥ ¯à¥®¡à §®¢ ¨ï
|
||||||
endl
|
endl
|
||||||
pushad
|
pushad
|
||||||
mov esi,[sourc]
|
mov esi,[sourc]
|
||||||
|
@ -40,6 +40,10 @@ proc init_mem
|
|||||||
shr eax, 3
|
shr eax, 3
|
||||||
mov [pg_data.pagemap_size-OS_BASE], eax
|
mov [pg_data.pagemap_size-OS_BASE], eax
|
||||||
|
|
||||||
|
add eax, (sys_pgmap-OS_BASE)+4095
|
||||||
|
and eax, not 4095
|
||||||
|
mov [tmp_page_tabs], eax
|
||||||
|
|
||||||
cmp edx, (OS_BASE/4096)
|
cmp edx, (OS_BASE/4096)
|
||||||
jbe @F
|
jbe @F
|
||||||
mov edx, (OS_BASE/4096)
|
mov edx, (OS_BASE/4096)
|
||||||
@ -74,21 +78,23 @@ proc init_mem
|
|||||||
or ebx, CR4_PGE
|
or ebx, CR4_PGE
|
||||||
@@:
|
@@:
|
||||||
mov cr4, ebx
|
mov cr4, ebx
|
||||||
sub [pg_data.kernel_tables-OS_BASE], 1
|
dec [pg_data.kernel_tables-OS_BASE]
|
||||||
|
|
||||||
mov [edx], eax
|
mov [edx], eax
|
||||||
add eax, 0x00400000
|
add eax, 0x00400000
|
||||||
; mov [edx+4], eax
|
|
||||||
add edx, 4
|
add edx, 4
|
||||||
|
|
||||||
mov eax, 0x400000+PG_SW
|
mov eax, 0x400000+PG_SW
|
||||||
mov ecx, (tmp_page_tab-0x400000)/4096
|
mov ecx, [tmp_page_tabs]
|
||||||
|
sub ecx, 0x400000
|
||||||
|
shr ecx, 12 ;ecx/=4096
|
||||||
jmp .map_low
|
jmp .map_low
|
||||||
.no_PSE:
|
.no_PSE:
|
||||||
mov eax, PG_SW
|
mov eax, PG_SW
|
||||||
mov ecx, tmp_page_tab/4096
|
mov ecx, [tmp_page_tabs]
|
||||||
|
shr ecx, 12
|
||||||
.map_low:
|
.map_low:
|
||||||
mov edi, tmp_page_tab
|
mov edi, [tmp_page_tabs]
|
||||||
@@: ;
|
@@: ;
|
||||||
stosd
|
stosd
|
||||||
add eax, 0x1000
|
add eax, 0x1000
|
||||||
@ -101,7 +107,8 @@ proc init_mem
|
|||||||
rep stosd
|
rep stosd
|
||||||
|
|
||||||
mov ecx, [pg_data.kernel_tables-OS_BASE]
|
mov ecx, [pg_data.kernel_tables-OS_BASE]
|
||||||
mov eax, tmp_page_tab+PG_SW
|
mov eax, [tmp_page_tabs]
|
||||||
|
or eax, PG_SW
|
||||||
mov edi, edx
|
mov edi, edx
|
||||||
|
|
||||||
.map_kernel_tabs:
|
.map_kernel_tabs:
|
||||||
@ -131,29 +138,23 @@ align 4
|
|||||||
proc init_page_map
|
proc init_page_map
|
||||||
|
|
||||||
mov edi, sys_pgmap-OS_BASE
|
mov edi, sys_pgmap-OS_BASE
|
||||||
mov ecx, ((HEAP_BASE-OS_BASE)/4096)/32 ;384/4
|
mov ecx, [pg_data.pagemap_size-OS_BASE]
|
||||||
mov ebx, ecx
|
shr ecx, 2
|
||||||
xor eax,eax
|
or eax, -1
|
||||||
cld
|
cld
|
||||||
rep stosd
|
rep stosd
|
||||||
|
|
||||||
not eax
|
mov ecx, [tmp_page_tabs]
|
||||||
mov ecx, [pg_data.pagemap_size-OS_BASE]
|
|
||||||
sub ecx, ebx
|
|
||||||
shr ecx, 2
|
|
||||||
rep stosd
|
|
||||||
|
|
||||||
lea edi, [sys_pgmap-OS_BASE+ebx*4] ;+384
|
|
||||||
mov edx, [pg_data.pages_count-OS_BASE]
|
mov edx, [pg_data.pages_count-OS_BASE]
|
||||||
mov ecx, [pg_data.kernel_tables-OS_BASE]
|
shr ecx, 12
|
||||||
add ecx, ((HEAP_BASE-OS_BASE)/4096) and 31
|
add ecx, [pg_data.kernel_tables-OS_BASE]
|
||||||
sub edx, (HEAP_BASE-OS_BASE)/4096
|
|
||||||
sub edx, ecx
|
sub edx, ecx
|
||||||
mov [pg_data.pages_free-OS_BASE], edx
|
mov [pg_data.pages_free-OS_BASE], edx
|
||||||
|
|
||||||
xor eax, eax
|
mov edi, sys_pgmap-OS_BASE
|
||||||
mov ebx, ecx
|
mov ebx, ecx
|
||||||
shr ecx, 5
|
shr ecx, 5
|
||||||
|
xor eax, eax
|
||||||
rep stosd
|
rep stosd
|
||||||
|
|
||||||
not eax
|
not eax
|
||||||
@ -169,7 +170,6 @@ proc init_page_map
|
|||||||
mov [page_end-OS_BASE], ebx
|
mov [page_end-OS_BASE], ebx
|
||||||
|
|
||||||
mov [pg_data.pg_mutex-OS_BASE], 0
|
mov [pg_data.pg_mutex-OS_BASE], 0
|
||||||
|
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
@ -251,7 +251,8 @@ B32:
|
|||||||
lgdt [gdts]
|
lgdt [gdts]
|
||||||
jmp pword os_code:high_code
|
jmp pword os_code:high_code
|
||||||
|
|
||||||
|
align 4
|
||||||
|
tmp_page_tabs dd ?
|
||||||
use16
|
use16
|
||||||
org $-0x10000
|
org $-0x10000
|
||||||
include "boot/shutdown.inc" ; shutdown or restart
|
include "boot/shutdown.inc" ; shutdown or restart
|
||||||
|
@ -128,9 +128,8 @@
|
|||||||
; 0x80040000 -> 4FFFF data of retrieved disks and partitions (Mario79)
|
; 0x80040000 -> 4FFFF data of retrieved disks and partitions (Mario79)
|
||||||
|
|
||||||
; 0x80050000 -> 50FFF main page directory
|
; 0x80050000 -> 50FFF main page directory
|
||||||
; 0x80050200 -> 5FFFF pages bitmap
|
; 0x80051000 -> 7FFFF free (188 Kb)
|
||||||
|
|
||||||
; 0x80060000 -> 7FFFF free (128 Kb)
|
|
||||||
; 0x80080000 -> 8FFFF additional app info, in 256 byte steps - 256 entries
|
; 0x80080000 -> 8FFFF additional app info, in 256 byte steps - 256 entries
|
||||||
;
|
;
|
||||||
; 00 11db name of app running
|
; 00 11db name of app running
|
||||||
@ -205,29 +204,28 @@
|
|||||||
; 0x802E0000 -> 2EFFFF irq data area
|
; 0x802E0000 -> 2EFFFF irq data area
|
||||||
; 0x802F0000 -> 2FFFFF low memory save
|
; 0x802F0000 -> 2FFFFF low memory save
|
||||||
;
|
;
|
||||||
; 0x80300000 -> 45FFFF background image, max 1,375 M
|
; 0x80300000 -> 400000 hd cache
|
||||||
|
|
||||||
|
; 0x80400000 -> 41FFFF tcp memory 128 Kb
|
||||||
|
; 0x80420000 -> 427FFF tcp memory 32 Kb
|
||||||
;
|
;
|
||||||
; 0x80460000 -> 5FFFFF display info
|
; 0x80428000 -> 42FFFF !vrr driver 32 Kb
|
||||||
;
|
|
||||||
; 0x80600000 -> 6FFFFF hd cache
|
; 0x80430000 -> 477FFF skin data
|
||||||
;
|
|
||||||
; 0x80700000 -> 71ffff tcp memory 128 Kb
|
; 0x80438000 -> 43AFFF draw data - 256 entries
|
||||||
; 0x80720000 -> 75ffff free (256 kb)
|
|
||||||
;
|
|
||||||
; 0x80760000 -> 76ffff !vrr driver
|
|
||||||
; 0x80770000 -> 777fff tcp memory 32 Kb
|
|
||||||
;
|
|
||||||
; 0x80780000 -> 0x80782FFF draw data - 256 entries
|
|
||||||
; 00 dword draw limit - x start
|
; 00 dword draw limit - x start
|
||||||
; 04 dword draw limit - y start
|
; 04 dword draw limit - y start
|
||||||
; 08 dword draw limit - x end
|
; 08 dword draw limit - x end
|
||||||
; 0C dword draw limit - y end
|
; 0C dword draw limit - y end
|
||||||
|
|
||||||
|
; 0x8043BF80 -> 43BFFF TSS 128 bytes
|
||||||
|
; 0x8043C000 -> 43DFFF IO map for (8192*8)=65536 ports
|
||||||
|
|
||||||
|
; 0x8043F000 -> 57EFFF display info
|
||||||
|
; 0x8057F000 -> 58FFFF page map max 128 Kb
|
||||||
;
|
;
|
||||||
; 0x80783F80 -> 0x80783FFF TSS 128 bytes
|
; 0x80800000 -> kernel heap
|
||||||
;
|
|
||||||
; 0x80784000 -> 0x80785FFF IO map for (8192*8)=65536 ports
|
|
||||||
;
|
|
||||||
; 0x80786000 -> kernel heap
|
|
||||||
; 0x81FFFFFF heap min limit
|
; 0x81FFFFFF heap min limit
|
||||||
; 0xFDBFFFFF heap max limit
|
; 0xFDBFFFFF heap max limit
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user