diff options
| author | Marin Ivanov <[email protected]> | 2024-05-02 01:02:24 +0300 |
|---|---|---|
| committer | Marin Ivanov <[email protected]> | 2024-05-02 01:05:16 +0300 |
| commit | b443cf5d72a3b5b11331475a29772eca63479377 (patch) | |
| tree | 978b18ab922c4510be790cd96786b41c3be02a7b /src | |
| parent | 1bd974cdda8b3278ca7dbdd3a14ab162707f1615 (diff) | |
jump into 64-bit mode
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: |
