aboutsummaryrefslogtreecommitdiff
path: root/src/kernel/interrupts
diff options
context:
space:
mode:
authorMarvin Borner2020-01-26 18:41:23 +0100
committerGitHub2020-01-26 18:41:23 +0100
commit43f501c74aa09f18c904ace902dc4cc5d241c218 (patch)
treeea30b53ac6043faddd1cdb2fdea17f37178b1cc7 /src/kernel/interrupts
parentd5d1749257ff8b9aa6b5ace4b4720b484a2860f3 (diff)
parentbb2a6b4d93512e8afc1b1999eb58f1f506cc27ae (diff)
Merged task-based userspace switching and updated heap/paging code
Awesome!
Diffstat (limited to 'src/kernel/interrupts')
-rw-r--r--src/kernel/interrupts/idt.c6
-rw-r--r--src/kernel/interrupts/isr.c10
2 files changed, 10 insertions, 6 deletions
diff --git a/src/kernel/interrupts/idt.c b/src/kernel/interrupts/idt.c
index 25a9504..026b23c 100644
--- a/src/kernel/interrupts/idt.c
+++ b/src/kernel/interrupts/idt.c
@@ -24,13 +24,13 @@ extern void idt_load();
void idt_set_gate(unsigned char num, unsigned long base, unsigned short sel, unsigned char flags)
{
// Specify the interrupt routine's base address
- idt[num].base_low = (base & 0xFFFF);
- idt[num].base_high = (base >> 16) & 0xFFFF;
+ idt[num].base_low = (uint16_t) (base & 0xFFFF);
+ idt[num].base_high = (uint16_t) ((base >> 16) & 0xFFFF);
// Set selector/segment of IDT entry
idt[num].sel = sel;
idt[num].always0 = 0;
- idt[num].flags = flags | 0x60;
+ idt[num].flags = (uint8_t) (flags | 0x60);
}
// Install IDT
diff --git a/src/kernel/interrupts/isr.c b/src/kernel/interrupts/isr.c
index 8b2a9e5..d89f581 100644
--- a/src/kernel/interrupts/isr.c
+++ b/src/kernel/interrupts/isr.c
@@ -3,7 +3,7 @@
#include <kernel/system.h>
#include <kernel/lib/string.h>
#include <kernel/lib/stdio.h>
-#include <kernel/paging/paging.h>
+#include <kernel/graphics/vesa.h>
// Install ISRs in IDT
void isrs_install()
@@ -117,10 +117,14 @@ void fault_handler(struct regs *r)
r->eip, r->eax, r->ebx, r->ecx, r->edx, r->esp, faulting_address, r->eflags, r->err_code, r->int_no,
exception_messages[r->int_no]
);
- serial_printf("%d", paging_get_flags(faulting_address));
// halt_loop(); // Idk loop?
char *message = (char *) exception_messages[r->int_no];
strcat(message, " Exception");
- panic(message);
+
+ // Show message if there wasn't an error in video memory
+ if (faulting_address != (uint32_t) fb)
+ panic(message);
+ else
+ halt_loop();
}
} \ No newline at end of file