aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2017-03-05 21:43:19 +0100
committerRobin Krahl <robin.krahl@ireas.org>2017-03-05 21:43:19 +0100
commitd42b629d983de336ddd3c22782caa2791ab78897 (patch)
treeac3a3052c154ca88803df5754eb6c8459e246b2f /arch/x86_64
downloadgarmos-d42b629d983de336ddd3c22782caa2791ab78897.tar.gz
garmos-d42b629d983de336ddd3c22782caa2791ab78897.tar.bz2
initial commit
Diffstat (limited to 'arch/x86_64')
-rw-r--r--arch/x86_64/arch.c22
-rw-r--r--arch/x86_64/config.mk2
-rw-r--r--arch/x86_64/loader.s27
-rw-r--r--arch/x86_64/memmap30
4 files changed, 81 insertions, 0 deletions
diff --git a/arch/x86_64/arch.c b/arch/x86_64/arch.c
new file mode 100644
index 0000000..68f59fe
--- /dev/null
+++ b/arch/x86_64/arch.c
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2017 Robin Krahl <robin.krahl@ireas.org>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ */
+
+#include <garmos/arch.h>
+#include <garmos/types.h>
+
+void regset8(const uint32_t reg, const uint8_t val)
+{
+ volatile uint8_t *p = (volatile uint8_t *) reg;
+ *p = val;
+}
diff --git a/arch/x86_64/config.mk b/arch/x86_64/config.mk
new file mode 100644
index 0000000..ecbef44
--- /dev/null
+++ b/arch/x86_64/config.mk
@@ -0,0 +1,2 @@
+CPPFLAGS += -DCHAR_IS_INT8 -DSHORT_IS_INT16 -DINT_IS_INT32
+CPPFLAGS += -DENABLE_VGA
diff --git a/arch/x86_64/loader.s b/arch/x86_64/loader.s
new file mode 100644
index 0000000..b283a64
--- /dev/null
+++ b/arch/x86_64/loader.s
@@ -0,0 +1,27 @@
+.set MAGIC, 0x1badb002
+.set FLAGS, (1<<0 | 1<<1)
+.set CHECKSUM, -(MAGIC + FLAGS)
+
+.section .multiboot
+ .long MAGIC
+ .long FLAGS
+ .long CHECKSUM
+
+.section .text
+.extern kernel_main
+.global loader
+
+loader:
+ mov $kernel_stack, %esp
+ push %eax
+ push %ebx
+ call kernel_main
+
+_stop:
+ cli
+ hlt
+ jmp _stop
+
+.section .bss
+.space 2*1024*1024 # 2 MiB
+kernel_stack:
diff --git a/arch/x86_64/memmap b/arch/x86_64/memmap
new file mode 100644
index 0000000..78bdf9b
--- /dev/null
+++ b/arch/x86_64/memmap
@@ -0,0 +1,30 @@
+ENTRY(loader)
+OUTPUT_ARCH(i386:i386)
+OUTPUT_FORMAT(elf32-i386)
+
+SECTIONS
+{
+ . = 0x0100000;
+
+ .text :
+ {
+ *(.multiboot)
+ *(.text*)
+ *(.rodata)
+ }
+
+ .data :
+ {
+ start_ctors = .;
+ KEEP(*(.init_array));
+ KEEP(*(SORT_BY_INIT_PRIORITY(.init_array.*)));
+ end_ctors = .;
+ }
+
+ .bss :
+ {
+ *(.bss)
+ }
+
+ /DISCARD/ : { *(.fini_array*) *(.comment) }
+}