From 14886062f53a0fbf3b6de2bfad77b60c445e3c6e Mon Sep 17 00:00:00 2001 From: SpookyDervish Date: Thu, 29 Jan 2026 15:12:40 +1100 Subject: [PATCH] fixes and optimizations to mouse drawing --- OVMFbin/OVMF_VARS-pure-efi.fd | Bin 131072 -> 131072 bytes kernel/bin/CustomOS.img | Bin 48000000 -> 48000000 bytes kernel/bin/kernel.elf | Bin 34888 -> 35128 bytes kernel/lib/BasicRenderer.o | Bin 4744 -> 5344 bytes kernel/lib/kernelUtil.o | Bin 7464 -> 7472 bytes kernel/lib/panic.o | Bin 1912 -> 1912 bytes kernel/lib/userinput/mouse.o | Bin 5768 -> 6016 bytes kernel/src/BasicRenderer.cpp | 10 +++++++--- kernel/src/BasicRenderer.h | 5 +++-- kernel/src/userinput/mouse.cpp | 10 ++++++++++ kernel/src/userinput/mouse.h | 5 +++-- 11 files changed, 23 insertions(+), 7 deletions(-) diff --git a/OVMFbin/OVMF_VARS-pure-efi.fd b/OVMFbin/OVMF_VARS-pure-efi.fd index f8589122fdbf13ff000b2335e10f256d4cd1ff92..2df1ac3cd2cf82a5e20cb4f1c8d5db3ce9cfb38f 100644 GIT binary patch delta 71 zcmZo@;Am*z*ifOx=sfwLmG&%BJ*5XuHfZRDMt7Uslg Z3uK<<++3F6HDR;B#}9my3sM4F7y*!^A4>oL diff --git a/kernel/bin/CustomOS.img b/kernel/bin/CustomOS.img index ab359a649c1db671a5efa38ab54f92cf877bd67b..331e24f5f9382dafdf6c3c5f2a2ec1c3ab9bfd81 100644 GIT binary patch delta 9084 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 KZ}HdmZ~q63!gO)~ diff --git a/kernel/bin/kernel.elf b/kernel/bin/kernel.elf index 406f1d17144755f6a075a3e0c3175944983bde7c..12310c5337140f3f72c7ed1cd7fc1bdd3408b01f 100755 GIT binary patch delta 6000 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 IS60XW4;L}^lmGw# delta 5504 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 diff --git a/kernel/lib/BasicRenderer.o b/kernel/lib/BasicRenderer.o index 418887172e82d8898608bcf136a9248645627cc6..fbb3ed74b6dd875ea7c44fe2b1a2a7a3718cb936 100644 GIT binary patch delta 1317 zcmZ8hT}TvB6ux(7cih!+XJ*w_i~Ly-3&E@&vNl>HW?866BMKh^MZ$g_j53TebXg6z z^+7o$(nGD#g9L?S;fsW8r1?@k1Q|#O_Mm7`gi#@F=gi!-!2|c6bH4MPbMCp9ncnh+ zo&7s1k{a8PTGOg!I@1_OI|~=GoD&- z+Jceh*+?{1gJ(!Md-qSNcPG1{%6YO#Pp8u{EQSSx#uv43?Qc50!uw}m!F}gd?{?(R z81qzfnRD3YIx4H(Ptk+(u1mNM1g)BJ=be}_k45H##(TBz2NsDLbLh_njSp(yNA&63 z(_J(s?~f$T{=yEj9CbYMKwSPwDw;J86OKWsahHyrc5mT(hUmf$d$rq+Be}8!d|JtJ zmm;)|i{zO-Zp0*M1Ri*jT!MPFK$2LN&~6B2`-@~N2X}k|Qv$gAm;|jDl?2AvDPeVq z=tDCardB9DmSPjADfeA=L1(~xTq{r~;=fS`HaamD7I-1n!93RCumE#JG^sw}`A!Qr zM?>?bz^7dn{@hY*P~bOY2F*EnTpDZ7`N}(Kv~_$?5}#;6743MZn3ZtF#$U1FIW|0B zwBF1=Zo>uNXEyG%1r&Il+g|?vb{U(*(j;^`F|6q?z;3T!H@^`PB}P8Py-`=&x$A9J z(4>^gRhAi5O2DHA<*Jq|t=BH&JMV)=RdJ1DhK^nyBvp5L=AFHW(g8EwGJ1nu7QrZq zJ%g?$!*oJaE#Y-AtcLVzDu*&+DdvUmx*yzHArC{D7UB_T(spf?#pMeUi-^*73?8e+ zfisBX3$o3$Awdh9w4x3{tIm`W`ZEk`6|NqN(zN^!cCIM9hd%vgHnnC9KRJ?WxS*8; zo}fjoH?yh*tBb=$t=L23(fGAc@AK!nDFcOOSKx(SSumPy0&G-7RCHairdK)|6$tna Qc@_vkc?o)U9vsw^f1e`_EdT%j delta 911 zcmY*VOKTHR6ux(6l1|=}$z!SuQy0}r7OfUU6RfE+F+OT66sd(!Tin%!U_q^dEvXVn zAc<$?O5+a@wTRGFK!^${bRi{$AX!w1s30!XN+F&*b4St-X3ja^cb>O(DA!*a&{96~ z9|^-t5D#&e)5AhbDlc#1e`T7^Q%K82s0$HyTOuU;gDzKn55n+UxZ-(^Rqym~toF+z z$cPuD+8Nk%xKiWxDnSs`U?9nPUZFYwMDiGEv53AKdfumz9ei(@Yw!~nR3q? z_$2qeas=s-GZe>+dXpuy!i{RZkj5&Cz!+~&Tn(R&iN$gd$As85mht^ z<3x0moS(v{VK7cZdzbSy8wSwt_T&Bwc9ucNMZU{xGiN33{!XbKPI$GmEMo`Xn_-Bz zWX93OUuG>4jCbN^`O5#@LF&nm;NWmEol`42n8HkHK+u5ZbDO-nM#>#$bOy z6DF(#g`R_%faaK#%_c)Isz&H6R4^$g!)o9F%|OMkh1U5nnJ>tmKn71R8j_idSmcTe YeG$fjQ6cAoh2V&z;Wcz}9jF@l2Y#2kRR910 diff --git a/kernel/lib/kernelUtil.o b/kernel/lib/kernelUtil.o index 3bc73e99afce8d02f2cfb996b04c2bfdd4e3b9b2..4f5a5a9eb9d6515af5882e63fa5f04b323c56d43 100644 GIT binary patch delta 885 zcmYk4O=uHA7>4&tHt8m!Y1L*jNu-Aw8=+`}T5AwDQ38v2@b6&H?a5m~(1QmTi5NmK z@*c#CREUrsgp`0khe`wff(K8E6eJ>oh@e4iMT+s8H7WDKyfZuRJI}YfOg-DkR?{@G zxO>LGza26Rr?iw_?RICKvYAR7>bdYcv+R_MYS$^Bv^JKOQz_4nKq~#t zDLwz`+;d7loYJ4j1M7O&sRWqA*8i#OO)sw0xS5o)i#-8>5py&#$&hYjBVC+Q4J$>p zjfgoh&}*#Lcxt|H&If7~X>(H}zh&^6@7U&`e+6d-?o$e637T$7>!MFKxQ(iW-!Qfs zWE6N-)ow0?_lD>pTH6FYL5KC3r*DtjbP`|cXt?SlTQ zOeUy~a;YiBqo0ZP_SM;4+Wt5`^4WdJ4-3j-XjsUCM%bw(PpFJMtGPOV26Id}?{VgE zmy?&Zq|UkOamt#jbE=@Ipj#g24l+?87qq0#X?UDRnyYh`aFaQ&(PCZk^pnT@iVib> zX{U7Ny2msF{MlS8q%$|+ln`=6bAz1d|KV}C>>kqGAdf>FTiEJgcfTZ Xl(c?XS{wW+3k-6T*8maYhvN>#|gHAr#mArw!F2Pqa$9-33V2)(Qr zV$m`eJw!H#pa%=aJt+wFq69B3QWP(?;6X$X=_NJ7I&a*DM+WB2d-KoxX4ri%3eO4; z9qu%b-$=})4aU66oA#e5TJ);=gu~={wmrS!RehQDs`F-dYkI4Gx&s>taU$J`qE|Jl z{^V8O?RgDv6gc;~`|2 zR8$A}u&}3MRYOH$GU(C@Fg+}IQP%J|Sis6F3dh2VgBh+9=VlLQktmFniF2DcE5z{? zj!-!Fi32^HJ2B@8aT>%~C(cWSBcI5@Ja3^nBKRh)pNaXkhq)Fre-QIGG53kd;{PeX zMoM93pe*o9DypfdC!vn&X+<4V)QhksCV2_=#e?p9*+E^J>?6Gd_0eDaDy-RO`8{aa zuJ+h~dTIoYW}Utu2Ac+4&Ys}`RI)DjpoQxWSUH!^!(7hQZYAkPkaPGFv@jijm3Ota afJ^yv{1H_0u4Lz3D;Sl%8S`N%JN6G8c=VzG diff --git a/kernel/lib/panic.o b/kernel/lib/panic.o index e42299141446b3b78d4cd72b6cbf7147ec751194..9e810b337bc783bb32b9b8b651c64957385feb68 100644 GIT binary patch delta 19 bcmeyt_k(XjDAN+oiQ#fg3ph8HGqM8!OXvoI delta 19 bcmeyt_k(XjDAN;`iQ#fg4_G#qGqM8!P#6aI diff --git a/kernel/lib/userinput/mouse.o b/kernel/lib/userinput/mouse.o index 3ce3aab19cfff80dcf010432be09048a783b8cee..79b08f8e0e3cf3d61cb3b70b4ce098beddbf6ba2 100644 GIT binary patch delta 1296 zcmZ`(O=uHQ5Z<@l=C9e^WH-s0L!|-1L@A+)tsphl9HfGR2SHHL9E2V;9&Ar44G5B( z!t|=52dR~SC0G?PvXF3!o~J@A*H=YKEt(6x3Wm9`c7GXr=$6_f!lxm z@!|kYjzPtMdr=29&!fjMccOXBgSykDuXgFr>!hF3Jx|SbQk2(Snm4ZIgHE3P26>(^ zJWpS5$Q$xzxM?`BY)17=7h03(eui4GW;nWqUH#LXg(cI09cI*>+4nEAJqC=L-Q6pU zwcrY}+;Nt%ct572_pyEr5T=uR%QVDx AnE(I) delta 1123 zcmZ{jO=#3W6vt<>AKipbcC*=JHU*VE2(?(Y#nM*LuB!(NBGQu<6x34i;6c2ISg0UX zFM{$wv>;SLL9|E-=xISgK|v9Es9yHa;!O+ft%r)f$;`lHp#zzj{D1HL-or_m!XvGJzSsIV#4$ixARuOSi3KET4H2-^x!@uY{TydR+jozz3I5 zDHBST6Gq6QT0bd$mP#S9#BCdDU7Y?AbFK$j37Qq(K7~8sQiGR;7jV}8noqK-&~$iw z#F?=ugI0GP=k;zLF@)Ryj3mqm({;YYb zwvlO`=U0cWyZLSCVyi1{D_z9-hMrN0$@`G{?&NVh9Y7cGV9?`H)u1k>X*vX(NDr!8 zv4~4IF`m$q1{Ghhrl(<|%%drTnz>h#+-p0~I|+SY&@RLIA*`bF!VdH~c>X(DgD?IM z`Wl{AMx6IHCgZqLfVIl7wULFMV2oB_GHBrZIA~ZyIs79-*a&**C`4g{UV_Q6VGWdF jJ{)t-%O8_$QCJIy?K1^wcL8dA#QrH>G>*%#8tnNG{9+b2 diff --git a/kernel/src/BasicRenderer.cpp b/kernel/src/BasicRenderer.cpp index bcc696a..0eec6d1 100644 --- a/kernel/src/BasicRenderer.cpp +++ b/kernel/src/BasicRenderer.cpp @@ -51,13 +51,13 @@ void BasicRenderer::Print(const char* str) { } } -void BasicRenderer::PutPixel(uint32_t x, uint32_t y, uint32_t colour) { +inline void BasicRenderer::PutPixel(uint32_t x, uint32_t y, uint32_t colour) { *(uint32_t*)((uint64_t)targetFramebuffer->BaseAddress + (x*4) + (y * targetFramebuffer->PixelsPerScanline * 4)) = colour; } -uint32_t BasicRenderer::GetPixel(uint32_t x, uint32_t y){ +inline uint32_t BasicRenderer::GetPixel(uint32_t x, uint32_t y){ return *(uint32_t*)((uint64_t)targetFramebuffer->BaseAddress + (x*4) + (y * targetFramebuffer->PixelsPerScanline * 4)); } @@ -78,7 +78,9 @@ void BasicRenderer::ClearMouseCursor(uint8_t* mouseCursor, Point position) { int byte = bit / 8; if (mouseCursor[byte] & (0b10000000 >> (x % 8))) { - PutPixel(position.x + x, position.y + y, mouseCursorBuffer[x + y*16]); + if (GetPixel(position.x + x, position.y + y) == mouseCursorBufferAfter[x + y * 16]) { + PutPixel(position.x + x, position.y + y, mouseCursorBuffer[x + y*16]); + } } } } @@ -101,6 +103,8 @@ void BasicRenderer::DrawOverlayMouseCursor(uint8_t* mouseCursor, Point position, 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); + mouseCursorBufferAfter[x + y*16] = GetPixel(position.x + x, position.y + y); + } } } diff --git a/kernel/src/BasicRenderer.h b/kernel/src/BasicRenderer.h index 4780845..17a3b1b 100644 --- a/kernel/src/BasicRenderer.h +++ b/kernel/src/BasicRenderer.h @@ -11,13 +11,14 @@ class BasicRenderer { Framebuffer* targetFramebuffer; PSF1_FONT* PSF1_Font; uint32_t mouseCursorBuffer[16*19]; + uint32_t mouseCursorBufferAfter[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); + inline void PutPixel(uint32_t x, uint32_t y, uint32_t colour); + inline uint32_t GetPixel(uint32_t x, uint32_t y); void ClearMouseCursor(uint8_t* mouseCursor, Point position); void ClearChar(); void Clear(); diff --git a/kernel/src/userinput/mouse.cpp b/kernel/src/userinput/mouse.cpp index b8d77d9..7571aff 100644 --- a/kernel/src/userinput/mouse.cpp +++ b/kernel/src/userinput/mouse.cpp @@ -58,6 +58,12 @@ uint8_t mouseCycle = 0; uint8_t mousePacket[4]; bool mousePacketReady = false; +bool mouseButtons[] = { + false, // left + false, // right + false // middle +}; + Point mousePosition; Point mousePositionOld; @@ -138,6 +144,10 @@ void ProcessMousePacket() { if (mousePosition.y < 0) mousePosition.y = 0; if (mousePosition.y > GlobalRenderer->targetFramebuffer->Height-1) mousePosition.y = GlobalRenderer->targetFramebuffer->Height; + mouseButtons[0] = mousePacket[0] & PS2LeftButton; + mouseButtons[1] = mousePacket[1] & PS2RightButton; + mouseButtons[2] = mousePacket[2] & PS2MiddleButton; + GlobalRenderer->ClearMouseCursor(MousePointer, mousePositionOld); GlobalRenderer->DrawOverlayMouseCursor(MousePointer, mousePosition, 0xFFFFFFFF); diff --git a/kernel/src/userinput/mouse.h b/kernel/src/userinput/mouse.h index 7ad0186..a9f2e90 100644 --- a/kernel/src/userinput/mouse.h +++ b/kernel/src/userinput/mouse.h @@ -5,8 +5,8 @@ extern uint8_t MousePointer[]; #define PS2LeftButton 0b00000001 -#define PS2MiddleButton 0b00000010 -#define PS2RightButton 0b00000100 +#define PS2MiddleButton 0b00000100 +#define PS2RightButton 0b00000010 #define PS2XSign 0b00010000 #define PS2YSign 0b00100000 @@ -14,6 +14,7 @@ extern uint8_t MousePointer[]; #define PS2YOverflow 0b10000000 extern Point mousePosition; +extern bool mouseButtons[]; void InitPS2Mouse(); void HandlePS2Mouse(uint8_t data);