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