From d42b629d983de336ddd3c22782caa2791ab78897 Mon Sep 17 00:00:00 2001 From: Robin Krahl Date: Sun, 5 Mar 2017 21:43:19 +0100 Subject: initial commit --- arch/x86_64/arch.c | 22 ++++++++++++++++++++++ arch/x86_64/config.mk | 2 ++ arch/x86_64/loader.s | 27 +++++++++++++++++++++++++++ arch/x86_64/memmap | 30 ++++++++++++++++++++++++++++++ 4 files changed, 81 insertions(+) create mode 100644 arch/x86_64/arch.c create mode 100644 arch/x86_64/config.mk create mode 100644 arch/x86_64/loader.s create mode 100644 arch/x86_64/memmap (limited to 'arch/x86_64') 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 + * + * 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 +#include + +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) } +} -- cgit v1.2.1