forked from AbleOS/ableos
shuffling
This commit is contained in:
parent
48f0ef9699
commit
1cead2eccf
|
@ -1,3 +1,5 @@
|
||||||
|
use core::panic::PanicInfo;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
arch::{drivers::vga::WRITER, gdt},
|
arch::{drivers::vga::WRITER, gdt},
|
||||||
image::mono_bitmap::bruh,
|
image::mono_bitmap::bruh,
|
||||||
|
@ -75,9 +77,8 @@ extern "x86-interrupt" fn double_fault_handler(
|
||||||
// NOTE(able): ignore this always is 0
|
// NOTE(able): ignore this always is 0
|
||||||
_error_code: u64,
|
_error_code: u64,
|
||||||
) -> ! {
|
) -> ! {
|
||||||
bsod(&stack_frame, BSODSource::DoubleFault);
|
bsod(BSODSource::DoubleFault(&stack_frame));
|
||||||
|
// panic!("EXCEPTION: DOUBLE FAULT\n{:#?}", stack_frame);
|
||||||
panic!("EXCEPTION: DOUBLE FAULT\n{:#?}", stack_frame);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[naked]
|
#[naked]
|
||||||
|
@ -198,23 +199,28 @@ pub fn reset_pit_for_cpu() {
|
||||||
set_pit_2(1000);
|
set_pit_2(1000);
|
||||||
set_pit_3(1000);
|
set_pit_3(1000);
|
||||||
}
|
}
|
||||||
|
pub fn bsod(src: BSODSource) -> ! {
|
||||||
fn bsod(stack_frame: &InterruptStackFrame, src: BSODSource) {
|
|
||||||
let mut mode = SCREEN_BUFFER.lock();
|
let mut mode = SCREEN_BUFFER.lock();
|
||||||
|
|
||||||
mode.force_redraw();
|
mode.force_redraw();
|
||||||
|
/*
|
||||||
for y in 0..480 {
|
for y in 0..480 {
|
||||||
for x in 0..640 {
|
for x in 0..640 {
|
||||||
mode.set_pixel(x, y, 0x0000ff00);
|
mode.set_pixel(x, y, 0x0000ff00);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
let mut x = 1;
|
let mut x = 1;
|
||||||
let mut y = 0;
|
let mut y = 0;
|
||||||
|
|
||||||
|
let src1 = match src {
|
||||||
|
BSODSource::DoubleFault(_) => "DoubleFault",
|
||||||
|
BSODSource::Panic(_) => "Panic",
|
||||||
|
};
|
||||||
|
|
||||||
let st = format!(
|
let st = format!(
|
||||||
"We fucked up ඞ : {:?}\nThe following qr code will link you to the\nwiki which hopefully solves your problems",
|
"We fucked up ඞ : {}\nThe following qr code will link you to the\nwiki which hopefully solves your problems",
|
||||||
src
|
src1
|
||||||
);
|
);
|
||||||
|
|
||||||
for current in st.chars() {
|
for current in st.chars() {
|
||||||
|
@ -238,7 +244,11 @@ fn bsod(stack_frame: &InterruptStackFrame, src: BSODSource) {
|
||||||
// let sf = format!("https://git.ablecorp.us/able/ableos/wiki/Double-Faults");
|
// let sf = format!("https://git.ablecorp.us/able/ableos/wiki/Double-Faults");
|
||||||
|
|
||||||
let sd = match src {
|
let sd = match src {
|
||||||
BSODSource::DoubleFault => "https://git.ablecorp.us/able/ableos/wiki/Double-Faults",
|
BSODSource::DoubleFault(_) => "https://git.ablecorp.us/able/ableos/wiki/Double-Faults",
|
||||||
|
BSODSource::Panic(_) => {
|
||||||
|
//
|
||||||
|
"https://git.ablecorp.us/able/ableos/wiki/"
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let code = QrCode::new(sd).unwrap();
|
let code = QrCode::new(sd).unwrap();
|
||||||
|
@ -254,23 +264,20 @@ fn bsod(stack_frame: &InterruptStackFrame, src: BSODSource) {
|
||||||
y += 1;
|
y += 1;
|
||||||
x = 0;
|
x = 0;
|
||||||
} else {
|
} else {
|
||||||
if x == 0 {
|
if current == '█' {
|
||||||
if current == '█' {
|
mode.draw_filled_rect(x * 6, y * 7, (x * 6) + 6, (y * 7) + 7, 0xffffff00);
|
||||||
mode.draw_filled_rect(x, y * 7, x + 6, (y * 7) + 7, 0xffff0000);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if current == '█' {
|
|
||||||
mode.draw_filled_rect(x * 6, y * 7, (x * 6) + 6, (y * 7) + 7, 0xffff0000);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
x += 1;
|
x += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
mode.copy_to_buffer();
|
mode.copy_to_buffer();
|
||||||
|
|
||||||
|
loop {}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum BSODSource {
|
pub enum BSODSource<'a> {
|
||||||
DoubleFault,
|
DoubleFault(&'a InterruptStackFrame),
|
||||||
|
Panic(&'a PanicInfo<'a>),
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ pub struct BinaryData {
|
||||||
pub enum HandleResource {
|
pub enum HandleResource {
|
||||||
Channel,
|
Channel,
|
||||||
Socket,
|
Socket,
|
||||||
|
|
||||||
BinaryData,
|
BinaryData,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ pub fn kernel_main() -> ! {
|
||||||
x86_64::instructions::interrupts::without_interrupts(|| {
|
x86_64::instructions::interrupts::without_interrupts(|| {
|
||||||
let mut scheduler = SCHEDULER.lock();
|
let mut scheduler = SCHEDULER.lock();
|
||||||
// comment this out to resume normal use
|
// comment this out to resume normal use
|
||||||
scheduler.enqueue_spawn(traceloop);
|
// scheduler.enqueue_spawn(traceloop);
|
||||||
|
|
||||||
scheduler.enqueue_spawn(scratchpad);
|
scheduler.enqueue_spawn(scratchpad);
|
||||||
});
|
});
|
||||||
|
|
|
@ -70,6 +70,7 @@ pub mod allocator;
|
||||||
pub mod channels;
|
pub mod channels;
|
||||||
pub mod handle;
|
pub mod handle;
|
||||||
pub mod ipc;
|
pub mod ipc;
|
||||||
|
pub mod panic;
|
||||||
mod unicode_utils;
|
mod unicode_utils;
|
||||||
pub mod vga_e;
|
pub mod vga_e;
|
||||||
|
|
||||||
|
@ -81,7 +82,7 @@ pub use experiments::*;
|
||||||
pub use graphics::*;
|
pub use graphics::*;
|
||||||
pub use kernel;
|
pub use kernel;
|
||||||
pub use kernel::messaging;
|
pub use kernel::messaging;
|
||||||
pub use kernel::panic;
|
// pub use kernel::panic;
|
||||||
pub use kernel_state::*;
|
pub use kernel_state::*;
|
||||||
pub use keyboard::*;
|
pub use keyboard::*;
|
||||||
pub use logger::*;
|
pub use logger::*;
|
||||||
|
|
11
ableos/src/panic.rs
Normal file
11
ableos/src/panic.rs
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
use core::panic::PanicInfo;
|
||||||
|
use log::error;
|
||||||
|
|
||||||
|
use crate::arch::interrupts::{bsod, BSODSource};
|
||||||
|
|
||||||
|
#[panic_handler]
|
||||||
|
fn panic_handler(info: &PanicInfo) -> ! {
|
||||||
|
error!("{}", info);
|
||||||
|
|
||||||
|
bsod(BSODSource::Panic(info));
|
||||||
|
}
|
|
@ -75,7 +75,9 @@ pub fn scratchpad() {
|
||||||
|
|
||||||
let axel = axel::parse(axel_raw.to_string());
|
let axel = axel::parse(axel_raw.to_string());
|
||||||
|
|
||||||
software_int();
|
// software_int();
|
||||||
|
|
||||||
|
unsafe { asm!("int 5") }
|
||||||
|
|
||||||
// let xyz = pci::brute_force_scan();
|
// let xyz = pci::brute_force_scan();
|
||||||
// for dev in xyz {
|
// for dev in xyz {
|
||||||
|
|
|
@ -13,7 +13,7 @@ pub mod allocator;
|
||||||
pub mod arch;
|
pub mod arch;
|
||||||
pub mod device_interface;
|
pub mod device_interface;
|
||||||
pub mod messaging;
|
pub mod messaging;
|
||||||
pub mod panic;
|
// pub mod panic;
|
||||||
pub mod proccess;
|
pub mod proccess;
|
||||||
pub mod syscalls;
|
pub mod syscalls;
|
||||||
pub mod time;
|
pub mod time;
|
||||||
|
|
|
@ -6,5 +6,6 @@ use log::error;
|
||||||
#[panic_handler]
|
#[panic_handler]
|
||||||
fn panic_handler(info: &PanicInfo) -> ! {
|
fn panic_handler(info: &PanicInfo) -> ! {
|
||||||
error!("{}", info);
|
error!("{}", info);
|
||||||
|
|
||||||
loop {}
|
loop {}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue