aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/boot32.s29
1 files changed, 25 insertions, 4 deletions
diff --git a/src/boot32.s b/src/boot32.s
index 251065e..e71d047 100644
--- a/src/boot32.s
+++ b/src/boot32.s
@@ -17,7 +17,8 @@ _start:
call setup_page_tables
call enable_paging
- //lgdt [gdt64.pointer]
+ lgdt (gdtdesc)
+ jmpl $0x8, $long_mode_start
//jmp gdt64.code_segment:long_mode_start
call halt
@@ -128,9 +129,29 @@ page_table_l3:
.skip 4096
page_table_l2:
.skip 4096
-//stack_bottom:
-// resb 4096 * 4
-//stack_top:
+stack_bottom:
+ .skip 4096 * 4
+stack_top:
+
+.section .rodata
+.p2align 2 # force 4 byte alignment
+gdt64:
+ .quad 0 // zero entry
+.code_segment:
+ .quad (1 << 43) | (1 << 44) | (1 << 47) | (1 << 53) # code segment
+gdtdesc:
+ .word (gdtdesc - gdt64 - 1) # sizeof(gdt) - 1
+ .long gdt64 # address gdt
+
+//# Bootstrap GDT
+//gdt:
+// SEG_NULLASM # null seg
+// SEG_ASM(STA_X|STA_R, 0x0, 0xffffffff) # code seg
+// SEG_ASM(STA_W, 0x0, 0xffffffff) # data seg
+//
+//gdtdesc:
+// .word (gdtdesc - gdt - 1) # sizeof(gdt) - 1
+// .long gdt # address gdt
//
//section .rodata
//gdt64: