Remove cpuid and longmode checks. Let's assume we have a modern processor

This commit is contained in:
Thomas Lovén 2018-02-05 14:09:36 +01:00
parent 3d380f462b
commit 3122de1666

View File

@ -10,63 +10,13 @@ BootStack:
.section .text .section .text
.code32 .code32
error:
//; Print "ERR!" in upper left corner
mov [0xb8000], dword ptr 0x4f004f00
mov [0xb8004], dword ptr 0x4f004f00
mov [0xb8000], byte ptr 'E'
mov [0xb8002], byte ptr 'R'
mov [0xb8004], byte ptr 'R'
mov [0xb8006], byte ptr '!'
jmp $
check_cpuid:
//; Save EFLAGS
pushfd
//; Try to modify EFLAGS.ID
pushfd
xor dword ptr [esp], 1<<21
popfd
//;Read EFLAGS into eax
pushfd
pop eax
//; Restore original EFLAGS
popfd
//; Check if EFLAGS.ID was modified
xor eax, [esp+4]
and eax, 1<<21
jz error
ret
check_longmode:
//; cpuid 0x8000 0000
mov eax, 0x80000000
cpuid
cmp eax, 0x80000001
jb error
//; cpuid 0x8000 0001
mov eax, 0x80000001
cpuid
//; Test for long mode flag
test edx, 1<<29
jz error
ret
.global _start .global _start
_start: _start:
cli cli
//; Set up a known stack
mov esp, offset BootStack mov esp, offset BootStack
call check_cpuid
call check_longmode
//; Set CR4.PAE //; Set CR4.PAE
//; enabling Page Address Extension //; enabling Page Address Extension
mov eax, cr4 mov eax, cr4