From 415d27814f40d10f5125c621913e23e751a1e261 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Tue, 11 Apr 2017 14:59:09 +0200 Subject: [PATCH] Do a far jump to long mode and print `OKAY` --- src/arch/x86_64/boot.asm | 4 ++++ src/arch/x86_64/long_mode_init.asm | 9 +++++++++ 2 files changed, 13 insertions(+) create mode 100644 src/arch/x86_64/long_mode_init.asm 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