From 3f8e7fabd11c31bdc0554ee01f2db43e182d51e2 Mon Sep 17 00:00:00 2001 From: SpookyDervish Date: Thu, 29 Jan 2026 09:02:15 +1100 Subject: [PATCH] panic screen --- OVMFbin/OVMF_VARS-pure-efi.fd | Bin 131072 -> 131072 bytes kernel/bin/CustomOS.img | Bin 48000000 -> 48000000 bytes kernel/bin/kernel.elf | Bin 27520 -> 28032 bytes kernel/lib/BasicRenderer.o | Bin 2160 -> 2584 bytes kernel/lib/interrupts/interrupts.o | Bin 1672 -> 2072 bytes kernel/lib/kernel.o | Bin 1824 -> 1960 bytes kernel/lib/kernelUtil.o | Bin 5240 -> 5632 bytes kernel/lib/panic.o | Bin 0 -> 1872 bytes kernel/src/BasicRenderer.cpp | 19 +++++++++++++++++++ kernel/src/BasicRenderer.h | 3 +++ kernel/src/interrupts/interrupts.cpp | 13 ++++++++++++- kernel/src/interrupts/interrupts.h | 4 +++- kernel/src/kernel.cpp | 5 ++++- kernel/src/kernelUtil.cpp | 10 ++++++++++ kernel/src/panic.cpp | 10 ++++++++++ kernel/src/panic.h | 3 +++ 16 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 kernel/lib/panic.o create mode 100644 kernel/src/panic.cpp create mode 100644 kernel/src/panic.h diff --git a/OVMFbin/OVMF_VARS-pure-efi.fd b/OVMFbin/OVMF_VARS-pure-efi.fd index 43d67d583d8ceb7ebe1b7bf62ca1c657b18cfa59..9bf4b9b2b88f43018a867e9bc20aea39d1108e1c 100644 GIT binary patch delta 205 zcmZo@;Am*z*ifOx_;T_=EA7b#%(hILdy7Tv9Tu_oSj0YH5&H-eQ)6NL1Y}PRUi5*zdBeBm8@@4e0st^~UA_PS delta 70 zcmZo@;Am*z*ifOxcyIDSEA7b#%(hHU2stuYz-j~I{mlohHu6r^n&ZUy0LVPcx!G#j aG0)8gt1h?#i96DZKCm|jd|zy^iW2~4Cm_uL diff --git a/kernel/bin/CustomOS.img b/kernel/bin/CustomOS.img index 420c522d938306b6779eb8ea157508ef3ba79cde..1e056f2e858818db92f6388c9b1856307106a407 100644 GIT binary patch delta 7902 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 C8Ybuf delta 7545 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 J;Xh)<{{c_!HERF> diff --git a/kernel/bin/kernel.elf b/kernel/bin/kernel.elf index 0b569f642495153b8231284a1e0e787af626eb7c..e7789081a3b406c145cc5d08aaece2e673ec807b 100755 GIT binary patch delta 4724 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 QP2--OFGn`eif0r54<)XkK>z>% delta 4402 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 delta 159 zcmbOs@-7{FqH*G6&0w$q!ieOuoXJGC70o0@EeN$yV%U zObINLi`eZLg(h!gw`Y`?{1HqVa@aGP07cX%&)|??vS6CLiNlUF185ouR80QKVa{2> m0^xZ~w&XPDd;pa@Fu4-QTfhvF+cSA5kaqy8GH3Emc6k83ktt^Y diff --git a/kernel/lib/interrupts/interrupts.o b/kernel/lib/interrupts/interrupts.o index 91ac7379ef37626f4fe2536427413f79d216c90a..8d516959ccf58eb7458ea0baa27902e2e7c0f564 100644 GIT binary patch delta 603 zcmZXQyGz4R6vpq(Lyb`JJyo0Hl87JyOLVac#YS|9YnL{bAc2}fNx@A=i---!p`*A+ zH~$2koTRH;>!!FkI@HIxd7#t}?&JHN@7{Zo(?n~$scAJ*Vo1DgSJa$4C5|?Sz7B zlD&x1{LfSXjL?&12A0rxzW}HPK251PM3aOPEiOf?8}U-i;htt^iiM16xlY;KDU)JB zTMOERE=>=i%j8YyQTdpiklBRdaIhZx-=S0nQ34M3t75*#AS%uehn5tgbufPt@i;#n z`351Q!8SMmhung?`zOlc@s}PA@Den*F1-MU*Cm7XjA}xg*J%fy`7F+9AuDyl0@1(` zbdFHC7S_2Wg*2Uo4?%&RI0A~eDw#A4UV$U((o=Mw0c~{eQSA<1(cQA9P?w+%>5|ME JM|s#s>IW!@fxQ3# delta 379 zcmbOs(7`)FgNcKAqLztnH!A}Wc=U>bsm^O2oyY&Y0I^^H3rI{)RY*%L%_&hxPApB& zC{djFUv{zrqX(}JP+kV42nZ}EFJzRT{D!fF(QS35{#Ae610;oWJ@(eZ!rWFj6H?i4q-his|nEaE?oU;OIn#5#FcJs*_ d*f@Y1D%s6BPcTB1rA*!li0H{llZ16(qDzQd06i zOnzdDA}3VoS-y#zW-+Er_GN4ak{22M8Dl1YWE5wt1d)>!m_pc{b5awFT(c%8Fv-cp zNBJ2VJ0%upCI_YFrKA?67Mb{^R+PAw0d1IE%VaER0={o^wq&(ue2P%VD#7?-@=lis!Hhazh dMu@2&CO5K~b2>onm^}F)n>o`4=E=X9)d1`&ZASnA delta 284 zcmZ3%zkqLo2GauOiCVI<1|FTYH$1vsZ+LVbf589*9-Xc)fczIg`oqKuMcr;ukZ5-h zOYV>6IE$ml=WfhlD2dM2*P z*O-h9^*~yH0Hlr?i2wYD085Y{5U>C-I}pRf9VUNd5@&P=k&|aIe*l`;$zsmg0MZTw z6DFTzF=yN|nUU2VNIC+^9g`b@6$^-O(& z6y2@KQv@G}SrS#+(VB%=M70mmTB#k?zDBj3wjgZ!sc1ds_{L6=B#|n8(5^GT1|`B zRQ^bn51yvZ$bFiO9o2XwIj_%Zyd2})$73PJlLL&F2E2k)qqG#3V+M7kI~qU6Y89_) zd{pCg$@xacH2zHENp$3Yqj#`7;)fqKIiuM=15WwjcTMHrquK;}e<^>ytEv1rO6^Oo zj;c77mlVHaW)*>1=AOWWSE+?*_36A2;y~hZOSW&uII~Tse~@t#vNUIJvZL}?v0$F& z@O9XAPs3{(keep#(L5hqH%|fzSJ<#(!n&Ksk62X!*MWKk+=Mx=K+aNF_wx3J_#0U} a1HO4Vdqcif$AD}mXE&)>3f)I+>Cu0}T?t13 delta 704 zcmZ8eJxc>Y5Z&F&#~DfPlH7ThixMp&Ay^1XNR<$5(gagjr4Y5UkYEZ+@uLW&k-#+3 zG$xe@f^q~z5F-8owTqQlh>e&^QYgB6cY!qnJCA*DW_D+0e{PVdC&;yYm5dWCLy_do zfUu6C;xeTwqLvHDRkGywkONq7cZ{;YNQ4$`Kv{|eVbm5(;;CX>g_?I6L{X0v2tpyM z98qNUVtItN;LfYzrsdBq-(lWth(%(i#~T8yN#fqUljWjW20h=uwmmsK1D)f0BRtDv z_CCUkHjO?CS6eJqHs(*>`g6!{P!7n*?iaDwy&D1|c&PAJqRc&0EAz)&(oaam#8 zN&@R}tYmQ>dP6}4MuC%PW0I;_AlG>yS`>VS^dt4)9F#JJ4a6|n9k|RcBfuTM}o8XMM z=R!3291At}nuo@O-T(NZUaH+IXR}!qpjs~9RxlTF4b{^xLBwpK zI&<)AG|QSEpJLjY4o^GHokVy>@(<5|+<9D?Y1a^4PT)%kJoHVcV`)~u51WsQbprMK z7F4@#%j`C6XUq0%4^6fF+Pdj?ET)R(u5Egi?OCR}*KvXhr2#ki;t>ycmd2R$Ox7V{Bv^j2IYdEvl{lK)I3H;P~uJt{)Z+pQm#!x1^ zz4^p5d-k~W|0pU3)67yYWYGoSxnmpo%Cd@p?o^ja)Z5~6z6hS?nPU0V!QVqDG`GY{ zznhSM7e4=f#Oq%}7s~ms@ibqQbE=n!x&8^%Wr^3ng+}6XvJ>j`QzYSek5J@GI_FuJ zboQbBs|+NaFvB(~lrtWm5ruBDquAr|G=;PJuZxCopQ-=H zadABJvuaZ*L)1SYfU<;(>crzIXT0}F!J>E}{=SJL5osfU&(pYO#Xl6}QS<)?6DZYW literal 0 HcmV?d00001 diff --git a/kernel/src/BasicRenderer.cpp b/kernel/src/BasicRenderer.cpp index 166de8c..0f6810c 100644 --- a/kernel/src/BasicRenderer.cpp +++ b/kernel/src/BasicRenderer.cpp @@ -40,4 +40,23 @@ void BasicRenderer::Print(const char* str) { chr++; } +} + +void BasicRenderer::Clear(uint32_t colour) { + uint64_t fbBase = (uint64_t)targetFramebuffer->BaseAddress; + uint64_t bytesPerScanline = targetFramebuffer->PixelsPerScanline * 4; + uint64_t fbHeight = targetFramebuffer->Height; + uint64_t fbSize = targetFramebuffer->BufferSize; + + for (int verticalScanline = 0; verticalScanline < fbHeight; verticalScanline ++){ + uint64_t pixPtrBase = fbBase + (bytesPerScanline * verticalScanline); + for (uint32_t* pixPtr = (uint32_t*)pixPtrBase; pixPtr < (uint32_t*)(pixPtrBase + bytesPerScanline); pixPtr ++){ + *pixPtr = colour; + } + } +} + +void BasicRenderer::Next() { + cursorPosition.x = 0; + cursorPosition.y += 16; } \ No newline at end of file diff --git a/kernel/src/BasicRenderer.h b/kernel/src/BasicRenderer.h index b72b81c..877dc2a 100644 --- a/kernel/src/BasicRenderer.h +++ b/kernel/src/BasicRenderer.h @@ -2,6 +2,7 @@ #include "math.h" #include "Framebuffer.h" #include "PSF1Font.h" +#include class BasicRenderer { public: @@ -12,6 +13,8 @@ class BasicRenderer { unsigned int Colour; void Print(const char* str); void PutChar(char chr, unsigned int xOff, unsigned int yOff); + void Clear(uint32_t colour); + void Next(); }; extern BasicRenderer* GlobalRenderer; \ No newline at end of file diff --git a/kernel/src/interrupts/interrupts.cpp b/kernel/src/interrupts/interrupts.cpp index 65fb1f3..ead8eb9 100644 --- a/kernel/src/interrupts/interrupts.cpp +++ b/kernel/src/interrupts/interrupts.cpp @@ -1,6 +1,17 @@ #include "interrupts.h" +#include "../panic.h" __attribute__((interrupt)) void PageFault_Handler(struct interrupt_frame* frame) { - GlobalRenderer->Print("Page fault caught!"); + Panic("Page Fault"); + while (true); +} + +__attribute__((interrupt)) void DoubleFault_Handler(struct interrupt_frame* frame) { + Panic("Double Fault"); + while (true); +} + +__attribute__((interrupt)) void GPFault_Handler(struct interrupt_frame* frame) { + Panic("General Protection Fault"); while (true); } \ No newline at end of file diff --git a/kernel/src/interrupts/interrupts.h b/kernel/src/interrupts/interrupts.h index 1dec6f8..c14ef68 100644 --- a/kernel/src/interrupts/interrupts.h +++ b/kernel/src/interrupts/interrupts.h @@ -3,4 +3,6 @@ struct interrupt_frame; -__attribute__((interrupt)) void PageFault_Handler(struct interrupt_frame* frame); \ No newline at end of file +__attribute__((interrupt)) void PageFault_Handler(struct interrupt_frame* frame); +__attribute__((interrupt)) void DoubleFault_Handler(struct interrupt_frame* frame); +__attribute__((interrupt)) void GPFault_Handler(struct interrupt_frame* frame); \ No newline at end of file diff --git a/kernel/src/kernel.cpp b/kernel/src/kernel.cpp index 9f84b84..b0c76ba 100644 --- a/kernel/src/kernel.cpp +++ b/kernel/src/kernel.cpp @@ -4,8 +4,11 @@ extern "C" void _start(BootInfo* bootInfo) { KernelInfo kernelInfo = InitializeKernel(bootInfo); PageTableManager* pageTableManager = kernelInfo.pageTableManager; + GlobalRenderer->Clear(0xFF191919); GlobalRenderer->Print("Kernel initialized successfully!"); - GlobalRenderer->cursorPosition = {0, GlobalRenderer->cursorPosition.y + 18}; + GlobalRenderer->Next(); + + asm("int $0x0e"); // make sure we never return from our OS while (true); diff --git a/kernel/src/kernelUtil.cpp b/kernel/src/kernelUtil.cpp index 9a030cf..6de702c 100644 --- a/kernel/src/kernelUtil.cpp +++ b/kernel/src/kernelUtil.cpp @@ -54,6 +54,16 @@ void PrepareInterrupts() { int_PageFault->type_attr = IDT_TA_InterruptGate; int_PageFault->selector = 0x08; // kernel code segment + IDTDescEntry* int_DoubleFault = (IDTDescEntry*)(idtr.Offset + 0x8 * sizeof(IDTDescEntry)); + int_DoubleFault->SetOffset((uint64_t)DoubleFault_Handler); + int_DoubleFault->type_attr = IDT_TA_InterruptGate; + int_DoubleFault->selector = 0x08; // kernel code segment + + IDTDescEntry* int_GPFault = (IDTDescEntry*)(idtr.Offset + 0xD * sizeof(IDTDescEntry)); + int_GPFault->SetOffset((uint64_t)GPFault_Handler); + int_GPFault->type_attr = IDT_TA_InterruptGate; + int_GPFault->selector = 0x08; // kernel code segment + // load idt asm("lidt %0" : : "m" (idtr)); } diff --git a/kernel/src/panic.cpp b/kernel/src/panic.cpp new file mode 100644 index 0000000..bbd1da9 --- /dev/null +++ b/kernel/src/panic.cpp @@ -0,0 +1,10 @@ +#include "panic.h" +#include "BasicRenderer.h" + +void Panic(const char* panicMessage) { + GlobalRenderer->Clear(0xFF000000); + GlobalRenderer->Colour = 0xFFFF0000; + GlobalRenderer->cursorPosition = {0,0}; + GlobalRenderer->Print("PANIC!!! "); + GlobalRenderer->Print(panicMessage); +} \ No newline at end of file diff --git a/kernel/src/panic.h b/kernel/src/panic.h new file mode 100644 index 0000000..84714df --- /dev/null +++ b/kernel/src/panic.h @@ -0,0 +1,3 @@ +#pragma once + +void Panic(const char* panicMessage); \ No newline at end of file