From 9c65697dd8119ec9cee13f57f870b07e305d27ec Mon Sep 17 00:00:00 2001 From: andromeda Date: Fri, 6 Mar 2026 20:33:51 +0100 Subject: bunch of stuff idek --- bootle/src/lib.rs | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++ bootle/src/linker.ld | 8 ++++++++ 2 files changed, 63 insertions(+) create mode 100644 bootle/src/lib.rs create mode 100644 bootle/src/linker.ld (limited to 'bootle/src') diff --git a/bootle/src/lib.rs b/bootle/src/lib.rs new file mode 100644 index 0000000..adc1aab --- /dev/null +++ b/bootle/src/lib.rs @@ -0,0 +1,55 @@ +#![no_std] +#![no_main] + +use core::panic::PanicInfo; + +#[unsafe(no_mangle)] +pub extern "C" fn _start() -> ! { + welcome_serial(); + halt() +} + +fn print_serial(s: &str) { + let mut bytes = s.bytes(); + while let Some(b) = bytes.next() { + unsafe { + core::arch::asm!( + "out dx, al" + , in("al") b + ) + }; + } +} + +fn println_serial(s: &str) { + print_serial(s); + print_serial("\n"); +} + +fn welcome_serial() { + print_serial(ANSI_PINK); + println_serial("\nWelcome to Bootle OS"); + println_serial("All code GPL licensed and freely available on git.mtgmonkey.net"); + print_serial("Enjoy your time! Press "); + print_serial(ANSI_RED); + print_serial("ctrl+a x"); + print_serial(ANSI_PINK); + println_serial(" to escape Qemu"); + print_serial(ANSI_CLEAR); +} + +#[panic_handler] +fn panic(_: &PanicInfo) -> ! { + print_serial("panicked"); + halt() +} + +fn halt() -> ! { + unsafe { core::arch::asm!("hlt") }; + halt() +} + +const ANSI_CLEAR: &str = "\x1b[0m"; +const ANSI_RED: &str = "\x1b[31m"; +const ANSI_PINK: &str = "\x1b[35m"; +const ANSI_GREEN: &str = "\x1b[32m"; diff --git a/bootle/src/linker.ld b/bootle/src/linker.ld new file mode 100644 index 0000000..b523bc5 --- /dev/null +++ b/bootle/src/linker.ld @@ -0,0 +1,8 @@ +SECTIONS +{ + . = 0x00010000; + .text : { + *(.text._start) + *(.text*) + } +} -- cgit v1.3.1