From dc825fb6d3e958bb013daa88bb9a5f230abad567 Mon Sep 17 00:00:00 2001 From: SpookyDervish Date: Thu, 29 Jan 2026 13:06:49 +1100 Subject: [PATCH] mouse interrupts working --- OVMFbin/OVMF_VARS-pure-efi.fd | Bin 131072 -> 131072 bytes kernel/bin/CustomOS.img | Bin 48000000 -> 48000000 bytes kernel/bin/kernel.elf | Bin 33368 -> 34416 bytes kernel/lib/interrupts/interrupts.o | Bin 3768 -> 4136 bytes kernel/lib/kernel.o | Bin 1992 -> 1480 bytes kernel/lib/kernelUtil.o | Bin 6048 -> 7552 bytes kernel/lib/userinput/mouse.o | Bin 0 -> 5288 bytes kernel/src/interrupts/interrupts.cpp | 16 ++- kernel/src/interrupts/interrupts.h | 10 +- kernel/src/kernel.cpp | 9 +- kernel/src/kernelUtil.cpp | 65 +++++++----- kernel/src/kernelUtil.h | 1 + kernel/src/userinput/mouse.cpp | 141 +++++++++++++++++++++++++++ kernel/src/userinput/mouse.h | 19 ++++ 14 files changed, 224 insertions(+), 37 deletions(-) create mode 100644 kernel/lib/userinput/mouse.o create mode 100644 kernel/src/userinput/mouse.cpp create mode 100644 kernel/src/userinput/mouse.h diff --git a/OVMFbin/OVMF_VARS-pure-efi.fd b/OVMFbin/OVMF_VARS-pure-efi.fd index 453efac287a45c34a39f35ba5951498dff82f2f9..4ecdf8bd27c62a19be03f1bfb988cd6076ee58bd 100644 GIT binary patch delta 96 zcmZo@;Am*z*ifOxC^&gyk@n;RW?LpFgdCYHV6}l!X!FFP&%BJn5K06>i9#qbAhnTq nveq0YMsXnXEazscWyd@>8?3scx#`0P_U3@^+XKEc3UB}bV+|;+ delta 107 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 JpP@VE{{b1jUjhIC delta 5002 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 diff --git a/kernel/lib/interrupts/interrupts.o b/kernel/lib/interrupts/interrupts.o index b0e5086e7351b8087eed5391a91d3435af287a17..d5a75c65ad0a5e66a4ec9feb1b6726f47e99dd74 100644 GIT binary patch delta 922 zcmdlXyFy`t2Ga_jiCW($x(IB1c%F&Xfq{YH$>c(2XC@8C$=jIa6g?P$B0!)DA{_Yy z+L)Yq*%FTNuyZglC;){rCVyo%o~*#aGFgM=hpsMEwHQb>5PSw=AqGZvzLjaUk z0ICz1EXX1(YXW3}R5(L*g6#pSa)YY~fU3xVs`v>tBNnPcWb#DTFYHD}zWJrasgn)Z z)N~C^JQDL#a#90=A%YnU@ll3G0iMqBu6ZfJIf-SdWk3;={L+%7l8njo*reDXMo!+& zcGHs)Y7Glej1!3e{D%O3BynCOaSPOOr1G z$#;_ldF>fLOb+C==Tu;Z=;)X{lh>THfE&U)F!?5sw*nM6K(Jx5B%e8F1T@iQPLAX= Q=Q7}d$dxcmp2aN(0F<{9 delta 716 zcmZ3XutRo&29pK%M6K_e3mN;F*kl+O7@jap_F|D^WSN}FBFzdCP?_AxVm$c(%MZc3 zKpqH)K`4gLlNDLT4gUgpLJW)ypP{0vP@10+A}#@>LEtBZVvyPF$i~BHWRhQ6l2nqx z5Fce|6yWI`@0ynqoRe6VS_Txc2ujUOEC7mvIOdu8@#Tq`C1sP3v)}Z512u&ONb>;k zpZ^fR1hoZSTo8x2+T?{C;*5He89BunEx>FC5L?n8hx!n(Y%&hn46tlD4%r%zEN?fm z?BrZd@yR@#JiPN!MCU?9H=~H2g^C_W5&a7ly^SKO%LO)9@&mFcQaF7DyOfm)5{&4f z#WlGRsK0=_LX!ikAEXe3VX>=$CN42qljlC8;ABo-bIu)X5K|K-d-9qy22O6|wFi<1 z!6YM}J!8{kM<6+GawCvjF!>;#J?90eI~*o+@|$x?a6$C1nCuDU34k021PzlrfxHQ< Y5T3^5lR(}9sLGPb8(D-W%kc650B6RdzyJUM diff --git a/kernel/lib/kernel.o b/kernel/lib/kernel.o index 39b9e9a7633674306d2edd573429ee99ccceeec1..b8a476d70600aa02dcee32c916b40f29bb67b182 100644 GIT binary patch delta 397 zcmX@Xe}a30hIj`P0~|PjSq==m3_KIILkOexWLL)M$vYSYfUJ{@ z=94{`jLhSs3@rkR@{?1Gi+%G;i&Fyg0z^;*)nU zdrjtInFlm2kx_W^9u^hB3ycsA22g!mlRvWPPhPESK*X^nveta GI}ZQ}Kt*K$ literal 1992 zcmbVM&1=+95TCTwR%}cC0!uxlAbx;`-K{NEP`10SO{tVpsE8;fO<(QWY_cS;(k+Mw zL0F0)_-A)%8yv)pRelu@gCNIxRcklEV2Cx`# z3l2O+0qnj5JKr+%FbqSmY}dcpFMgPI{aM4_Ej8@=UW3ARz0^d%iTby_dxW69{Q1$* z(S7A5#5icbIuoaTP6t%M?|&%{^CI+xXO{i4EIVF#N35CAmg|ZrTHo@#+Bm>$v3SG0 zG`p~T+00H_IV)@CGP$WtHZwu_bPN+0b%Y$~0pkN$KGMY2hcnc=dq%c52JZ zb-`!4;19dtwJtbpwgzLl)het+(g`K3JjhPXC3A`gw>Vu00y*ce2QcdetB$uM{527Z z5ZMdaiGmZAU4|x$o^Zm_(@vqqupy7`cp6*9z{9_v5)cBN>h!xc;(pd#7l3}bj z*b0T`SQ1|jSZj`Sz*>zWu)-jA+@MksKF0h&3JdSXRUD(csr<+OmQ@Xdst9EbbEuNo zSXmF93U`=va45sXEV>)%`;$kEgun0DJGigxkD)>DG|zz2U)9U`qWt5iX&-v`Bxhp< z7f=&Uv(n|Q?r1h~b-98L)jVu|7IUd)+bq$4hl^x9R>_n5XW%*-l%HWh=}$`Yzly`$ zKkEVp*k%stpSq*jY3>rn=w77zZ>pShU+MmzAdhOM^G&tUw5r1@oljq3r}@8E1K~N- z{OKNXKI5JCroHZ~{rMd9-{reYan7fj>Dg1HL5H CsrPaK diff --git a/kernel/lib/kernelUtil.o b/kernel/lib/kernelUtil.o index d26aecac561f6d01dfc20f24706ea4f862791489..7f88e99661f28709b4590051868bdcba43f18f07 100644 GIT binary patch literal 7552 zcmbtYeQX?85#Mv1)<7C3CD59bvPoU)wBhhw;xrdQIDf3YCU(5oJ`h!^?fPynK74n3 z?Cm9SXdopm%5gF>R4SEPiBCb`4``(dxe-b(L`n=&AgTz8P!LWjU_oi!KbpFbVrJgQ zdA#6QLzz5Lr+)R;Ea_^s;W)zS-`2@Y7t*_sw_&{wlS zWo-_?IX2h{BLvs8D|Cx!S*xObdjXW0#?4SZK1x2= zNkHdQ`U8B5z16I8zm^N26&Ap3dAj_@@%~qiCuWXoSM&<=Zu~{!75&W1^%xwM1r!SV znqOMbd0@>PH&#Ofe%gGxY}8Hi*lE5z78+~W$T{Q5@m^M%Ic9&c0p{oAH{f(?Eu3oQ z=5EA_ykINNYOrbJODaJ5$w zmvyla%luY=d1D3kqjQqCWJbjdosTy+H8m{=%{NMUlhO4rRt2Aj^m*+fnH=pUo~gWj zI9J@MfkD_HYxmd9`LG(wq~EOrMn3g6l>RhM7FSfx-yfs+a(rA`S|5evbA67uOAIIM&Y4=SNU>p~mX+}bb+mg*I?>;nwuvXgZKF0!}{ZVFBl&jd*>{n{`XNCPG zOkUboU8u$XrLb?uR@$A#{H_T5`>4H}+l6UagI(1tZ!9b`0I;f7#iiC&tlCR4*n+V3 z${p{IbbFn>meg4P&WBn}U`4j|*dE7*GKcLO3^bGSSb1Av6YcF9?y)=@vKbv^ zT}1)uvWrPA@44eKU<{UoE84cl9v^WmH&x5>hW$sQ{rCcLbL5?a zcFrmoy`4CdksbKP!R`Q?uN|^PaXoD7u!@=Fpq)?IuI=KyMj~v5j+D}AC`Zf~>W-M* z1AB)RzM>_S&BRjgw$7|=xoidb1GgFQ#^q_op5zLC+xOasJaFr>(>N9Iwx;wsRtj4f zK@>+|4Dk}+n6^75Z^RpA4>vfqiwk&sD!3QS!}}jfpAQ$R;`s3EoW5{S;J72>-YxMj z6aE^4KS6N(s*!x$cTq4OivNtE9LGE*|3!ggzxZV(@v6Y(xFkL;aO5|_A@P?9j{BFy z-z4~Yg2NWU1moj7hU7N|;LQTZes3rIJp_M0!SP)a#h?E(gipu&0^!qqP7^-u_iq9G ze-RwtmE^eUFcA>U{}wnT-Yjrz@SXX;Vm)*d{s#$v%*X$?;Clq8^ZO`?L+9%l;nRM< z9)Lef;?Vj1fxz#F9Pt;E9M?(0$B$ZxpCSAY5&Uuh|IdWKk?^kt@ZTZ)y9j>+?B6I@ zf0_@zub^Q5_)RbKj0W&y0>^H!Zj!&7@b4!0VS;ZWc$vic2*D?PIOdD;9UqR*0+b*5 zaLftic^{6oK$-I4GXK*A-wZs7p9{c$AAnyGIOcs1iSw5L{yzwgm$KhC1&(o=34WdM zX`c0>P}tl{`0E9Z^Yu}JZzBBr2;M^YH2%j4jw#4G?;>%UNt|}Vr*V1-pXQk$_N#oMzBvJxhd7^EpEJG@q{${0GywH_|GGWh~NJJ*jB2aAqsRt z_+tI=yGHuU`mNMAx=e}(%$%55oMTMM?~i+>f9?TNj*1_kZ~Kh?`r$LwM?rUGUL^Pg K(-u#D|NjBTmzN9x literal 6048 zcmbtXU2G%O6&@!WHZ9903$!c+gjqqg3$2^UZo(SzD`#Cyl;;IR(eI(u#V09&qwpuY+IO|~*1_}2;Z z*IDKFEgmZCqFXVxfWLK7>(#VNf-5!Exh=M0yv!Z2CKZ?@ESGNdVXB{VXgd%V1fbGal6rrb+az+sAB8@ zxWkiONrvEgyUnnOR*V`Ctp=Q08_u&vO@uaw!|bq7okfkB`xbPzdX7N(M3y4iRX}&s z>>e@2UKg+2o3sGJ88MA}Jq;_Wt#DH1O}h#Ueb*Kg5+dGWg2^hcV;HT4-?|d(I*)K> zJ=W0;B@(vF+s}X{t%#k1^{m2N`%%bOWZyF3nRTPCOsDaV7=$(kjN9B15ChBxg#(YR+eqv( zS>oy(E~6XyNzuBD#PF>fP+#RUqFA7+xs* z@iug@_qmRd>#iBT0t}(MA90WnER=@6^OF!V(DpPcK~Ce~WZ(JihW;t8h4Tel(s#Va z2SEE5rT&Dfcben>PU^2!^>Lw>s;e3dWuNvTF2<{*vr(m{3XV3cp*Dp@1mUqj`w(1+ zFH4-q0N5$Gu2=l<+5u+5bqGc#ff90g4DN_ipV}t@M?YlGYYf;=;lh~w@=E~P;U5Ix z9|hq1pg`^X+#P^_GXOUO@Z|vfR{{7R0LS`JOkb3VzY93lryJKE2w!8+ei-0qKk� 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 z;D-W~qEnUcxClearColour = 0xFF191919; - GlobalRenderer->Clear(); - GlobalRenderer->Print("Kernel initialized successfully!"); - GlobalRenderer->Next(); + while (true) { + ProcessMousePacket(); + } + // make sure we never return from our OS while (true); } \ No newline at end of file diff --git a/kernel/src/kernelUtil.cpp b/kernel/src/kernelUtil.cpp index 178db35..e40017e 100644 --- a/kernel/src/kernelUtil.cpp +++ b/kernel/src/kernelUtil.cpp @@ -45,40 +45,31 @@ void PrepareMemory(BootInfo* bootInfo){ } IDTR idtr; + +void SetIDTGate(void* handler, uint8_t entryOffset, uint8_t type_attr, uint8_t selector) { + IDTDescEntry* interrupt = (IDTDescEntry*)(idtr.Offset + entryOffset * sizeof(IDTDescEntry)); + interrupt->SetOffset((uint64_t)handler); + interrupt->type_attr = type_attr; + interrupt->selector = selector; +} + void PrepareInterrupts() { idtr.Limit = 0x0FFF; idtr.Offset = (uint64_t)GlobalAllocator.RequestPage(); memset((void*)idtr.Offset, 0, 0x1000); - IDTDescEntry* int_PageFault = (IDTDescEntry*)(idtr.Offset + 0xE * sizeof(IDTDescEntry)); - int_PageFault->SetOffset((uint64_t)PageFault_Handler); - int_PageFault->type_attr = IDT_TA_InterruptGate; - int_PageFault->selector = 0x08; // kernel code segment - - IDTDescEntry* int_DoubleFault = (IDTDescEntry*)(idtr.Offset + 0x8 * sizeof(IDTDescEntry)); - int_DoubleFault->SetOffset((uint64_t)DoubleFault_Handler); - int_DoubleFault->type_attr = IDT_TA_InterruptGate; - int_DoubleFault->selector = 0x08; // kernel code segment - - IDTDescEntry* int_GPFault = (IDTDescEntry*)(idtr.Offset + 0xD * sizeof(IDTDescEntry)); - int_GPFault->SetOffset((uint64_t)GPFault_Handler); - int_GPFault->type_attr = IDT_TA_InterruptGate; - int_GPFault->selector = 0x08; // kernel code segment - - IDTDescEntry* int_Keyboard = (IDTDescEntry*)(idtr.Offset + 0x21 * sizeof(IDTDescEntry)); - int_Keyboard->SetOffset((uint64_t)KeyboardInterrupt_Handler); - int_Keyboard->type_attr = IDT_TA_InterruptGate; - int_Keyboard->selector = 0x08; // kernel code segment + + SetIDTGate((void*)PageFault_Handler, 0xE, IDT_TA_InterruptGate, 0x08); + SetIDTGate((void*)DoubleFault_Handler, 0x8, IDT_TA_InterruptGate, 0x08); + SetIDTGate((void*)GPFault_Handler, 0xD, IDT_TA_InterruptGate, 0x08); + SetIDTGate((void*)KeyboardInterrupt_Handler, 0x21, IDT_TA_InterruptGate, 0x08); + SetIDTGate((void*)MouseInterrupt_Handler, 0x2C, IDT_TA_InterruptGate, 0x08); // load idt asm("lidt %0" : : "m" (idtr)); // remap pic so we can get hardware interrupts RemapPIC(); - outb(PIC1_DATA, 0b11111101); // unmask 2nd interrupt - outb(PIC2_DATA, 0b11111111); - - asm ("sti"); } BasicRenderer r = BasicRenderer(NULL, NULL); @@ -86,16 +77,42 @@ KernelInfo InitializeKernel(BootInfo* bootInfo){ r = BasicRenderer(bootInfo->framebuffer, bootInfo->psf1_Font); GlobalRenderer = &r; + GlobalRenderer->ClearColour = 0xFF191919; + GlobalRenderer->Clear(); + + GlobalRenderer->Print("Setting up GDT..."); + GlobalRenderer->Next(); + GDTDescriptor gdtDescriptor; gdtDescriptor.Size = sizeof(GDT) - 1; gdtDescriptor.Offset = (uint64_t)&DefaultGDT; LoadGDT(&gdtDescriptor); + GlobalRenderer->Print("Preparing memory... (this doesn't always work, you may need to restart. sorry.)"); + GlobalRenderer->Next(); + PrepareMemory(bootInfo); - memset(bootInfo->framebuffer->BaseAddress, 0, bootInfo->framebuffer->BufferSize); + //memset(bootInfo->framebuffer->BaseAddress, 0, bootInfo->framebuffer->BufferSize); + + GlobalRenderer->Print("Setting up interrupts..."); + GlobalRenderer->Next(); PrepareInterrupts(); + GlobalRenderer->Print("Setting up mouse..."); + GlobalRenderer->Next(); + InitPS2Mouse(); + + outb(PIC1_DATA, 0b11111001); // unmask 2nd interrupt + outb(PIC2_DATA, 0b11101111); + + asm ("sti"); // enable interrupts + + GlobalRenderer->Print("Init complete!"); + GlobalRenderer->Next(); + + + return kernelInfo; } \ No newline at end of file diff --git a/kernel/src/kernelUtil.h b/kernel/src/kernelUtil.h index 9beba51..9343c76 100644 --- a/kernel/src/kernelUtil.h +++ b/kernel/src/kernelUtil.h @@ -11,6 +11,7 @@ #include "paging/PageMapIndexer.h" #include "paging/paging.h" #include "paging/PageTableManager.h" +#include "userinput/mouse.h" struct BootInfo { Framebuffer* framebuffer; diff --git a/kernel/src/userinput/mouse.cpp b/kernel/src/userinput/mouse.cpp new file mode 100644 index 0000000..188acdc --- /dev/null +++ b/kernel/src/userinput/mouse.cpp @@ -0,0 +1,141 @@ +#include "mouse.h" +#include "../IO.h" + +void MouseWait() { + uint64_t timeout = 100000; + while (timeout--) { + if (inb(0x64) & 0b10 == 0) + return; + } + +} + +void MouseWaitInput() { + uint64_t timeout = 100000; + while (timeout--) { + if (inb(0x64) & 0b1) + return; + } + +} + +void MouseWrite(uint8_t value) { + MouseWait(); + outb(0x64, 0xD4); + MouseWait(); + outb(0x60, value); +} + +uint8_t MouseRead() { + MouseWaitInput(); + return inb(0x60); +} + +uint8_t mouseCycle = 0; +uint8_t mousePacket[4]; +bool mousePacketReady = false; + +Point mousePosition; + +void HandlePS2Mouse(uint8_t data) { + switch (mouseCycle) { + case 0: + if (mousePacketReady) break; + + if (data & 0b00001000 == 0) break; + + mousePacket[0] = data; + mouseCycle++; + break; + case 1: + if (mousePacketReady) break; + mousePacket[1] = data; + mouseCycle++; + break; + case 2: + if (mousePacketReady) break; + mousePacket[2] = data; + mousePacketReady = true; + mouseCycle = 0; + break; + } +} + +void ProcessMousePacket() { + if (!mousePacketReady) return; + mousePacketReady = false; + + bool xNegative, yNegative, xOverflow, yOverflow; + + if (mousePacket[0] & PS2XSign) { + xNegative = true; + } else xNegative = false; + + if (mousePacket[0] & PS2YSign) { + yNegative = true; + } else yNegative = false; + + if (mousePacket[0] & PS2XOverflow) { + xOverflow = true; + } else xOverflow = false; + + if (mousePacket[0] & PS2YOverflow) { + yOverflow = true; + } else yOverflow = false; + + if (!xNegative) { + mousePosition.x += mousePacket[1]; + if (xOverflow) { + mousePosition.x += 255; + } + } else { + mousePacket[1] = 256 - mousePacket[1]; + mousePosition.x -= mousePacket[1]; + if (xOverflow) { + mousePosition.x -= 255; + } + } + + if (!yNegative) { + mousePosition.y -= mousePacket[2]; + if (yOverflow) { + mousePosition.y -= 255; + } + } else { + mousePacket[2] = 256 - mousePacket[2]; + mousePosition.y += mousePacket[2]; + if (yOverflow) { + mousePosition.y += 255; + } + } + + if (mousePosition.x < 0) mousePosition.x = 0; + 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; +} + +void InitPS2Mouse() { + + // enable aux device mouse + outb(0x64, 0xA8); + MouseWait(); + + outb(0x64, 0x20); // tells the keyboard controller we want to send a command to the mouse + MouseWaitInput(); + + uint8_t status = inb(0x60); + status |= 0b10; + MouseWait(); + + outb(0x64, 0x60); + MouseWait(); + + outb(0x60, status); // setting the correct bit in the "compaq" status byte + + MouseWrite(0xF6); // default settings + MouseRead(); + + MouseWrite(0xF4); + MouseRead(); +} \ No newline at end of file diff --git a/kernel/src/userinput/mouse.h b/kernel/src/userinput/mouse.h new file mode 100644 index 0000000..f85beb8 --- /dev/null +++ b/kernel/src/userinput/mouse.h @@ -0,0 +1,19 @@ +#pragma once +#include +#include "../math.h" +#include "../BasicRenderer.h" + +#define PS2LeftButton 0b00000001 +#define PS2MiddleButton 0b00000010 +#define PS2RightButton 0b00000100 + +#define PS2XSign 0b00010000 +#define PS2YSign 0b00100000 +#define PS2XOverflow 0b01000000 +#define PS2YOverflow 0b10000000 + +extern Point mousePosition; + +void InitPS2Mouse(); +void HandlePS2Mouse(uint8_t data); +void ProcessMousePacket(); \ No newline at end of file