diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/boot32.s | 29 |
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: |
