From 46e806795c5d2bbc6b435e4f6a54bdbb9bd92771 Mon Sep 17 00:00:00 2001 From: SpookyDervish Date: Thu, 29 Jan 2026 14:34:19 +1100 Subject: [PATCH] mouse cleans up after itself now --- OVMFbin/OVMF_VARS-pure-efi.fd | Bin 131072 -> 131072 bytes kernel/bin/CustomOS.img | Bin 48000000 -> 48000000 bytes kernel/bin/kernel.elf | Bin 34648 -> 34888 bytes kernel/lib/BasicRenderer.o | Bin 3968 -> 4712 bytes kernel/lib/kernelUtil.o | Bin 7552 -> 7464 bytes kernel/lib/panic.o | Bin 1904 -> 1912 bytes kernel/lib/userinput/mouse.o | Bin 5376 -> 5768 bytes kernel/src/BasicRenderer.cpp | 26 ++++++++++++++++++++++++++ kernel/src/BasicRenderer.h | 3 +++ kernel/src/userinput/mouse.cpp | 4 ++++ 10 files changed, 33 insertions(+) diff --git a/OVMFbin/OVMF_VARS-pure-efi.fd b/OVMFbin/OVMF_VARS-pure-efi.fd index 9177f639e2e95f70a4f402ed8da93036a0bdd175..8525510b23380a692720fc1b68282f93e3243fc6 100644 GIT binary patch literal 131072 zcmeI&TWl0n7{Kwf7uo`aQr%!cLTY?K!%Dachyg0S+Ll702q+o?1!`z%HWfrsY5-9| zqj&*PC_I>80TDH(CP0Fy2}TT;i2Brq@Ib)C7>%JObp6imo^>fR%m4!m_@B-6bY{++ zJ@Y%?`F8fA)Wyr|ga3%Ww{%_k$7==^XFgszMJa!*!c#>vN}`=XRigTJ$PRy=-rGn2 zi7(HF|7>~woz0WBHw_6*KD2B@YnxKDJLAV%swb#`sc2J%WPiV)QiY|%XBGU`t9tsoa;HrYF92p7xAWl-xR( z;(1S#G46TGw@-u7Xw=JGGu%oho(|=R$u*X>tj@fF`^Ytp*yI{}B65wrjXC0Rt{Gw4 zO)ZlzhbGrp)=E7i4gZsC9MQ=&_C(|wdmD4a<6JY+w3}MWd$0Ina*bszQz=a)xyBKm zTw_l}uCccf5im+}tT z9xvGI|GJq>bBFf*hM?{8gk z?)=Egmb2qe@2Tm#J(v+v_q2qILQ4aMtLk6-@~;K=4qF)wDxLS7`l5fLq`$K7+L!6_ zoOO~%m#Al?M|z3>cEG8<{!&waE!VZZDUzw@N=pl*#fY?AE?f0#q13FYm!@OCOK@tt zht$>|!*^{vwXKC$&`%xGXI6e5{N(SRCHsFG{p2`k0yRU{2UL}+ls)=LMe>SA$hJh9FIyeW59onZK3|5c0bf?EMIEn` zcV)el+dQjcP483vtHQHBa}&S1-!o;se7}e5=aV&@?6tm!(7&6DNU854^3*i7NVXTt z!+w^n`Y5?Ye02VaiVyp&+qh%G zg?}pKIqPDPwp>k@2x*XQ-8VB&^qi@c)Tb8LcH?8pD&msEtb^5U=qB>C^SJ8RJY;+AX^l-!G2G^s z4Hg#HBgVbFI5*d($Js9tbQ9(v&nToJUofOTm_7UDIj!ZztE+2{9avpOTHqbQWgXd zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILK)_C5@clElE?V(I>9!wh)P?4|-wp2x&+nAV?Kvv8oR|NXo_(S- zQhBCy(~|Hn@3(c%(QWzShm(Ih^iEmKj*`Sbt!-vc{J7Wc#arbs0tg_000IagfB*sr zAbp64S)au delta 492 zcmZo@;Am*z*ifOxC^-47j`rjOW?ME#Xd5w3zNM!$d5w+&qtNEFI%hd2Z!=Nbe86lH z<77J{rO6+3SvFT#6fsUdr>iu1ffmbT0jr$JH}q7%8iYyJAVR7JQBpOCk*YzQR1Ffu nYUt2$VUz?aZcm)_;lSjA4*|5qn+rZn;NLvKs$eUSIN$^TV?og1 diff --git a/kernel/bin/CustomOS.img b/kernel/bin/CustomOS.img index 191bfdb3bbc6a3788c0f5e3ee8c1a4ee048e6a1c..0d347d0e91531fd762b4c7c2d013493d8c2d220f 100644 GIT binary patch delta 11887 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 XI0-%hpMuXo1^67CvhU(A>|gyKr~bna delta 10096 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 b_!9gZoCIHiQ{ZcG+P;auv7cREWf%VkN7V5d diff --git a/kernel/bin/kernel.elf b/kernel/bin/kernel.elf index a00ad0136357faac80f9ff97c9637aee3b9e3e9e..dc9fd86bd231f3444edd747f75cdbacc0944bd52 100755 GIT binary patch delta 8710 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 delta 6887 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 Mn-x-AtU!$W7fa^?IsgCw diff --git a/kernel/lib/BasicRenderer.o b/kernel/lib/BasicRenderer.o index 7ff1ad4f93e03e8b2f279ba8bff389211e459a1d..7a71f40350a6909541db2052bbdd0b803c64417d 100644 GIT binary patch delta 1694 zcmZ8iZ)jUp6n{5Klb1CAXshi?*&3`;^@A-dOI=H8*WK6{TCp4nre6q?^*Zu4C}O*%G>yo zPB+OC@XWEvpP9C#>P-nat@0FHi1!oFlc;aTdx*GcZHrC-8I2Z!XR(hKd~+iPIi&Cu za2Nv)tH1&BhZcat;%-jQr)kD7S!5ew!}v@e^uv$op@j!CoaXOfO@J*TR?uehzNlTN zc@909DKwxSEpVDm(;S3RZd{cyH>Ca*tWbqf(*}V6MJ!>|F`M+UrBvC<=_b^{CNo$Q zBN^W%#dj&Ghc>k9j&Eb&&aeFP55E=2%qEY&40jf>IXT&!1#H0vfh8(4tiUPWW=GQe zN5<1dqyW5E+2r?3OR3!Uel2`(xZ8~ZY8jO83p%R9P>~hj8G=> zt47x$+B*A)_0eMF91fDm+Gc%Ya7ioTq~SF7;~;j%Fj#dE^Ku5ihOqeD1uf~9V_A%x z7MJTLM7zCP?6*%pauACj^7`Mk414UB{VQ&Vsw!Z`O(Ht^smT1nQf& zm<^1<1r*GI-?}&eRj->z?-FxzFmn`t%M)d5x4dYSFoeHU)DOF4WOe%2wr ztH0{WIx1o0DpKA?k#x5>dp#BOgt+DoTAEZb-{HKRlO)Ah97 zlR0#bw%2AJ){t~&^1Azx!Im_gZLarb{?w61P{}bILxNNuc&4RTf#6{hgDs}AAw8=# zGt)nu+}YVlr}H1vbE9OORK+#@@v^2rK%MTareDgP(b+uQaa{3&BuSsy2AtK6Srx<4w83jzTnfxHa zt);R7J6!T5JaP7sG<9ZH{AI_>X_K#8)A&9G`Gs?XgVZBL59ZeA})fK7?0} zUlzD!68l#I?+}y`F`pNB4rblqz5!~(aWVZ}oC@5Ehu9HR;jgSZ>_saUww(f>EVFSd z4z{-hUMQctRuLhP^$gTl8%be@@5}gYU=mA&I`MytB~-8_ZEHD3XP(2p&Z`$zEGbGWBw-Pwc93ZkoU)EmkbU5 z>IrulsDUVr%g_;MQ{vn_mI_|Fy+kXlZzkKY^ue3==KXKJH^XlA!mIPM z7PXd6RATq0w=!`;g!{hzHwY#~P4Bme+>f*eKZu$mtD-h)bW=mroy;y4-Os{Z-o#!a z>bXu(!rQ0n{8!coby0HuYRuRBoG*+yS#=JpEKM zobG#ilEx6{KZ?Jg=~as9#Y36<+NFbu*a}=tE^<>1Amp^1ie{s0gp#s<*qGAzCeD>s zKuRx`M~ta= zh8=r%c%V42k8@X12zjPB3yQO-IBy~x`6KLcnm`$&D{B3wm_PP0y^#4!F&@x=fKkR<8oQlj%S*>o#1*ayx57Jv+CkZ38CUetY zq!;$5UOYg*61x5$`n!!R1oBqPsb;a|%zzN0iHE}+`_28mPOTY{ZKYFJTVupLV$!A+ zHNbb~=hDOQ6NuD-3?_E&x@DZ&(G^<3bKS3iBUl_JOTxNp2z4J7sSsnk88C;sihAiq zPty|Df~iT+KFY0TD?BXs@|k?V8pQNdDwT={9r*SZ%$|1Ou>dc2;OPKgRJ*`iY*2mg z*N>`-)j+TIJ3!e!)icD&6y^(wy1QSl#n)fUAGkt=%XZrU`|jyC~aVZ!fx>i$fY4)!3t037r`6ILB7?_Nm z%*ZS*nE^5h2tanT1M#2#5Rea6Q@7cZnVk`6Tp)`%W5wi77JJ5{lLHy0C+}e8nf!r8 z0*Pn93gUUP+B2S?+zBLKBh&$9K1}9hvj;lJ6G&!E?gWw%lTQLkiOHPo_M8pOASW;| JlmP9K2LKJbO&b6J delta 233 zcmeyt_knMM2IGf`n%YbbDib56nH&@*R+diu5F%X900fSF0&PsrylhNW$9UK|CNr`~ zPA*`KV62~flJPjB?Bt0|;*zQ$bwI!Z#B4zP=RXAKfMgl1z+?beWjII~5HJBTGZ4d6 zCQVjk7H7-^tE|`@$jr_Nv>=gDcybPl3S+_Ki7fVv`zK!nlY*=ub|8>EIe8+Gd^-6e mkbE&&kjd>8_!Q>&lQEN3LW9#N?j7CiC9-S9GIuE^={DRp~!lRp&0SG+0MZr`jgx4uL zS(IhQ<_#=1jQoq3fHIDJ0&Psryll*KH~(g>WE2%-U|~=I=>P%&2*t2*av{68v zK+=`397yg3v#;{$O9}$5{_`IKwlPDT1o9ByWLbW3M!w0W{K|&sq2eq+aUmr2*O1gB zn{#(^Akh3LlMnKWGrpee$S+?12gw9sBomlHMgjrIMqVI>xr7T%9Li-7L=xviQZIof z4pVOeVN71mFDPjV6$DWr471B)@IQ-Wj>$a)3EMH5umTg0*yI9X4JHfL$+Lv*7&9i{6t-tF5SlC{V#k>P h@*oiWn4BnL&Kbc0;U!L92;|)WMKBQLOimP*2LPDY)@A?z delta 549 zcmZ`#KS%;m7{B*CPv4>UNAJ9Z2z4?+goths6ssvHg0?8aHlgMSf*L9sgRi04sXr9O zMXinvEeVMbHCGT6R5%3nJul%c{f6&*@AvP)+sSX_cC)l$p68AU8TDFZh(bX&VNTxj zUga{;7pNpj70uYDV^JkA>lKw%l8;G5Y9h~Z;xFj}H|N)hPjrKLyn%GcA@_W$25Q{% z7=VfJDKIt(o2=+HSbvZh@Sr(3KeZK{%Q`=A>4m6)9p67bE`jI{wDkzAX%TqS`>J;V z|1}wxDLCH+J}mHG0?#wO<{-Zy_!9jpR7@vn32G1>y;KTJR11PCW{11#_&@3t++ub{ zP?^v?&sDMr$=DUe-)hEMqy~p^S2ef`u^)n$_y{?Jv{h#9zm^o#ESI)rs9PoaAwyM3 xK*!3`jtm*QM6yt|%k;p2x?N%^#V@*sXWL~@A^(BaseAddress + (x*4) + (y * targetFramebuffer->PixelsPerScanline * 4)); +} + +void BasicRenderer::ClearMouseCursor(uint8_t* mouseCursor, Point position) { + int xMax = 16; + int yMax = 19; + int diffX = targetFramebuffer->Width - position.x; + int diffY = targetFramebuffer->Height - position.y; + + if (diffX < 16) xMax = diffX; + if (diffY < 19) yMax = diffY; + + for (int y = 0; y < yMax; y++) { + for (int x = 0; x < xMax; x++) { + int bit = y * 16 + x; + int byte = bit / 8; + + if (mouseCursor[byte] & (0b10000000 >> (x % 8))) { + PutPixel(position.x + x, position.y + y, mouseCursorBuffer[x + y*16]); + } + } + } +} + void BasicRenderer::DrawOverlayMouseCursor(uint8_t* mouseCursor, Point position, uint32_t colour) { int xMax = 16; int yMax = 19; @@ -72,6 +97,7 @@ void BasicRenderer::DrawOverlayMouseCursor(uint8_t* mouseCursor, Point position, int byte = bit / 8; if (mouseCursor[byte] & (0b10000000 >> (x % 8))) { + mouseCursorBuffer[x + y*16] = GetPixel(position.x + x, position.y + y); PutPixel(position.x + x, position.y + y, colour); } } diff --git a/kernel/src/BasicRenderer.h b/kernel/src/BasicRenderer.h index 58fdbd4..0487456 100644 --- a/kernel/src/BasicRenderer.h +++ b/kernel/src/BasicRenderer.h @@ -10,12 +10,15 @@ class BasicRenderer { Point cursorPosition; Framebuffer* targetFramebuffer; PSF1_FONT* PSF1_Font; + uint32_t mouseCursorBuffer[16*19]; unsigned int Colour; unsigned int ClearColour; void Print(const char* str); void PutChar(char chr, unsigned int xOff, unsigned int yOff); void PutChar(char chr); void PutPixel(uint32_t x, uint32_t y, uint32_t colour); + uint32_t GetPixel(uint32_t x, uint32_t y); + void ClearMouseCursor(uint8_t* mouseCursor, Point position); void ClearChar(); void Clear(); void Next(); diff --git a/kernel/src/userinput/mouse.cpp b/kernel/src/userinput/mouse.cpp index 16729fc..b8d77d9 100644 --- a/kernel/src/userinput/mouse.cpp +++ b/kernel/src/userinput/mouse.cpp @@ -59,6 +59,7 @@ uint8_t mousePacket[4]; bool mousePacketReady = false; Point mousePosition; +Point mousePositionOld; void HandlePS2Mouse(uint8_t data) { switch (mouseCycle) { @@ -137,7 +138,10 @@ void ProcessMousePacket() { if (mousePosition.y < 0) mousePosition.y = 0; if (mousePosition.y > GlobalRenderer->targetFramebuffer->Height-1) mousePosition.y = GlobalRenderer->targetFramebuffer->Height; + GlobalRenderer->ClearMouseCursor(MousePointer, mousePositionOld); GlobalRenderer->DrawOverlayMouseCursor(MousePointer, mousePosition, 0xFFFFFFFF); + + mousePositionOld = mousePosition; } void InitPS2Mouse() {