From b23aea77ed54c26416a43020861bfa6278c4554a Mon Sep 17 00:00:00 2001 From: Tyler McGurrin Date: Mon, 4 Aug 2025 19:27:59 -0400 Subject: [PATCH] Change how bootstrapping works, update multiboot stuff --- src/kernel/arch/i686/multiboot.asm | 15 ++++++++++++++- src/kernel/linker.ld | 3 ++- src/kernel/main.c | 16 ++++++++++++---- src/kernel/version.h | 2 +- 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/kernel/arch/i686/multiboot.asm b/src/kernel/arch/i686/multiboot.asm index a614a3f..287e612 100644 --- a/src/kernel/arch/i686/multiboot.asm +++ b/src/kernel/arch/i686/multiboot.asm @@ -4,6 +4,14 @@ ;Tyler McGurrin ; ;/////////////////////; [bits 32] +section .boot +start: + push 0 + popf + push ebx + push eax + call start + section .multiboot_header header_start: dd 0xe85250d6 ; magic number @@ -15,4 +23,9 @@ header_start: dw 0 ; type dw 0 ; flags dd 8 ; size -header_end: \ No newline at end of file +header_end: + +loop: + hlt + jmp loop + \ No newline at end of file diff --git a/src/kernel/linker.ld b/src/kernel/linker.ld index 0e93ada..138f1b6 100644 --- a/src/kernel/linker.ld +++ b/src/kernel/linker.ld @@ -4,7 +4,8 @@ SECTIONS { . = ALIGN(8); - .entry : { KEEP(*(.multiboot_header)) __entry_start = .; *(.entry) } + .boot : { KEEP(*(.multiboot_header)) __boot_start = .; *(.boot) } + .entry : { __entry_start = .; *(.entry) } .text : { __text_start = .; *(.text) } .data : { __data_start = .; *(.data) } .rodata : { __rodata_start = .; *(.rodata) } diff --git a/src/kernel/main.c b/src/kernel/main.c index af4f3ca..2b33bd8 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -10,10 +10,14 @@ #include #include +// stdlibs + #include #include #include +// Drivers + #include #include #include @@ -23,9 +27,13 @@ #include #include +// Core + #include #include +// Utilities + #include #include #include @@ -38,8 +46,7 @@ extern uint8_t __end; extern int uptime; uint16_t DEBUG_COM_PORT = COM1_PORT; - -void __attribute__((section(".entry"))) start(uint64_t multiboot_magic, void *multiboot_data) { +void start(unsigned long multiboot_magic, unsigned long multiboot_addr) { // multiboot 2 shit // int padded_size = tag->size + ((tag->size % 8)?(8-(tag->size%8)):0); @@ -75,8 +82,9 @@ void __attribute__((section(".entry"))) start(uint64_t multiboot_magic, void *mu printf("Initializing Memory Paging..."); Memory_Page_Init(); printf("Done!\n"); - printf("Multiboot Magic: %d\n", multiboot_magic); - printf("The Current Time and Date Is: %d:%d:%d %d/%d/%d%d\n", + Serial_Printf(DEBUG_COM_PORT, "Multiboot Magic: %d\n", multiboot_magic); + Serial_Printf(DEBUG_COM_PORT, "Multiboot Address: %d\n", multiboot_addr); + printf("\nThe Current Time and Date Is: %d:%d:%d %d/%d/%d%d\n", BCD2BIN(Read_CMOS(CMOS_RTC_Hours)), BCD2BIN(Read_CMOS(CMOS_RTC_Minutes)), BCD2BIN(Read_CMOS(CMOS_RTC_Seconds)), diff --git a/src/kernel/version.h b/src/kernel/version.h index 8169324..2b6e8b8 100644 --- a/src/kernel/version.h +++ b/src/kernel/version.h @@ -6,4 +6,4 @@ #pragma once #define LOGO " _ _____ _ __________________\n / | / / | / | / / _/_ __/ ____/\n / |/ / /| | / |/ // / / / / __/ \n / /| / ___ |/ /| // / / / / /___ \n/_/ |_/_/ |_/_/ |_/___/ /_/ /_____/ \n" -#define VERSION "RD-00048" \ No newline at end of file +#define VERSION "RD-00049" \ No newline at end of file