- Implement Limine v8 boot protocol requests in dedicated PT_LOAD RW segment - Configure IOPL=3 and SSE in arch setup for Ring 3 drivers and libc - Unify scheduler context switching via switch_to and preempt_tick - Support dual-source keyboard/serial input in sys_key_read - Add automated 'make image' and 'make run' targets for instant QEMU launch - Complete interactive UNIX-like shell (osh) with built-in commands & ramdisk
46 lines
875 B
ArmAsm
46 lines
875 B
ArmAsm
/* opencoreC - Timer Preemptive Interrupt Trampoline (Vector 32 / 0x20) */
|
|
.global timer_isr_entry
|
|
.extern timer_interrupt_handler
|
|
|
|
.section .text
|
|
timer_isr_entry:
|
|
/* 1. Save all general-purpose registers to form complete interrupt context frame */
|
|
push rax
|
|
push rbx
|
|
push rcx
|
|
push rdx
|
|
push rsi
|
|
push rdi
|
|
push rbp
|
|
push r8
|
|
push r9
|
|
push r10
|
|
push r11
|
|
push r12
|
|
push r13
|
|
push r14
|
|
push r15
|
|
|
|
/* 2. Call handler in Rust (sends EOI and invokes sched.preempt_tick) */
|
|
call timer_interrupt_handler
|
|
|
|
/* 3. Restore all general-purpose registers */
|
|
pop r15
|
|
pop r14
|
|
pop r13
|
|
pop r12
|
|
pop r11
|
|
pop r10
|
|
pop r9
|
|
pop r8
|
|
pop rbp
|
|
pop rdi
|
|
pop rsi
|
|
pop rdx
|
|
pop rcx
|
|
pop rbx
|
|
pop rax
|
|
|
|
/* 4. Return from interrupt (IRETQ restores RIP, CS, RFLAGS, RSP, SS) */
|
|
iretq
|