From 7e898e6a4cc24148dfdbc0d1b19e0b08adbc0081 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Thu, 13 Aug 2015 13:22:58 +0200 Subject: [PATCH] Reload selector registers and print `OKAY` --- src/arch/x86_64/boot.asm | 11 ++++++++--- src/arch/x86_64/long_mode_init.asm | 23 +++++++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) 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 3e3a6b93..5759fa69 100644 --- a/src/arch/x86_64/boot.asm +++ b/src/arch/x86_64/boot.asm @@ -13,6 +13,7 @@ ; limitations under the License. global start +extern long_mode_start section .text bits 32 @@ -29,9 +30,13 @@ start: ; load the 64-bit GDT lgdt [gdt64.pointer] - ; print `OK` to screen - mov dword [0xb8000], 0x2f4b2f4f - hlt + ; update selectors + mov ax, gdt64.data + mov ss, ax + mov ds, ax + mov es, ax + + jmp gdt64.code:long_mode_start setup_page_tables: ; map first P4 entry to P3 table 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 00000000..387c2fa4 --- /dev/null +++ b/src/arch/x86_64/long_mode_init.asm @@ -0,0 +1,23 @@ +; Copyright 2015 Philipp Oppermann +; +; Licensed under the Apache License, Version 2.0 (the "License"); +; you may not use this file except in compliance with the License. +; You may obtain a copy of the License at +; +; http://www.apache.org/licenses/LICENSE-2.0 +; +; Unless required by applicable law or agreed to in writing, software +; distributed under the License is distributed on an "AS IS" BASIS, +; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; See the License for the specific language governing permissions and +; limitations under the License. + +global long_mode_start + +section .text +bits 64 +long_mode_start: + ; print `OKAY` to screen + mov rax, 0x2f592f412f4b2f4f + mov qword [0xb8000], rax + hlt