diff options
Diffstat (limited to 'arch/x86_64')
-rw-r--r-- | arch/x86_64/arch.c | 22 | ||||
-rw-r--r-- | arch/x86_64/config.mk | 2 | ||||
-rw-r--r-- | arch/x86_64/loader.s | 27 | ||||
-rw-r--r-- | arch/x86_64/memmap | 30 |
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) } +} |