interrupts!!!! :D

This commit is contained in:
2026-01-29 08:36:04 +11:00
parent 7d869a3cb4
commit 34c9670ad3
17 changed files with 85 additions and 5 deletions

View File

@@ -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;
}