kernel/
print.rs

1use core::ffi::CStr;
2use core::fmt::{self, Write};
3
4use crate::kprintln;
5
6use hal::Machinelike;
7
8pub struct Printer;
9
10impl Write for Printer {
11    fn write_str(&mut self, s: &str) -> fmt::Result {
12        hal::Machine::print(s).map_err(|_| fmt::Error)?;
13        Ok(())
14    }
15}
16
17pub fn print_header() {
18    kprintln!("****************************************************************");
19    kprintln!("  ___      _      _       ____ _____ ___  ____   ");
20    kprintln!(" / _ \\ ___(_)_ __(_)___  |  _ \\_   _/ _ \\/ ___|  ");
21    kprintln!("| | | / __| | '__| / __| | |_) || || | | \\___ \\  ");
22    kprintln!("| |_| \\__ \\ | |  | \\__ \\ |  _ < | || |_| |___) | ");
23    kprintln!(" \\___/|___/_|_|  |_|___/ |_| \\_\\|_| \\___/|____/  ");
24    kprintln!("");
25    kprintln!("****************************************************************");
26    kprintln!("");
27}
28
29pub fn print_boot_info(boot_info: &crate::BootInfo) {
30    kprintln!("[Osiris] Booting kernel...");
31
32    let implementer = unsafe { CStr::from_ptr(boot_info.implementer) };
33    let variant = unsafe { CStr::from_ptr(boot_info.variant) };
34
35    if let (Ok(implementer), Ok(variant)) = (implementer.to_str(), variant.to_str()) {
36        kprintln!("[Osiris] Detected Processor:");
37        kprintln!("[Osiris] Implementer     : {}", implementer);
38        kprintln!("[Osiris] Name            : {}", variant);
39        kprintln!("");
40    } else {
41        kprintln!("[Osiris] Error: failed to read processor information.");
42        kprintln!("");
43    }
44}