forked from KolibriOS/kolibrios
check for PSE and BIOS SMAP
git-svn-id: svn://kolibrios.org@838 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
2a2b5a8ff8
commit
1146b67279
@ -258,12 +258,43 @@ dfl1:
|
|||||||
and ax, bx
|
and ax, bx
|
||||||
and dx, bx
|
and dx, bx
|
||||||
cmp ax, dx
|
cmp ax, dx
|
||||||
jnz cpugood
|
|
||||||
mov si, not386
|
mov si, not386
|
||||||
|
jz sayerr
|
||||||
|
|
||||||
|
xor eax, eax
|
||||||
|
cpuid
|
||||||
|
cmp eax, 0
|
||||||
|
mov si, sz_nopse
|
||||||
|
jbe sayerr
|
||||||
|
|
||||||
|
mov eax, 1
|
||||||
|
cpuid
|
||||||
|
bt edx, 3
|
||||||
|
mov si, sz_nopse
|
||||||
|
jnc sayerr
|
||||||
|
|
||||||
|
xor ebx, ebx
|
||||||
|
mov es, bx
|
||||||
|
|
||||||
|
mov edi, 0x9104
|
||||||
|
mov ecx, 20
|
||||||
|
mov edx, 0x534D4150
|
||||||
|
|
||||||
|
mov [es:0x9100], ebx
|
||||||
|
mov eax, 0xe820
|
||||||
|
int 0x15
|
||||||
|
mov si, sz_nosmap
|
||||||
|
jc sayerr
|
||||||
|
|
||||||
|
cmp eax, 0x534D4150
|
||||||
|
je cpugood
|
||||||
sayerr:
|
sayerr:
|
||||||
call print
|
call print
|
||||||
jmp $
|
jmp $
|
||||||
cpugood:
|
|
||||||
|
|
||||||
|
cpugood:
|
||||||
|
|
||||||
push 0
|
push 0
|
||||||
popf
|
popf
|
||||||
|
@ -13,6 +13,9 @@
|
|||||||
|
|
||||||
$Revision$
|
$Revision$
|
||||||
|
|
||||||
|
sz_nosmap db 'No BIOS memory table. System halted.', 0
|
||||||
|
|
||||||
|
sz_nopse db 'Page size extensions not supported. System halted.', 0
|
||||||
|
|
||||||
d80x25_bottom:
|
d80x25_bottom:
|
||||||
db 186,' KolibriOS is based on MenuetOS and comes with ABSOLUTELY '
|
db 186,' KolibriOS is based on MenuetOS and comes with ABSOLUTELY '
|
||||||
|
@ -13,6 +13,9 @@
|
|||||||
|
|
||||||
$Revision$
|
$Revision$
|
||||||
|
|
||||||
|
sz_nosmap db 'No BIOS memory table. System halted.', 0
|
||||||
|
|
||||||
|
sz_nopse db 'Page size extensions not supported. System halted.', 0
|
||||||
|
|
||||||
d80x25_bottom:
|
d80x25_bottom:
|
||||||
db 186,' Kolibri OS ®á®¢ Menuet OS ¨ ¥ ¯à¥¤®áâ ¢«ï¥â '
|
db 186,' Kolibri OS ®á®¢ Menuet OS ¨ ¥ ¯à¥¤®áâ ¢«ï¥â '
|
||||||
|
@ -12,40 +12,13 @@ MEM_WB equ 6 ;write-back memory
|
|||||||
MEM_WC equ 1 ;write combined memory
|
MEM_WC equ 1 ;write combined memory
|
||||||
MEM_UC equ 0 ;uncached memory
|
MEM_UC equ 0 ;uncached memory
|
||||||
|
|
||||||
align 4
|
|
||||||
proc mem_test
|
|
||||||
|
|
||||||
mov eax, cr0
|
|
||||||
and eax, not (CR0_CD+CR0_NW)
|
|
||||||
or eax, CR0_CD ;disable caching
|
|
||||||
mov cr0, eax
|
|
||||||
wbinvd ;invalidate cache
|
|
||||||
|
|
||||||
xor edi, edi
|
|
||||||
mov ebx, 'TEST'
|
|
||||||
@@:
|
|
||||||
add edi, 0x100000
|
|
||||||
xchg ebx, dword [edi]
|
|
||||||
cmp dword [edi], 'TEST'
|
|
||||||
xchg ebx, dword [edi]
|
|
||||||
je @b
|
|
||||||
mov [MEM_AMOUNT-OS_BASE], edi
|
|
||||||
|
|
||||||
and eax, not (CR0_CD+CR0_NW) ;enable caching
|
|
||||||
mov cr0, eax
|
|
||||||
mov eax, edi
|
|
||||||
ret
|
|
||||||
endp
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc init_mem
|
proc init_mem
|
||||||
|
|
||||||
mov ecx, [0x2F0000 + 0x9100]
|
mov ecx, [0x2F0000 + 0x9100]
|
||||||
test ecx, ecx
|
|
||||||
jz .nosmap
|
|
||||||
|
|
||||||
xor eax, eax
|
|
||||||
mov esi, 0x2F0000 + 0x9104
|
mov esi, 0x2F0000 + 0x9104
|
||||||
|
xor eax, eax
|
||||||
@@:
|
@@:
|
||||||
cmp dword [esi+16], 1
|
cmp dword [esi+16], 1
|
||||||
jne .next
|
jne .next
|
||||||
@ -58,13 +31,9 @@ proc init_mem
|
|||||||
add esi, 20
|
add esi, 20
|
||||||
loop @B
|
loop @B
|
||||||
|
|
||||||
mov [MEM_AMOUNT-OS_BASE], eax
|
and eax, -4096
|
||||||
jmp @F
|
|
||||||
.nosmap:
|
|
||||||
call mem_test
|
|
||||||
|
|
||||||
mov eax, [MEM_AMOUNT-OS_BASE]
|
mov [MEM_AMOUNT-OS_BASE], eax
|
||||||
@@:
|
|
||||||
mov [pg_data.mem_amount-OS_BASE], eax
|
mov [pg_data.mem_amount-OS_BASE], eax
|
||||||
|
|
||||||
shr eax, 12
|
shr eax, 12
|
||||||
|
Loading…
Reference in New Issue
Block a user