aboutsummaryrefslogtreecommitdiff
path: root/src/arch/x86_64
diff options
context:
space:
mode:
authorXander <xander@icth.xyz>2023-06-28 17:20:46 +0200
committerXander <xander@icth.xyz>2023-06-28 17:20:46 +0200
commitb83b28b21571f9b1fadd251295f5ca03d9dfedc7 (patch)
tree0de3d841a23358aedc706fdedc35fec7ff4e773a /src/arch/x86_64
parentebc6738ad4265db0b2b8d1b5c653d8f9597ff335 (diff)
downloadats-os-b83b28b21571f9b1fadd251295f5ca03d9dfedc7.tar.xz
ats-os-b83b28b21571f9b1fadd251295f5ca03d9dfedc7.zip
Booting to protected mode
Diffstat (limited to 'src/arch/x86_64')
-rw-r--r--src/arch/x86_64/boot.asm8
-rw-r--r--src/arch/x86_64/grub.cfg7
-rw-r--r--src/arch/x86_64/linker.ld16
-rw-r--r--src/arch/x86_64/multiboot_header.asm15
4 files changed, 46 insertions, 0 deletions
diff --git a/src/arch/x86_64/boot.asm b/src/arch/x86_64/boot.asm
new file mode 100644
index 0000000..1a531c0
--- /dev/null
+++ b/src/arch/x86_64/boot.asm
@@ -0,0 +1,8 @@
+global start
+
+section .text
+bits 32
+start:
+ ; print `OK` to screen
+ mov dword [0xb8000], 0x2f4b2f4f
+ hlt
diff --git a/src/arch/x86_64/grub.cfg b/src/arch/x86_64/grub.cfg
new file mode 100644
index 0000000..7c34c9c
--- /dev/null
+++ b/src/arch/x86_64/grub.cfg
@@ -0,0 +1,7 @@
+set timeout=0
+set default=0
+
+menuentry "ats-os" {
+ multiboot2 /boot/kernel.bin
+ boot
+}
diff --git a/src/arch/x86_64/linker.ld b/src/arch/x86_64/linker.ld
new file mode 100644
index 0000000..5d788f1
--- /dev/null
+++ b/src/arch/x86_64/linker.ld
@@ -0,0 +1,16 @@
+ENTRY(start)
+
+SECTIONS {
+ . = 1M;
+
+ .boot :
+ {
+ /* ensure that the multiboot header is at the beginning */
+ *(.multiboot_header)
+ }
+
+ .text :
+ {
+ *(.text)
+ }
+}
diff --git a/src/arch/x86_64/multiboot_header.asm b/src/arch/x86_64/multiboot_header.asm
new file mode 100644
index 0000000..9a9289c
--- /dev/null
+++ b/src/arch/x86_64/multiboot_header.asm
@@ -0,0 +1,15 @@
+section .multiboot_header
+header_start:
+ dd 0xe85250d6 ; magic number (multiboot 2)
+ dd 0 ; architecture 0 (protected mode i386)
+ dd header_end - header_start ; header length
+ ; checksum
+ dd 0x100000000 - (0xe85250d6 + 0 + (header_end - header_start))
+
+ ; insert optional multiboot tags here
+
+ ; required end tag
+ dw 0 ; type
+ dw 0 ; flags
+ dd 8 ; size
+header_end: