aboutsummaryrefslogtreecommitdiffstats
path: root/src/boot/boot.stage2.asm
diff options
context:
space:
mode:
Diffstat (limited to 'src/boot/boot.stage2.asm')
-rw-r--r--src/boot/boot.stage2.asm48
1 files changed, 38 insertions, 10 deletions
diff --git a/src/boot/boot.stage2.asm b/src/boot/boot.stage2.asm
index 759b784..52c73e5 100644
--- a/src/boot/boot.stage2.asm
+++ b/src/boot/boot.stage2.asm
@@ -1,19 +1,47 @@
;; boot.stage2.asm
[bits 16]
-
- %include "boot.stage2.a20.asm"
- %include "boot.stage2.pm.asm"
- %include "boot.stage1.print.asm"
-
-section .stage2
+ [org 0x7e00]
+
+ jmp 0x0000:_s2_entry
_s2_entry:
- mov si, boot_stage2_msg
+ cli
+ xor ax, ax
+ mov ds, ax
+
+ mov si, boot_s2_msg
call _print_string
- call _enable_a20
- call _enable_pm
+
+ call _enable_a20 ; Enable A20 line
+ lgdt [GDT32_ptr] ; Load GDT
+
+ ;; Setup Protected Mode
+ mov eax, cr0
+ or eax, 1
+ mov cr0, eax
+
+ jmp CODE_SEG32:_protected_mode
+
[bits 32]
+_protected_mode:
+ mov ax, DATA_SEG32
+ mov ds, ax
+ mov esp, 0x90000
+
+ mov esi, boot_protmode_msg
+ call _print_string_pm_vga
+ call 0x10000
+
+ jmp $
+
+ %include "boot.stage1.print.asm"
+ %include "boot.stage2.a20.asm"
+ %include "boot.stage2.gdt32.asm"
+ %include "boot.stage2.print.asm"
-boot_stage2_msg: db "Entering Stage 2", 13, 10, 0
+boot_s2_msg:
+ db "Entering Stage 2", 13, 10, 0
+boot_protmode_msg:
+ db "Enabling Protected Mode", 13, 10, 0