From 1ef6ed223e0a8f8f4bba36a4081498ae83de9c9b Mon Sep 17 00:00:00 2001 From: SpookyDervish Date: Wed, 28 Jan 2026 20:49:24 +1100 Subject: [PATCH] page table testing --- OVMFbin/OVMF_VARS-pure-efi.fd | Bin 131072 -> 131072 bytes kernel/Makefile | 2 +- kernel/bin/CustomOS.img | Bin 48000000 -> 48000000 bytes kernel/bin/kernel.elf | Bin 17704 -> 17728 bytes kernel/lib/Bitmap.o | Bin 1568 -> 1616 bytes kernel/lib/kernel.o | Bin 3224 -> 3768 bytes kernel/lib/paging/PageFrameAllocator.o | Bin 5704 -> 5720 bytes kernel/src/Bitmap.cpp | 8 ++++++- kernel/src/Bitmap.h | 2 +- kernel/src/kernel.cpp | 19 +++++++++++++-- kernel/src/paging/PageFrameAllocator.cpp | 28 +++++++++++++---------- 11 files changed, 42 insertions(+), 17 deletions(-) diff --git a/OVMFbin/OVMF_VARS-pure-efi.fd b/OVMFbin/OVMF_VARS-pure-efi.fd index e1e2fa3f13f772fd6bab269ef2f0ff54b0d2b02a..f7a0a6b31124284143bade91952f5ed52021845f 100644 GIT binary patch delta 60 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 diff --git a/kernel/Makefile b/kernel/Makefile index aade3a8..63d9893 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -59,4 +59,4 @@ buildimg: mcopy -i $(BUILDDIR)/$(OSNAME).img $(BUILDDIR)/zap-light18.psf :: run: - qemu-system-x86_64 -drive file=$(BUILDDIR)/$(OSNAME).img -m 64M -cpu qemu64 -drive if=pflash,format=raw,unit=0,file="$(OVMFDIR)/OVMF_CODE-pure-efi.fd",readonly=on -drive if=pflash,format=raw,unit=1,file="$(OVMFDIR)/OVMF_VARS-pure-efi.fd" -net none + qemu-system-x86_64 -drive file=$(BUILDDIR)/$(OSNAME).img -m 256M -cpu qemu64 -drive if=pflash,format=raw,unit=0,file="$(OVMFDIR)/OVMF_CODE-pure-efi.fd",readonly=on -drive if=pflash,format=raw,unit=1,file="$(OVMFDIR)/OVMF_VARS-pure-efi.fd" -net none diff --git a/kernel/bin/CustomOS.img b/kernel/bin/CustomOS.img index b1a0cbaa810079edeaeab39d0f352e054e16f1a1..0f767c55832ff93858b7a24ae16c0566141177a8 100644 GIT binary patch delta 6312 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 delta 5597 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 B)FA)> diff --git a/kernel/bin/kernel.elf b/kernel/bin/kernel.elf index 0fcb592759ecb825a0dba94f271eb2e061724d5e..f4eb75f8b9e963eaf1615dd73f8962f9bfbfac4e 100755 GIT binary patch delta 3216 zcmai14NM#78NTn}0!9Rk`LX$n&jyD8id#?%0g~{0^g_m#lF(Kfp-Kg7N=it;ky4G! zP@v=DT7$mpL?c!OHJUQ1KU8cPrKmEA7AM`Bp!7$}#5N+eof8-(9Zji*dV9aS^V!~- z?Ihp#e(&?Vzu)^AbN)2(ohBoeq#wsI%2TB-Oy6jJY22z=-L0BOJDi49PTP%6{2=LY zk-9l-(^eoP?>n{DsV9hJObv)0Mx0xW5-Wtoo|tKBwbTfergE^D3M>(5oPypyjT9sd zanpoKzc;;34nTKu3;%T?!wkn86E6sB13n^-iQd#tQFS@m$cSF@42X>qD<9!9X=ikC;S|{;?oVJ?` zD`0B~+z&lwJNFhUw!?K(CEPR*u($J})zU>Uq{R~dWWMg`0DNgFC$GTv^h|OJ_M~?Z zJNzd75SfIujIJM6eI?6S(vxWnmLtrI(kG(i4?J~GmOa8p13r^qn5W&7gpWke&`BA| zo+^vzd07=3_!)|dU*8oaVNCRMzuZRmsPS`WU?!u`-GK^Gx*WL2(g55My7i`>TSG_r z7)>}UdhjzBh!<&hCE+~o&x_uNpQjA(=0e5%q9|PtEaOC=hjc~b5Bwztw~{c4{K*-{ z$T06IaWVNlG?b@#66@(Zs1-CHi#oqBOgT$dM2AIB<1l52(luJ~RZ8eb0(#Ob-N)-< zl@SfbG;#;dh*%~J!(67>J*{)luqsyM6c>`d9H zgb^j95ezUAmXSlvXhhAZ8N;AEGLLaby615-nP~qLhIXqbfxh;|hG!D$M?TFKk2r-c z`VsG;4St9AV-tR8Ts+EH%uZ>?uW5Ico1vhRa0Me?5&cXCk|QR=O-I9G-!aKVcCQ!jRn2T-eBdgd{=TmImU2pKTdy8n`RV zi5GlBzQmvV27M>$kr}`PTUX~_ZQ6&(8T7ddF`y|26VfJuZCVT73Tx%MDq@lwiM?EYBhHi_ApZ?-FUcCx&%WM*kQ$1ODd?lrjNh)|G7Fs z&f9EZjvl8Q5BCIJg1PRsh2<)*d{?gD$Bkx_CX;9B8&%*zGIO zWp|JQc-daE)oW##gO^6MAy`La&wpu-Tj8$#i=447=oP1{MLj)wL#89Y3a&s@?u+d0 zY#7buW7F4_ne@S*9X0T;+$wfgHtcfnq!U^l3nmr^^6Dif?3t?C`qS8{mC$sO+)9qB|d)i%y+8Ed2XL|Ua!(AtyZR4M6=k3KM z_HrH?i}n){CW@>$O>_9Jf?Gw_>Y2aEat{qyonU-{t=+tdJsKZ_w>}G1Hflx5`( z>iCq7&m#USs4ljWx8V@JyP+T7#V~>IuV4<}zk^%FR(IOxvYbo8VnkU9b)v*Tea7Eq z83!qp!$Bp4g3ltJg*bi}gz%aWzJPcX;)bX&JSsXW=zoJSZf5zmEdM0j0sEZdfhLf} zGEBoAS*{7kPlW>PMEqIAUx+B6UoW5q@f%CB{8+d>`>5`}m&Gd=yNsh5L2&DYaT)+7 z9?EpgqVy^Xt;&U4U|g$aetp#*o`xk>E4ObACY-KpDl_xl{@skmFkB*NcK8tu#IQ~5arswBoW|8pb{Rzwh;%EN{zJd5lh?Ligr}u zMLfR4oPI&$zNcZ0xYBIyz{C!7#`}q?g)(0#4r%B)Biz{Gw6AFi1Ow3-p~k_Vw}vRN zmu+RoQ=p-&-oWE83;GPgD`k0Q1zKRGwWvLft){kh2?~i(MjplMn*N#=WDve7%WG&d zsVrr3P&|N5rPk*(y)tpA@745!n^nGY5m7v^=`ppAawp3sz?pJq(Ob$z$HCE#B9BwO z_G+<%(Hb@VxA0B*Bai-PCF2?zhbw&+l{dq@uIZfyRiS(%IU7_+H<$6&73O;(}0u97vD!1Hyx W$vVu{RT|7SDxnQXNir^A={RFN5f{Hq> zH0V_W#wOIp78?_3*BZs9t{MT8R;f)b+BUAKS`;^aD`=7FeKU{sQ|(LU-MQ!9d)|3> z-p;IV3#r&bO1heccjB~>p&M@Awj@`lO0(`&nzzkQ4y_k-uYTKSV@)}!x|0*nED+*+ zDQfjjCW;XrnP%bTf&&q6kP>K#I6yqGKXRIw+?(SzhZzlrr3dSML@t$!yTl??-QLK_ z#e%Un*rOKk3BAD;J(ygDx~QbEs$RkHK@hquAg5qk)DW^k3+6oyj)iMoJ|r`>V7wM= z>KUxO1-0f6NGlA89>O2*2|q>k2;2EIx&^+9wvp@bV{|ny_Jo~X7upXdF`c>hsa8_g zrgj$wm|71cb#uqnAs{Q#owRh2zO%T;PJy2_rN`t1_2igs3RdWc-*a*gn~hu&$tZG!07Uejw3kd^9&6drA{ zP)pt7E`;(W)nQSE?7{0qLzqmZDpDo-m2z>~HN@eQMTTV>Qq$0( zBgcVgH@{v;5clLBk&C6xvT{LIY8oD4OsMPh zmdlC;?xj0PN6^we`eR>kyGWi9A`6@mql#3E`g~|hHQrL>#lt`s)+iR~yro*QCl^Vu zfYc#t>5@8hju>q9xc%Ev$W<)i{x!LGaIdIPYMvwaYH!E=ary0q2LBT%h>H&IR>(?rx#6(z9u{u!8H%Q1^QwhB2Q0Ldn-;ZV&lSm!Qv681-43F4BngFi z*3o1Rc&(*lzPzWZhQq!hpJ9h@gKz0D%xu6GH0!58@4;ovK@sjm6v?_K^r4PN7(h)Q zy^}&xB77I={0~+z+ePv#xa?c` zI4hjCiy=LlsR+pj;m%=@;>h3^TVSz63|ZZz;k6q6n*%zi_f_@GDQ|&uQ;4^mWDsx1 z*Q^9j*d)n0P7-s+j~X*loFGf$7-^E2lQ~invomwzad33NJE`OGRdqDgO18p9oF~Jh zRBPt>%c?q+#xui>8~Lox9r%f19YZ*-J3@Q#3iqpO*>mw7!T5KGZ-Oa(tzLta0N?do+^jpdP{ZQ*uio-)&gTL{Np zZh+mGJ@^Jxp_zFDE}^Nu36HV1<)*3@U|z76UlkO!2RWxTg1f)P_DQ3v7Cx7@I+*r5 zrrl|Tm6&F`^=h{6?Kp1TEvUk@Lzwm|wrQAV4#4C77G4fOOqzu+4}crZ_5kFe*${x0 zXqE+FH=5c2RG~Q;@Lo!rLHMf?;C3bR_u9dHmxW9P#pO)RVBf_>R6dRw*pUd1aIx$o zisxJ#?=yTCTydqO%Mm)doJA{H^gP2&48OqeWZHimWiV>s(Ak3-H@*h7;lwCib6uqF zf6ubB8SZ6Y>pxlkbcTNst^*SpUc~U#2Dmve+2(se41E%GnYRB2u{^lb9sImVn4LZ% zw1trsz}M-{^oOi=38UVEeW$fzXC2sx8>8bK!}sEQpN;}Bxt*hJZ2#kQkekq6ug+(9 zA;VWQ{H-t@Sj+GVhNHA~?qvRtF!;uuOqRnHcXYQLwo)5+Ha3SUs{zxXk#D}Jdk>5L zjEr>nwVC4%FuVzWfpjFY{TyTXS%Z!j!u~-{{-Mcxeo%NvKEn(vh-G`0u~XZz$#6hS y)(A2RW@V*>KK%n#mgNd9h}S6!;9}Otq#mXWAIdkU!S3Nhh#xMZqh>;k diff --git a/kernel/lib/Bitmap.o b/kernel/lib/Bitmap.o index dc62cadebfe001e2c7a26e53be983aabdbd05fbd..dd11b57b7bbe9ae0c2d7e7b08515b259521efd7e 100644 GIT binary patch delta 311 zcmZ3$bAe}q24lcPO*PRM9^DKc2OltdSi3$bX5Ya81h0K3uC>LaXGC(04kT?*44TZ~Z2Fg!XWR{wIfth9UA4VHVuy&v_X&@G2U}Pu(=>dWr zlLMLJ8A~Q_WIE5Q19AxrOipAKp1gorf+>e_@3pg|firT~iuW6oqt7JH@+h};CA pK*!{rEcT2$CjSJJmaO(n0!)*uSnWU(toEEQm>>qHPd>;j4*)#PN*w?I delta 240 zcmcb>vw&xU2BX46O|^-S%_q*&n)tYhal+&*MmaVHFqquV7-|#^Vmk5(v@tpJvN476 zuyZgl$N+_Gz)BbxW}?VX0m@GfWR{x5!ZKNh$wm^a8>m7Wh=mv!8De0%CO0z0GsaAQ z$aJ3fD^v_jO`gaqJoy5%1d}P_WI-meNh}&r)?^134Mx++nJo59fncf02Y><*lV7sf kGj>eYWCf9#toBR~7$>h{wF618+H>w;f|#8?`6IJD00EIO+yDRo diff --git a/kernel/lib/kernel.o b/kernel/lib/kernel.o index d0cd876524a70b9c3728b7feb541fbb444a794f5..7cf5c3a229272acc23c30cf3ea50d00974036c63 100644 GIT binary patch literal 3768 zcmbtWU1(fI6rRmbo7Vgp6slEv4gR$LTyj$yvPEUvILXv@o6BwjTGZuc_a+;&f8M=Y zlfKwmm0Xscqe2Yb8ZD~_qY92!IMG#ads1JP*^B}}?=FZ$qZgxfRz}%Vh z&3De6bLMCFJ$h=iB@!W0BIISVrAd^K;Rm+HF+PluZqh|2nfGh$%^TRU3%}Q3hIwDl zZ*Fd8Shek`gIuQ@Mx9kZM3hy{j$qiqmgpMu?l5ol9=c>p5BnXWcO_b->lf>Nt8@+L zJh~p3$M&)6CEw|*+BI(Z*L~*E%WSnBH57FyBVbzK!UPv0u2?TydWoBOw?s7Diwx=z z#6&-3RcPPd>tq+}5zw!Kew8g9;dV=1zWH_LeZS3vOwXgsz+b*bdI|Z)=ZeIulgm(x z^Geoil`bOXw*#y?xyY*VMW3)$tP4N@M?nJSR$7otHGWyGY?Lncd|dyaUil*6gC*=0 zT~UEp2W#g}Jz9rQ>payZGXmokCiA-$3~V>}iFMoNsMw^%;C>#|PtRBlkCVOaRatM7e#om1naZ>jbq=;qw>)dtBgB=dl6y zBs91UJ0#fzFEzo>H^FZ`ApVo=jCMjb0}PgSO;ZO4q7 z$x$OUI(~Yh0sV;S%obc~o=lUmTye_E9n0m4Y0E7-oIH$ogF6dwV<=%;89I6*&M#5i zDp7OL06i6_@$tm#saI%nByqx=7*FK$Bz2M}K?@l9J81k}21CTr3!HGgHep0Y_av%jP zsuOk&pL(!*{cJC4>u=+zH{*&s~9||2@zoj`slt{qKb)@m~-GK^*^LNPHKZSClZ` zrQjH+#tA@3r)EMZq6b@IM5Od8zSl zD10^kN011Dd8z&_1y|$D3LHD!cm9tG`gaw+y6=}1T=jo5ntlbj delta 1069 zcmZ{iUr19?9LLW+o7=9t*D0dgn&zDi3yUZs!xwYO!Be4**${iHHAo22We_1q^oPbp zy4xWbJ^2#sA!6Y}Lon8pJ%vVu^t4_|sHYyvAXvY1c5fbvesF&0oX_vy_i|6AyBM|( z;gFi|Pe;vrH|zB}HHSmgeAGB*jWq;De|)DovXXyyv7}szR5^1DbnJ9kf9#9{SQl&6GvWF{_dA=1;W$~rk&38^Ktxpr!#>)?RRDhtlB%#5#iSxkD*ijED3Z+-G=TzTlMa$% zc9VZhK<(Y8%N<-Q>v#3_@dH9rg&OVC9iJYPcx_8LW`fG#yU%G%UmctVN>r061xtHE5&P)fD!@KY%Y|cq^UoR^04}7L%{nw3vF; z?ipp%dJn5;AvI@{E*5vUv#(I{MCzc&a0#=dK7_Y1E5J7AV{i2#^%xflR%YRrQ)-P% U1bfD&;kLqmE!cwS_|&ic224Ow9smFU diff --git a/kernel/lib/paging/PageFrameAllocator.o b/kernel/lib/paging/PageFrameAllocator.o index 8e51d5b11d633990324389144039f71f0b13a276..e6f966d92ae596e05b0c550d606d8c5fbfcb1c78 100644 GIT binary patch delta 861 zcmZ{hKS&%w6vpT6t;!v^cYFRBHz~pvAxc!(Mz6aZh7fIxX%Yy5yV6P|DePk4BB%r+ zUn6L~UV8k|EAPLEv*;%r=;J|$I=Ka2TGrR9_`2FykK^oW| z8nNgeex(NNYUBBB%vpQ9J+aO9(teHO)X3G2`lWqN*{a}Ca&k-7M0cn40v|hr?5lrr zi@4qu{O5bZxi(*YqidI_fSI(U3(Tf(P!-GR;$+!U^@MmBE#fT+kryO(OkS5^)-?H* zRAkgo%ntah&J zeAD_JEw0vqFehmeZcciu=2O+;Bx=@BV$VM2Sr4@y>rQryy)KfH>RueS& z&V7(8y(2?aXH*z}#TNwb9F-BWCvIDVxf;r=W&us6ar3w%dc@QL<^MMCP8+>Iz_eg) zUu>f_RG1zZ+GwMvSj(T$SIqW|(>lVQBHcubbr629(hBQcgsk_`VqJjWSER?Nus%S@ Lx`mcjzyH=BMy|@b delta 871 zcmb7>F=$g!6o%h&y$xBmj-y~Ty(kgwT)J4*?D9@ott>99GZbF9=a0v<~f@0~S z{6j4`v>+~_!fPl1 z=}2(uwC#@h3zrW3g^6z)7B7GPgFpZFKtdGa8#IP9u>qWq=W#Rk;y=9A=7Yoy%G9J$ zIh}oIk00%^@8C<1m#P1iyNkhI?;qbR=em5&M(;Y&FlLg9woy$Ury7=$r7P36^s}sM z;byIpW#ufgUYfja!&=Ma@5e%8&G>(qyp2Lix!2=iI;y(LU8GwPldLW$Le(*~&y2c; zdP>n&b1AhGqqC@_6_qqEV};`>%|*00{)}>3xxdVCa$1JJpTEPEfR|B}({wSz@d=?j zYlarT93J^s@q|4s5OY^o?Q4ETn={`vFQSlD?mcrc+0q>yo?|krsDV23mF61+9KRR3 zj=8W@*6M!VE)lvypB(`#MoGAgXD8FjNu-NH(4hd!a&H$smP^p&U|ZRP;Hys*MN bhk$tjZRRa_{U!2IVU8kTK1Ey8J9hFA40p=} diff --git a/kernel/src/Bitmap.cpp b/kernel/src/Bitmap.cpp index 2165f2f..753b6e3 100644 --- a/kernel/src/Bitmap.cpp +++ b/kernel/src/Bitmap.cpp @@ -1,6 +1,8 @@ #include "Bitmap.h" bool Bitmap::operator[](uint64_t index){ + if (index > Size * 8) return false; + uint64_t byteIndex = index / 8; uint8_t bitIndex = index % 8; uint8_t bitIndexer = 0b10000000 >> bitIndex; @@ -11,7 +13,9 @@ bool Bitmap::operator[](uint64_t index){ } -void Bitmap::Set(uint64_t index, bool value){ +bool Bitmap::Set(uint64_t index, bool value){ + if (index > Size * 8) return false; + uint64_t byteIndex = index / 8; uint8_t bitIndex = index % 8; uint8_t bitIndexer = 0b10000000 >> bitIndex; @@ -19,4 +23,6 @@ void Bitmap::Set(uint64_t index, bool value){ if (value) { Buffer[byteIndex] |= bitIndexer; } + + return true; } \ No newline at end of file diff --git a/kernel/src/Bitmap.h b/kernel/src/Bitmap.h index fc5512b..45056b9 100644 --- a/kernel/src/Bitmap.h +++ b/kernel/src/Bitmap.h @@ -7,5 +7,5 @@ class Bitmap { size_t Size; uint8_t* Buffer; bool operator[](uint64_t index); - void Set(uint64_t index, bool value); + bool Set(uint64_t index, bool value); }; \ No newline at end of file diff --git a/kernel/src/kernel.cpp b/kernel/src/kernel.cpp index d0cbcf6..e934860 100644 --- a/kernel/src/kernel.cpp +++ b/kernel/src/kernel.cpp @@ -28,8 +28,14 @@ extern uint64_t _KernelStart; extern uint64_t _KernelEnd; extern "C" void _start(BootInfo* bootInfo) { + + + BasicRenderer newRenderer = BasicRenderer(bootInfo->framebuffer, bootInfo->psf1_Font); + newRenderer.Print("Setting up memory map..."); + newRenderer.cursorPosition = {0, newRenderer.cursorPosition.y + 18}; + // display information of memory map uint64_t mMapEntries = bootInfo->mMapSize / bootInfo->mMapDescriptorSize; @@ -53,14 +59,23 @@ extern "C" void _start(BootInfo* bootInfo) { uint64_t fbBase = (uint64_t)bootInfo->framebuffer->BaseAddress; uint64_t fbSize = (uint64_t)bootInfo->framebuffer->BufferSize + 0x1000; - + GlobalAllocator.LockPages((void*)fbBase, fbSize / 0x1000 + 1); for (uint64_t t = fbBase; t < fbBase + fbSize; t += 4096) { pageTableManager.MapMemory((void*)t, (void*)t); } asm("mov %0, %%cr3" :: "r" (PML4)); + memset(bootInfo->framebuffer->BaseAddress, 0, bootInfo->framebuffer->BufferSize); - newRenderer.Print("WE'RE USING THE NEW PAGE MAP!!!!"); + newRenderer.Print("Page map set up!"); + pageTableManager.MapMemory((void*)0x600000000, (void*)0x80000); + + uint64_t* test = (uint64_t*)0x600000000; + *test = 26; + + newRenderer.cursorPosition = {0, newRenderer.cursorPosition.y + 18}; + newRenderer.Print("this should be \"26\": "); + newRenderer.Print(to_string(*test)); return; } \ No newline at end of file diff --git a/kernel/src/paging/PageFrameAllocator.cpp b/kernel/src/paging/PageFrameAllocator.cpp index 674b377..1bf43f8 100644 --- a/kernel/src/paging/PageFrameAllocator.cpp +++ b/kernel/src/paging/PageFrameAllocator.cpp @@ -57,9 +57,10 @@ void PageFrameAllocator::FreePage(void* address) { if (PageBitmap[index] == false) return; // page is already free // free page in bitmap - PageBitmap.Set(index, false); - freeMemory += 4096; - usedMemory -= 4096; + if (PageBitmap.Set(index, false)) { + freeMemory += 4096; + usedMemory -= 4096; + } } void PageFrameAllocator::FreePages(void* address, uint64_t pageCount) { @@ -73,9 +74,10 @@ void PageFrameAllocator::LockPage(void* address) { if (PageBitmap[index] == true) return; // page is already locked // lock page in bitmap - PageBitmap.Set(index, true); - freeMemory -= 4096; - usedMemory += 4096; + if (PageBitmap.Set(index, true)) { + freeMemory -= 4096; + usedMemory += 4096; + } } void PageFrameAllocator::LockPages(void* address, uint64_t pageCount) { @@ -89,9 +91,10 @@ void PageFrameAllocator::UnreservePage(void* address) { if (PageBitmap[index] == false) return; // page is already free // free page in bitmap - PageBitmap.Set(index, false); - freeMemory += 4096; - reservedMemory -= 4096; + if (PageBitmap.Set(index, false)) { + freeMemory += 4096; + reservedMemory -= 4096; + } } void PageFrameAllocator::UnreservePages(void* address, uint64_t pageCount) { @@ -105,9 +108,10 @@ void PageFrameAllocator::ReservePage(void* address) { if (PageBitmap[index] == true) return; // page is already locked // lock page in bitmap - PageBitmap.Set(index, true); - freeMemory -= 4096; - reservedMemory += 4096; + if (PageBitmap.Set(index, true)) { + freeMemory -= 4096; + reservedMemory += 4096; + } } void PageFrameAllocator::ReservePages(void* address, uint64_t pageCount) {