From 34c9670ad3de68805f168f44b79bbb6ac664b827 Mon Sep 17 00:00:00 2001 From: SpookyDervish Date: Thu, 29 Jan 2026 08:36:04 +1100 Subject: [PATCH] interrupts!!!! :D --- OVMFbin/OVMF_VARS-pure-efi.fd | Bin 131072 -> 131072 bytes kernel/Makefile | 5 +++++ kernel/bin/CustomOS.img | Bin 48000000 -> 48000000 bytes kernel/bin/kernel.elf | Bin 26984 -> 27520 bytes kernel/lib/BasicRenderer.o | Bin 2112 -> 2160 bytes kernel/lib/interrupts/IDT.o | Bin 0 -> 1480 bytes kernel/lib/interrupts/interrupts.o | Bin 0 -> 1672 bytes kernel/lib/kernel.o | Bin 1840 -> 1824 bytes kernel/lib/kernelUtil.o | Bin 4080 -> 5240 bytes kernel/src/BasicRenderer.cpp | 2 ++ kernel/src/BasicRenderer.h | 4 +++- kernel/src/interrupts/IDT.cpp | 15 +++++++++++++++ kernel/src/interrupts/IDT.h | 24 ++++++++++++++++++++++++ kernel/src/interrupts/interrupts.cpp | 6 ++++++ kernel/src/interrupts/interrupts.h | 6 ++++++ kernel/src/kernel.cpp | 7 +++---- kernel/src/kernelUtil.cpp | 21 +++++++++++++++++++++ 17 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 kernel/lib/interrupts/IDT.o create mode 100644 kernel/lib/interrupts/interrupts.o create mode 100644 kernel/src/interrupts/IDT.cpp create mode 100644 kernel/src/interrupts/IDT.h create mode 100644 kernel/src/interrupts/interrupts.cpp create mode 100644 kernel/src/interrupts/interrupts.h diff --git a/OVMFbin/OVMF_VARS-pure-efi.fd b/OVMFbin/OVMF_VARS-pure-efi.fd index 829b1b48f8d121b759f5f99b58567fb442f83d27..43d67d583d8ceb7ebe1b7bf62ca1c657b18cfa59 100644 GIT binary patch delta 97 zcmV-n0G|JVfCzwq2(Wl60p63%EGv`1Hng)?D>4C-+AboKtSle_-?Pmu%?XpXG$yma zHj)98J~ASc@GS(hcsOzalg=$7lb|XDlMp&=lZY%t0pPREEI+lf@URAhVD`6Q_5n}{ Dt@S9? delta 50 zcmZo@;Am*z*ifOxcxCcIEA7b#%(hIJ>B9!Lrtd&z G04D%Fx))sl diff --git a/kernel/Makefile b/kernel/Makefile index ae40d4f..6ef303b 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -26,6 +26,11 @@ DIRS = $(wildcard $(SRCDIR)/*) kernel: $(OBJS) link +$(OBJDIR)/interrupts/interrupts.o: $(SRCDIR)/interrupts/interrupts.cpp + @ echo !==== COMPILING $^ + @ mkdir -p $(@D) + $(CC) -mno-red-zone -mgeneral-regs-only -ffreestanding -c $^ -o $@ + $(OBJDIR)/%.o: $(SRCDIR)/%.cpp @ echo !==== COMPILING $^ @ mkdir -p $(@D) diff --git a/kernel/bin/CustomOS.img b/kernel/bin/CustomOS.img index ef6e386ad51f53c378d02005797fb105a9b264ec..420c522d938306b6779eb8ea157508ef3ba79cde 100644 GIT binary patch delta 7978 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 OT!E|Bt@MNS#s2}-^{He4 diff --git a/kernel/bin/kernel.elf b/kernel/bin/kernel.elf index 949fb6aab50fde3b28eae6e3295245a355b2e7aa..0b569f642495153b8231284a1e0e787af626eb7c 100755 GIT binary patch delta 4892 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 delta 156 zcmew$a6n*!1|!2p%~y<*C7EO=TQGf@?7}R<=rq}pS)8$Oav_kMFu9XiYw{uHxx5vO z3}CU)`6_D~16Q20VeOCs}~g%G7oW z(}4xJ1RGxZ$4kHDUb=VY9k^%d4?Od3YLep}XQm|9tAeq{OuAkhwNFN(KJ$LMIkm;4 zZ1E5l50AWgHy?XWmE7ZBrlby>T1tc^h`fCQt!DF)b-T5;amT8!um-DJ4ZHEcuG{yE zZD;YcP%fZg5>&uAB2GT5q50P_MlkkYgE26T<%PN02$OFhM?!c?$FnQuw@UMJbsrPZ zrPyQQ5gr{fUTKaKh${i@F$;hHm4sksvgI^7kLERnFLpuhmf#)KgklFWUaY=lohX9M z_iObAI;%m_aeF)-K714KSKV$Ba5pT8wkFZf)W)I%L7#*2Nq|EnLh?@G;lYw&$o*~9 zJRa*^Y4Kpdfqn3~4{SS0fOYy|81#_q^?AVXn(igs?|c;gPH&GzaX$)TJ_HsApL`bV zZgyio4CJu$>t!sZJE&?c9N~Z0c=g#SbQ6W@XUI`-s@SSYxhm-1YAENezl*ih(?(Gt z=gV(a#^ijdS1=%LnM3-w>L|9J>tbvUMSm}usL}VLXI0TghkEMuOJdMFH5qNap5pXB zJ18n_(NNB(|AzLI^-ChTY&L}=F@GTPE~2J8((9?Oes@%oiF$fJDg-^DuA)^|za{qH KnPiR)z5YKYtD3w3 literal 0 HcmV?d00001 diff --git a/kernel/lib/interrupts/interrupts.o b/kernel/lib/interrupts/interrupts.o new file mode 100644 index 0000000000000000000000000000000000000000..91ac7379ef37626f4fe2536427413f79d216c90a GIT binary patch literal 1672 zcmbtTTWb?h5S~raB-OUW8x-op`r-w2$u`v6gCq@U7L<}is^Cl5B&TULH+D~;@x{9s zYoR|QKf^cu1>zqN1by+nSZ6k8((NHnb>J{F-^@2Nd*gP&yo z`df0F!rXNGEos)>esfD+0x0J5cg?HC^^I$$y<#m}wz-^MzL~bu8Hgdt#6tx!0U}_0 zCX8n_H2*xtNQ~zdFm_VL(p)0BkIB~&yBI_O?vTzcq~1sJ^YQX-^kZx|^CA8&@izH- z_SLDEr&ZciMSWxN=WtpuI+^NtG#X5Q97~~lHk2RCgxGC76w{@Mz%(4TJ5qRFzbAdG z-s?g2iG7Q%c#Uqj>bRXoOL!%FWs+9i^xU?9VyjzoTNTl12v2xOTemZ-uD@MpXr<&K zr%<|I4@NQ7KoQimi-W_lTnXXyR2a`FoOTrt;ikf=4xNcu{-7=08d$#c#(Ik_PqbW1 ziX917!<8;rHQxuz>yDjzx7`*UjCHzFSolV6_|mOEQ+~74w|ZW;CpJBEo z|HCkmOK*a{F)Uf-@LoB_@0R@~H0X}93@Dvem*Xg(9wl*;%3oCavcf~ZX%HExxUTg6 z^j}cTlk#okQq5z#M4$VgLpv;bf4U#S(%~euKPjL8Sq?Lw^(qF~<{Z+auoJTN+zQ4L zc=Y+1ug}Hz&n2ItK{a*$ca`99qS88FAUnf5=6hxv?8>rJgp^`RqjQ0DMZ jADvG%_1z-`UlqSWPDm6yLC&BxjlZwvmy^t~q4WO%MM|N% literal 0 HcmV?d00001 diff --git a/kernel/lib/kernel.o b/kernel/lib/kernel.o index 667557c21e81116fe337814ec3689fdd409bbaae..baebd3aa70552f37c673bdcaf526aca2ceb83b4f 100644 GIT binary patch delta 440 zcmdnMw}5Yg2IGQ>nsW699-Xx}Ji1+Pcyu0r!2kpvovtr{{1-s_gGV%mLl{dY=Q1_}$&ZZYjE<89nZzeMFd6Z==j10P<^-kYrKA?67ELZ> z66P}vD9X$$aSiZJ1{x2B$wWJd-!DNFeb(ut;!% zLjb5!ak3z*IpfXAo~-taUlHnAC76CNOg_bG$EY!xlg*w{V6rEWOqkrsX3wbrwIpux RMK*Iz4Q8;73?K){0{~m0dxro3 delta 423 zcmZ3$w}Eeh2IGc_nsW649-Xy2Qarj@R5chF7(6;%e;6L{=yu)V(Rus@Pyi$X;dcjc zfW^BxJbGO(cyykFtLO%*=yW~d(JKnp0G7Q5lkIlB(tJSZxa$RwT&L@m*Z)8aAn;Bt z%1h0exKBz4O3Y17DosmEEefy<2zE1!ck}lP znVi6+z^FXAkx5+A6=FF93y@|5;y?c(AY}4JCUM?mBw6;!tjxcG7BjM#a~@!VNF+>l zWHD#lIXRJ0dU6IU&*TLx5=guUEE1dtpeC44W@I&I{65)|)t*V15vW0I@&r~5CJDyL ryIAcQJtqHTwP#eAY{_QN*f6=0&7RW%YD3-RgKXwZ7R-}>F{=RphdzM$ diff --git a/kernel/lib/kernelUtil.o b/kernel/lib/kernelUtil.o index 97509881b62d9a0c3f58325205dc273ff4b776c3..19d2fbcc446310339aad8a6c68be46448f291e38 100644 GIT binary patch delta 1785 zcmZ`(U1$_n6uvvVo9rh07dK5}v^5V}7p0U*tI?O3#GTCzjb=6LgQ9LH?o1oHZe+44 z2$iK4EaPHWxsUo#d@7cL5(*;zVZf*l51J9qB#x|KvFpTgI{SHb3`B#9S)uC=DymWI;o0q!N7945OC9djr z%qsv*w+L{_4Ze(EED`pDvTdW-sjC?JU%YaNcepfLtyT}svOkoY`%fXMKN35o>XvagGizG-Ux3u0E0y}-sxR{L;r+-f>tRZBNA}o1_}RM62g1SU0_P$H%j

zl^5=lHr5qR1eXQBkLjT}%Z1k~%U*Um+^bZg?0&e{ zv%-Rr9ZIW@Cwv-7C>=g_I?@}Y;#@pt4JOBUxk39?$o&1)0 zzhyIs<;W+{#^lV)##G0{&cVPS0~D$Oi35Q&h=9q5fu+Inb0)L0W=nN5fuy0TfV4dj zGchnSEMwZ-#hSz@DgPL0u&QP68At72l@oAJ_|{lA4$9rDh{I9 zki=Ud;=v3c3qT9&GXXh9 z0?(K>GEJ5eG~-eLIT!?(Cr1gIF@0p3tjH=hd4-?`>kp95$%1UclQo0|CjStWVEVx{ zSxCr^Nr8KEkdPfC!{muV_KY%mJ~7P+5lBq%K&tj8~{37uvY*8 diff --git a/kernel/src/BasicRenderer.cpp b/kernel/src/BasicRenderer.cpp index 0b31cbd..166de8c 100644 --- a/kernel/src/BasicRenderer.cpp +++ b/kernel/src/BasicRenderer.cpp @@ -1,5 +1,7 @@ #include "BasicRenderer.h" +BasicRenderer* GlobalRenderer; + BasicRenderer::BasicRenderer(Framebuffer* framebuffer, PSF1_FONT* psf1_Font) { targetFramebuffer = framebuffer; PSF1_Font = psf1_Font; diff --git a/kernel/src/BasicRenderer.h b/kernel/src/BasicRenderer.h index e2c8dd3..b72b81c 100644 --- a/kernel/src/BasicRenderer.h +++ b/kernel/src/BasicRenderer.h @@ -12,4 +12,6 @@ class BasicRenderer { unsigned int Colour; void Print(const char* str); void PutChar(char chr, unsigned int xOff, unsigned int yOff); -}; \ No newline at end of file +}; + +extern BasicRenderer* GlobalRenderer; \ No newline at end of file diff --git a/kernel/src/interrupts/IDT.cpp b/kernel/src/interrupts/IDT.cpp new file mode 100644 index 0000000..738c7b5 --- /dev/null +++ b/kernel/src/interrupts/IDT.cpp @@ -0,0 +1,15 @@ +#include "IDT.h" + +void IDTDescEntry::SetOffset(uint64_t offset) { + offset0 = (uint16_t)(offset & 0x000000000000ffff); // lower 16 bits -> offset0 + offset1 = (uint16_t)((offset & 0x00000000ffff0000) >> 16); // upper 16 bits -> offset1 + offset2 = (uint32_t)((offset & 0xffffffff00000000) >> 32); // upper 32 bits -> offset2 +} + +uint64_t IDTDescEntry::GetOffset() { + uint64_t offset = 0; + offset |= (uint64_t)offset0; + offset |= (uint64_t)offset1 << 16; + offset |= (uint64_t)offset2 << 32; + return offset; +} \ No newline at end of file diff --git a/kernel/src/interrupts/IDT.h b/kernel/src/interrupts/IDT.h new file mode 100644 index 0000000..52bf296 --- /dev/null +++ b/kernel/src/interrupts/IDT.h @@ -0,0 +1,24 @@ +#pragma once +#include + +#define IDT_TA_InterruptGate 0b10001110 +#define IDT_TA_CallGate 0b10001100 +#define IDT_TA_TrapGate 0b10001111 + +struct IDTDescEntry { + uint16_t offset0; // lower 16 bits of offset + uint16_t selector; // segment selector + uint8_t ist; // interrupt stack table offset + uint8_t type_attr; // interrupt gate, trap gate, etc... + uint16_t offset1; // upper 16 bits of offset + uint32_t offset2; // upper 32 bits of offset + uint32_t ignore; // unused + + void SetOffset(uint64_t offset); + uint64_t GetOffset(); +}; + +struct IDTR { + uint16_t Limit; + uint64_t Offset; +}__attribute__((packed)); \ No newline at end of file diff --git a/kernel/src/interrupts/interrupts.cpp b/kernel/src/interrupts/interrupts.cpp new file mode 100644 index 0000000..65fb1f3 --- /dev/null +++ b/kernel/src/interrupts/interrupts.cpp @@ -0,0 +1,6 @@ +#include "interrupts.h" + +__attribute__((interrupt)) void PageFault_Handler(struct interrupt_frame* frame) { + GlobalRenderer->Print("Page fault caught!"); + while (true); +} \ No newline at end of file diff --git a/kernel/src/interrupts/interrupts.h b/kernel/src/interrupts/interrupts.h new file mode 100644 index 0000000..1dec6f8 --- /dev/null +++ b/kernel/src/interrupts/interrupts.h @@ -0,0 +1,6 @@ +#pragma once +#include "../BasicRenderer.h" + +struct interrupt_frame; + +__attribute__((interrupt)) void PageFault_Handler(struct interrupt_frame* frame); \ No newline at end of file diff --git a/kernel/src/kernel.cpp b/kernel/src/kernel.cpp index 9e0ae7d..9f84b84 100644 --- a/kernel/src/kernel.cpp +++ b/kernel/src/kernel.cpp @@ -2,12 +2,11 @@ extern "C" void _start(BootInfo* bootInfo) { KernelInfo kernelInfo = InitializeKernel(bootInfo); - BasicRenderer newRenderer = BasicRenderer(bootInfo->framebuffer, bootInfo->psf1_Font); PageTableManager* pageTableManager = kernelInfo.pageTableManager; - newRenderer.Print("Kernel initialized successfully! (we didn't crash lol)"); - newRenderer.cursorPosition = {0, newRenderer.cursorPosition.y + 18}; - + GlobalRenderer->Print("Kernel initialized successfully!"); + GlobalRenderer->cursorPosition = {0, GlobalRenderer->cursorPosition.y + 18}; + // make sure we never return from our OS while (true); } \ No newline at end of file diff --git a/kernel/src/kernelUtil.cpp b/kernel/src/kernelUtil.cpp index 76727f7..9a030cf 100644 --- a/kernel/src/kernelUtil.cpp +++ b/kernel/src/kernelUtil.cpp @@ -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; } \ No newline at end of file