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}