feat: implement PS/2 keyboard & shell, dynamic heap (malloc/new), Zero-Copy SHM, and SMP multicore initialization

This commit is contained in:
RarDog
2026-09-02 16:58:33 +03:00
parent e7a0d2e6b1
commit 4d7ee738b6
18 changed files with 698 additions and 31 deletions
+5 -3
View File
@@ -52,6 +52,7 @@ static mut IDT: [IdtEntry; 256] = [IdtEntry::missing(); 256];
extern "C" {
fn default_isr_stub();
fn timer_isr_entry();
fn keyboard_isr_entry();
}
// Global assembly ISR stub for default exception handling
@@ -92,6 +93,10 @@ pub unsafe fn init() {
let timer_addr = timer_isr_entry as *const () as usize as u64;
(*idt_ptr.add(32)).set_handler(timer_addr, 0, 0);
// Set Keyboard Interrupt (Vector 33 / 0x21)
let kbd_addr = keyboard_isr_entry as *const () as usize as u64;
(*idt_ptr.add(33)).set_handler(kbd_addr, 0, 0);
let descriptor = IdtDescriptor {
limit: (size_of::<[IdtEntry; 256]>() - 1) as u16,
base: idt_ptr as u64,
@@ -108,10 +113,7 @@ pub extern "C" fn raw_exception_handler(stack_ptr: *const u64) {
#[no_mangle]
pub extern "C" fn timer_interrupt_handler(saved_rsp: u64) -> u64 {
unsafe {
// Send End of Interrupt to controller
send_eoi();
// Perform preemptive scheduling quantum check
let sched = &mut *core::ptr::addr_of_mut!(SCHEDULER);
sched.preempt(saved_rsp)
}