From df3f9478e81648c624fee977cc006755a10f7487 Mon Sep 17 00:00:00 2001 From: SpookyDervish Date: Thu, 29 Jan 2026 13:34:34 +1100 Subject: [PATCH] mouse cursor --- OVMFbin/OVMF_VARS-pure-efi.fd | Bin 131072 -> 131072 bytes kernel/bin/CustomOS.img | Bin 48000000 -> 48000000 bytes kernel/bin/kernel.elf | Bin 34416 -> 34648 bytes kernel/lib/BasicRenderer.o | Bin 3336 -> 3968 bytes kernel/lib/userinput/mouse.o | Bin 5288 -> 5376 bytes kernel/src/BasicRenderer.cpp | 27 +++++++++++++++++++++++++++ kernel/src/BasicRenderer.h | 2 ++ kernel/src/userinput/mouse.cpp | 25 +++++++++++++++++++++++++ kernel/src/userinput/mouse.h | 1 + 9 files changed, 55 insertions(+) diff --git a/OVMFbin/OVMF_VARS-pure-efi.fd b/OVMFbin/OVMF_VARS-pure-efi.fd index 4ecdf8bd27c62a19be03f1bfb988cd6076ee58bd..9177f639e2e95f70a4f402ed8da93036a0bdd175 100644 GIT binary patch delta 47 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 N75G}+#^0zH{||B@y;J}I delta 9886 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 bPJ++C=im$QCHM-Q0$+n~^o{&q{rmp|v>Wqp diff --git a/kernel/bin/kernel.elf b/kernel/bin/kernel.elf index cb5248501a42d356abd2a535ebcaf316e6acc7f3..a00ad0136357faac80f9ff97c9637aee3b9e3e9e 100755 GIT binary patch delta 7387 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 V+t;#Lx*w;}yYfvp>C9b&{~wHl?Fs+@ delta 6784 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 MGXLzTs#3woXI5nF@K L^f_Iet;vDEQ}_Wt delta 283 zcmZpW?~t0H!E}Oiqt;ZW&6+G4Oq2cDzD{momtfp8c`my=(;bG*``DQnwKg(9z!xAT z#K6d)#SGzlGeT%#APo{PW0@?)`Ezmxm+RyWTn3YWaCJz*lsq&^tYC=` zKnV`k$x?iFoEEGQjXx$Q^2$$c;FI9o05xjG%%Vf67v2xH097*0| zN8nWX_5gr^tX%Ll!l;){g=UOg8Jyvw)KFoTeU58Zx@PCOf{trW zy5`8$pG`rkf`kQtp&8k?{e(HR&Y3YvZW`a28QDm`J}2x}b4WJK@&f3TCkJyP>EAb; z`C6D|>!g{HnPrwL%Ce1RflT;4GARz8>MOO9e19bKT5L z%3EUIoi#oR677B(_bp_l`)Dv!NFOM8WUBFF3ze`|1%5Y9+yjkN%hSa4ye8~)XrrY? zR*Z;YF(~@Qo8qiUr_;f-FYP^h=N&PczLNF?JwYQ4!aWTQJAGUB96Yqu7pV8w`UAe& zn%c)}0yTBu6rv0c9~?LpAQB#7WRcOc&(PXc;6pP`H4EdU*VwqSV%ac=Hvz)~Er_RG ztG(wu4Xc)(o&tsAdkQ&NBc8~ArsO}29Bc=k$ZwbYuOSDM+n@YRCI5$xTYQ2g`8}gj zunEvt%6}9d3q}8uRu2l$|Euy3VOfkn=X9WadV%v)Chp?hx4@PZXR+j30o65PNfB&T zwGB`{$n-(Q(eG7tUihJb`k;bxPNBYA@qWeSTtdAWj>YmER{G0IFXtBOC*W8kcZcJk z{m`R0wQ;YYorMGS@|J=+`QKHX`lfOOIFA2&DADAaLHPw7$j_(*a;<=U3kStQwP?RU zZ87eJc+B&gnrgYG7}XW;Nm~B4?rw1aYfbTJ%(fEZXzLEyejyySd!bbqjYVuI1KW#u zZ>+mV`T{i$OGIs}12o&?J$A&#nvR zWRGSz*4}9~wbaUPFmK?=rbN8WN+u<7GWCi*o$*Mxv)PKZTM2my2LpAx!^vnHq1xKU zMEKR`d#yxgI3+_HdJ@TaBGlATFE9KA=C0ivi`vv%ubNrhk7&5QxTZ7sSOj|!A(+l_ zozalvLHdgb!H~gYpvXT)2&U`D9K1k3$@o&JQ-0hRXqbnO^LI%FJkNw!4hQMW)xJW$ zlJT{S<2_3HhZyI19(Cc>jPv|E8OQvy&U6-bG0yYvbKxzF^Za4PG5?&(f1GjD|D$+} zaqO4)Ta5GkA84HPA2H77ZQO<5bm7x3yb2cz42xB8(7J47oX_VL#<{-Uh2tk88Wvo? zpK+eQ#f7&r&hvyB=Xqj`bNy)-KIp>V*Erq>XcrmBerZ2^$~g8*`Y&DhH5Y!Jai0IC z3%|uU@Apr}d7f#;x!zFEb98gQ+J&#vIPIT@HJ(@ZMYYCBU&lDUZ;0=A;V&_c<0O4V z<23&-|Y_)ZtHO;&&P6 z?}dAeV+`rbRYzEG{c^_nd!dSP{$B7gj#bM47~?$ucE-8Bk#Vj+$an?I-@^Cm!VFy$@p1aQ~}YM7D$ST;kL|rtyB&PHUXL|3)-U-)C8k)A!jejnns*@F!DUb~pm1 zop8zyswJ$>u-~>$+QQ!+w!^|7NhXEAE#B2-#el`)w&jQ4BHNNSd@`x_@mP<)I}z`; z5_U@XWd^I`=*x+4m!(GV{|X<3<0}aF5VxReMAdqbPra_FDKd4jhN0+qERln%x=Hm^hSHpoh_4peq-UmKz`Zsd`oY;R27eSrk z@%Irox_&Bmf|Kf8H?7SZ`E>0*aNrd2J&oGDir2?Q^M@L=2ppJGkKckfKUm%=if29k z2zaooU{T>zM%6@(Dvs-iu@q11w^-j8;!_*ynz~?o$Ke|3@wiR&wF4w>t9|o`Hep&* TK3f-yZ&LrS?8Icu^!R@P*(H4Z literal 5288 zcmbuDe`s4(6vyw&y0y9=$z12A-5(kLV1+I;?W%5wWb5MIHaE*kQKn-{+UFXUCM9_- z>!z;Ib~F~TD8h99u_0*x@yB0f_@m7xbQ4tk1v(f~1a%TYh2a8g8_&7#p1jlBJ{frF zd-vYY`JQv{JNMq?rKh4#Jnl0LLB$Y{3Aaa7h|bk+J0hDAu~MuMZD#HlbKsAFc{y4< zciIqzHIp4+zK)U$cpJ?3tT#uZMf2sBl9_8OnnQX2>v^C*6pYc&KU?6x&h__?=Le<@ z`16eM-MkpN;&60Ejy&-_jO+%I%s(ET$xTfj0gLRb!DZW}hiFDsGMayUDd+{xr0BEb zaPz-11Yjs{R}K^nyS8vbNnnnhIK;4WkkvrmaQcN-SGMy%WOc4A=*p&KFvF=tp>niP zF$z!4(x==8{(@Zjhgy9?D6ulgR0d$y%ci0;Mxg@k@K9>1kmaCbnw6&6d8UYCnv(64Z+NIaT;C|o6>ty2h3fz!;S)w48GXhXTE7}> zSd0?~gmFAz)U2qi8U^tNV0dAP;BEV=z-eFe%4H{~K;hUPMGj>r-pGE+wLgm-%2vFQ z-FEHIBZnflIoVrW`&*7#yoWW}ePdFv0njJP-VMjUY+rKBhXS-;Q}z+8%l@aG0hCRz zFi#cYZ#-oS%93&xUDI-C-o7J|=YVYnAhYxPuhn=Tl3A-11jfqs;hB~~Z zjCZHHd!#K~@32h5wmLzxCEa7kZEQI)4p^~{UMF^QUwhJWnk}*RW0uX^sOwW8olV$@ zbV`nB#!?+gtEII;4uf&SkF;dc?N&A`i4&<;>`JENvE%_O)nR3<49NC}8+XLAiFQIw z%}FbkiQ@Bw8+NA>HpT39^03~iT?>+oUiiWYc)>$XQRf8>Ri-m zob-*1`(bS2dp-CwjN?2>AJ;hLKc#VSk)==Lr0-{(&*zK>A7h;7?E}VnoJq#{{J&(J z>wog#zbcON#_wOsgHJsOR{V3ml5un;{oRaneGTLMd*K1bu}N{ljPv*r#(DfG<6Pgy zIM*L$d>I?JgK>DBEzc*#IM-(x=lUS{V!{2dj)?3>N zRjt1Zhk;|vdQC_E`1^(z8lUQIV5BzJUAxWs?*S)F5#Q4oXIlB|^P>Er21^_+9AEbj z;D-W~qEnUcxBaseAddress + (x*4) + (y * targetFramebuffer->PixelsPerScanline * 4)) = colour; + +} + +void BasicRenderer::DrawOverlayMouseCursor(uint8_t* mouseCursor, Point position, uint32_t colour) { + 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, colour); + } + } + } +} + void BasicRenderer::Clear() { uint64_t fbBase = (uint64_t)targetFramebuffer->BaseAddress; uint64_t bytesPerScanline = targetFramebuffer->PixelsPerScanline * 4; diff --git a/kernel/src/BasicRenderer.h b/kernel/src/BasicRenderer.h index 5c08eeb..58fdbd4 100644 --- a/kernel/src/BasicRenderer.h +++ b/kernel/src/BasicRenderer.h @@ -15,9 +15,11 @@ class BasicRenderer { 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); void ClearChar(); void Clear(); void Next(); + void DrawOverlayMouseCursor(uint8_t* mouseCursor, Point position, uint32_t colour); }; extern BasicRenderer* GlobalRenderer; \ No newline at end of file diff --git a/kernel/src/userinput/mouse.cpp b/kernel/src/userinput/mouse.cpp index 188acdc..16729fc 100644 --- a/kernel/src/userinput/mouse.cpp +++ b/kernel/src/userinput/mouse.cpp @@ -1,6 +1,29 @@ #include "mouse.h" #include "../IO.h" +uint8_t MousePointer[] = { + 0b10000000, 0b00000000, + 0b11000000, 0b00000000, + 0b10100000, 0b00000000, + 0b10010000, 0b00000000, + 0b10001000, 0b00000000, + 0b10000100, 0b00000000, + 0b10000010, 0b00000000, + 0b10000001, 0b00000000, + 0b10000000, 0b10000000, + 0b10000000, 0b01000000, + 0b10000000, 0b00100000, + 0b10000000, 0b00010000, + 0b10000001, 0b11110000, + 0b10010001, 0b00000000, + 0b10101000, 0b10000000, + 0b11000100, 0b10000000, + 0b00000010, 0b01000000, + 0b00000010, 0b01000000, + 0b00000001, 0b10000000, +}; + + void MouseWait() { uint64_t timeout = 100000; while (timeout--) { @@ -113,6 +136,8 @@ void ProcessMousePacket() { if (mousePosition.x > GlobalRenderer->targetFramebuffer->Width-1) mousePosition.x = GlobalRenderer->targetFramebuffer->Width; if (mousePosition.y < 0) mousePosition.y = 0; if (mousePosition.y > GlobalRenderer->targetFramebuffer->Height-1) mousePosition.y = GlobalRenderer->targetFramebuffer->Height; + + GlobalRenderer->DrawOverlayMouseCursor(MousePointer, mousePosition, 0xFFFFFFFF); } void InitPS2Mouse() { diff --git a/kernel/src/userinput/mouse.h b/kernel/src/userinput/mouse.h index f85beb8..7ad0186 100644 --- a/kernel/src/userinput/mouse.h +++ b/kernel/src/userinput/mouse.h @@ -3,6 +3,7 @@ #include "../math.h" #include "../BasicRenderer.h" +extern uint8_t MousePointer[]; #define PS2LeftButton 0b00000001 #define PS2MiddleButton 0b00000010 #define PS2RightButton 0b00000100