Something went wrong. Try again.
A successor to xv0, a from scratch rust OS
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263#![no_std]#![no_main]
use limine::BaseRevision;use xv1_kernel::drawing::framebuffer::set_fb_data;use core::fmt::Write;use xv1_kernel::serial;use core::panic::PanicInfo;use limine::request::{FramebufferRequest, HhdmRequest};use limine::{RequestsEndMarker, RequestsStartMarker};
#[used]#[unsafe(link_section = ".requests")]pub static BASE_REVISION: BaseRevision = BaseRevision::new();#[used]#[unsafe(link_section = ".requests")]pub static FRAMEBUFFER_REQUEST: FramebufferRequest = FramebufferRequest::new();#[used]#[unsafe(link_section = ".requests")]pub static HHDM_REQUEST: HhdmRequest = HhdmRequest::new();
/// Define the start and end markers for Limine requests.#[used]#[unsafe(link_section = ".requests_start_marker")]static _START_MARKER: RequestsStartMarker = RequestsStartMarker::new();#[used]#[unsafe(link_section = ".requests_end_marker")]static _END_MARKER: RequestsEndMarker = RequestsEndMarker::new();
#[unsafe(no_mangle)]unsafe extern "C" fn kmain() -> ! { assert!(BASE_REVISION.is_supported());
serial!("Hello from xv1!"); let fb = set_fb_data(&FRAMEBUFFER_REQUEST);
let white = (255u32 << fb.red_mask_shift) | (255u32 << fb.green_mask_shift) | (255u32 << fb.blue_mask_shift);
unsafe { (fb.base as *mut u32).write_volatile(white); }
loop { x86_64::instructions::hlt(); }}
#[panic_handler]fn panic(info: &PanicInfo) -> ! { let mut serial = unsafe { uart_16550::Uart16550Tty::new_port(0x3F8, uart_16550::Config::default()) }; if let Ok(s) = serial.as_mut() { let _ = writeln!(s, "PANIC: {info}"); } loop { x86_64::instructions::hlt(); }}
pub fn hhdm_offset() -> u64 { HHDM_REQUEST.response().expect("No HHDM response :(").offset }