From d093a8eea6bfb0ff7e621e9ba3307dae698322aa Mon Sep 17 00:00:00 2001 From: dzwdz Date: Sat, 10 Jul 2021 16:37:45 +0200 Subject: separate the source code from object files; more modular Makefile --- src/platform/boot.s | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/platform/boot.s (limited to 'src/platform/boot.s') diff --git a/src/platform/boot.s b/src/platform/boot.s new file mode 100644 index 0000000..d5bfda5 --- /dev/null +++ b/src/platform/boot.s @@ -0,0 +1,47 @@ +.set MAGIC, 0x1BADB002 +.set FLAG_ALIGN, 1<<0 /* align modules on page boundaries */ +.set FLAG_MEMINFO, 1<<1 /* memory map */ +.set FLAGS, FLAG_ALIGN | FLAG_MEMINFO +.set CHECKSUM, -(MAGIC + FLAGS) + +.section .multiboot +.align 4 +.long MAGIC +.long FLAGS +.long CHECKSUM + +/* a lil stack */ +.section .bss +.global stack_top +.type stack_top, @object +.align 16 +stack_bottom: +.skip 16384 +stack_top: + + +.section .text +.global _start +.type _start, @function +_start: + mov $stack_top, %esp + call kmain + +.global halt_cpu +.type halt_cpu, @function +halt_cpu: + cli +1: hlt + jmp 1b + +// temporary, will be moved to another file soon +.global change_cs +.type change_cs, @function +change_cs: + /* retf pops off the return address and code segment off the stack. + * it turns out that in the i386 cdecl calling convention they're in + * the correct place already. + */ + retf + +.size _start, . - _start -- cgit v1.2.3