From 823b13234e669946ca2182fe5c018dc26243e248 Mon Sep 17 00:00:00 2001 From: SpookyDervish Date: Wed, 28 Jan 2026 19:34:59 +1100 Subject: [PATCH] starting work on page tables --- OVMFbin/OVMF_VARS-pure-efi.fd | Bin 131072 -> 131072 bytes kernel/bin/CustomOS.img | Bin 48000000 -> 48000000 bytes kernel/bin/kernel.elf | Bin 17136 -> 17272 bytes kernel/lib/BasicRenderer.o | Bin 2112 -> 2112 bytes kernel/lib/kernel.o | Bin 3304 -> 2896 bytes kernel/lib/paging/PageFrameAllocator.o | Bin 0 -> 5664 bytes kernel/lib/paging/PageMapIndexer.o | Bin 0 -> 1400 bytes kernel/src/BasicRenderer.cpp | 9 ++++--- kernel/src/BasicRenderer.h | 5 ++-- kernel/src/kernel.cpp | 25 ++++++++---------- .../src/{ => paging}/PageFrameAllocator.cpp | 0 kernel/src/{ => paging}/PageFrameAllocator.h | 6 ++--- kernel/src/paging/PageMapIndexer.cpp | 12 +++++++++ kernel/src/paging/PageMapIndexer.h | 11 ++++++++ kernel/src/paging/paging.h | 21 +++++++++++++++ 15 files changed, 66 insertions(+), 23 deletions(-) create mode 100644 kernel/lib/paging/PageFrameAllocator.o create mode 100644 kernel/lib/paging/PageMapIndexer.o rename kernel/src/{ => paging}/PageFrameAllocator.cpp (100%) rename kernel/src/{ => paging}/PageFrameAllocator.h (90%) create mode 100644 kernel/src/paging/PageMapIndexer.cpp create mode 100644 kernel/src/paging/PageMapIndexer.h create mode 100644 kernel/src/paging/paging.h diff --git a/OVMFbin/OVMF_VARS-pure-efi.fd b/OVMFbin/OVMF_VARS-pure-efi.fd index 21c2b9929d900cdbe616c1e68df2f38793996979..d40d20e2a884830999d602a1067b2b839a37eb5a 100644 GIT binary patch delta 73 zcmZo@;Am*z*pL=Bxz5UI^NO%@oSXYx)L0lhHy^b6%*)sXp}HYd50Ki(J2@@PiLn>R SJj=PcEa8}E(}!gr7zF@>y&yRN delta 34 scmV+-0Nww9fCzwq2(V^WlPa7-v#3_i39~w;#!0gDTt@TTwq5DEYf@c;k- diff --git a/kernel/bin/CustomOS.img b/kernel/bin/CustomOS.img index cf75e47b40d40ac64b94198dd6768970354f610f..4cbb54c83a4b0dd1229db022ab05f88948b1f031 100644 GIT binary patch delta 6181 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 Ko9Vo{<^KS6$7iSj diff --git a/kernel/bin/kernel.elf b/kernel/bin/kernel.elf index 4c5700610cd2aef5104a374d2688d618d556437b..9ec57c4f27362affffecb0dfb25a914ec43a5b2d 100755 GIT binary patch delta 3107 zcmZuz3v5$W7(VB+vJLiVH%7Y$^f4H03q}=^Zf9VV}MHgq?U|qgiglk ziPWOgLvQ-?LhcM0oLDaWW`}a)^rU0<7=0MJCOk(^z^#e*2)i`)$su+z9L(56*Ql&j zV+RUi+NlZFI$d3h z5l2AsH8E83RVT!z2~vxAM3TQ@iQ9Iak=&-jB>DDg<_}tqsRbCghWXzevyd#YX*C+F zI;^}~FSUsKnZNxMBWclng%Mz`vzYgMc8~m6DZkVaN|IO|WO1M5TZYw0j`X92s#U{j z#XE}2;BlhI3Hr;6$B`Eq2GCai3VDqF0%QA_e{W014;iW~3SUwW#jZ|gX!UKPkkfTp>~H1^vxuWFjjBQ>?EW;S~$ouPpnqoZ4nG&^@>tz_3~QmYHyKL|^5jLGh4 z7;#geHc|5F*231D5}TbN6kX}8IBOL9@vZdZjV%?sJ)fb~_-Sx9$C8?e<5(^+7} z{sVAg{}H&b-vSNT7eO2LH=qOiqtH`m_8R|Clqq=9*sf#DlsRO(zJqx76-B{B5Amzi z?Nt7A8?Kb&7U#9u-_4*5?;_&*Z!{~sj+c@r9n%+^RqQJP1XHN?!y1VWyIjv_PN z13hTl|EHoX9loWoD3*eE&^8aO#b&x2oY)@&7xr1ufc?YJhW#PvC^lQWuPRF22p?Nw zKDLh`qy*?3Gc5os_BlAu&bowX%3q4&8KJ5{6)c}K2z%yCz|ZZHxyH;>XplxIDNAFP zgc!5|E7LI7=(vR|#`d8*)_SyoB;(;3{w+%awiVhya-e6fvC@I40h1NrKHZ$HT1$-HlU!ATCu2>0X*gcy_@g|AdPZW4$0{;! z`?)tRBk72r{*N7lO4o{;f)XINebc-ho17jjt~&*M== zj~xW(d}HQ4oUP*bJsR_~uzCK`H4e&x~%D6ezo(-F7#p;KihBXT^!Bd`-UOd8s=U#_cgPf_ot^7TjQRNs- z7m79Q&IPk5xGO9)0Id~X{LUDhvlEAYvR69i8P-^}Gq2%^i$JUM%jC!Tqe(<^9IRSs VPYll2>~=!y!g)ef1$@0Q?|(hCMD+jw delta 3133 zcmZuz4RBP|6~6b8he>8hb`z4#^0&JIO2USkA82SoNH+B8qm&vlCZ!stMiVWuGPns0 zw#sf;5_z-D%+k|Q{25B>DY%F6P2R2%|(MDV?(m2y8i-NNVYQO-?h`yft-q~yb z@66tF@AsYmd++Wh`}ueu4;R@Qvzaj(Ou@=`mqu+(73QwVO%ga?^qr`4Xg&WhXR)EC zhLmKqAw#Ug8{TSBwX>@B#F)0_gcj4*j{ZnfMs_JN_=R;IkHL1Ut8zrul*IXMA!QU7 z(p*k{NEvaT`(L@v;v)!H77Y@HoUeTkfZHYsDUd>QZ-p@H70AGHa zv%HM4T^4KZVPzs1;p!fBpkOXS|IDy5bwJL8&+~sJEiC(;y-xbn1NHV2%Nw3a_7ylj z^I_?jN3i`S+m>e6!Ak|3r27qazR6z0Qy|Y@!0y6FBqmrs3@h!WmZ#I?Z=u^>EGH0H z0`KM3!$mIoDzfY;o%AyRmx^lm2e8C3n;(YNjxK&Lyy|G@=b&&_l|Ojl zK5XTI4mFgqutanbJ6I9HJ{?d)O`>@yGt~hlu4>0s>{{PtT{qE&A~n>4?2lcq8|}Y( z5p7>HIn_lTP)B&!Y(*C_VegPI#(;bZV__q!{lZ--GKz>9QHK*2RdgBe8G0X42WAuq z4a3-opDi1P3k!u%;z#ga=)&);D=D>TqV+Z;hZETXf9|T_-y~gT=zd|iEVxj>nEwXi zBoZOz4Boq_5*I~j${EaZ1Ql-x_R?fd(Zu!X>0q~iN3b1cut3^}nM9Wn%YRF-hti5> zWsOsU?Vl3tEm84Jl@*%7W~P0Z!M>fiwXiTYJXzVHdd!3GkrRn;bp7qrn>XHqcwTBq zp1BBX?2Ghd;W`r>bC$1r?|X=FJU96mu7b)0zSjwS8?{Q@_jlBK8PW7>6<6#vd|QXm z-vL!yyD#^!d=NEuMsoYwINnrwFYKRlNIJQ2=KFN6ruDRxywq7!fUYtKgVXxSPKpeJE1=U{1*$zRpfpvv+Nci@DY`vX<`7 z4%#+%c6a)=rnd0?ie~qH|I_sbae=)#)_!T#jOo9z+?I*kIrv$Dp8yP2INd)vrR#sh z-K3VZ*H9B$kK-o>rz@P?0=&}6`@oHJ7`!;IgLa&4(2Mg47{vK07_M~sFQ3)*1$>IX zX=sgcg}>(!zxJuFW3$rnHl(w91NpC!$ETa-8`J!Mk^dO^d}#_lEk{cEzs{M&K7{rv zr+eu+UGKjkjo!&LR-pN_Fj(cppRZw@%fY>Lw){Mz_XA(*U7WfT-UcvO;GAKGBg@CjjfPo4?b2tS3=iu!|91d#X)rOfbJ!t6i)xZ zzIr9nHf&gg!fz(FmCPL3CQwXx2jRcRO2qis6j-pg+V1Zq_BvHzv_;SL_ z(4iQ{SxWW@=eu$YR*&Bo=Ogty}Nq8I^VX6#YIY0DaDvCqW)>?9ea ziX0__5<0zJGMFH|g#vFU+?8P_MBB*#cM-moj>k_GY#3Id-ui%nmadjbox4d)lFM^R{gTwr*u8g z)di!q|A9AGv=!c{v#iOtaZ``d1uxglhKjn4aAie4yi+$9<;EF`nwY@;V@SBY5WU@8KERKJ6O34hS_y(Aq7bV@WMv@=f~F7=5i0`<21NzGFeon9To_cy ze-H#AcHx3WniPiyw2Xyt5Q{A=QmL~i3J&bd+xPbEJUe1Xtc}rB&leUqS*xn4@=!`w z&{}@5GF-fIarh#n$T(uQcERd}>poI1l=??&TrjtJU@`}RY%Za-5iV)rvV%wtGpBrl zzlh4yr;r2AnSC?{Au@c7;)|K;5tQedBySAoOSQ2&?{GYEWF-4bngK3uA#H VV!&b`Nk=^G?lur3PZMZByg&*7N>H783dID)x}kLff?Crq&fs29r;E<^;*0xo$vSi{Sw+K zS$+y%e)OdC+=t8)?K=B5&EmZ_dgyg`5$Q@^v_2QUy+1<=j$$yYcW(Rw#21@D diff --git a/kernel/lib/kernel.o b/kernel/lib/kernel.o index cafe99cfa87c282dbfe750a16c0a9fa375de724c..c49a104f4385bacffd9cb6be01f4c68c23ea237c 100644 GIT binary patch delta 961 zcmaDMc|mM~2Ga%hiCRkajc+C}Ffe#@?ydO$|9^@{H;bwUnD6?-@PJ2mD@fF%JAebu zJCurFZ+2kgni z3c8aUndBK6CeLFk6W+=Q^nfFuKpT@YFB|g)Mjm#K$%UMflO31~IKgs2X_d(rnZ+kx zV6I?%2Vyb)0rOX|+!8hkNK8-lO)T)tOG&LrEpj$=&7FLZRd{j}t0+%^cQPn!K)_?N zBAdA6bO?um1xT|4@gHCs0D*av1KGqGmria3lE*=$i0|65dGXpWqOlh#JI#d>9BM*|SC0N!0hhBfMY%~tNxnS869D19G7C?>!=(a@MMiFWMw!WuKvH3HBajT3e309oNrQbd6OSF|3Q)iRLBM2B9&^qg XpdbPQ$;q8SUIZu-fS?3o7$*+^25>>G literal 3304 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 literal 0 HcmV?d00001 diff --git a/kernel/src/BasicRenderer.cpp b/kernel/src/BasicRenderer.cpp index 62dec2e..0b31cbd 100644 --- a/kernel/src/BasicRenderer.cpp +++ b/kernel/src/BasicRenderer.cpp @@ -3,17 +3,18 @@ BasicRenderer::BasicRenderer(Framebuffer* framebuffer, PSF1_FONT* psf1_Font) { targetFramebuffer = framebuffer; PSF1_Font = psf1_Font; + Colour = 0xFFFFFFFF; cursorPosition = {0,0}; } -void BasicRenderer::PutChar(unsigned int colour, char chr, unsigned int xOff, unsigned int yOff) { +void BasicRenderer::PutChar(char chr, unsigned int xOff, unsigned int yOff) { unsigned int* pixPtr = (unsigned int*)targetFramebuffer->BaseAddress; char* fontPtr = (char*)PSF1_Font->glyphBuffer + (chr * PSF1_Font->psf1_Header->charsize); for (unsigned long y = yOff; y < yOff + 18; y++) { for (unsigned long x = xOff; x < xOff+8; x++) { if ((*fontPtr & (0b10000000 >> (x - xOff))) > 0) { - *(unsigned int*)(pixPtr + x + (y * targetFramebuffer->PixelsPerScanline)) = colour; + *(unsigned int*)(pixPtr + x + (y * targetFramebuffer->PixelsPerScanline)) = Colour; } } @@ -22,12 +23,12 @@ void BasicRenderer::PutChar(unsigned int colour, char chr, unsigned int xOff, un } } -void BasicRenderer::Print(unsigned int colour, const char* str) { +void BasicRenderer::Print(const char* str) { unsigned int x = 0; char* chr = (char*)str; while (*chr != 0) { - PutChar(colour, *chr, cursorPosition.x, cursorPosition.y); + PutChar(*chr, cursorPosition.x, cursorPosition.y); cursorPosition.x+=8; if (cursorPosition.x + 8 > targetFramebuffer->Width) { diff --git a/kernel/src/BasicRenderer.h b/kernel/src/BasicRenderer.h index d5e90eb..e2c8dd3 100644 --- a/kernel/src/BasicRenderer.h +++ b/kernel/src/BasicRenderer.h @@ -9,6 +9,7 @@ class BasicRenderer { Point cursorPosition; Framebuffer* targetFramebuffer; PSF1_FONT* PSF1_Font; - void Print(unsigned int colour, const char* str); - void PutChar(unsigned int colour, char chr, unsigned int xOff, unsigned int yOff); + unsigned int Colour; + void Print(const char* str); + void PutChar(char chr, unsigned int xOff, unsigned int yOff); }; \ No newline at end of file diff --git a/kernel/src/kernel.cpp b/kernel/src/kernel.cpp index 2bc3832..10b1506 100644 --- a/kernel/src/kernel.cpp +++ b/kernel/src/kernel.cpp @@ -5,7 +5,8 @@ #include "efiMemory.h" #include "memory.h" #include "Bitmap.h" -#include "PageFrameAllocator.h" +#include "paging/PageFrameAllocator.h" +#include "paging/PageMapIndexer.h" struct BootInfo { Framebuffer* framebuffer; @@ -40,19 +41,15 @@ extern "C" void _start(BootInfo* bootInfo) { newAllocator.LockPages(&_KernelStart, kernelPages); - // print out ram info - newRenderer.Print(0xFFFFFFFF, "Free RAM: "); - newRenderer.Print(0xFF00FFFF, to_string(newAllocator.GetFreeRAM() / 1024)); - newRenderer.Print(0xFF00FFFF, " KB"); - newRenderer.cursorPosition = {0, newRenderer.cursorPosition.y + 18}; - newRenderer.Print(0xFFFFFFFF, "Used RAM: "); - newRenderer.Print(0xFF00FFFF, to_string(newAllocator.GetUsedRAM() / 1024)); - newRenderer.Print(0xFF00FFFF, " KB"); - newRenderer.cursorPosition = {0, newRenderer.cursorPosition.y + 18}; - newRenderer.Print(0xFFFFFFFF, "Reserved RAM: "); - newRenderer.Print(0xFF00FFFF, to_string(newAllocator.GetReservedRAM() / 1024)); - newRenderer.Print(0xFF00FFFF, " KB"); - newRenderer.cursorPosition = {0, newRenderer.cursorPosition.y + 18}; + PageMapIndexer pageIndexer = PageMapIndexer(0x1000); + + newRenderer.Print(to_string(pageIndexer.P_i)); + newRenderer.Print(" - "); + newRenderer.Print(to_string(pageIndexer.PT_i)); + newRenderer.Print(" - "); + newRenderer.Print(to_string(pageIndexer.PD_i)); + newRenderer.Print(" - "); + newRenderer.Print(to_string(pageIndexer.PDP_i)); return; } \ No newline at end of file diff --git a/kernel/src/PageFrameAllocator.cpp b/kernel/src/paging/PageFrameAllocator.cpp similarity index 100% rename from kernel/src/PageFrameAllocator.cpp rename to kernel/src/paging/PageFrameAllocator.cpp diff --git a/kernel/src/PageFrameAllocator.h b/kernel/src/paging/PageFrameAllocator.h similarity index 90% rename from kernel/src/PageFrameAllocator.h rename to kernel/src/paging/PageFrameAllocator.h index 41fe2b0..7551b7a 100644 --- a/kernel/src/PageFrameAllocator.h +++ b/kernel/src/paging/PageFrameAllocator.h @@ -1,9 +1,9 @@ #pragma once -#include "efiMemory.h" +#include "../efiMemory.h" #include -#include "Bitmap.h" -#include "memory.h" +#include "../Bitmap.h" +#include "../memory.h" class PageFrameAllocator { public: diff --git a/kernel/src/paging/PageMapIndexer.cpp b/kernel/src/paging/PageMapIndexer.cpp new file mode 100644 index 0000000..92b6074 --- /dev/null +++ b/kernel/src/paging/PageMapIndexer.cpp @@ -0,0 +1,12 @@ +#include "PageMapIndexer.h" + +PageMapIndexer::PageMapIndexer(uint64_t virtualAddress) { + virtualAddress >>= 12; // 4096 aligned + P_i = virtualAddress & 0x1FF; + virtualAddress >>= 9; + PT_i = virtualAddress & 0x1FF; + virtualAddress >>= 9; + PD_i = virtualAddress & 0x1FF; + virtualAddress >>= 9; + PDP_i = virtualAddress & 0x1FF; +} \ No newline at end of file diff --git a/kernel/src/paging/PageMapIndexer.h b/kernel/src/paging/PageMapIndexer.h new file mode 100644 index 0000000..bd2e0ad --- /dev/null +++ b/kernel/src/paging/PageMapIndexer.h @@ -0,0 +1,11 @@ +#pragma once +#include + +class PageMapIndexer { + public: + PageMapIndexer(uint64_t virtualAddress); + uint64_t PDP_i; + uint64_t PD_i; + uint64_t PT_i; + uint64_t P_i; +}; \ No newline at end of file diff --git a/kernel/src/paging/paging.h b/kernel/src/paging/paging.h new file mode 100644 index 0000000..850d211 --- /dev/null +++ b/kernel/src/paging/paging.h @@ -0,0 +1,21 @@ +#pragma once +#include + +struct PageDirectoryEntry { + bool Present : 1; // memory exists and can be accessed + bool ReadWrite : 1; // + bool UserSuper : 1; // memory can only be accessed by supervisor or both user and supervisor + bool WriteThrough : 1; // + bool CacheDisabled : 1; // + bool Accessed : 1; // set when cpu accesses page + bool ignore0 : 1; // + bool LargerPages : 1; // + bool ignore1 : 1; // + uint8_t Available : 3; // + uint64_t Address : 52; // physical address + +}; + +struct PageTable { + PageDirectoryEntry entries[512]; +}__attribute__((aligned(0x1000))); \ No newline at end of file