f'd myself over of course, scheduler can now run user programs....

This commit is contained in:
2026-07-04 01:59:19 -05:00
parent 0b98ac0273
commit 17ccde3556
11 changed files with 109 additions and 60 deletions

View File

@@ -29,15 +29,6 @@ typedef struct __attribute__((packed)) {
uint32_t base;
} idt_ptr;
typedef struct __attribute__((packed)) {
uint32_t edi, esi, ebp, dummy, ebx, edx, ecx, eax;
uint32_t int_no;
uint32_t error_code;
uint32_t eip, cs, eflags, u_esp, u_ss;
} intr_regs_t;
// (interrupts.S)
extern void load_idt(void);
extern void isr0();
@@ -89,7 +80,7 @@ void init_idt() {
if (isr_stub_table[i] != 0) {
set_idtr(i, isr_stub_table[i], SEGMENT_KERN, ATTR_KERN_32);
} else {
set_idtr(i, 0, SEGMENT_KERN, 0);
set_idtr(i, 0, SEGMENT_KERN, ATTR_KERN_32);
}
}
@@ -98,6 +89,15 @@ void init_idt() {
load_idt();
}
typedef struct __attribute__((packed)) {
uint32_t ds;
uint32_t edi, esi, ebp, dummy, ebx, edx, ecx, eax;
uint32_t int_no;
uint32_t error_code;
uint32_t eip, cs, eflags, u_esp, u_ss;
} intr_regs_t;
void common_interrupt_handler(intr_regs_t *args) {
switch (args->int_no) {
case 0:
@@ -116,7 +116,6 @@ void common_interrupt_handler(intr_regs_t *args) {
case 13:
case 15:
case 16:
asm volatile("cli");
kprintf("\n--- CPU Exception ---\n");
kprintf("Error: [%d] %s\n", args->int_no, err_messages[args->int_no]);
kprintf("Error Code: 0x%x\n", args->error_code);
@@ -125,10 +124,10 @@ void common_interrupt_handler(intr_regs_t *args) {
kprintf("EAX: 0x%x\n", args->eax);
kprintf("EFLAGS: 0x%x\n", args->eflags);
kprintf("Code Segment: 0x%x\n", args->cs);
kprintf("Calling Data Segment: 0x%x\n", args->ds);
kprintf("Current cr3: 0x%x\n", fetch_cr3());
kprintf("tss.esp0: 0x%x\n", tss.esp0);
process_t* task = current_task();
kprintf("Task kstack_top: 0x%x\n", task->kstack_top);
kprintf("instruction: 0x%x\n", *(uint32_t*)args->eip);
asm volatile("hlt");
break;
case 14:{
@@ -154,6 +153,10 @@ void common_interrupt_handler(intr_regs_t *args) {
asm volatile("hlt");
break;
}
case 32: {
break;
}
case 33: {
kprintf("ps2 keyboard interrupt\n");
uint8_t data = ps2_read_data();