]> git.dujemihanovic.xyz Git - nameless-os.git/blob - boot/x86/stage3/unreal.s
FAT32 bootloader boots the kernel
[nameless-os.git] / boot / x86 / stage3 / unreal.s
1 ; Routine for enabling unreal mode, which allows using 32-bit offsets in real mode
2
3 enable_unreal:
4 cli
5 push eax
6 push bx
7 push ds
8
9 lgdt [gdt_info]
10 mov eax, cr0
11 or al, 1
12 mov cr0, eax
13
14 jmp $+2
15
16 mov bx, 0x8
17 mov ds, bx
18
19 and al, 0xfe
20 mov cr0, eax
21
22 pop ds
23 pop bx
24 pop eax
25 sti
26 ret
27
28 ; GDT with 1 flat data segment descriptor
29 gdt_info:
30 dw gdt_end-gdt_start-1
31 dd gdt_start
32 gdt_start: dq 0 ; null entry
33 gdt_flat:
34 dw 0xffff
35 dw 0
36 db 0
37 db 10010010b
38 db 11001111b
39 db 0
40 gdt_end: