diff --git a/src/arch/x86_64/boot.asm b/src/arch/x86_64/boot.asm index 98155c2..fcd2422 100644 --- a/src/arch/x86_64/boot.asm +++ b/src/arch/x86_64/boot.asm @@ -1,4 +1,5 @@ global start +extern long_mode_start section .text bits 32 @@ -15,6 +16,8 @@ start: ; load the 64-bit GDT lgdt [gdt64.pointer] + jmp gdt64.code:long_mode_start + ; print `OK` to screen mov dword [0xb8000], 0x2f4b2f4f hlt @@ -154,6 +157,7 @@ stack_top: section .rodata gdt64: dq 0 ; zero entry +.code: equ $ - gdt64 ; new dq (1<<43) | (1<<44) | (1<<47) | (1<<53) ; code segment .pointer: dw $ - gdt64 - 1 diff --git a/src/arch/x86_64/long_mode_init.asm b/src/arch/x86_64/long_mode_init.asm new file mode 100644 index 0000000..507f389 --- /dev/null +++ b/src/arch/x86_64/long_mode_init.asm @@ -0,0 +1,9 @@ +global long_mode_start + +section .text +bits 64 +long_mode_start: + ; print `OKAY` to screen + mov rax, 0x2f592f412f4b2f4f + mov qword [0xb8000], rax + hlt