interrupts!!!! :D
This commit is contained in:
@@ -6,6 +6,8 @@ extern "C" void __stack_chk_fail(void) {
|
||||
|
||||
#include "kernelUtil.h"
|
||||
#include "gdt/gdt.h"
|
||||
#include "interrupts/IDT.h"
|
||||
#include "interrupts/interrupts.h"
|
||||
|
||||
KernelInfo kernelInfo;
|
||||
PageTableManager pageTableManager = NULL;
|
||||
@@ -41,8 +43,25 @@ void PrepareMemory(BootInfo* bootInfo){
|
||||
kernelInfo.pageTableManager = &pageTableManager;
|
||||
}
|
||||
|
||||
IDTR idtr;
|
||||
void PrepareInterrupts() {
|
||||
idtr.Limit = 0x0FFF;
|
||||
idtr.Offset = (uint64_t)GlobalAllocator.RequestPage();
|
||||
memset((void*)idtr.Offset, 0, 0x1000);
|
||||
|
||||
IDTDescEntry* int_PageFault = (IDTDescEntry*)(idtr.Offset + 0xE * sizeof(IDTDescEntry));
|
||||
int_PageFault->SetOffset((uint64_t)PageFault_Handler);
|
||||
int_PageFault->type_attr = IDT_TA_InterruptGate;
|
||||
int_PageFault->selector = 0x08; // kernel code segment
|
||||
|
||||
// load idt
|
||||
asm("lidt %0" : : "m" (idtr));
|
||||
}
|
||||
|
||||
BasicRenderer r = BasicRenderer(NULL, NULL);
|
||||
KernelInfo InitializeKernel(BootInfo* bootInfo){
|
||||
r = BasicRenderer(bootInfo->framebuffer, bootInfo->psf1_Font);
|
||||
GlobalRenderer = &r;
|
||||
|
||||
GDTDescriptor gdtDescriptor;
|
||||
gdtDescriptor.Size = sizeof(GDT) - 1;
|
||||
@@ -53,5 +72,7 @@ KernelInfo InitializeKernel(BootInfo* bootInfo){
|
||||
|
||||
memset(bootInfo->framebuffer->BaseAddress, 0, bootInfo->framebuffer->BufferSize);
|
||||
|
||||
PrepareInterrupts();
|
||||
|
||||
return kernelInfo;
|
||||
}
|
||||
Reference in New Issue
Block a user