From 69baa26d9b6b5b57a0a4dd391297634cdd2d6446 Mon Sep 17 00:00:00 2001 From: Hopeless Tyromancy Date: Sun, 15 Feb 2026 22:17:48 -0500 Subject: [PATCH] fixed mostly everything, works on my real hardware, turns out bochs just hates me --- bin/os | Bin 112680 -> 103936 bytes flake.lock | 26 ++ image.hdd | Bin 67108864 -> 67108864 bytes obj/src/int.c.d | 3 +- obj/src/int.c.o | Bin 125256 -> 132080 bytes obj/src/main.c.d | 4 +- obj/src/main.c.o | Bin 25896 -> 26480 bytes src/acpi.c | 6 +- src/acpi.h | 4 +- src/alloc.c | 138 ++++---- src/alloc.h | 15 +- src/apic.c | 172 +++++----- src/apic.h | 2 +- src/common.h | 58 ++-- src/etc.h | 12 +- src/font.h | 112 +------ src/int.c | 408 ++++++++++++------------ src/kbd.c | 133 ++++++++ src/kbd.h | 2 + src/main.c | 220 +++++++------ src/map.c | 803 ++++++++++++++++++++++++----------------------- src/map.h | 2 +- src/print.c | 31 +- src/print.h | 7 +- 24 files changed, 1110 insertions(+), 1048 deletions(-) create mode 100644 flake.lock create mode 100644 src/kbd.c create mode 100644 src/kbd.h diff --git a/bin/os b/bin/os index 2d0b0cf320c04a632ab8e9ff67d0b486675bd049..66dc15200c6b9ebe9ff2f0452fa8402a871e410d 100755 GIT binary patch literal 103936 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 Olrk_d+(s6};#UB>2&X6j literal 112680 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 CRztJ^ diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..5cb4ba2 --- /dev/null +++ b/flake.lock @@ -0,0 +1,26 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1771205900, + "narHash": "sha256-GDTqgUN8pI8lE55wTdaFOS+xwwOOz/w055SbCLLFTqA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "805ba342d424b11deabad6e1597372a3cfb39a59", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/image.hdd b/image.hdd index e9406dad2d029ffb16192fb471abf439b105044d..d274f2e6f0664c6419b7036f99dd07a4c5dbc6ea 100644 GIT binary patch delta 87328 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 diff --git a/obj/src/int.c.d b/obj/src/int.c.d index efb2f36..ef52c69 100644 --- a/obj/src/int.c.d +++ b/obj/src/int.c.d @@ -1,4 +1,5 @@ -obj/src/int.c.o: src/int.c src/apic.h src/common.h src/print.h +obj/src/int.c.o: src/int.c src/apic.h src/common.h src/print.h src/kbd.h src/apic.h: src/common.h: src/print.h: +src/kbd.h: diff --git a/obj/src/int.c.o b/obj/src/int.c.o index 078482529f378e29ebbdbcd4e45bc5f15a37bedd..3f0cfdc99fa82546942fc878a9df70c78cba47b6 100644 GIT binary patch literal 132080 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 literal 125256 zcmb<-^>JfjWMqH=Mg}_u1P><4z~B*&5On|xJ1}T4sWW9UWHG!1@%gzyBtsTM79$#; z360N;#%Dp}v!e0Y(D>{qd=6wD1IT_(WRWZ`WF7-U7B?E72aV5*#^*!hGi322i)1lm z383%=k$GVE2qBAPF=Pp&@kLPhqR2e3elcW`EQTy`G`<8HUlNTkg~pdgO3NCp5k@8s7zt?~2BEL*u)n@jcM^o@jh8G`=?)-v^EFi^lguT{3<81lhOE7(D+l)_|wq%)6w`d z(D*aa__NUXv(fl-(D-xF`18>C^U?SV(D)0{_>0i^i_!Q?(D+Ny_{-4v%hC8N(D*CS z_^Z(PtI_yt(D-Z7`0LR4>(Tfd(D)nC_?yu9o6-1N(D+-?_}kF<+tK(t(D*yi_`A^f zyV3Z2(D-}N`1{cK`_cFZ(D(<@_=nK=htc>)(D+Bu_{Y%r$Ia)|kJ0!~(D+Z$_|MSz&(ZiV(DI zRHOq`jWHYp%Q6@qFuY{=&G7$WhR_}V`572II-hzpzY$35bp7VhS^I;ZG4|U@!vlu@ z4|7F(1_dfG#440$mSia8rWO|`rl(pdFmQnf9~c-ILOnX4277e=_BakICKx=L-*AA^ z2Lu1M>H;tWDgj}4+k*5#*boh1w&4LV<H-kbryU}>kRnh0XDYu6eKW@yMmGk11L0MA$iI0BqY2+{vXAoAut*OqaiRF z0;3@?8UiCM1VE!33=Hr&pJQ?m|HEc`D&{P`8R-)fDs%i}vA*#c9`D2j+#O35*6ONd zE%eAtS~NFf?W`R(64LWSR&*Kq8ZY&fuX!>1n0hb2tLs|tt?Np25AAzD`_1ot#yW2E zd(^7_u}dsdxv#GN@ZNpP{l(9V-iZOp^NctDEbEJCpA#cqJmvWm zPRW~Ek9s_h8-+eut(Ka;a>e!1uE|>`o=d9z(vo{Ow?!stv8}q!(lbx=uA5rUlu6!{ z`#fGFVB_cs&f-zr`QEkGc2Y&hCG{$8s*^8%o&0Y0 zHo2e1?}F`uJR$ow_kI9c+r}3Gf!;~FKRj`d1|_frR(#>r=~0Y?09Rxu%=x_ zZtGvmQ`7YfkAHjqRQvwjN%C9%ikF<5QWJGPK4{PYyZpr6x9;|n<34&OKMN$liD)vebl_SiD# zT)k7;+;vYTIL4efFj>aRgI`jkbVK!X>C@TguenSTeI~;jxiQ_5|4n(^t(f1{$HF#h z|Im~S>`I~k#p+}OivBz7V~A$eX;rO~sKGt`s& zdMu5eotUAVJgq0vDDC77)#SDwNu#tAGZd3&^<)|?J2^uwxvNLhXxWJwO39OYJdM;& z&QM8i>ftm}J268cc}`EE(Xo>f>d8GlhDOIuNGK;y=?OG)J1L=>+|naxEuPIk12l~6o zN|vTvnHcEqrYpHM<;tW$Z#P~^)08U{0-fDVC9kH0Ob+yQ6O{~237Ht^>ZU3=H6>(H zpr;$Fq-aXWgg{3(OUb7xQzi%cxk*ZPD$02DH8&n+zcg; zrie@q^f~6MRmUqfFS@1k`AfyKUyAATq<%Yhr^&m@HS9&#TKk+SZ`Aj$>6Ums^KGw&=x))J-!G?aegEm! zfpc4@?kV$GAA0c<_m=Rso15;Z{M&uvp7QUM-=F@zsyGw<>B2Jq(|-5fT;8+k=T^b* zr!O6@d>$Vh7PZUgy><0E2iZHi-TgD3+i%%;S3=i%*2{&}QT}Z93!QET{<|+7UEcaG zTb5&=Wlq{(cE1iW(BLVk#D$f&?MxsZqCBpc6B>BY?~sGQoLtS2aIU9QzOl4u1$<$2 zKGeL3@vv~Msp6~kGgi!BI{*2-zz;RM=gyrw_vT{Fuv`6NlC~dgpIa>pd#hP{y&=3^ zep01JO3$8Rh%*Xjk|+D!m>S2s^>CX-KJV)trU0b-%KJ;(pC!I?Kz$cBJvO zRL0r6RZDFZwHF=go1dmst9|U;8pF)3-{n?(F*tF;VDiptIfdR#5zTME=l(P6T&dYu zQaM+^V!g*U)y)Cod-|_$6nZ1|(o5~;J?-hY?&*DLEx9Ov`$@C2b;18L7mSwWCdo}- zT9I(%GhjAip)rk}n2Wa|AU@kmpf1h=&Qz8L16dQ)~M%UJC5etG9;L#OShg?r|m z5(?-rLx6Ym zo>mXXFJ`e70drUAW{S*p<@o$;@6SoB>>14rvAVSh?Dtv?9<3JIzELM`(z=ILVM#Sx zq7N|acsNB~PO|p%i>x0Nj2fce0j)ZR4IUj8l@Pz`;^J~%mwKbc?a_&$sb1^>(93d`21zA)q+p6Q*_*CZW6i7eEaqy_eJ85d!H`VW!<86 zA?TZ;Wy_-sP0hyW#=FKHyR+=>bXRXVn0Gt=NAf}?AJb>kg>4x2yw&=QNKXX~$r+oV924zmM zKPCUP-(sJ=RJ>fTeBZI{?vMS`5AZR}n#Kp33<22y3+Dvr$PA2MF{k@sQbI!Ng9HY~ zFgA?@Mx}P66gz9~{c_CKJ?DK>#nj^rlOm7I^69jC^&@wR=_#pH-dM5w8rfiGZ@@JB zIja2Wt%oDO6m3`-p}r!+0q_4dw;yyc|%fpL$8 zv1{hx!wcVkdHMe@uW@Ej#v;E-Eg^byr>J;Nduks#^_Y_M`7;+*c)8kl-B}Tm9rW<( zT=u13R_dgzbo#m7@$E(4)ctx>pIOg&U$pP|PrK)F=lCt`pZqy-LbUo*^1Ql3m;Ej6 zAOD&2nfsjnPxH#7KTVbMD}L!dFQ0RN^WVnh_C^1W{4{>9KWBf@zhghGpUc-++E@O% z{y*p8oijV97I(f)xP5S2b1wUBzio4KtZ$ZWdYg3n=(g@$@!NUZ?&j>iS+@D^@iO__ zwK?B6-aTJtfBSFF_szBkzA@Zp&f(wiHu3i1ZSA@Ix0`eLH`$)}rf@rM+uoe&o8LCs z9{DD4+c}4SqwSe*2DcCA@Nc#~^o`@Ta!&t-x5>AUZ|l#Mzr8r8f0OO0ZyLAjw*Afd zee>I9+hgA(ZYSsTZ?rx4&Eodsoc_(S3DyV78s0M87S8eCV0-Wz%WcPP%{lBh`8L^} z{HAhya*qEd+oRt^ZU^W1Z~S}vL}>M!yAW^5CRraT>v$`0`*M!|X4|vhOl~J`JDk&g zlW((ZqV=J&mbVCalhHO$@cI!p4-Mb=Qr4%{-$$#bI$oqw#UE8+%C>JztQ&m zH=Em^bIxy;O}0K(*7H{4cHy?iImd7IZQgs}8`Ev>9Q_S*6RZ!GHN9oI-JPSqY43?| zO1C|?P0mrj>9=WalJ(KDuD2q$y>s+8?mhBN==SLx{mpyNd^5VOowI(!-b3HGZm-T+ zziIEOZ(6rAw_VOze$#LB+(hfcWo>VHZbxq0oRfa@+@`(9zDeEA&RM^4@40VQw_oS1 z-#jv-oaZ;sZQgtGo7(N!Ir*FR9{nbEJ31$SS#dH*c==+6y0A*-)yy)s?BVN3Tky+ljJSGkLx_7pD2`gTZr`5EW#Fzu{!FWaYo zalYxJ`>ZNZ=0f<*xF2zw7XDy4-YeX}c2;TCY}dn;fw|Y8=W|4EHq|^dBTsuCpVzaB z*>>yVgmb62W?k01Q?~O?S#A5*uAsCx77?GmdndN9S?NBNFEa2O&linn4m&4KHHy5Z z^VCn#%I8yMwC?zG!Qw=H$mn7-aZr8@xW2#!+!?GZ^?JVVy)Td&Q7oeCySu6kc-rpy9;MaKIt%B>M$qv;P%uu@EvY^vJxKWMCmt_`*iC~7()#!vE zp_nTrlV`5Zjeo!9U)X}B4&IH^m~>gAxV98b5y{ZJ5VS&UM&P|K7I&w2@A4~(5kLM% z^l&^+ePNelZ)(R*L!M&>607@s)}Hvoze?@;SDx)tby6IEZ(4nBo^y=)4!?rA53B?) zaK893_knd}jd{uEYL8`kj}2yLTFE|N_4duid9!ODh%J9$Qn7z8dyau*^)+X&DbqFd z1LGF$ajES5WW@h&-Rj%t&zoQU{P;QhGp?F%%bQxYv&FNutmnrS=zW}dAfIVJ=N~mq zCFdU*4fj~8gj3hedOiIfgPha##=HHO_x$QG=oU+sm&>1*_ilbEvz};-mf?k@1rGxc zE^cyX?YG*U|9=1abuM9(YP;-RSAY1u>er{YAAi0(9e?%m_V@ka=Krlr{}yIVUUTTM zLEGZpor(Fca(B#q)y&zyc-L9oXDhQ`t-P6kugfOo%ca~m{MBjMf~rSny?gk)Ye~ zK3d=SH*CLsQlk9Qg|hwM{uRE{=l;H|@-B~Z{nyR!ZSKVC9-qTzYQ1Gf{@s}9^IzXT zKA9=WpLcA_Y`;_ToBl;_d(O|D|8nQOf1j&-Hib&aWv9PAb}RWu(XG7R!#Dn#NcYY= za$mA{){*#`L5KI5Zo3%CyXMGqo445og6GzW?70&5c&3%ZzvU7E3XiUY3)puxKdV?Z z>u0Z`c>5mN`v~`k_h~~pZUF^>j3!Ph~wH65RbGtC9 zD84*7$$h$sLFw_QN^$lzp^J?!q%1gjf=Mz`ftg2hN{Iim^3H!nd+&4idw-9rE57Tp zOa1ol6o0P|GaV8F5(0uQF`VIqz@`2{M!WvKKNq2uTl(Ubx6mHtjTW0rPafUzZ)L)t zk1Jf1Kd;jGEE*dsdnG7F3mI6)-zRFI)L< z(&6@M&q(7fQzfmB89e&MIJ!zhE;Sph;Aa5WKvaQ`>h|sL6n*<+oFAKpoq8y9V~- zo0&5;kD48w#m7eWx;CFUFiUJ3hj*;)>L&H7iSs+7 zoiiWK68iIvXQ6M<#>LMT7EYRdbARW&h2`firybjHd7kOwo6qATiak#=xH~&rDQLL+ zg=#7on(7(pK|RF6z`&ruz`(%Dz`)?{7s|lIz<2;82J;sq8eatDX;3&+1u-yI2rx?X zuyagcWMBX_Gi9K1kd?s@F{m{R$YL&7)J0$s%fTWBT6_c&Mm7($paxwGv`7S947Bh8 zB*qCM7$EKgP3D8R$mW42s6k@L>cBH<3=9m&Vm#15LKaiNB4&a`%mXThY;Oz}u>z;2fM7rk0|_i*I#|RUu!x0V5zD|LR)a-s0v53)Sj2W< z5j%rL>;V?BFIdDlKm{gR7|37|Gr%I|f<-I>i&zd8u?8$+Q?Q7wz#_H>i`WG$Vo$J$ z{lFr|!-km`6tIYyU=j1cA{K*1tN@Ex3l^~%Sj5&~5j%iI>NsU=gdqA~pew z*b*#aJFtkI!6Nnmi`W+|VjR%^IdT}tK*jhVNd(*`G{7R}f<-I>i&zd8u?8$+Q?Q7w zz#_H>i`WG$Vo$J${lFr|1NA(ze-*HZnP3s~z#%k(n0E^fbEMh0Hh~2>=_5q6+3pBE!6gZztKsitf zET#kHKq;`81C#@$z+xd#4wM3mWk5Ml3M^Iwa-bAg>wMQjBYu{~JC zE?^ORf<^2H7BL=Br=Nj=0XbY0u!xyp5%a(z7K23$Hh+a|M++8pGq8xQ!6J45i`W$` zVlS|W{lOw8Ac&a`RIrFyU=j1dB9?$ftOSc#2Ntn8Sj0A95j%oK>;@LGH(10NgfRUp zf<;UNidS$DOkiRu!!|w5nF&oYzr2#6IjIVU=jO(MT|ulGYllKi0NPvbHE}N zf<-I?i&za7u?bkjmS7Rvfko^L7O@9d#J*q=fA3=K>Fr=9opdEcQ8D<7(#}7js+Bv`whc*^5#Gwre3~^W} zqDnA>YZ_EB5RVy_2|*kr%*+4{6eKYalbJybL}6fN2I%BDnhZ086q*Qx%M6ZD2pgGX zW{^YX!r9E=k!3g+&R}Lxg0qns%nT~XTsWJVK@HAEW-v2=_CO$uK-kO-S`Y>r$;_aG zCIaCyGw4AWXe2WOZ1fscf|FOr^Qbb+3~s0bP#!ab2b6_MF*A6f z3P5?x3_eg6D#gs;hbjQ&F*5`}S*R2E(~1)w};hBPP(m11VdKox-U zm>II5EL4h_0XCz8E}n-f0Oc_=6hK+16f;8+ssNP7%uoVlp;F8YWvBvB9y3D)l!Zz$ zGgP4pKzYmzHBc5R#mrELDgfm%Gr(qxpaM{enE|v#9m+wXm>D2@vXF$pOlAhqmUJ)^ zg07@}4fVP-JIY<;U z18gP?Nsxhoftdlcr5sfZ#A9Zd0irN4GXrP~IfgI;GXrSrI5u(6mT_$2u+@&Ja?A{% zE#jzRARaRVXlpo#g^HOOKwH95#Xvk}2G}egh=;(;44^IG2tJI(%mCW@4dWqbW(Lrf zZv-F4VrBqs^@i~fG&2Kei#LJ~V=*&;wsymK2%4Dzw51!thq0I$cEFe@G&2Ke3pa`o zn8VBfo52Kg;RG`SXv;R73uiDhfcGB4`7j1E189pjjEA6^89-aJ5qubnnE|vV8^%M> z%nTFQR{z!u0`~})FjVcD>F*AU+ zN`qLan3(~zMH*EM#A9ZF%{+s62+Yg?+7gZ6!&uA=;LWHoE}Uj&0BwPWbKwkT2GG`L zI2X=fW&mw@hI8QzW(Lq!XE+zmU}gYqafWl@3}yz<)@C>t&R}K$ZE1#c;S6R5*sMBS z2+Uw+0BvCgGf@a;2GG`J6d^E&nE|wA8O%f>m=ViD(ZrcR-2fCZ5Qmw81&25r4si|~ z;#@eyVJikewjnSx10N3c0yxBlaEOcG5EsKCE`dW_3WvB14skgg;;_{a2)}|@%nV96 z)T`hSSHmH$fkRvihqw+7aXlR31~|lxaEQZJdVqY1z|0J0IMiF<5Vyi1Zi7SI4u`k{ z4sj_yQc_i*Sf9!6Cj3hxiH{;;V3o!&byW z{0SqO8P?%YzX6B%CLH2haENciA-)5L_%0mcdvJ*F!yyh^?FaKIgl1+qghTxi9OB1t zh@ZeAehP>9864v0aEM>PA$|#mIBX>&#Gf#dnc*4^^*3;c-@+k&2Z#7Q9O4gfh(E$1 z{sf2kGaTZuRhlrLLTF}&S2)za!6E(*hxi8^;-7Gcf59RC4Tty-9OA!lh{IN(Li`CM znHm1!P|pBe!3k3dp_v(&aEPl0Jcc+sI7o#s#6dG1LP+x|++cMK44^4RAqGS^z~*#7GY&#X^DHp+pm`%9*rGF} z^_HNS0wKgPQ1JD*nhXpKLJT0=Ar`{S0gdnr!Dp%wYgdiI>Or$isOmu@^Fm1TEHHCG z2Q3L9&9gw4MuA7vg^=c1VCvn$<|F1=VCsFr;vio`?1hO3gT+BJXQ<+lU~$Ae3ru}H zSRAy1A60!SSR66W0&`C`SR5335cM$eLa;buo&{!pIanMq&jM3l3l>Mrv%thbhkXhm z&9lJ7L5Fk-A9ofDRE9LYilRiC+i1A2H7Y69*mICxkT50uu)vwkL!%&jJ$%9gru4G|vJP z2OVxFgf!0r69?_b6GED2fr*0-lM_OkXMu@>j+7TdnrDHDvonJ7BVwKfCe8~MN6fRp z#D&4)h9ks$g-%JPS-*8!V2PXMu?ug2fT@EHH6%usC9# z1tx9_7Dvppz{H)w;)r<`n7Aic95K%V6ZZ#;Bj#CP;-O%1#5@a3JQ^&Hm}h~BCxXQh z^DHp&bg(#Lo&_eJ3l>Mrv%tiQ!QzN{7MOS?SR66W0u!$XizDV)VB)P{al||eOuQQ` zj+keGiBANJBj#CP;?u$6h9k>%roPc@~)X zR1usC9#1txwOERL9Gfr;M)izDV) zVB+_|;)r<`nD|q$IAWd!CjJ^Mj+keGiGKu(Bj#CP;@`pIhJy;wu z&jJ%~1B)Z(SzzM5U~$Ae3ru_pSR66W0u!GN7Dvppz{D4U#S!x?F!7aOal||eOdPcD zO9*M61tz{7tR6AX0u$c{7Dvppz{HP&#S!x?F!3{Bal||eO#Cuf95K%V6Tbx(N6fRp z#2c@~&>30NF4&jJ$!+SzzK#U~$Ae3rxHdERL9Gfr(E5izDV)VB*uk z;)r<`nD{)fIAWd!CcYFbj+keGiLU{RBj#CP;+w(ZhJjrSF!5_(al||eO#Cib95K%V6Mq60N6fRp#9xEO5%VlC@lRlJ z#5@a3{3lo(G0y@M2X%dg7!dO;FmZMkP`*RVv%tjpz~YE`7MQpwSR66W0uz@3izDV) zVB*SPal||eOk4{rj+keGi5r5&5%VlCaSO0GVx9#iZVwhm%(KA6-N53Ac@~(sFIXHg z&jJ$%?fDd9K+Lni#G}FL5%VlC@g%S~Vx9#io(UF5%(KA63&7%tc@~&>IanMq&jJ&# z1B)Z(SzzL=U~$Ae3rxHRERL9Gfr(EBizDV)VB)jD;)r<`nD|1lIAWd!CcXkJj+keG ziLVEXBj#CP;@iODh9km%!qPc@~)XO|Up( zo&_cj+D9wIfS6~2i9ZLcN6fRp#NUC%5%VlC@vmTU#5@a3{0~?hG0y@MXJ!TEFT^|x zOq>fWj+keGi3@_o5%VlCaS5JjrSF!3s|IAWd!Cf*1ZN6fRp#5=&^h9k!C-O3JPS-b3M`J8XMu?)g2fT@EHLp5usC9#1ty*k7Dvppz{JbI;)r<`n0PH% z95K%V69?^~7h*unv%ti=!Rit7EHLp&U~$Ae3ru__SR66W0ux^V7Dvppz{Hn>#S!x? zu)QK%*g$gwu+v1KhqEv+FsuiwN6f!~<^w<@syo2qh)?^6Q zWeC=02-ar^)@TUUX$aP82-a%^)@uaTYXsJ71lDT=)@uaTYXsJ71lDT=)@uaTYYf(F z4AyH5)@uybYYf(F4AyH5)@uybYYf(F4AyG`)@uURYXa750@iB+)@uURYXa750@iB+ z)@uURYYNtD3f5~1)@usZYYNtD3f5~1)@usZYYNtD3f5}|)@ugVYX;V92G(l^)@ugV zYX;V92G(l^)@ugVYYx_H4%TZ9)@u&dYYx_H4%TZ9)@u&dYYx_H4%TY{)@uRQYXR14 z0oH2))@uRQYXR140oH2))@uRQYYEnC3D#=~)@upYYYEnC3D#=~)@upYYYEnC3D#?9 z0M=}10M>120M>430M>7405-tT0BnMx0oVvb1F#u}24F)B4Irk#k{HAkXd;8AGH5b` zrZZ?lgQhfSQiG&5Lr7vXgrqh@NOCiTq&GuIf-{7qI73L1GlZl$Lr9`Cgrqt{NU}48 zq&q`M!ZU=VJVQv*GlZl)LrCH?grq)0Nb)m;q(4JQ0yKoAKto6pG=!uR6|HoHH4&9Lr7vZgrrtONOCoVq*p^of;EJsSVKsX zHH4&DLr9`Egrr(SNU}AAq+3Hs!Zn1XTti6GHH4&HBS_jcf}~v|NZK`mq+KIO+BJft zT_Z@^HG-sFBS_jcf}~v|NZK_r1gBjiNZK`mq+KIO+BJftT_Z@^HG-sFBS_jcf}~v| zNZK`mq+KIO+BJftT_Z@^HG-sFBS_jcf}~v|NZK`mq+KIO+BJftT_Z@^HG-sFBS_jc zf}~v|NZK`mq+KIO+BJftT_Z@^HG-sFBS_jcf}~v|NZK`mq+KIO+BJftT_Z@^HG-sF zBS_jcf}~v|NZK`mq+KIO+BGsYWhhQ9iO)oFAD6wf79Xzu zqII~9nm@G4z0vp@jjzF6FOR0r(eyc*J{gE^mkv~ZfsMDJxBo}QA^CSS97e+dxf~l! z52NW}G(BL}YoqyMG+&J7i_v^BS`G}Yasak74zxZPc^9EFXi@;W-wz}XJAo0jj}IgT zQxA)8Q;;B%df0@!HJUiApW}!o4(fk^gh1xPXv8XI2KbIYkUG%b1lT-(jds);!KEn5SYI}>LrlGVJ88?%!h>|%wHh& z$nJ#gAOnd@BAEl*fd~>8K@tb?LGA>Z58879VuLV<52Hcx0%C)(B#2;O051gLN1Dfh z?Q8<+1FMHFo~Vbahl@k`FbcGw9I+~!0lsVkB#u~>jacge5(n)agXxEb2S^;TS{ria zC`b)RTogorI1CK%lO#bxh*jJS@STYuad8jC zi6d5hGr)J=fyAXj1XKfT#~erqu^OBKexe{qToyz?)x&nEfrJpN#2Mfx_<_Vhd*z_Y z;V18b#1X5<8Q>@8fy5O-1XKfT2Np;Ov8tQ_enK5cTp2__)x&l?frJpN%^4VAJC#7< zpgnp}dK|+XC_Y4fM zmFFOFYY+id4_h$~5<;xTXJCM>^ahE8_FzJlGr(48gTxW5^cfgnE2}}`_8X zB<>0#pc-H+Y(YYZT>uOWu$8eOad!{_RS#Ry3KD{aElBDBNC29QKzmL>Vjv7#K?;&a z>>6NTfUW!liF<i6eF~FfbS(iHCy>11V-;V1V6c1`>j$RgjbelKM!HBuEgH z{*lBHyB-)A0+7T(dwZeE86uFx5xXH67-09KfsBp?5l{^oNa_*0Bp4V9ki_GW)Pwf- zfwY2zV0j9}Z$MHH+EWY?17X;GYasQAT@?%r6Ohy=gCs$U85kI5Ac-S(TQD#zKoU0UZLWtcQ3=9vD)Pwd=Lyczu?bidbLFy5^JQx^0AgRv>NrDtHFfjZ;5{H#h zU@7PV0+7-|5CIlsVBkO!N9+n=U=TnO2kqU4Drb;D5=ZP7VPF95%LAza8C?n@Kpar} z2T46*7YPG{0g`w*l6ngyaadUjGRgr-9JFT~BnHABNaBcHCkza*`|m(TSAz(UVg?2V z(Ed9R6C{M#jl#f?fMiZBND`!ofq@|dNgT0Dg@K^}NgT9S9jcrGcAp-|2w0g9l50Rx z-w2Wf34+RhByq&976t~;K0A;SkkV!l0pfttKazUHZWjgy*!_GUrJz0XP~{9Okklh~ z!7wmvKoV~UX@Y9lfg}#An?OT2pgZAcw)PV2}Byq%U z8U}_3NaDR9!$67|7#Ln4i6eH|FfhRG4+JUg2N6*9KakYJ>QJy0wBrF%3OW-2EXKgV zz=0%=*pf8hk-!>N&QriBvicyk~m@)4+Db%k~rur0;qBZ z(Ed0O8)O8mt_Sg9_Zx!5XMzZjAgKIDG6%8ihk+pgNqjbv`UoU(#BLx4h6E&W&>09& z;~8N0C4!7V>=I&N0PTYVsR4=42N56+0|P?^k~y$82}r5|Nqixa`VJ&<#I7O+2H5?J zAf=$Q7eHo!@C+pNh}}jE3=5FNmx45b6f-a|fcCqAm>?m2@*o= zieg|8KvKUMBnedy+P?;3f`kyer5G3#kkoGlNrDuC%6}wr#4aiZ2H5?TAf?+u1XR5R zl6qKM6eQ(aFyRjG;5|GT<3z7sW z29^Iv;)q>Z3=9QG;`@=*S0IVQ+RPxMVE1c+l!DIm0EvMxXg?Z=28knfbulnZKr-hr zND`z7RQ@B0BX)Z+Ff2e4KZ>Ltc3&q*2(b%{fnfuZdeB)SP~#bPAc@1;_8_?fNa80! zhJge@?H?p@#I7+02H5?dAf=~41XTSEB=v~hWDE=ski@s6u_<$sS z9?5*r{xXnWkPxg70^-At00W6%1QB3C1_lo303b*Ru`7*%K>$e{bao0}fDF-BR(3veDF%X8` zcM38BvFnY2AplAJZIC2LF{u56B#zh($H0()Bz_l3J!roeNGnJPu}hAD0d{{XNE~!l z3`h+KS0I@K>(hb68<4~wf;52yLG2$Tam21V28Ibp;*XKk!|r1R2_bgdF))Dkg@KF& ziG$9l0kJ`N1(G?4U3d%(8<51GgEWB@gUWv-aai9IBn7+Q6{PefhyV$K(m#@V#I8LC zh6_mIptEtH${9fW!a!`05s2M<3=E)sVKDKxAW0AhRQ@BGgV^QA!0-V{{5_KTA4uY` zJ~G%S=s+<@Dd{xgVxYLGxukJv59z@UI6{uN2R29h{p z7a;?K0g^cAEFh@y46yrbK}Nv(@*p_}B=tW*k|04)`v*xJvFnh5AplAIHCy>Mur!O)vTtE`%Msg4AK46f&h+T~g3=fdh^CGE#fh3N!+mYb| zk~rwBCy-k}_y>|WYzzk^4x7&b-Jrz@vK%DHzyP~;6MW($=NMYij`|UvLVPlmraVBVZ!p00?;;`}* zHg*RSUk_Ce8*>1K8+aZKWH66AyugGpr8+6K{ix zCqd1FiO+$Ce-)azJ~TW*=YWBn22&3!yC8&LD#po#ZG-Twz&9IBoNY7fjD=rksSGMacUG<u4V&*v<;?JStFn7Y{#z5ypA)61I zWBY}q9#k(RLDLm@AvSbe0(4d?NG}KrL&pI?=7ZEnL)A+{#X;^woUX>epaT_$sSkmw zH-d_T)c*$=48^WcahQ5vsCsXxI7mI>R5u2OIH)*Gy&F`03RE1V{x8&Q5Cu9<2}Hxx z+e6jYBB@85CWja=f~j8v%`elC)Pv5L1(^xLE1}{r^{b%e66hQxkUYpeh*Rts7!IMS zUkp``JpS_&q!Eg5qp6<*RsRqw4l*A$R}0ee1u716&s3=TUr=$7`tKlxP|OSM|H9Pw zLDdUG#X;&}bty;-=o}#s4O0)hIZ_8nJ?Ly+kQxxShl<10*F(*Bg^GjBN1PVOzyKRp zfvJb}13~BifXoA_{|sV4aUs+knEFDf`Q=b?kb1-^g$xW`P;r=g*f=}#I0>xo23fHf zO?@FW|Ez?HgUm;qj>y2U2PzITKMSh<5L6tb9(1NL$ZQY>ou31uVd`P!=4~YPh*KFE z7~Vm}Vd`U`=6`{TgUo*mG7yT{q2U2j9|~0uI`;;o1f(8u8YE);0jAy$s$LCh4oLlL zkVYuBgo?w|yF=C6L&ZVr5vNcxFa$xxVd`P?F%eL4kb2Nr&`{$UvZ3NI^_EccVet%7 z4_n&+(gQj-21LWugVqv(_+3zQKR2-%r)^>sAOOSfRshbQ8+tAd*`Xqax z;vn^~HX+E0^H6b^`LMp$Rj4>fJ>s-a1_sdiEg*d`^`LWFLHu_}>Op5{gTz3X5n7(X z)WiDB>`-x#`N+4qNkPS7>S1F6$o=kzAcLXU7)?EFjKdNt4l*Bcx+w#L4^$jxK5XnJ z2r3Rze;;Z#h)RWu!_@0Q+acLdagch%sj3VNbx?7bdeHgfAah!v;vn^)v&TVVAUqu^ z4pR?n-_M1LgVZBVb4B!LVd_tU3}Ikk*oLJ3HdG8morH?R)Wc5HJr5NJnU6R{mVx0B zR2-(h5X1nD&p^dN>S28ikomu%;vi+9`gbcx5L8b?>m`tS#ObvR3?fi*n0nZW#!^sm zka}2{fsE3Hio?`{&Z7s38$-oG>Jg{rGBCJ7#bN4U>!p04;vn@`K?Xo^JX9Q}ekN2r z6)Fx=k2tNDfuRB_4pScoVlXf;)Ir5T>Mujh08ta6;vi+9@CgSo7#J9)L&ZVr5vK$* zFsy=#gOq{P2Y?t13=A8f;vn^)v+hA=gYaRfI7k^ty(fslz`$@4Dh^T)OH&~Acc9`R zWgzuVAO-^i!y~9TNd0+`LMZ+U6$dE;ska6(7#J9SL&ZVr5vL+EFz`X!`ygc?^(G(& z0|SEyR2-!KEYxfer4AJbDFdn31u+;H7<8fHAoYmTm>C!xpyD89AoXe>1_J|w8&n*m z9&|?l$ZQafgo=Zdfz-=`7z_*y@lbJ)dc-Nv3=Bn3agZ{Qdf0e(1ymfQ9+u}o=66HI zVe0vz<^M#eI7mHg?How`5~w&#y)d-gTm=;esXq=<2*rD$;xP5Uq2?7+AoZZT6`;m5yoZXz)W3zQ{|XfcsfUe4fb?*H6e5jdJcFv|gNlRH z9|kFeVnwJphysP@eW-eMkN~KhU|>MGP1Oo24x&KnVe3d7Kmt(p2cc$zs9>l#hytm< z2sJ+vBmh;9I9;59AqOfBqCo0lb9hA{0jPS=ofIImLAVtv4x&KnVRMt+AOWa)#Hr>C z4D+DkAPS@&Hs`toBmh;v7i2ILZ-;a_Z0#qDCfz-q1$ghC} zpz3#n6hiS!s5poMsfW$|zXu6G)gw-EXJB9gEht8cU)cBv2UHvszo5H3pvE&uL&ZVH zfy{@k)lh_rgVe+NpddXaP;r=g*cucos5nUdc923S_JxYW)Wg=+1VhC^>Jg{bGccq< z#bN3jq2}a3#X;&}breXd9x4t~54+K!6)Fx=59=#~)X#v5!_*gp1Q{3@=0U|l>Ops) zK!q7LLd9X~VK-ZBhl+#LBj1L63Mvj$4>{$Bf#CvF9Hf3D%y0$wmK*eF|VdwraK?guU>enNgFA5chsfXPtFAWt3sfX3!AZ>b3ahQ5fkRSsC zg9%g|q#ks43{;rG9V!k}4;%mWg^GjJuYoCMU|>jqio?{ifEWx63~5ktkowg~>MNn* zAZ4KR`4?KQ)kDQW>JhgvFfdGlio?`@gQ}ka6$hzbiDdq2s5neLtUTQa6$hzD-2TA8 za0Dt2Q~v^L{wb(9NIk5L1G45WR2-)MAyoZis5nSHY)lBG{u@*rrXH%C;SW?Cq<$$# zAr$lTLKrah7oi$Nq2eI*u(2hON)4zuO#LaSdOfH(Nd01vLMV2Gio?{y>MeJuI7mI> zmJJ4mD5yA0{U>NUBLON7QV+VT2x>e-F;pC;{xwv6B~%=w9@Yi~>FI%r!_+^4s-FZE z2dSSAQV7LMq2e(0ccJQ6L&ZVr5x0skFzkbh!_;4csy_l12dSS6H5)`-hl<10pNFcy z3l#^cN8Dz@!0-Vo4pV;us{R{P9Hbs}#}mkG5axs)912r^5UQRZDh^VQxJ8A5K?y1j zQ@;zUUIQu)QV(k*gUq*vio?`zhN^djii6a{<~Ts=L!ja?^{=7*hbX8xNImTAPmuat zs5ngh6R7%Ps5nSH;?@`jhBl};O#NM``W~n_NImFoERfkCJRd3!Q-2MrekoKOq#kiw z4Fkgts5neLtRJ-xDh^UV8DuaNUxbRo)WhZxuS3N_>Jhi(FfhD=io?|3hPDqsK*d4o zVRK0!E13B~Bw~K;Ak_VwP;roY#O*u`3^Gu0nEAV)>Xo44AoZX-#UQ3KFqlHcVd^(S z)muZwLFy5=0x>Z7LB(O}Vg30Ks5nS{FU)WT28MK~I841T)cjniI7mI>HX;Uw2BnNV?w_B zahUq=Q1us~;vn^~y+0uJPoUy3^|18~ub|=}_3a>qQ2ZAv4paXhn!lK#6DT0{h+Cf+ z7{s9BF!e8??va6tgVeV|%?45WP;r?0M^N>qP;roY*c=5&y$4hrrXDtq?*|nJsR!L* z2T}{diBNHvdeFTQAn|mlI7mI>mMaE^DyTS2J?Q=kkopFwI7mILO$QR63>Al|2i;=< z5}yeb2dPKguEoHx1}Y9y54sNnq<#}r9Hbt$w+z-X{~an0QxBVW`3n^XsfW!4fz%6tE`UU8pTpLjh(X0c>Z?Ht zp;!|t4l`d7n*Q~n;vn^~HZMqv6I2|g9&|qnNZbP|4pLtU5`f}ps5nf0548W42o(pZ zhs~jbw3I-_Vd`6<>Z_pQAoZX-6G3W0xECr8Q(p&FKN%_xQV*Mh0;yjH6^E%WhpJx# z6$hy=1u2B${ZMh3df0xCqfl{>dchnPgp*R#O4pR@?D-{hD2dPKg%E!Qv2Nj2@hwT9?fr^9F=R(Z}QSDH1 zn0nayfL^FLNIk621X8~MDh^W*+q1U}Dh^T)Tgw4bzY{7BQxDsVxF0GGQjfTWkb&V6 zR2-%rw#V`YR2-x}6J#(HzlMs#)Wi0UeuRpH)Wi0cg0!#*gGfYu4cimT1r-OWPlqT0 zld@28nE9~%ipo%Nkb2mf7LW!rs5nghLTG(q0~H6UhxI8z>iwbOF!kCXK?VkfP^dUa zJ>s@U28Il%I841NRDB*)9Hc%ODh8q&q2e(0)1dBYhl+#LBW{^wV3-9JhpC?cRlfi# z4pN^8G8l?CL&ah0yP)cKLd8Mq5w}}1Fr0yk!_>Dx)n9^&gVclWgoPT<@DwTzQx6;G zeGL@{sfYEsL3;i{#bN4UR5Dh^W*n^*9Mii6Z6ZV_c*NP>#P)WhZ{GN9rh^{};7ARDTo z;xP5Fy?>2Ragci0UTl#1DNu2k`cA0(XF

S1FNAoXjZ;xP4MAVCHOhRslMkoqvF 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%0AgM>5 zci@0F{y^%H=N)8_#F6J6VCVCI)FaP3xFD%Vo_B~q5=WkQ$UzcEo_Bzq!viuOdEQ|P zl6vHMhZRWT$ny?+ki?Pa9bo6}fXqjpcX)!N9(ms32a-7QyaNxkaSSpCdENnbt`0~X zdEUVUNj>tsg9nm0tPKx}-xwru?#+kklj3JIp{5N1k_p%`1V-L7sPj zos$C+N1k`Mf@BWzyu%A5apZZ2KS<)p^A51{a6slG&pW6tqNnJntX^?OcJxk>?#Wki?Pa9c+-qk>?#?=hcABL7sO=K~j%A?*N;h z0;xxycj!Shz3caX%9=N(|@&w$KFo_An@b}~WY z$ny>oNaD!z4mwEU$ny@cb7ny1AkRC5AgM>5cgR2zhxMsJ@mqr=jy&%GJ5L5=KJvW7 z5+wD=^A0ts0|&Gd4pNUi?;wLDjy&%GJ0Aw5 z9(mpYHqQkTN1k_xKr#n;-XRA`9C_XWb`A{49OQY2DM;#(=N(oci6hTD>_HMoo_Bzq z_X08>dEVg(l6vHMhaX7du(1(P{PI8tDM02R&pW`*bpeSZ&pVhPsYjl7@IVqro_B~r z5=WkQfSun0G9P)~p#@1j^1Q$qfByr?;tJso_CNy5{Hddg5p;PNgR3J!2wAedEOxeNgR3JAp=Pq zdETK0NgR3JVFHpk^1Q5cesEgjy&)11W6ou-r)z5IP$y$4|K2?WH0i(g94H`^1Ooyk~s3bLkN;M z^1MR@k~s3bLl2TT^1K6sUU6k^Nn#R%UU5kggwBAmN>VFI81zySOA;CMl8TEN^omk* z67@i$dYQ#V255XkG`c&3A#&7&|PYR?otzU zmztov)CAq7Cg?6TL3gPsx=T&bU22N%Qd4x7nxebZ6y2q!=q@!ycd045OHI*TYKHDo zGjx}lp}W)!-KA#eE;U1UsTsOU&Cp$HhVD``beEc=yVM-rrRL}^HAi=;Il4>D(Oqhe z?oxAfmztxy)EwQV7U(XuKzFGHx=St4U21{uQVVpKTA;hs0^Ow+=q|NDcc~@1OD)k| zYKiVrOLUi7qPx@*-KCc3F118=sU^BgEzwxQT7G|A=S!rR`TA0-qM!jW-QE?e! z)Le!bRhJ<~-DQYTc^P8VUWORemmx;|Wr$IM8Di96h8R_tAx0f$h*60dV$@=W7}b~| zMm=VTQIQ#9)MSPjRhc11U1o?;nHgf#W`-EmnIT4fW{6Rt8Di9Eh8R_vAx52Mh*7B- zV$^De7}c5~M!jZ;QL!0f)NFAZiX1un;}O1W{6S28Di9Mh8R_x zAx0f%h*8NIV$^bm7}cC1Mm=YUQPCM<)O3azRh=P5U1x|<*%@Ngc7_<$ogqejXNXbZ z8Di9Uh8R_zAx52Nh*9YoV$^zu7}cI3M!jc~*Ri7b7-DikV`59u=eufy; zpCLy5XNXY&8e-Idh8R_#Ax0f&h*1d|V$_0$7}cO5Mm=bRQ4bnn)PqJC^`H?(J!phc z4;o?AgGLzjpbbdHE%&dhULqy2T}l$=OhTdS0nsK~a7|YEelg)K#e&@o7bgxyY+bKqH9c zVbI!4(2`H+@*cP$$ZN;og3$9lkolmslpy`k<$7=_V)cX8K7y8dkgFfGmJnn=F84#H zt>Ny1PGi9Npf!-7C3EQRod8|T0b2vB%ESP^vJvD~kY<=TXe}K!`(bOp2-y!>1BlK3 z6J*{^`beo)>)w;!~Y0-OD?xqm|TgVumxv)=-X z{h%o!bo)VT39#7@oBM_?hXN&8Fb4Sn%zzT0H4xbB55QtSXetBUe$ZSxHv3_7zl8h` zS_6R1{tPVkgVyh(+Yg#c#%4ck?vs%JL37~P>~FwgKPWAt+Yg#E#b!Tj?vIfDpt)Xb z_Rqj#KWKjey8WQJL2UNJ=DrBo51P}&X8#5(_Jj5-pxe*F$N;tqR5nAC6qthT8zE#r zXzmW1{U@;458D5LZoeoF`(gK$6S5!VPHgr+z+yjWKLxt|p!2=3g+J_GbVBK0kr7g_ zqSwDau-FgUpMh?_IS&8B?q4TlzYz}m1waKe0|Nsn&4VHoRQ`hYd!XCzfx~{-J@16V z-x-Jf8d&TH?H@t6A9QaCw(y7TD+K9QJo$ zu^+Vm2HpO-IP6~lwVzP<&%j~-0xb4}_Vb|IzYd4}uzhEQ><8UjgDw5-z+yjWe-OI; z`*GNRfJp!E!r}i5SnLPwH$u1n0uK8@;-Caa$p5Et*#82H{h<9z==MLvVgCan{eK6C z{S44W=*Z^Hz- zKd7&UZa-+BBR2a5Knrb%D1Z2&{Yv!u&jXA7p#5Ly_JisrZ1yWa?I%?JfYf2je+gLZ z2e}d5elsTQ?H>cE{e;5b5QqOOu-FgUpN4L~I}ZCDh_v4chy4?<*bmz8hHifZ4*OyI zRtfnZbUzff@Lz$&e$f6obo(=L*q=b8|3Uj`vDtqBi~XSecbo+&I*v|kRP$pzQA2as;=LRhHgT^Y+?N`BJzW|Z; z%j2;B1Qz>2`(M%RH^pH;?3`sn{x`s3{{t-cgT|E6?RUdrKge8S(w`#^`+s1uAGALg z-G0!0ci755*trOV{2zqFegWvFO62kvwBHxqe$aUe*z6A=GX9fs*sp=be$f75bo(oD zgnt5&_LtzW-vNvLp#8|`_IKg1zko>lTXEPQfyI8%{$_OhXXCKHfk^wO;jq5|i~XRv z0(AS=;IJQdZU&+B2fFVNTlv?4#eUHKYjpef;;?@Kk^Tpr*MZIc1z79{&FP@qe-4NJ z8;G?3B#!XkfyI8%{%~~r@8hul0Fn0J!eRdfEcS!;o1@$R0f+q;h_wGT4*OqVu^+U5 z9o>G=y^`39= zIP3>c))LYGmcwDc0T%l~Lo(?0gU;*67XAXDOhttK`Z(<0;<+aHF*e%QG?gwh}AUQv)!L1PP`_5uu7fGk5Be+QjUfNp;}4*Nm=0+~g~ ze$f31*zBKx#eUFv2k7=!;IKacWGE5wUyLLCS75OpbbbQ5{hc`MPax9%7992;z+yk> zJO*_8XW_8FfJpnN;;{b)7W+ZxJD}SSy1x}${)3&%L@553;jsS$7W+YS<>>Z<&TYbG zKkS|jLiTURVLu0GVF6nD2c18GZvR;v;lF^$@IQgWeg!P{gVr>l+kX#-{Tqn1|0WLm zEwI=RIv)ew{`WZSKR~4YuW;BOfW>~$c^l~VGq7T>|6u2K5sH7%{k+pmPf{tqBSiLhUm6?^?Z1B?Bj^F`3@ zH^yN~$nm%;<-{G)-1CjQF?#aRy|2weQ4>}(R-G0!0 z0Fn0p!r}i5SnLO#H-v6K=zK_Q_Fo{ zIP5nd(*8mm;a`Epe$e?;==Qhcu-}15`@OhF|66g`e*=sCp!2=Z?LUpf{stoL zKZe8p4_NF6t(8W%|1J*uClF~r=)7HQ`HurM*o4;p1f4&IZvT56_AemP{#Q8suYkpV z(3*C1`x)7>*FUgxhY6KGe{k4ufyI8%`Dp0&3*)f=0FnOZW5-_q24Jxtblw`e{i-{5Ev^&2iZOfJpm|aM<5~#eUFvaOn1X;;{b%k@mabuzv;?`$6Z+ zq1zvg!+zMg)P&Ms7!Lb4V6h)`ULCsqxj5_>fSw0U$o>o*_MgCFKj{2Bbo=XZ*bhoq z#FYP4IP8Cb#eUG95_J0~;;`RBXs-#n{flwf??9yep!;31*)IS+ z#2C5#3p(!)-G0zLu-MxFuye}^#s3Bz;je+ke$e@W==LAS;r|38{eK9D{SH{{2c1WV zZvRaj_QUSkCFK7rIP8zWVn677Lv;IJVSfP@`$6X=qTBx$hy4?XwEqVV z`#Z4M58A7QZa+T<_WBogu05gf=i<6W5V#*&G9QN$YSKeqDc1s3~3=U1ZJACANR2SnN* zgv0*~pvgwG_9y5(OmzD*ao7*L_kd9POTl5k1Qz>2=WC+dUyZ|l2B<$_rPL5==@Kpv2gq6~$Mn|Zz zaQipnu-^cxkdXaraM)jg#eUHFq)=nw_8-P!KPX>;${*04X%G#===;C+;jn)K7W+Ya zJ<;vIio^Z@s6s;aU%+Ai3M}@6&Q*mP3-|wX9QG$b6%w-l5f1wgV6mTrkpY&i;P(H- zVSfRU_Ji*Ez*hd|uEcVOdupf4B3Zd|qz+pcJ z^imAu_9q_}`}J|yzko>pYvHh80gL^hy~0pq;qmW?!~P9Wg@pWXgTsCcEcOdw@qaK5 z`wtLlzaI|!1F+aHg2nz+9QK3qHK@!Xuzv;?`=zkhKO2Yr4A6~lg#14Zhy5F{*e`>{{?3cr0|9%|yD-db_E*$=UfW>~$nF7#gh3Ef^IP8bryF@7b&)~5C2NwI4u=xKm z4*MO5^#45^_6vX(yP>szL3e(l`~NEr`vZuy{{s&DHL%zZI%@&les(VG^&hBQA*TFc z;=*44IbgA0155Zz;;_GfNdJrAus;He{aRS;*T!K#>|QQH=}!%Z{RLR;*TG`HEe`u9 z5b1vl9QJo$v0o31{r))YUqGb&UO4PufW>~$nI7orFA<0R8;GZ-OQKTXEPAySI%{`fI>p{|hYkn_;nkIu83E5b6I(IP7PD zUb2SV{si4^j2`|gao7(k*N7>9mf)~o0*n1tSp2^mhy4to!@?LC7zl;`HXQaFV6oo@ zi~VPD*e^h&{U>nP?}5dBJ1q9!$6-J0UOz(qzlFp81T6N0&eTDV|BpEAHz3mgZ*bUO zfyI6&EdFQa#$Nw95NZEE9QIGZV!sO(`$cisA3&u2p!)@}m47R+*zbnLesvu7ClG1B z5;ykx{{R;IL1!JI$G;^G`(gJ!5=wt2IPAZH#eOd={`baVKd4+Kru=ckVgCm#_Ji(l zNB4g$4*Mq%8U7JC?B@V&c0g-?`eE^ZJ`VdA5NUrF4*M0b*bh3>3f=#WIPBj*r2REG z?6<&Te-IY`PsU+C>|Rhp>8}rm{Q+3)2c4CL?*FAY?7u*y{}r*MA~nF!+s4c_NQU7-yMhj zuzQ6G#lI5{`yH^@pMk~xNF4ST5b6IA9QH?Gu^)8SAbR@C#$kU0k@lzIu)hF{{W)0t zUyH;32}Iftx~~{p`PYHP{yZ%9_v5f1RId+@&9HV_8%ZJ{MX^I{{j~KOR(5~6o>s6h_wFz4*OqVu^)6+C3^T@$6@~i zBJIC~!+r+PW>>WKX9X7jzrOjY#sXNbdoP`yS> z`2)Jw99#KUfyMqNEdF=KVZQ^B{SxS`#Z4MUx~y10wV1%!D0UmEcSO{vA-LK{S8Fg--g5f4_NF6o%M^J z{^#Pbe*%&A&%j|nM=vP%pq@Y7hsFQvaoE3rNc&geuwMa-{h%|A(fxlAhy5Ffw0{o{ z`z^58KM9NfFXONuRIh?UkWl_Rhr|8=EcQ>qV*gVd_Fo{<{||83pMk~xX;|$4j>G;3 zMB4uehy4v$><66{jUNA;eAw&14@BC}!iT;7n}NmtSy=opjl+HhUQp~49{(4^VgCj! z_Rqm$zb+2@1&Fj?1Bd-5u-HEji~aUE>{lStek&aIKfq!?=uC0+_z%QkzX6f<`{1zu z2NwGmVex-54*MO5v_B4q{Q{uFR?ynNOR(5qio`A5NZE19QGGrv40H~`}g9o ze*%&A@4#Vy2NwH5XYHfszw7XSO= zuwMXbF_eM?CIbTl`ucMZ9QJ!)v40;H`{QxguK=|eO5wCW3Wxm(SnLPgsevB;g*fat zfLaWtaN3`P!~O~^_8-FH|7INaJ3uXlQaJ6e!(smfEcPG4V*gYe_6I;MhEh1~pMb;u z6D_MgUK ze*@HFCs;pfW`hZSnR)x!~O|Si=hy8V0t*z4Z_EcRc)V!tX5`!7H(hEia=K?J(}3OMY~z+(S3EcTn@ zu>S$nVkiZ&8jR8HH^O0m0~Y&lV6op5hy5R*7DFkp-5>(peit0}&%k2;EiCp&<8T`h3@}}IP5nd(*7PC_W!_Q|068^UyQ?k2O{mChr@mW(8a1~4*L^`wEqwe`yH^@{{oBsH*wfsK&1UwaM&M##r{`V?0=2J{stoL ze}=>U0xb5w!D9bk9QK3Sb)XV}Q2Fx%hy5K`?0<*Fettph_3r{A{m&(cz5ZK(#eUG8 zZs_@65r_R7h_qh@hy6RS*blmE4&8oZ9QGd|(tbT0_Fuqa{}(Lb?~23z3q;!QfW!V5 zSnU6X#r|*{_CFxf{vaIoGk^|TMl1h*V6i_Fhy5Rjv_A!h{SsL0|Aoc=Y8>{%I@*Nt zUl|Vj4Y1h%2aEl^IP4dIHgpKt-+{w^4=nbB?kYr2|MPL!4{BEuQ~u1tVSfS^`$2aq zqT9a_hy4ab`hN`$`zx^6&%}he|NJlx`yHV6`-1`j2}6b9BKvUIKLKh#v>Czxx@VCE zi~SdI*gpYkkv!Zc2m>k%;V>{TJb>y4-E9gNWME)e4^;@d^BP$kbk-1v52M+Iu$TWA zp!&l>ijgo>7%svjguVP%m<&+@I`aj@0{Nc=ytX zwvJZ*aAC3E5{La6Q2VFDZH6$=&lxtsVZR2{e$bsKAe|up^I);x7ivHBx)YF62nJnN z4`RVG42aFZzyP{K8_EPz9ysh@0JR^s(H3Ms9~S##g&=tX!+u!8K?`tn`_l;MM{_>> z{0Fe(85kIfq5g+?7beaCwI6y79$Xm4htaK2{pbdBK=oHb&yj^0fbO0KT;T^gteJs< zfdh1DECT~L{|aLXzlk{P?|^1p(3)SE-5?s>{v|l{e}D!w=*%9FJ{U&VKOcwtSAY)t zVqjnZ-7gB#3yOa+EbiZl!~PeFAYBX$nGgz2qT9a(hy4sMAzCIt7eIsTm%w8GSseC9 zfG%riU|;~ z28IAhh`T}lm%(EHJE;Az^KKxj85kCTE^B9CV3-M7+y)Z_rAH_m;yVV0pE&e8XhRf& z&RmADASBHFF#Vjukn$gNH#bBDg!}>3FAU+rNtiwuEdpWqq_^{ewaEdsQu{r9iaMGh`>}rXmtIi!r1Gt4r7Q*E0EHUGM4xQ zsY16KWYY_1MX>-{F{?2#Fkn0X1hmZ-Es24&GjtS#DFznkIb0APB(7j=5DluPu<2(2 TZ8l?IU~oZ;K#+Su`d}CUGU%W8 diff --git a/obj/src/main.c.d b/obj/src/main.c.d index 927ac6e..d899aa2 100644 --- a/obj/src/main.c.d +++ b/obj/src/main.c.d @@ -1,9 +1,9 @@ obj/src/main.c.o: src/main.c src/../include/limine.h src/acpi.h \ - src/common.h src/apic.h src/alloc.h src/map.h src/print.h + src/common.h src/alloc.h src/apic.h src/map.h src/print.h src/../include/limine.h: src/acpi.h: src/common.h: -src/apic.h: src/alloc.h: +src/apic.h: src/map.h: src/print.h: diff --git a/obj/src/main.c.o b/obj/src/main.c.o index c6a62a697deb248b408e1be19bbb889f245c8cf1..bc71e48916e5d1ca5eddb15409511494893d7be9 100644 GIT binary patch literal 26480 zcmb<-^>JfjWMqH=Mg}_u1P><4!0;g!!FB*M9T?OY7#Tu6I-h!U{_tqM#NX1$z`)RX zvH2mhNAoY1Viv>yuU$NvAN?`>pO&V_FW&;z<-)&>#m=RJ#lnSun~NQzONWaEBbdnq zVlsi5%pfMSNAqzO56fSrXFXa^mS}qPidc9s{sWnnmWIVVE06!jJuH8gzK=CLY53pp zlHoU3!vlvIkla^N0CF3SV06E zh+y|=caOf}*_xOLv!}4P37r0XngS`$WVBux?uS^;o zXgrL_ffi)=|78yY0|Wo$gC4Dy9Qdakci=eB-};<^fx)A<>c3~_1<&RO%=|4gKx#nt zdGvbycj4dWBlh2=!$;u1N9QTe|0hacdNluMF0OyM9;6Q(1r&yVCeh*l+Rmf%BFOq8 zQ;*J56Zp5)@cnn_sNwhzV*LZL{()G3L9D+X&4>Pgcz-~=KOUVIOV7gt&DHRLtKmtc zphJXT>!lJ2!vo;(=HJG{X2HW=%H#3>fQRLw()Wf3Ui0!#KES{2Krf5y|NsC0!wm!* z1qy%U^z-HQU$D6_0wnJk?il76>KGF2(aj1H_vrQz@Mt~B-@?bpz~Ipxz~R8Z?Yl?j zH)aNYhR*BF&zT|7^2eu_XDUd&<1QWs1_oEd+lIGaD}quhQhN3Hf7qAtlrQ6H56jd1 zEqg)n(|W1orBAm3IMWEY8vcJ>grwfTS4GU#@P8UC{#-l%IvU<}<=^(!g@64!_s*O> zUtD|h8PUXkxc25Vp^5!*?agOK5!2b@*?gSE*YbGjN{`n6{4ELp|Nr-8yyw~Z2a#XV z?bF%k`Tw}*|1+h}UK;-Y|3BI>#xd40&M`jL@BmWAb2U8aYIw=j@b+O)cy3U5mI8DC zlav*VCBL2|bRKMY`0n4q4GGUuI!`=H*s$(d3fKs6B!L1Eib49p@eva2(QFGAEa5{6 zpD(Zf!o`ze@zq?x!B7$k<8?a-cywEMbb@tzbh`_9v>xDZQ3c1PKS$@O=10sPo##B7 zpZ)RaW$6W3;kXkLfgm5e)(6EPy!`s|`Y#IK6BM5ZeHjmVS{~+axd4vOlO-=by5&8Z zf3g${xEg+YSq;vtkn+#3*M{5G@EcNmesMLt_{9U<{r z71>;Vc?M8=Lb7SXm)C#0BLqB{WkJsK=)8|%|H?kr78(?;Ob{<2PaO}1NI}%w8 zna#iLHq?FJ4l{ZjKL8FUh?hP1U4CHbMc9ws6lBr;0!+}z@3sINw4VVc;MsX>Kd7Ao z7WV8sj;sxvlO4P5!AgJf9LH~#v@(k8MPqy`zIs}I_7sq6H| zJ09LDGiFWon~{vH7Q{wZ?_6DHnO*(-sLlDaYg{Xm)j?{o;dK|E&)xiG$G7u4|2Sky z?ffP7__FAQyqJocJA*2?Cdo-K^KO(5esExIl24i8{DPvXZi$&WsVNF2`3mW&B?=jt z=^3d-3K@wxX$mQsMXAXp3b}~|1(|v2TzU)$rD>UYDGEi!DFqg`i-U00jpH zg9?W5%#sX+;>`5C#FEmYR4WArg)#=NpkS8}g~Sq&JQs)=j3m$H7~tuw;FF)6n4{p7 zSPaqv7IDo>Ov*`3;bQQGxIh6cT9lfeSzMA@RIHE&ak-TS7lRL2%G1S4fq{zwtS>V! zT_HQQGATc?D20n5peVJtSRoN4qTuHruBWHR#Sjt@WCe0hK(M}%LUMjyT4p+!&lOOV zpOllDYo*|nS)yQ|kXfu?prDbNSCU#(R9aA?kdj#pc9$j>1DC%yk}5-FRjCliYr^c# zPOU6f&?v~y$pN{nB(=Ci6YPrMGBAWQGB9K?GB7kSGB8|XWMKHh z$iN`M#K7Rr#K4fr#K2I=#K5qPiGkrG69WSyGXsMlGXsMnGXsMrGXsMmGXp~qGXq01 zGXq08GXuj0W(I~`%nS_YnHd-!GBYszWM*J6W?^8kWnp0OV_{&3U}0b=WMN>aW?^7x zWnp0GXJKGiz{0@5D96Ge%NWWcE6*6fBCpCA%Az`tkud-)p3fM zj1}jz#3eI^GB7HzFi0|nvPeoZ2CzsgGKR7!wt?NDz{1eV$QZ)X%Gd^Ti2@6QJYyh> zJXiqa5(O3(9D3OmK`u}}DFZ7H zoX_%@@eLzmAj=y@uyT<1lvr2@TFL^p6k-(vqY?{`I>_Ti6(F*rlaVo$rIT?ABQyl2 zFwO@tL9sBOaUF;WiidTKn;9W~w2Eg8WQk8_3}Q(yVhm(?%=jMUqW6ry7#V|DelfN% zF&EX(XK7)Y#Kc@wH=kt^(|ji8qT2ZkjLIww=8T~%<~A&g8ABm_YsL^3YY-olhLl+t zEExk?EJ1vb&y-nM%t2Nvv#?l$l8iD73pdEc+~SM@EaEcE1&s4qWE2?#SX4DYYz9U( z76v26P!^*Lpr8cVpvJ-*2+|Q)#2Cy{x}J$K7^J9lIwMGMI^%Ih)_QQVJI;6;!~}Wy zHsdD{6XfMjjNcg<<5}96)-y52gEUSD3B)llYO+Yla~3cN{AZK`C0cm{#vlep1D1eh zMkd4gERz|Vn3)Xc!$b@~BAXZ)qgl2xHZe0sgT%KoUI#njI%6*rYaQ4Ly-Z6$Opp_n zFzo{|K~C7mbeM@Tj^z?l6EkBRNauCN!(d++u=KKiXJrg#`OMMG3G$W!%XijWY!KEi zw*72K?%U6Ho(y8MVqjobVPICZAjFyWk|6Uz4i!=Z8!5~S zRRq!@BF+eNfGEfV3=Cp=jDpfaYz`7tk`ULcOL_|1OENHsvobI#L4-j5lQ2QyN^*m> zF)&DRGlnWNFi7h$z>F~zW?+y(mzYj+zbqAtPC>zAXC*@8JHwM z3=KV~arO}7H4!F4MYOmX85pz?PKVeI3Je`t22|s9LH30z!)(*@V5k?am1bbj_h5uD z3_KZ_B7z`2C*hqrRGGYbCi!sbO>XHy~6PN&mYl_h4DGU)ZGY9K5R|8eG8+bq! zEhDIl!NABM3u?0Wf2;0GA+`u|WkHKP+zQ( zhx%fz0t1t}FcSjh5{G2B@+V!^Gpo}ZaXFh22M=@ z=84dVnZ&@Q0ru}?4hAOeM38AJObeM=)0h|-_;d}Jw=wcV;(R+J13x6vcQ7jOb9aLb z+{viHz&!z^Qb&M!BO_FP6C(pZBq}#EaxgIIfm(44noJ8>5NVHvfl2=?$SxhGg{%l+ zCI*4WAkjHY3)z_8GeHxoHUql>8>7Hqkj!GHh3p6!F$Mu)W(Ed^)l3UH5TXJM0-#1B z!+NHLoCr}t1_67J+D%Lgxe%hv3<9Ab(Jf31xe=l~P!o1CE#wg>1C3$9VB|1X`ui@l$$}|EJ*Y$(?UUnC=&z3w)0F2 zg#_M$WyREff>b1*v?(v``$OQk6l# z86^6QX`uu{R1WH!S4;~f1(HGXpO_X(A>`Q@1S&zIUziq3BShI51Pwvu2ZI{ZLK#6L zP*!G0XId!B4Qg1kfwF}$6DRjt76t|(kO=p776t}RdleRTE)zah1_l-m1};;O1Pdnz zmzfkugo~4l3oOFT&t5*HML=a5 z2NIi&flZHcDj zh6U;#Sq`XE9$HTxNDc{Awz#zez%U}dj zz`!7;&;~Xvg~1YR7+W5c!Jf}x=?5~5Ba6Wjq*j8nfWc}u3j>3sVkyWBu3QEikT?T_ zn35qQ$U&(L&R{dRGoTEfOa^DLgLtzToIz?O__7&Xzz*WiVQ>XGNQyy1AeX@dB*`Gf zC?S~3-~(neh$-8E9hSxr0(OQ_Awvk*Ea4(3LnMnK1f*6%w3s1u1q%a%gjfkf7>FUM zq6c!JcrHT(NC5+bw5l-JurLk=1{t*guxq0@7#L(F;y4%>WNIl9|oHz@S>p&cL7r%1;cH%xWp+>(-RYDkQK$;n}4Vpn+?67o(E(yg_hOOSL3=9%VoD8Qx zDkW4x7_NepNvM`F+ya@X1Bxb4$DV%Q1qCCMlBdFFv}~$ zqsbgBk1d)kKx6P|(PRl$jT%i>U@>gbWDSqcsATxi$OBED zj$ngc3PO`212}-4Kphu`Kg@b^JPZuZdKx?o3@&;)JPZu3dImfU3~qW>JPZu(`Yt>S z3?2rIp^R1xU~y0VARYz=F9XI9Mhl3Dw_YL-1A`A())!2gfJsw*kO_VUjG;`$3=pOM zV9fy#A&?O!5b;30Y#s)NAh5Pzy?h=9h7kQ?9tMU`ki`ZJdTl%m3}IlAaFAXB1&Fo? z{V6;Q43Quqm<>^2Gt9wcG+0NB0b?k$Km#L0OROG9OB`4}9!w_agPfm;Y)BGV!U0Ss zgQZiDrBlJ?rh(0!z`_7FF&!+H0TyduVF2?oAv`9C%~@b|*beovJC9etSp8xY+PU!kSfA3 zmW|H{lnxk7;yBn$;yJiX6F9g*$-oGdeHpkxq-i228^{2tc}Z+M5J@vog}}Xnhk?P| z3{-cRfr@8_N(NA$g@XZ<8zmSR7?cH zT*w3&nRv&@(#Eui2{c9!(#!}RgaEOxGwxzyxy1C9iGf*e9wW0t8zZyQMkZ!u8)j8u zX0;1U%$kPG2F;udZx}(AgUW$XJQ6}6IVUkMU7;+ss5mn}Pr=Ag&rr{Tp|~hnKQ}Qm zPcNB4KO;XkRlhL9B)?ccznCE>GdD9YH9je^I5oZ~wJZ~)i=i|RG&7KzqL7oHm(Ea{ znO9>1@69}*eh8XwP)mK0xj+D7CmCKd(5I zA+0DeH#Mm=EiJVuJ~_WMuLN17m?1GG1vKc-P@b7mlEILXnwg$a!cdS|lAOViR8W9$ zNO4AfQ3=>3hGy|447sVf`9+oSx%nxnIS56`8Hq(;H5TzD3`MCa@wth`+404hRjEk4 zjLftWhV-J;)I20PZk29=K(h zDXIBj$HIaeDO9is#lu4n8aqhJK_Ok5T3o`Ak&%)M;xOc=r4^@^z>I+kLqi{`A1YV~ z)(Dyq0&9dyLiwmVpn?z`FomgLZgG5ZNn%k+d~RY#X89<3HzJ#Fyls5`WiWndhP4NZAM)9!uu6X!lRWSo(VvC`mC^N4lJ~J<~ zgaJgvXQq@eB@% zGk_+w;xp6YK@*0lDG+VOMxY#(Tu=$3K#3_gH8(fEEEU8}&Mjcb29+HQDa9qAf`lQD zp#a1zC@xB7$YdyHNMLF+YdL$IYqkbF>fx#34SQ`c+3=9mQelQCI2Loe;01rFI1n@Fb6*QNFhG0NKj(h@b zOwPP)Onp4;puCK(4m7%gqOKCVI?xCTvN~otMzBJ3^K3wh7#J8}_U40CF)+wL#bFd^ zyaU9BsWSm_kT7Tr1jL2Odp5K8u=TR`vGg-D>p-jqNi(3^4;sS&Nx<}FK<(E72_j)o zhabd+sdH~;>j9e%5@cXtSj+}3{XkJD0*^f7=$n+hdc%E?Aft}U z3&lknr^?*Z+wfa2H6tA)$RzY)UdRM~!KU-$R?As!vnGm3eMns^aB}1Q60qRQMMn2eEEXt=&Pw45d@l9}G#m= z1vVO@l0yirl$FgBqVJ%?g+RZA!R>I2c#TLmbyNA_;?F6eV zC>1iN>9H|CsoTZI{FuQ86o#zK2O0F(nD0V_6hJ~w%vTunSUo{$oUN>R&&mCzyIEz* zSUK2ASlQ>X^0H;K^03WgWoFagUAl*biTM~vD>%02fuojSYd3zSD$S(%@JLS+}oYmXT~p#sjfXoCa#d6^aZ#U=SgsrqJlrbQ-ZnaQ~Z zNjavb#g+x8RYq0m$z_(txyF`7ra8Lc=7nx~QDQ+sYLPBv+(Ex6wK%`DC^=QPC_leM zKQk{mr!*xM+=&2IZ{ zco60;P_u%87s3IJZbMn1xqn6mUIx%GBuK~rL@+?sB7(#{pnRBkIniIxSFb1ui1~Whl9~cngFfnhidhjSZSO`4v0cL@gX&}U*LSTxSK@d!%6U+>- zRv@YjGXtoViz)`LE@kRXowZCcJ()~I3gXw zLQs+cq#ltDVeRKuCI$vU21G2uRNMipN2E_!yZIK_d_?+$wUc8Q7?4bXxCung!67cn zgk3!+4)F;LAa@FZj09ttJ3$RvgzLdlU}7#KcJqC4xMw~NdyR0Y-;Bfj892=G#35dU z!+ahb>a%c&FUKJc3mZ`T9F!XWfI5f&|Nn>OT#z`34U19GWIiYWVdB;x4g&)Nto(q9 z!_u1_R32U22T2^+-ez!blmVR5L3Y911KOAY(gG@pL5u8R;(bu{AoDdC7#My)-9H0K z95mYr6JLxZ4)Rwv$WR6bhK*?AIZ*LENa9)y3=A-P4IhQIz`*bxDh@IqG^GSn56agdB_Q*W&H0U_ z9<*oxrk)j~5VSsyfq_9E$(^8d1u_R_Zy<;R%3Db4k?jR7#R4e-Nh8~<1QLLn4@w&_ zdo`irF!Pf@ni&`v^q}JC{xXG%gD7P4?LY!h^Fd_~%zRgSG7{aKGBov|xCg1LhKi%B?}UnjDCBfC5hMWh7jk@o$_K#Ca{804Vh=<4I3 z;xP43q3S{VJ3vfy^|?^>AaP{>g7$)d)WgjA3F0s?fJfayOptnHceWszgY4gKs5s0V zn13fg#nH`~4i$%~2M=j6Ffh!4ileJvh9r)hPeJ=wK<2{Gk=_3pDh@LT7H&VF;^^iufdruW z3ppM+k;IYXMHopOS-k=damX?&25`>+RA2N${RLSE1*uPw!ws_D2O^GauN~BUn7<}N z%>gf_gt{Nu9B-(45QS_`5J&(i9%11V4iyJc$mW!R1d!CjHtK=)F@e$vNE%r^tbGS+ zfr^3@KryVR01^ka_F?K^YCz)1t#?q{1Edus4r&9#)Pvd>FmW*k1_tmVCc7&Fo1isAiwlO`LK2(O#MQrIOJ>#g!*+*ahShh>bF6~Vf|Q`IA}i} zND9`@go(rUwFiJCk=%0<$`66kF!i8CcOan%5P_r~)c*kqf%-Kd8m1mro+p3=k<@>J z@>8HROg(Hr18md+Ce8uPcd&LSOk4~qUVvr}Xd6992s{FhWUnbyJ*+| z-UAh%0TM(qe;!mE){cgm4{OJRwrYU1z{Jl&)r0nGB8$I(imw0(BANdYD!v9y{0CHg z1DZH5w4Jd9O80uW=;WA`~;dfXww2n2s}-L zWDaNx14tZJ9>eUN12yLgND@gssNV|`x&b1P#1}!;!}0;loHbDK2WaZILdBn;iSLGr zzd#c|2o-;WCVmbo{sB!K){gvwCVm^L{s)>ktbO?hP5dcTJuF|s{Pi6w&H{~pnD`&4 zI4r-y#9{47(6KTgD`4VM(Ds1H$YRL4HY**6EB2{TcC-9x0*08Fu>Y(u<)sZs&_zBUk?=r z?Waa|53F75fu_CAg}D>7=NqIBv>G2o!^B@g)t8`|58hhCz`y|7)rGA7BUC+T z_X@H&to;hwtBx%GAF93u&3tZ9!;FD}0X9AZbB{Pw99DkA#9{4M$f^TG{SIrVPC+vt z)=q_u=fKQ?wNvMysdt6iy8unx7b?C4O*{lDz5-1=3M#$^O*{@Nz5z`<2`at?O*{oE zz5`7>6DkfHUxN874=R2DO??4W{0N$O5mfvHns^CR{0y2ntet%UO&q-KiGhLP3YvHg z)EwCO70jLWQ1Lrx>YJeA575Nhq2f=_#Ji#5uzDC~{sgEvXf-o(I-CL(hqbps#(~Du zKx#l3)~<$$gW8%PaTpB~hqV`B?PQoZtepgF4}-*EW`fKCjirESkT_zrnSlY;z6FVc z`d=V5APj5A!o*?y2bldZaoG4CtX&EdhmF6%+Mh6S*ti+2oe2|%jd#J?lQ41EcoD4K z2or~m|G@kW6NioGz}kT@aag|$*4~4O!^T@+?K+q^tepXCzrn;|<0PT8%dXv-Z)J*-{^iNo?ZNE}xG!o*?jfz`7xahM)heF_r?_2EJ0!0JtyIBdoa zRzJeTVQ~Yi2Vvr{aRFF;2NLH584Sg+dJQHHD_>ys7fievsvcHP!Nj*h#bNakOgtBw zC}8ytOuQZ{4y#|_;?Mws)gv%*C1_%S)fX^vHK;hOUVw?4LB(O^KTI6F!I*)80anh# z#9{4HSa}W;cZZtu0VDw0CkWbS&%nR{Yp=rkRUm0lc=|)tGeG?Z6Ay!mbD)XC+EJjR zsz5;qQ-2Mr9yU(_6NlBy3TWoEgA{2AX;?sQ3dkaajN81)4al zAM^oDya8&?4>a)(s5opX0L(p8pyC`*8YaE~$`^prF!5DTz66wpi64RT6`(Xs{27$5 z0i|K$AE0~#C=C<;1La#lX_z=0wES^E6X%7Bd!UKK`U?SQ;wn(}5oqF|Gp|7TA^}Yt zve%S>Ap=d^9coSinz%nyyaG);8Y&K3cMNKmBCiI4mFpn?LZc4k90ug^No4iN?LDYf zVD-r3d&ugM+i6gzfYl?9k0Gl^ZeJnS7o(@! zVvqo|UPexzpmk*+tsrUSbl46}^dNEM^mZOe964RV%3Y9p^#%U%P&dQbN36?EiOq+&W45zc+;I;PEJ{FJjgl4nduB^=?vg4Z=j8CN$F5^ zu+3}`VlgJ{sa9!Ly1kAlQu;}sw_GDgn(AaRgh5XPk+wr&xm7KD+>s6CI(epvqwwhj`c7lhIEgZgRM^uyYhuz5+4UJypt59-HY(+_LkA&&uJ z(+`rzrXSXRgY|M*!i+%If1VMt_5j`e6QJ&20Ch0P{h+l7P%eC>E@-?7 zWIuWyFo0GTu<;{Y_Jh_cVAKBqsvp+A!=*nIbXF^PjWbLIlm=DASk`Q!`ybS=0{IEu z{Q^+^AUUXsU<#eT9%?^mO%_-Ilz{069nc090#hKrf*3Hm8=5ZA?cV?jY^WSaJq)AU z4;rU{nFUh=qG9^CLDLaP4203u%0bf~NDdjNK?7CXT<5DOc}1f@UFnhlu$VfhDi>L0qFK!%@%4k*FaLx99U7(*=% z_j^GT9;kc)>4RZ({lB4WanSS60jT>6pz#QDKgiAK?iYsI4;#;h*<%H5aL>RIe=v7s zL-oV-!RSlShB>TX3loRwgYnaFg+FKkHUk4g1~eal+z(o>gYJIt5h_UQP+;Z;K|27j z@jjS1%zhXR8n=S6VQN5h22?+Yjf~ON+CcLkvKkN@rXM!`2oeKfnEOF&5H<%L`NzP( zfF6G{!a=f-{TUz@$p4@u1=A0TOOUuW4*M@aCm5EaRjlal2aO+rq8QzNiAa#?3=FVw zG?4wE-3#dU%R%EGJ^hqJ3#6+MW8fsrei#i}m(1+*KOeLe1+EA*?gnkYz?=`VA0!Xc h2V#RTXq*YHhyV#Q1b`Nog3N(-NJfjWMqH=Mg}_u1P><4z_20;!FB*M9T>D2G#NZvFO^6e9!TStZvl()Z{uO> z;9>V@KEUWB59`M0r%b+Cw+enxjJ0|VH9)`kaOE2JUZgv6Wx^=OGW$YKi~ z_L6s!2bxbX!u@P`0L}z?pW(~vzhK&1p|?^dQ0+u7(Fd#u{F7HN1To6y`pb7fLuinvXO2SY9uEheIL5 z4h04VhG!}8cz%+yg0bY+lZ4JgI}*S$ofn!Pyl+0i_$*<^y8r+GKT83bbeO>{F*7GM zMWG~LAw9K3AtN(ABeh5&BQYmUAtkdYHMv9~H?g1~GcTP>4-^~>489Pqf@6TEvqDj7 zdS-D+YEiL58pIeY4K9c>2Cjgj{G^=JTq^~q%n}6yh0J0F0|kxDypq(SqSAsAg_O+V z#H5_m6iuiGE`M(%rH05#Q}bXd5sppE%u7)yDo!cj(qnMTFU?C)2nu!yP;gK%s9*@s zEXhzP&P>lsEGaEYwNhYEC}ZFX3U&!mNGt)#bAgz_Nb+1@&-mmgC*~+PB^HCUfJIy( z7IQK9fVrM7RtgMU3}DgBymW=^)XJp%#G(`~hJd2f;$nqFkcfhxf4H8W9v4GMK# zwt!%LBZcJrytK@82p_CAJGHV{L8Bl)CkJFwNosM4CRkT+a$=rBa(+rGSgmJJ5XkwS z!5|6}u+Vhr(R!d%2f;3pfU%n^I2cMr5$W*D>%ZW9^yT&6(EXr-!=v-5V@R+^^BVz} zmTm_Dk8TN%PFau*FF=Gx=Y22@CZNg;FC7Qxi2wipGjxiARka@AZ&}a8zyMX@(e1$D z(Fs-r69K8HWny43Jb-MJ$MNG}{Rs6?SzC}Wn7tpAEWj+NVhFn%tYRMr0|Ns@0Adn^ z4au?m+bZ}Wd`!893VsIu)*1!|hVBRf4`#53VSYunXCDhFt3v|;Spwz{B%`51hW{a! zb{+@Qtp`dKku}2e<(JogJ-Q<#Ue^8p|9?Ly&w`ahm3B*jc~~rlDgaA^321(YWpl^Q zBfpW=>~BB|B9G3)V13=zUWTlYu8Rh_}jAQ2! zh<2DcP;s!}egP(EymebZ1Q=if`$3f&%#Bbz9-Xc)z{;?>x!d&x)DWm@uu8{gcy&ySs{iSysZ`@Ijm@B>U*Eg0nk;Nc2 z$oRyvsWH0RVL$I=2fKJ$RA+%wJV+i?M1W{+5fI4$iWV@VV$Rfv${dkUiTcgE-@koh zd%NuRTRq+A7n)1&%6(y)x+J4xlE$(XM~*Ccs*`kii;2ua4<7}o^%2TVnJSJhE} z)+)H{@nG?1>SFnC(9+^^so>8-!LPOVXPa9a-@f}mt`+irvKfC0ejgv-T$f5aJ zKQxsj<<=i6C=7^5+m%s%Ug}Y(pzDL!V~0u)6wQn{+p5p# z?Yl81oU1`p+R5(Nhb+B_tSdh}v}WIs`2W%7c>TGL_Vza{JOxywYGeP-UeCo~CBh;r zyQk4Xw90druWwP^j%v+?`KXZcETk<5?lEKlVL zx;A_l$auK!UYyf+7V%;M(MjK#`JH5$-na^gKVW7FX1US6z@vd*P=tGf{J{`LJEsW( zCvCm#!~88%?36D~3@KXt>W%=PVF8Si*QrU<#K(-vXZo ze}O671w4+e495jSxISbud|D&)fF*5$$ODzMyGjSrHD+obSUJh|NF%IZ0$`ThB` zt>)~oeUwnkX=K59_Rw65ML7@e)GTlpoygGC%q6y*YwHui)H$oKIxSe-)zOlbd`PV^ zA!enmqEe&(FO&b85*dQN9kqQc)^%1S=CCsJem$~%R`A03zzbJA{yfku={@}N!CAxG z{3c;hr)=hl$5fS`Io)urvA;3>qQbH&xh{_*6mOs2J5_-H!vRCTi@G1;I#(V@7P9u3w4vyEWuNy!-&V)axW+BE0@5pt zE~v?M)SYg4^kkFfD}|||VulMkJ@!fjmvf#BDSpezQuS8#2FH4a%Nyb!@oaqg!a;w# zNTbEEH9U@s__S7vxbAi8?dDEDw931zKx}EuQaOpd^e3`++~-Bd{IxKx61a8#rHnwU z@_}y_o&OY!*E5=}>y=#J)|{F=Eu=r%MEYL~bFg2q4A0#&JwDE&KHJxJG2C8uQ`1yb zC`!Y0wenoCv&Wvsx`LvCrn5Zqqw@ZSe`~gAbmnG3;(;h;3*3v-NSaC&!!FY!!yb?J9mxh}_HkVP10Y zfwl!sXYJ4HCNK6kk9}cQQ)RuB{}M}tB!@zLG=I&C879jAQ`NZRS8aEYocG|jF~gIJ z6eW+I_K)2UtMAx-a$MTILzQ=_>E7BW+dt$^j$Nv9@7ndVa(BN}T}Zlh_quzY$h~bX zZ{90!-+Ef-=&DTLPv>@gDfKV==(qTWZp_*f z?ZH8>f^1(rvz?=Qqp$9A$-^1a40(|P7ug^i+Zl1r{*U<%>>F`5%6Rrc&UlF#d%X9~JnQf$YSs;pKkFCxevkNe zq<&Io{}9^q~8{^gnKDZETK*kSy|{#{sQelFMi z^9gBwVfT)>ZHmrtIXx>UG-_@1%Rg__bR%ys-s7?PMpxjPNiP~qq}sf9i=GUf=08>A z&xWs0W!N_=@ z`eUOqzBJqWm%fE0UJOa(Hi=F&xMGpgqq;T9D=J~ilT)pKJhSI5U7)(eG*3=KfBDuk zx9ToElQR(&zIu5^@@svz^&45%n>8I~JW_W}MApQ;x$fGP8^0niPrG*h)|Wap-M>CJ zIOiqq)je!^*EaS@;4J39MTb1K8S^sVu=l-Zy%eaXxB9ohkxz5Xmj<)3`XESy#Joctj>%h5{vv0k5@?Y-N+%$Vl1H6!8f zs=`3YrDb=2zq>HMPv-q!r3oxNTRu6g^lea_EXMG2arEN0 zkDqTD9lyDZt2Tmdme?Y3i%+|vyb^+s_pMDf+hxD*Zr-fpjIqnl7}q`2d~tsI>S~?O z52V)DOl!El(DGH~i?g%&WYgOoAN-dvvpggGOilE26;?GNn~x8d*u8nh_r55r>Empf zb6a@-f3dq#t&mo$@$u%5Cbb1R%@cIEbmv+%Wh!6f{$t^|B6_U__gW6uIqTIY{r##p zsljvZ%g7F^Da(F(=+#>;{QY&Rq}6}Bso9BpCe0I-zQ1wCmBv6hrqBFO%+ozVF$`-L z9R~Mr5b<9zXX>PlUd)aHZRL5-CwcR@1b3*hC>?yq<*GPAOC@P>g5J%BCReV5UOq0` zf@^hxIFgdfTc`HgHT6Hyw%9&<_wC!>i^L=hTvUJle8Vgxos_cwG~o7bfm`+Q@n3SFOLH`YHcQ?#}yKbA~}F zne`n{?JEJ+O?NDfnN8<^+;JqxMP|d&Hc@sN&jObwQ|2>r8{hKE&wSex@ou-woVTXw zHnzs6OA=@5ZCU2MjC+b+PO!41gqq9el?UR_KC%1r<(sy_fiCXjFY1`~9c&15C^Rs< ze(Tf6KSC^ahgg2_{;+5iU$Fi&(|U&H2`rCyuV*Qptyl5loxq;U4{TQ@OXFQ0PR z{#M<*_TxTFmSvir$XcxGo3z?@`nSd+o5`YGqLW0sM2jQ*H_l73Jz90}+rM{>{|`6M zy%VT+BQQ^VSE7giwUzF7mtNf&YgOw1EU-!AYL|oK0<(1|tGbpJ-c^g8rG9J2{<7zr zSFqkS)syDg6%wedQXZ-ze>Bu?S^3r|#`A051bjdDu;iOdOhAl$sP{8Zs&?u$?|Qd(P$-)@1z~8*iEhJ^p;Phh6FWwwT4UV=Wz?jZ{HrqAXDMaR8p|xgz#x^vER3Y@0ERiYLFSw~ zaPR=bvV{$-9Xn(u{CuMmV=OU|wI)JKYr@YnI(LdzuoV<2ex4a&Q7LgFu}0S7H2b-( zmd$$}>ZDm@+bYk=tSi8ZrSgv+W^ zL91z3S9kgQzn=fDrBzhE-(7vb_WNG%tTz@m< za%iLE!=t&nJKV46g_Ky`Q4{84Uids!gKJ9Z9S#Q7ok0qZ*h&pAFdm$+JZH@k?r@Hs z{SA8yw>v+%7%=1AluNBQ+bmMIe=nUW{)n~unaR=9jQ=ByXYUKx6S}px>VLfDZ62n0 zzLq&0+&2rFj(Pm}b@r`RX?Av?Uhw*cl|oOOto~Z>KFnwEw^MA-PS3fyZ3?QVuCIu{ zkkff-cf^uc87JmUPV{|0ckda!nSC*RvAi*AtGrkzh@Y5UwIJJZdSR@Xrrx*y2Hgvy zdLK@TC|ok>H+a5l)+Em5HQP0FS%2s9p7ObwyK$vcsH5_WJF|qf1IsA3Y;#Nd<~eTOT#WyOF6yoPloIhX*P#F4C7Y`$AM|EMPF}l< zL)23zIH2GM)w5I!=4Wbj|5aV#vSZSwTe-`R(<(utJcyT(<_Q1`m~pc zd@B9C+9A#;c+RCW$0v!ch?uo7k@tMSn>LyGA%CmubRK)lGG^cT;F{XTmi_9Xk?i#K zCw5$ms@VB;)jR*o4NqLx7F~ULuK1?9*|NmNx^uZrR#g94pnUSi?u>th1xMrN3FRz_ zivO%HWo@1oUFP*}mxOqDoyuEt&Nke{%jo<|P?GHPYcCfM<^Q_)%syB<9DUT`S=oXpRnM?gL zZ+=-DQ03I;`YQN`(pTS8FX#N_4ATf)&Ukn4f+NbwHJ+vQv+v$ZoIm5&Eyl0c!t+1B zUEm?1pYh;~-<+@S`STf%q=@}zoZK~C1(KcM^?fpy{N-DG+k)q*|3&$P<^NW^wtcZ- z^0K)yWtTI}+uyc2Po8jOtIH;qrAK~#<(@R@ZAH`#{q6@km=^N{@)*e|8pvy$O!L(=nfXCugRyT+ z(k?%K?}WnGyjcqD7CpYq4?hKc+mKTr)l#(B_k@_hxox5Uyge^$5i410B{`$;lC)}% z>BQ1Y+bm^nKK>j3DCoLSh0KzL>g8B~r_!(RZi@C)g zES~Fax>Pb)^J#A-=c4KBcXfp;FWk8~z3HOi8;%pVKd|iFvB!Frk@d>>wKH3G!mW>Q-!Ffaw{=z6e7iOFHEVtZtM0S=_v87)*ZUtme|))r_wRDw_&ndQ z%N{kC-r-gIB$sm7*zH~HJg(Sx+rFqbzj`(OZ{PIw%_~2)1asc4zw^d^`eTDVQ<#NPO-1eyd^{2xtUSI1A5zqJFd37RGf8%4j9UNMh?!0&; z+Vt4#o2~rBNkY3foLhdaz4(sIL#C%ZnH%+4*hurrB*0t~1w| zO}}AYsn0R_MfU5iaQWwlzqjw6lD0+C>^PJB$z`ciuHSErD`bvzxSsa)c;?ri`$LWI z#_Y*azxl`R*V*M=#rmANy)P;ih5c1lZ`Tn@NtAlD?E8XljBz>a}o8YD6~R?QVbPy zYWp1d4k-w@Rx3(u-F9&+dqHB%Y^wm7)`dn-wUGw&^)_jGC3VkNoL z^Yu0EK2JI+_&UZ)W<|@^eH`ngxp+eoIDQ&Em;S*M)6L-S>};i=;qDizsbFZTXQXEU zEgl#^tq0KXE~vTa?ib3y#K3p}BnI;@BN`t%+{VCI6~w?;A;2ij!_F~*k%2*gfq_8= zYN!sB28qEe@<9@FfwCi^G)P?plKYkmedbfi@-&UN-k0=4O!RpmNwKkiS_NKK{oh#|#cFOc`bdQ0QS3hZeeMQp^nO zXd)0UGXrSC0K!HlnHe~dxo|c!12>$F%wT5VLFU5Q%nZD6HZp^mfe)DrW`kV9$RNV7 z0nB4ykbu&lxd@OrEFNI-3#xBG;*dFA1_qe8F1SqzOEm~_ka5fmf*=Y7n}O9M#6jr* zrhu722*!ldfnfCraZudDB$*iy_QJ$KG&2KuUI@fQ!ORTeD0~=)8SZ@ zS!Qu&ejYgEOX=xy95_59$lOd`=9)ReA zkY*+f1*Ihrb{>SXU`Q;;Opb@x&ybl9=7CIyh!>@%Gk~VU<1^FZK}!!(Qy|)mjUX`$ z%TG)U3=B#P3=Dt%LjbZksC3!`QO>{*r9tXJ;!B`>X(){@?uSD>21y**-bAQ4sQLqy zHZb>OB8jUaxf4|WfTTd`)sVzN zUxLyg_1Z}0fXWk)6et`(WiTw3{)Iu zuN&0fM5s7OJ+i%dNaD!hQwkM_nG+5*rwS^LZcZbTxFJ$FcR4l1;n==JT z98_e$!gDr~xG|FXi;=`lki^$P#XRCVu2b#{6k?fU& zio?tSwM#%oDMQ84&Cx{?M-B%Qs5s1=H6TM67#M7z;^^i$BZ(u2gBMgBW)3VI{GsCL z=7d4TVd}R)?TvVLQ4pI+__ajhy+o0m; z>Ssg6Vd@`2)h~vMqpM$oB#!LP%}{ZeIk52A0To9#=Ma)Oa(tac5=RdI%ShtL>L1_` ze-0Igx#t7aUmu|2=hNRLd9X`z`{ogDvoZB z8B`pm9%?OvHB=m3y&F^AVCHO2AKFSDBm4Q!^GvGU9M0xaW$wpu;tD$ z^#agxEdxzGGc+7v{(z}(gPK!~rXE(l!}{Sc^{_rjADa53PPMdtlffcjxy99 znD}O>dTTWCc~JMm+yztr7Ag*FZ@|R=LiHy>X_&YtG~R2_#1BKw=|mHM59LpT(lB#i z?R8lF4ik@uhUW$}^$k$|UMLMy{{yQ26q-0Y)SWlb!~>w>Ptn9LK;8cdO&k^uuzDG0 zFDx8*py?MT4hv5;G;vt?7^8{9!p8wk92P#lXyUN&i9!>Hg-<$~I4pch(8OWk1FHvN z?%x0nhdwm*Vo*M;9)zh+hKAP)s60#@HV(NJP5e1DecnYAhqZrRp^3xt3#{IOnQsn_ zM;2%~3=@9@b&m|1xB}E%Q#5gy`A%r!uzVDcCJyRbg1nH8CJr;F0! zEL43Wnz$X*J$Y#2{ZR30H1Pvaa}J@2XFGmI*xH^>22ThPL_bh~(V~Qp|4eB0OH1YG$a0o&ZuZNnGgeG1Db$=F`_(Z69 z6`D9RRJ;)?4&s8^&`{$UWazrH}lm5{_i z?t%5Yb&$kC?)eQ>Z;2+(4s8ecA&G;`f%Us1kib&H?rBZ5-m?pyD7mg3=Xeo($xkUufdz zL4u%tLLi0E{wzp6Ed8*fi9dj<7lev~oDK3XKh!-^IK)k%;vfoSK4|_7WRxXH0Lk8u zAVJV>EvPumd{LBLf3N0Z0JJd?u)PJyaaT1-X9$)cg({;)|i; zAPQtYY~9ClkN}eTp!qqF7q&sgVdfh^)6ZEnaeJuvH5}q^(8T?r>c8R;X9sx(Jm(FW z!$<`=hJk@W4ow_Z9-5(v7eUoKqlts&WkFH_XyUg)f(#4{sYv1=r@_W$@{zY>FL!!{&wka}2odm2d`FGvtH|BfUMieK1xu^F29ZjgZt3=H;Y;^&~^&S>IipyIwzaS#{e z9?%*Hkkw&0#PguyAa{b?11ryq(8OWmmepwDUqKczFfi1kiNofV+mOUTarGS9pY4W< zgS11tm>_2|EP{%I+yhd-9jbmUk~qknT+s4oBbqpD9(o&+I4JyKYhVu}iG$36mFLIN z#9{Tq86*Ns1P{(4WZ&7^&op;DgDYK{q-IBfpI8BN?3s@@$< z+z~1sf+n5-6^}p@kAaHEB8h|C56c(nNa7%ORzuZiqluS8#S4(cLFT~nMHP}b$ehVg z^>t|Cuz9Fvs5pAK&4G%;!fhSYoCRp&tDxdLkiVqBK{f|AZ;mdmhol}FMPPf~aEK@35U;@@ zJ_U#PdK}`gG7wa5Bkz8KHs`_RA+kGRJC)G=1sk^mi9>@5>@QgQ1&KqQ02U7blaT$C zFgJjNK!-hoXpnm3d{h7uM9OziE(2`79i$#quENBj!(CwaBgYG9pBhLFNIkOoptbkN z;-I<^#J2+xPhl7LNW(A zJYn;eAoa-MISolYa(E)2`v7u3R2jo+C<9~;$o)_*!&WE*Bo1;vlndUg0%C*G38<`s zjl;uen7AWI5d#AQXwLj+`}RG9c7sD9*im>~C@ zgo-1t!vu-L>P6T*Gt8X(Q1zgFf*>YL`~`>u8t;PAFmc#CMKqfD4=5j&Zei-d2@f&YZEi@e>rxPELLZ~=$I)Sav2T3ER6Gy0_ zAaUe$0$Vo@5=Txa=1|K(;>hXbBa%3BI)RlBAZtJv>K*ucT96o2D_F_{OhWd{AiE#7 zz7M1x+5NC`03?p=e$akKkWnCUWcS0y(Lv(K?uVs2kT|mY8T5)Pb4wDF81#xuiXe0b zj8&3aQNo~?l30?+pqEr!%%BGn(1Y$-gL6Pz%HSOE{xvucw2KYG0qjh9aGlpPZ9fTvCi8m{^pUm!66$R+N{H zsW2xqFBN8ZaY+%32@;M6^ON&)b5rw581(Y;OH%dR{X%t%OA?c_q5Sl`QoVwr{DRb? zl1iupQZwSyiV|~SbETm4LoNoDHK06#oF+kL!RiYT8ySPtBJ)A@2S^M#Z-C^9)elIdzK0@;tt{UCXedteyWK7jE-{UL1nVfhtS{=(Fw>j%w$V$%;>7X#b3j7vXg zy%{$B3LrrS1_s#vW|)3hIR)c`_CbP_qWix9BnVn30aFO2(cKSPe*{vBuD=2#$iTn= z+b<2(&VU}Tpfe3X&D4s#{N}#v~nFSgf0nwm+-XN>c?biSma10C# zu=#F~S`bEeKWKd%NIz)L8Au+66QKHG>-}NkF#ADzKw{gVbr8CK*!U`JJ|CnOgkkz% z^aZGXboUE@0)>Hr0k%&Zq!)zI-G3Uo_X|DzG@#-40_tE;_<^S4pj`M4{yPkiz3b@t zrvh4;z|@2624Qsm6R7)f=|^`jIv=#J6BHKc`a7WZqo-GNK4||4$W7?_S3vcHOE0;fHSU4CwsZ8?YqIc1T9TZv%dmVFf%YP1VF5V z)czUJjv#Cw9aI?Zf3TYw7#LRL(0>6G*bEE|=U^J4G|U>9e$ad?hz;vULzOYi12rrd z7#N_@0279FFW~eMsQqvSP{u~6ekd1Cf$V~F7#J9?FfxEo1A!LzaH$type]; fg = ~bg; - + u64 addr = entry->base; u64 end = addr + entry->length; print("["); @@ -55,31 +47,29 @@ static void print_memmap_entry(struct limine_memmap_entry* entry) { bg = savebg; } - - static size_t total_pages; -static u8* alloc_start; -static u8* alloc_end; -static u8* alloc_next; -static u64* alloc_bitmap; +static u8 *alloc_start; +static u8 *alloc_end; +static u8 *alloc_next; +static u64 *alloc_bitmap; void alloc_init() { print("Initializing Page Allocator\n"); - if(!mem_req.response) { + if (!mem_req.response) { print("Failed to get memory map :(\n)"); hang(); } - + u64 largest_base = 0; size_t largest_size = 0; - for(size_t i = 0; i < mem_req.response->entry_count; i++) { - struct limine_memmap_entry* entry = mem_req.response->entries[i]; + for (size_t i = 0; i < mem_req.response->entry_count; i++) { + struct limine_memmap_entry *entry = mem_req.response->entries[i]; print_memmap_entry(entry); - - if(entry->type == LIMINE_MEMMAP_USABLE) { - if(entry->length > largest_size) { + + if (entry->type == LIMINE_MEMMAP_USABLE) { + if (entry->length > largest_size) { largest_base = entry->base; largest_size = entry->length; print("\t\\LARGEST USABLE: "); @@ -89,50 +79,47 @@ void alloc_init() { } } - if(!largest_size) { + if (!largest_size) { print("Couldn't find a free page!!!\n"); hang(); } - total_pages = largest_size / PAGE_SIZE; size_t usage_bitmap_size = (total_pages + 7) / 8; - total_pages -= (usage_bitmap_size + PAGE_SIZE-1) / PAGE_SIZE; - alloc_bitmap = (u64*)(phys_to_virt(largest_base)); - alloc_start = (u8*)(phys_to_virt(largest_base + usage_bitmap_size)); + total_pages -= (usage_bitmap_size + PAGE_SIZE - 1) / PAGE_SIZE; + alloc_bitmap = (u64 *)(phys_to_virt(largest_base)); + alloc_start = (u8 *)(phys_to_virt(largest_base + usage_bitmap_size)); alloc_next = alloc_start; - alloc_end = (u8*)(phys_to_virt(largest_base + largest_size)); + alloc_end = (u8 *)(phys_to_virt(largest_base + largest_size)); } -static size_t page(void* addr) { - return ((u8*)addr - alloc_start) / PAGE_SIZE; +static size_t page(void *addr) { + return ((u8 *)addr - alloc_start) / PAGE_SIZE; } -static void* addr(size_t page) { - return alloc_start + page*PAGE_SIZE; -} +static void *addr(size_t page) { return alloc_start + page * PAGE_SIZE; } static void usepage(size_t page) { - size_t idx = page / 64; - size_t bit = page & 63; - alloc_bitmap[idx] |= (1 << bit); + size_t idx = page / 64; + size_t bit = page & 63; + alloc_bitmap[idx] |= (1 << bit); } static void usepagerange(size_t page, size_t len) { - for(size_t i = 0; i < len; len++) { + for (size_t i = 0; i < len; len++) { usepage(i + page); } } static void unusepage(size_t page) { - size_t idx = page / 64; - size_t bit = page & 63; - alloc_bitmap[idx] &= ~(1 << bit); + size_t idx = page / 64; + size_t bit = page & 63; + alloc_bitmap[idx] &= ~(1 << bit); } static void unusepagerange(size_t page, size_t len) { - for(size_t i = 0; i < len; len++) { - unusepage(i+page); + for (size_t i = 0; i < len; len++) { + unusepage(i + page); } } @@ -140,17 +127,17 @@ static u8 getpageusage(size_t page) { return (alloc_bitmap[page / 8] >> (page & 7)) & 1; } -void dealloc(void* addr, size_t size) { +void dealloc(void *addr, size_t size) { // adjust to page size - size_t pages = (size+PAGE_SIZE-1) / PAGE_SIZE; + size_t pages = (size + PAGE_SIZE - 1) / PAGE_SIZE; unusepagerange(page(addr), pages); } -void* alloc(size_t size) { +void *alloc(size_t size) { size_t pages = (size + PAGE_SIZE - 1) / PAGE_SIZE; size_t page = 0; - if(pages == 0 || pages >= total_pages) { + if (pages == 0 || pages >= total_pages) { print("Too many or too few pages: "); print8(pages); print("\n"); @@ -162,30 +149,30 @@ void* alloc(size_t size) { print(" consecutive pages\n"); size_t consecutive = 0; - for(size_t i = 0; i < total_pages/64; i++) { + for (size_t i = 0; i < total_pages / 64; i++) { u64 word = alloc_bitmap[i]; - if(word == 0) { - if(!consecutive) + if (word == 0) { + if (!consecutive) page = i * 64; consecutive += 64; - if(consecutive >= pages) { + if (consecutive >= pages) { usepagerange(page, pages); return addr(page); } continue; } - if(word == ~0ULL) { + if (word == ~0ULL) { consecutive = 0; page = -1; } - for(size_t bit = 0; bit < 64; bit++) { - if((word & (1ULL << bit)) == 0) { - if(!consecutive) + for (size_t bit = 0; bit < 64; bit++) { + if ((word & (1ULL << bit)) == 0) { + if (!consecutive) page = i * 64 + bit; - if(++consecutive >= pages) { + if (++consecutive >= pages) { usepagerange(page, pages); return addr(page); } @@ -198,4 +185,3 @@ void* alloc(size_t size) { return NULL; } - diff --git a/src/alloc.h b/src/alloc.h index 29d7a6e..b841650 100644 --- a/src/alloc.h +++ b/src/alloc.h @@ -3,14 +3,11 @@ static const size_t PAGE_SIZE = (1 << 12); void alloc_init(); -void* alloc(size_t size); -void dealloc(void* arg, size_t size); +void *alloc(size_t size); +void dealloc(void *arg, size_t size); -static inline u64 virt_to_phys(void* virt) { - return (u64)virt - hhdm_offset; +static inline u64 virt_to_phys(void *virt) { return (u64)virt - hhdm_offset; } + +static inline void *phys_to_virt(u64 phys) { + return (void *)(phys + hhdm_offset); } - -static inline void* phys_to_virt(u64 phys) { - return (void*)(phys + hhdm_offset); -} - diff --git a/src/apic.c b/src/apic.c index 0e9e38c..d00fdaa 100644 --- a/src/apic.c +++ b/src/apic.c @@ -1,6 +1,6 @@ #include "common.h" -#include "print.h" #include "map.h" +#include "print.h" // stub of a PIC layout, we don't need the whole thing // as we only care about initializing it to disable it @@ -11,7 +11,7 @@ enum { PIC_DATA_SLAVE = 0xA1, }; -#define IOAPIC_REG_REDIR(n) (0x10 + 2*(n)) +#define IOAPIC_REG_REDIR(n) (0x10 + 2 * (n)) enum { IOAPIC_REG_SELECT = 0x00, @@ -27,7 +27,6 @@ enum { #define IOAPIC_ACTIVE_LOW (1 << 13) #define IOAPIC_ACTIVE_HIGH (0 << 13) - static void pic_init() { // Start initialization sequence outb(PIC_COMM_MASTER, 0x11); // ICW1: Initialize in cascading mode @@ -35,10 +34,10 @@ static void pic_init() { outb(PIC_DATA_MASTER, 0x04); // ICW3: Slave PIC at IRQ2 outb(PIC_DATA_MASTER, 0x01); // ICW4: 8086/88 (MCS-80 compatible) - outb(PIC_COMM_SLAVE, 0x11); // ICW1: Initialize slave PIC - outb(PIC_DATA_SLAVE, 0x28); // ICW2: Slave PIC vector offset - outb(PIC_DATA_SLAVE, 0x02); // ICW3: It's connected to master PIC - outb(PIC_DATA_SLAVE, 0x01); // ICW4: 8086/88 mode + outb(PIC_COMM_SLAVE, 0x11); // ICW1: Initialize slave PIC + outb(PIC_DATA_SLAVE, 0x28); // ICW2: Slave PIC vector offset + outb(PIC_DATA_SLAVE, 0x02); // ICW3: It's connected to master PIC + outb(PIC_DATA_SLAVE, 0x01); // ICW4: 8086/88 mode // Mask all interrupts outb(PIC_DATA_MASTER, 0xFF); @@ -53,26 +52,17 @@ static void pic_disable() { static inline u64 rdmsr(u32 msr) { u32 hi, lo; - asm volatile ( - "rdmsr" - : "=a"(lo), "=d"(hi) - : "c"(msr) - ); + asm volatile("rdmsr" : "=a"(lo), "=d"(hi) : "c"(msr)); return (((u64)hi) << 32) | (u64)lo; } static inline void wrmsr(u32 msr, u64 val) { - u32 eax = (u32) val; - u32 edx = (u32) (val >> 32); - asm volatile ( - "wrmsr" - : - : "c"(msr), "a" (eax), "d" (edx) - ); + u32 eax = (u32)val; + u32 edx = (u32)(val >> 32); + asm volatile("wrmsr" : : "c"(msr), "a"(eax), "d"(edx)); } - static u64 apic_base; u64 apic_get_local_base() { @@ -96,12 +86,10 @@ static u64 apic_set_local_base(u64 base) { return base & 0xfffff000; } -u32* apic_reg(u32 reg) { - return (u32*) (hhdm_offset + apic_base + reg); -} +u32 *apic_reg(u32 reg) { return (u32 *)(hhdm_offset + apic_base + reg); } void send_eoi() { - volatile u32* reg= apic_reg(0xB0); + volatile u32 *reg = apic_reg(0xB0); *reg = 0; } @@ -111,14 +99,14 @@ void apic_enable() { apic_set_local_base(apic_get_local_base()); - if(!map_mmio((u64)apic_base, 1<<12)) { + if (!map_mmio((u64)apic_base, 1 << 12)) { print("Failed to map APIC registers!\n"); hang(); } - - volatile u32* spurious = apic_reg(0xF0); + + volatile u32 *spurious = apic_reg(0xF0); print("Reg 0xF0 at 0x"); - print64((u64) spurious); + print64((u64)spurious); print("\nSpurious: "); print32(*spurious); // set enable flag @@ -128,23 +116,23 @@ void apic_enable() { print("\n"); // TPR = 0 (accept all interrupts) - volatile u32* tpr = apic_reg(0x80); + volatile u32 *tpr = apic_reg(0x80); *tpr = 0; // Mask all LVT antries except LINT0 (0x21) - - volatile u32* timer = apic_reg(0x320); + + volatile u32 *timer = apic_reg(0x320); *timer = (1 << 16); - volatile u32* LINT0 = apic_reg(0x350); + volatile u32 *LINT0 = apic_reg(0x350); *LINT0 = (7 << 8); -// *LINT0 = (1 << 16); - volatile u32* LINT1 = apic_reg(0x360); + // *LINT0 = (1 << 16); + volatile u32 *LINT1 = apic_reg(0x360); *LINT1 = (1 << 16); - volatile u32* Error = apic_reg(0x370); + volatile u32 *Error = apic_reg(0x370); *Error = (1 << 16); } -static volatile u32* ioapic_base; +static volatile u32 *ioapic_base; void ioapic_write(u8 reg, u32 value) { ioapic_base[IOAPIC_REG_SELECT / 4] = reg; @@ -157,62 +145,62 @@ u32 ioapic_read(u8 reg) { } void ioapic_init() { - // simply assume it is at the default address - ioapic_base = map_mmio(0xFEC00000, 4096); - print("IOAPIC BASE: "); - print64((u64)ioapic_base); - print("\nIOAPIC Version:"); - ioapic_base[0] = 0x01; - print32(ioapic_base[4]); - print("\n"); + // simply assume it is at the default address + ioapic_base = map_mmio(0xFEC00000, 4096); + print("IOAPIC BASE: "); + print64((u64)ioapic_base); + print("\nIOAPIC Version:"); + ioapic_base[0] = 0x01; + print32(ioapic_base[4]); + print("\n"); - // mask all IRQs - for(size_t i = 0; i < 24; i++) { - u8 vect = 0x20 + i; - u32 low = vect | IOAPIC_MASKED | IOAPIC_DST_PHYS | IOAPIC_EDGE_TRIGG | IOAPIC_ACTIVE_HIGH; - u32 high = 0; - - ioapic_write(0x10 + i*2, low); - ioapic_write(0x10 + i*2 + 1, high); - } - - // setup keyboard by selecting IRQ1 - u8 irq = 1; - u8 vect = 0x21; - u8 cpu = 0; - - u32 low = ioapic_read(IOAPIC_REG_REDIR(irq)); - u32 high = ioapic_read(IOAPIC_REG_REDIR(irq)+1); + // mask all IRQs + for (size_t i = 0; i < 24; i++) { + u8 vect = 0x20 + i; + u32 low = vect | IOAPIC_MASKED | IOAPIC_DST_PHYS | IOAPIC_EDGE_TRIGG | + IOAPIC_ACTIVE_HIGH; + u32 high = 0; - - print("Current redirection for IRQ"); - print8(irq); - print(": "); - print32(low); - print(" "); - print32(high); - print("\n"); - - // Configure keyboard - UNMASKED (no IOAPIC_MASKED bit!) - low = vect | IOAPIC_DST_PHYS | IOAPIC_EDGE_TRIGG | IOAPIC_ACTIVE_HIGH; - high = (cpu << 24); - - ioapic_write(IOAPIC_REG_REDIR(irq), low); - ioapic_write(IOAPIC_REG_REDIR(irq)+1, high); - - low = ioapic_read(IOAPIC_REG_REDIR(irq)); - high = ioapic_read(IOAPIC_REG_REDIR(irq)+1); - // Verify it worked - print("Current redirection for IRQ"); - print8(irq); - print(": "); - print32(low); - print(" "); - print32(high); - print("\n"); - if (low & IOAPIC_MASKED) { - print(" [STILL MASKED (BAD)]\n"); - } else { - print(" [UNMASKED (GOOD)]\n"); - } + ioapic_write(0x10 + i * 2, low); + ioapic_write(0x10 + i * 2 + 1, high); + } + + // setup keyboard by selecting IRQ1 + u8 irq = 1; + u8 vect = 0x21; + u8 cpu = 0; + + u32 low = ioapic_read(IOAPIC_REG_REDIR(irq)); + u32 high = ioapic_read(IOAPIC_REG_REDIR(irq) + 1); + + print("Current redirection for IRQ"); + print8(irq); + print(": "); + print32(low); + print(" "); + print32(high); + print("\n"); + + // Configure keyboard - UNMASKED (no IOAPIC_MASKED bit!) + low = vect | IOAPIC_DST_PHYS | IOAPIC_EDGE_TRIGG | IOAPIC_ACTIVE_HIGH; + high = (cpu << 24); + + ioapic_write(IOAPIC_REG_REDIR(irq), low); + ioapic_write(IOAPIC_REG_REDIR(irq) + 1, high); + + low = ioapic_read(IOAPIC_REG_REDIR(irq)); + high = ioapic_read(IOAPIC_REG_REDIR(irq) + 1); + // Verify it worked + print("Current redirection for IRQ"); + print8(irq); + print(": "); + print32(low); + print(" "); + print32(high); + print("\n"); + if (low & IOAPIC_MASKED) { + print(" [STILL MASKED (BAD)]\n"); + } else { + print(" [UNMASKED (GOOD)]\n"); + } } diff --git a/src/apic.h b/src/apic.h index d9efe8c..2b671a1 100644 --- a/src/apic.h +++ b/src/apic.h @@ -8,4 +8,4 @@ void send_eoi(); void ioapic_write(u8 reg, u32 value); u32 ioapic_read(u8 reg); void ioapic_init(); -u32* apic_reg(u32 reg); +u32 *apic_reg(u32 reg); diff --git a/src/common.h b/src/common.h index 83977ab..829193e 100644 --- a/src/common.h +++ b/src/common.h @@ -6,54 +6,46 @@ #define pstruct struct __attribute__((packed)) -typedef uint8_t u8; -typedef uint16_t u16; -typedef uint32_t u32; -typedef uint64_t u64; -typedef int8_t i8; -typedef int16_t i16; -typedef int32_t i32; -typedef int64_t i64; +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; +typedef int8_t i8; +typedef int16_t i16; +typedef int32_t i32; +typedef int64_t i64; -static inline void INT(int n) { - asm volatile ( - "int %0" - : - : "i"(n) - ); -} +static inline void INT(int n) { asm volatile("int %0" : : "i"(n)); } static inline void outb(u16 port, u8 value) { - asm volatile ("outb %0, %1" : : "a"(value), "Nd"(port)); + asm volatile("outb %0, %1" : : "a"(value), "Nd"(port)); } static inline void outw(u16 port, u16 value) { - asm volatile ("outw %0, %1" : : "a"(value), "Nd"(port)); + asm volatile("outw %0, %1" : : "a"(value), "Nd"(port)); } static inline void outd(u16 port, u32 value) { - asm volatile ("outl %0, %1" : : "a"(value), "Nd"(port)); + asm volatile("outl %0, %1" : : "a"(value), "Nd"(port)); } static inline u8 inb(u16 port) { - u8 value; - asm volatile ("inb %w1, %b0" : "=a"(value) : "Nd"(port) : "memory"); - return value; + u8 value; + asm volatile("inb %w1, %b0" : "=a"(value) : "Nd"(port) : "memory"); + return value; } static inline u16 inw(u16 port) { - u16 value; - asm volatile ("inw %w1, %b0" : "=a"(value) : "Nd"(port) : "memory"); - return value; + u16 value; + asm volatile("inw %w1, %b0" : "=a"(value) : "Nd"(port) : "memory"); + return value; } static inline u32 ind(u16 port) { - u32 value; - asm volatile ("ind %w1, %b0" : "=a"(value) : "Nd"(port) : "memory"); - return value; + u32 value; + asm volatile("ind %w1, %b0" : "=a"(value) : "Nd"(port) : "memory"); + return value; } - - -void* memcpy(void* dst, const void* src, size_t n); -void* memset(void* s, int c, size_t n); -void* memmove(void* dst, const void* src, size_t n); -int memcmp(const void* s1, const void* s2, size_t n); +void *memcpy(void *dst, const void *src, size_t n); +void *memset(void *s, int c, size_t n); +void *memmove(void *dst, const void *src, size_t n); +int memcmp(const void *s1, const void *s2, size_t n); void hang(); extern u64 hhdm_offset; diff --git a/src/etc.h b/src/etc.h index 5eb4847..81d652f 100644 --- a/src/etc.h +++ b/src/etc.h @@ -2,11 +2,9 @@ #include "common.h" -void* memcpy(void* restrict dst, const void* src, size_t n); -void* memset(void* s, int c, size_t n); -void* memmove(void* dst, const void* src, size_t n); -int memcmp(const void* s1, const void* s2, size_t n); +void *memcpy(void *restrict dst, const void *src, size_t n); +void *memset(void *s, int c, size_t n); +void *memmove(void *dst, const void *src, size_t n); +int memcmp(const void *s1, const void *s2, size_t n); -static int isprint(int ch) { - return (u8)(ch-' ') <= ('~'-' '); -} +static int isprint(int ch) { return (u8)(ch - ' ') <= ('~' - ' '); } diff --git a/src/font.h b/src/font.h index 142a3fa..a4c3e9f 100644 --- a/src/font.h +++ b/src/font.h @@ -25,100 +25,20 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #define FONT_HEIGHT 6 static u32 font[] = { - 0x0, - 0x8021084, - 0x294a, - 0x15f52bea, - 0x8fa38be, - 0x33a22e60, - 0x2e94d8a2, - 0x1084, - 0x10421088, - 0x4421082, - 0xa23880, - 0x471000, - 0x4420000, - 0x70000, - 0xc600000, - 0x2222200, - 0x1d3ad72e, - 0x3e4214c4, - 0x3e22222e, - 0x1d18320f, - 0x210fc888, - 0x1d183c3f, - 0x1d17844c, - 0x222221f, - 0x1d18ba2e, - 0x210f463e, - 0xc6018c0, - 0x4401000, - 0x10411100, - 0xe03800, - 0x4441040, - 0x802322e, - 0x3c1ef62e, - 0x231fc544, - 0x1f18be2f, - 0x3c10862e, - 0x1f18c62f, - 0x3e10bc3f, - 0x210bc3f, - 0x1d1c843e, - 0x2318fe31, - 0x3e42109f, - 0xc94211f, - 0x23149d31, - 0x3e108421, - 0x231ad6bb, - 0x239cd671, - 0x1d18c62e, - 0x217c62f, - 0x30eac62e, - 0x2297c62f, - 0x1d141a2e, - 0x842109f, - 0x1d18c631, - 0x8454631, - 0x375ad631, - 0x22a21151, - 0x8421151, - 0x3e22221f, - 0x1842108c, - 0x20820820, - 0xc421086, - 0x4544, - 0x3e000000, - 0x82, - 0x1c97b000, - 0xe949c21, - 0x1c10b800, - 0x1c94b908, - 0x1c549800, - 0x2211c4c, - 0xe87252e, - 0x12949c21, - 0xc210040, - 0x6210802, - 0x12519521, - 0xc210842, - 0x235aac00, - 0x12949c00, - 0xc949800, - 0x213a526, - 0x3087252e, - 0x2149800, - 0xe837000, - 0xc213c42, - 0xe94a400, - 0x464a400, - 0x155ac400, - 0x36426c00, - 0xe872529, - 0x1e223c00, - 0x1843188c, - 0x8421084, - 0xc463086, - 0x6d800, - 0x3fffffff, + 0x0, 0x8021084, 0x294a, 0x15f52bea, 0x8fa38be, 0x33a22e60, + 0x2e94d8a2, 0x1084, 0x10421088, 0x4421082, 0xa23880, 0x471000, + 0x4420000, 0x70000, 0xc600000, 0x2222200, 0x1d3ad72e, 0x3e4214c4, + 0x3e22222e, 0x1d18320f, 0x210fc888, 0x1d183c3f, 0x1d17844c, 0x222221f, + 0x1d18ba2e, 0x210f463e, 0xc6018c0, 0x4401000, 0x10411100, 0xe03800, + 0x4441040, 0x802322e, 0x3c1ef62e, 0x231fc544, 0x1f18be2f, 0x3c10862e, + 0x1f18c62f, 0x3e10bc3f, 0x210bc3f, 0x1d1c843e, 0x2318fe31, 0x3e42109f, + 0xc94211f, 0x23149d31, 0x3e108421, 0x231ad6bb, 0x239cd671, 0x1d18c62e, + 0x217c62f, 0x30eac62e, 0x2297c62f, 0x1d141a2e, 0x842109f, 0x1d18c631, + 0x8454631, 0x375ad631, 0x22a21151, 0x8421151, 0x3e22221f, 0x1842108c, + 0x20820820, 0xc421086, 0x4544, 0x3e000000, 0x82, 0x1c97b000, + 0xe949c21, 0x1c10b800, 0x1c94b908, 0x1c549800, 0x2211c4c, 0xe87252e, + 0x12949c21, 0xc210040, 0x6210802, 0x12519521, 0xc210842, 0x235aac00, + 0x12949c00, 0xc949800, 0x213a526, 0x3087252e, 0x2149800, 0xe837000, + 0xc213c42, 0xe94a400, 0x464a400, 0x155ac400, 0x36426c00, 0xe872529, + 0x1e223c00, 0x1843188c, 0x8421084, 0xc463086, 0x6d800, 0x3fffffff, }; diff --git a/src/int.c b/src/int.c index efee74f..2747b6f 100644 --- a/src/int.c +++ b/src/int.c @@ -3,10 +3,9 @@ #include "apic.h" // for debugging #include "print.h" - +#include "kbd.h" #include "common.h" - // for trap debugging u64 dbg_var = 0; @@ -21,26 +20,25 @@ pstruct int_desc { }; enum INT_DESC_FLAGS { - ID_GATE_INT = 0b00001110, + ID_GATE_INT = 0b00001110, ID_GATE_TRAP = 0b00001111, - ID_DPL = 0b00100000, - ID_PRESENT = 0b10000000, + ID_DPL = 0b00100000, + ID_PRESENT = 0b10000000, }; - #define CODE64_SELECTOR 0x28 struct int_desc idt[256]; -void set_idt(u8 vect, void* handler, u8 dpl) { - struct int_desc* ent = &idt[vect]; - u64 addr = (u64) handler; +void set_idt(u8 vect, void *handler, u8 dpl) { + struct int_desc *ent = &idt[vect]; + u64 addr = (u64)handler; ent->addr_low = addr & 0xFFFF; ent->addr_mid = (addr >> 16) & 0xFFFF; ent->addr_high = addr >> 32; ent->selector = CODE64_SELECTOR; - ent->flags = ID_GATE_INT | dpl*ID_DPL | ID_PRESENT; + ent->flags = ID_GATE_INT | dpl * ID_DPL | ID_PRESENT; ent->ist = 0; } @@ -49,15 +47,15 @@ pstruct idtr { u64 base; }; -#define IDTR_LIMIT (sizeof(struct int_desc)*256 - 1) +#define IDTR_LIMIT (sizeof(struct int_desc) * 256 - 1) -void load_idt(void* addr) { - struct idtr ir = (struct idtr) { - .limit = IDTR_LIMIT, - .base = (u64) addr, +void load_idt(void *addr) { + struct idtr ir = (struct idtr){ + .limit = IDTR_LIMIT, + .base = (u64)addr, }; - asm volatile("lidt %0" :: "m"(ir)); + asm volatile("lidt %0" ::"m"(ir)); } extern void draw(u8 vect); @@ -75,204 +73,226 @@ struct cpu_ctx { u64 iret_ss; }; -struct cpu_ctx* interrupt_dispatch(struct cpu_ctx* ctx) { +struct cpu_ctx *interrupt_dispatch(struct cpu_ctx *ctx) { print("\n[IRQ "); print8(ctx->vect); print("] with message: "); print64(dbg_var); print("\n"); - - send_eoi(); + if(ctx->vect == 0x21) { + kbd_handler(); + } return ctx; } -__attribute__((naked)) -void int_stub(void) { - __asm__ volatile ( - "push %%rax\n" - "push %%rbx\n" - "push %%rcx\n" - "push %%rdx\n" - "push %%rsi\n" - "push %%rdi\n" - "push %%r8\n" - "push %%r9\n" - "push %%r10\n" - "push %%r11\n" - "push %%r12\n" - "push %%r13\n" - "push %%r14\n" - "push %%r15\n" - "mov %%rsp, %%rdi\n" - "call interrupt_dispatch\n" - "mov %%rax, %%rsp\n" - "pop %%r15\n" - "pop %%r14\n" - "pop %%r13\n" - "pop %%r12\n" - "pop %%r11\n" - "pop %%r10\n" - "pop %%r9\n" - "pop %%r8\n" - "pop %%rdi\n" - "pop %%rsi\n" - "pop %%rdx\n" - "pop %%rcx\n" - "pop %%rbx\n" - "pop %%rax\n" - "add $16, %%rsp\n" - "iretq\n" - : - : - : "memory" - ); +__attribute__((naked)) void int_stub(void) { + __asm__ volatile("push %%rax\n" + "push %%rbx\n" + "push %%rcx\n" + "push %%rdx\n" + "push %%rsi\n" + "push %%rdi\n" + "push %%r8\n" + "push %%r9\n" + "push %%r10\n" + "push %%r11\n" + "push %%r12\n" + "push %%r13\n" + "push %%r14\n" + "push %%r15\n" + "mov %%rsp, %%rdi\n" + "call interrupt_dispatch\n" + "mov %%rax, %%rsp\n" + "pop %%r15\n" + "pop %%r14\n" + "pop %%r13\n" + "pop %%r12\n" + "pop %%r11\n" + "pop %%r10\n" + "pop %%r9\n" + "pop %%r8\n" + "pop %%rdi\n" + "pop %%rsi\n" + "pop %%rdx\n" + "pop %%rcx\n" + "pop %%rbx\n" + "pop %%rax\n" + "add $16, %%rsp\n" + "iretq\n" + : + : + : "memory"); } // Macro to generate interrupt stubs without error codes (push dummy 0) -#define ISR_NO_ERR(num) \ - __attribute__((naked)) void isr##num(void) { \ - asm volatile( \ - "push $0\n" \ - "push %0\n" \ - "jmp int_stub\n" \ - : : "i"(num)); \ +#define ISR_NO_ERR(num) \ + __attribute__((naked)) void isr##num(void) { \ + asm volatile("push $0\n" \ + "push %0\n" \ + "jmp int_stub\n" \ + : \ + : "i"(num)); \ } // Macro to generate interrupt stubs with error codes -#define ISR_ERR(num) \ - __attribute__((naked)) void isr##num(void) { \ - asm volatile( \ - "push %0\n" \ - "jmp int_stub\n" \ - : : "i"(num)); \ +#define ISR_ERR(num) \ + __attribute__((naked)) void isr##num(void) { \ + asm volatile("push %0\n" \ + "jmp int_stub\n" \ + : \ + : "i"(num)); \ } // CPU exceptions (0-31) -ISR_NO_ERR(0) // Divide by zero -ISR_NO_ERR(1) // Debug -ISR_NO_ERR(2) // NMI -ISR_NO_ERR(3) // Breakpoint -ISR_NO_ERR(4) // Overflow -ISR_NO_ERR(5) // Bound range exceeded -ISR_NO_ERR(6) // Invalid opcode -ISR_NO_ERR(7) // Device not available -ISR_ERR(8) // Double fault (pushes error code) -ISR_NO_ERR(9) // Coprocessor segment overrun -ISR_ERR(10) // Invalid TSS (pushes error code) -ISR_ERR(11) // Segment not present (pushes error code) -ISR_ERR(12) // Stack-segment fault (pushes error code) -ISR_ERR(13) // General protection fault (pushes error code) -ISR_ERR(14) // Page fault (pushes error code) -ISR_NO_ERR(15) // Reserved -ISR_NO_ERR(16) // x87 FPU error -ISR_ERR(17) // Alignment check (pushes error code) -ISR_NO_ERR(18) // Machine check -ISR_NO_ERR(19) // SIMD floating-point exception -ISR_NO_ERR(20) // Virtualization exception -ISR_ERR(21) // Control protection exception (pushes error code) -ISR_NO_ERR(22) // Reserved -ISR_NO_ERR(23) // Reserved -ISR_NO_ERR(24) // Reserved -ISR_NO_ERR(25) // Reserved -ISR_NO_ERR(26) // Reserved -ISR_NO_ERR(27) // Reserved -ISR_NO_ERR(28) // Reserved -ISR_NO_ERR(29) // Reserved -ISR_ERR(30) // Security exception (pushes error code) -ISR_NO_ERR(31) // Reserved +ISR_NO_ERR(0) // Divide by zero +ISR_NO_ERR(1) // Debug +ISR_NO_ERR(2) // NMI +ISR_NO_ERR(3) // Breakpoint +ISR_NO_ERR(4) // Overflow +ISR_NO_ERR(5) // Bound range exceeded +ISR_NO_ERR(6) // Invalid opcode +ISR_NO_ERR(7) // Device not available +ISR_ERR(8) // Double fault (pushes error code) +ISR_NO_ERR(9) // Coprocessor segment overrun +ISR_ERR(10) // Invalid TSS (pushes error code) +ISR_ERR(11) // Segment not present (pushes error code) +ISR_ERR(12) // Stack-segment fault (pushes error code) +ISR_ERR(13) // General protection fault (pushes error code) +ISR_ERR(14) // Page fault (pushes error code) +ISR_NO_ERR(15) // Reserved +ISR_NO_ERR(16) // x87 FPU error +ISR_ERR(17) // Alignment check (pushes error code) +ISR_NO_ERR(18) // Machine check +ISR_NO_ERR(19) // SIMD floating-point exception +ISR_NO_ERR(20) // Virtualization exception +ISR_ERR(21) // Control protection exception (pushes error code) +ISR_NO_ERR(22) // Reserved +ISR_NO_ERR(23) // Reserved +ISR_NO_ERR(24) // Reserved +ISR_NO_ERR(25) // Reserved +ISR_NO_ERR(26) // Reserved +ISR_NO_ERR(27) // Reserved +ISR_NO_ERR(28) // Reserved +ISR_NO_ERR(29) // Reserved +ISR_ERR(30) // Security exception (pushes error code) +ISR_NO_ERR(31) // Reserved // IRQs and user-defined interrupts (32-255) -ISR_NO_ERR(32) ISR_NO_ERR(33) ISR_NO_ERR(34) ISR_NO_ERR(35) -ISR_NO_ERR(36) ISR_NO_ERR(37) ISR_NO_ERR(38) ISR_NO_ERR(39) -ISR_NO_ERR(40) ISR_NO_ERR(41) ISR_NO_ERR(42) ISR_NO_ERR(43) -ISR_NO_ERR(44) ISR_NO_ERR(45) ISR_NO_ERR(46) ISR_NO_ERR(47) -ISR_NO_ERR(48) ISR_NO_ERR(49) ISR_NO_ERR(50) ISR_NO_ERR(51) -ISR_NO_ERR(52) ISR_NO_ERR(53) ISR_NO_ERR(54) ISR_NO_ERR(55) -ISR_NO_ERR(56) ISR_NO_ERR(57) ISR_NO_ERR(58) ISR_NO_ERR(59) -ISR_NO_ERR(60) ISR_NO_ERR(61) ISR_NO_ERR(62) ISR_NO_ERR(63) -ISR_NO_ERR(64) ISR_NO_ERR(65) ISR_NO_ERR(66) ISR_NO_ERR(67) -ISR_NO_ERR(68) ISR_NO_ERR(69) ISR_NO_ERR(70) ISR_NO_ERR(71) -ISR_NO_ERR(72) ISR_NO_ERR(73) ISR_NO_ERR(74) ISR_NO_ERR(75) -ISR_NO_ERR(76) ISR_NO_ERR(77) ISR_NO_ERR(78) ISR_NO_ERR(79) -ISR_NO_ERR(80) ISR_NO_ERR(81) ISR_NO_ERR(82) ISR_NO_ERR(83) -ISR_NO_ERR(84) ISR_NO_ERR(85) ISR_NO_ERR(86) ISR_NO_ERR(87) -ISR_NO_ERR(88) ISR_NO_ERR(89) ISR_NO_ERR(90) ISR_NO_ERR(91) -ISR_NO_ERR(92) ISR_NO_ERR(93) ISR_NO_ERR(94) ISR_NO_ERR(95) -ISR_NO_ERR(96) ISR_NO_ERR(97) ISR_NO_ERR(98) ISR_NO_ERR(99) -ISR_NO_ERR(100) ISR_NO_ERR(101) ISR_NO_ERR(102) ISR_NO_ERR(103) -ISR_NO_ERR(104) ISR_NO_ERR(105) ISR_NO_ERR(106) ISR_NO_ERR(107) -ISR_NO_ERR(108) ISR_NO_ERR(109) ISR_NO_ERR(110) ISR_NO_ERR(111) -ISR_NO_ERR(112) ISR_NO_ERR(113) ISR_NO_ERR(114) ISR_NO_ERR(115) -ISR_NO_ERR(116) ISR_NO_ERR(117) ISR_NO_ERR(118) ISR_NO_ERR(119) -ISR_NO_ERR(120) ISR_NO_ERR(121) ISR_NO_ERR(122) ISR_NO_ERR(123) -ISR_NO_ERR(124) ISR_NO_ERR(125) ISR_NO_ERR(126) ISR_NO_ERR(127) -ISR_NO_ERR(128) ISR_NO_ERR(129) ISR_NO_ERR(130) ISR_NO_ERR(131) -ISR_NO_ERR(132) ISR_NO_ERR(133) ISR_NO_ERR(134) ISR_NO_ERR(135) -ISR_NO_ERR(136) ISR_NO_ERR(137) ISR_NO_ERR(138) ISR_NO_ERR(139) -ISR_NO_ERR(140) ISR_NO_ERR(141) ISR_NO_ERR(142) ISR_NO_ERR(143) -ISR_NO_ERR(144) ISR_NO_ERR(145) ISR_NO_ERR(146) ISR_NO_ERR(147) -ISR_NO_ERR(148) ISR_NO_ERR(149) ISR_NO_ERR(150) ISR_NO_ERR(151) -ISR_NO_ERR(152) ISR_NO_ERR(153) ISR_NO_ERR(154) ISR_NO_ERR(155) -ISR_NO_ERR(156) ISR_NO_ERR(157) ISR_NO_ERR(158) ISR_NO_ERR(159) -ISR_NO_ERR(160) ISR_NO_ERR(161) ISR_NO_ERR(162) ISR_NO_ERR(163) -ISR_NO_ERR(164) ISR_NO_ERR(165) ISR_NO_ERR(166) ISR_NO_ERR(167) -ISR_NO_ERR(168) ISR_NO_ERR(169) ISR_NO_ERR(170) ISR_NO_ERR(171) -ISR_NO_ERR(172) ISR_NO_ERR(173) ISR_NO_ERR(174) ISR_NO_ERR(175) -ISR_NO_ERR(176) ISR_NO_ERR(177) ISR_NO_ERR(178) ISR_NO_ERR(179) -ISR_NO_ERR(180) ISR_NO_ERR(181) ISR_NO_ERR(182) ISR_NO_ERR(183) -ISR_NO_ERR(184) ISR_NO_ERR(185) ISR_NO_ERR(186) ISR_NO_ERR(187) -ISR_NO_ERR(188) ISR_NO_ERR(189) ISR_NO_ERR(190) ISR_NO_ERR(191) -ISR_NO_ERR(192) ISR_NO_ERR(193) ISR_NO_ERR(194) ISR_NO_ERR(195) -ISR_NO_ERR(196) ISR_NO_ERR(197) ISR_NO_ERR(198) ISR_NO_ERR(199) -ISR_NO_ERR(200) ISR_NO_ERR(201) ISR_NO_ERR(202) ISR_NO_ERR(203) -ISR_NO_ERR(204) ISR_NO_ERR(205) ISR_NO_ERR(206) ISR_NO_ERR(207) -ISR_NO_ERR(208) ISR_NO_ERR(209) ISR_NO_ERR(210) ISR_NO_ERR(211) -ISR_NO_ERR(212) ISR_NO_ERR(213) ISR_NO_ERR(214) ISR_NO_ERR(215) -ISR_NO_ERR(216) ISR_NO_ERR(217) ISR_NO_ERR(218) ISR_NO_ERR(219) -ISR_NO_ERR(220) ISR_NO_ERR(221) ISR_NO_ERR(222) ISR_NO_ERR(223) -ISR_NO_ERR(224) ISR_NO_ERR(225) ISR_NO_ERR(226) ISR_NO_ERR(227) -ISR_NO_ERR(228) ISR_NO_ERR(229) ISR_NO_ERR(230) ISR_NO_ERR(231) -ISR_NO_ERR(232) ISR_NO_ERR(233) ISR_NO_ERR(234) ISR_NO_ERR(235) -ISR_NO_ERR(236) ISR_NO_ERR(237) ISR_NO_ERR(238) ISR_NO_ERR(239) -ISR_NO_ERR(240) ISR_NO_ERR(241) ISR_NO_ERR(242) ISR_NO_ERR(243) -ISR_NO_ERR(244) ISR_NO_ERR(245) ISR_NO_ERR(246) ISR_NO_ERR(247) -ISR_NO_ERR(248) ISR_NO_ERR(249) ISR_NO_ERR(250) ISR_NO_ERR(251) -ISR_NO_ERR(252) ISR_NO_ERR(253) ISR_NO_ERR(254) ISR_NO_ERR(255) +ISR_NO_ERR(32) +ISR_NO_ERR(33) ISR_NO_ERR(34) ISR_NO_ERR(35) ISR_NO_ERR(36) ISR_NO_ERR(37) ISR_NO_ERR( + 38) ISR_NO_ERR(39) ISR_NO_ERR(40) ISR_NO_ERR(41) ISR_NO_ERR(42) ISR_NO_ERR(43) + ISR_NO_ERR(44) ISR_NO_ERR(45) ISR_NO_ERR(46) ISR_NO_ERR(47) ISR_NO_ERR( + 48) ISR_NO_ERR(49) ISR_NO_ERR(50) ISR_NO_ERR(51) ISR_NO_ERR(52) ISR_NO_ERR(53) + ISR_NO_ERR(54) ISR_NO_ERR(55) ISR_NO_ERR(56) ISR_NO_ERR(57) ISR_NO_ERR( + 58) ISR_NO_ERR(59) ISR_NO_ERR(60) ISR_NO_ERR(61) ISR_NO_ERR(62) + ISR_NO_ERR(63) ISR_NO_ERR(64) ISR_NO_ERR(65) ISR_NO_ERR(66) ISR_NO_ERR( + 67) ISR_NO_ERR(68) ISR_NO_ERR(69) ISR_NO_ERR(70) ISR_NO_ERR(71) + ISR_NO_ERR(72) ISR_NO_ERR(73) ISR_NO_ERR(74) ISR_NO_ERR(75) ISR_NO_ERR( + 76) ISR_NO_ERR(77) ISR_NO_ERR(78) ISR_NO_ERR(79) ISR_NO_ERR(80) + ISR_NO_ERR(81) ISR_NO_ERR(82) ISR_NO_ERR(83) ISR_NO_ERR( + 84) ISR_NO_ERR(85) ISR_NO_ERR(86) ISR_NO_ERR(87) + ISR_NO_ERR(88) ISR_NO_ERR(89) ISR_NO_ERR(90) ISR_NO_ERR( + 91) ISR_NO_ERR(92) ISR_NO_ERR(93) ISR_NO_ERR(94) + ISR_NO_ERR(95) ISR_NO_ERR(96) ISR_NO_ERR(97) ISR_NO_ERR( + 98) ISR_NO_ERR(99) ISR_NO_ERR(100) ISR_NO_ERR(101) + ISR_NO_ERR(102) ISR_NO_ERR(103) ISR_NO_ERR( + 104) ISR_NO_ERR(105) ISR_NO_ERR(106) + ISR_NO_ERR(107) ISR_NO_ERR(108) ISR_NO_ERR( + 109) ISR_NO_ERR(110) ISR_NO_ERR(111) + ISR_NO_ERR(112) ISR_NO_ERR(113) ISR_NO_ERR( + 114) ISR_NO_ERR(115) ISR_NO_ERR(116) + ISR_NO_ERR(117) ISR_NO_ERR(118) ISR_NO_ERR( + 119) ISR_NO_ERR(120) ISR_NO_ERR(121) + ISR_NO_ERR(122) ISR_NO_ERR( + 123) ISR_NO_ERR(124) + ISR_NO_ERR(125) ISR_NO_ERR( + 126) ISR_NO_ERR(127) + ISR_NO_ERR(128) ISR_NO_ERR( + 129) ISR_NO_ERR(130) + ISR_NO_ERR(131) ISR_NO_ERR( + 132) ISR_NO_ERR(133) + ISR_NO_ERR( + 134) ISR_NO_ERR(135) + ISR_NO_ERR(136) ISR_NO_ERR( + 137) ISR_NO_ERR(138) + ISR_NO_ERR(139) ISR_NO_ERR( + 140) ISR_NO_ERR(141) + ISR_NO_ERR(142) ISR_NO_ERR( + 143) + ISR_NO_ERR(144) ISR_NO_ERR(145) ISR_NO_ERR(146) ISR_NO_ERR(147) ISR_NO_ERR(148) ISR_NO_ERR(149) ISR_NO_ERR(150) ISR_NO_ERR(151) ISR_NO_ERR(152) ISR_NO_ERR(153) ISR_NO_ERR(154) ISR_NO_ERR(155) ISR_NO_ERR(156) ISR_NO_ERR(157) ISR_NO_ERR(158) ISR_NO_ERR(159) ISR_NO_ERR(160) ISR_NO_ERR(161) ISR_NO_ERR(162) ISR_NO_ERR(163) ISR_NO_ERR(164) ISR_NO_ERR(165) ISR_NO_ERR(166) ISR_NO_ERR(167) ISR_NO_ERR(168) ISR_NO_ERR(169) ISR_NO_ERR(170) ISR_NO_ERR(171) ISR_NO_ERR(172) ISR_NO_ERR(173) ISR_NO_ERR( + 174) ISR_NO_ERR(175) + ISR_NO_ERR( + 176) ISR_NO_ERR(177) + ISR_NO_ERR( + 178) ISR_NO_ERR(179) + ISR_NO_ERR( + 180) ISR_NO_ERR(181) + ISR_NO_ERR( + 182) ISR_NO_ERR(183) + ISR_NO_ERR( + 184) ISR_NO_ERR(185) + ISR_NO_ERR( + 186) + ISR_NO_ERR( + 187) + ISR_NO_ERR(188) ISR_NO_ERR(189) ISR_NO_ERR(190) ISR_NO_ERR(191) ISR_NO_ERR(192) ISR_NO_ERR(193) ISR_NO_ERR(194) ISR_NO_ERR(195) ISR_NO_ERR( + 196) ISR_NO_ERR(197) + ISR_NO_ERR(198) ISR_NO_ERR( + 199) + ISR_NO_ERR( + 200) ISR_NO_ERR(201) ISR_NO_ERR(202) ISR_NO_ERR(203) ISR_NO_ERR(204) ISR_NO_ERR(205) ISR_NO_ERR(206) ISR_NO_ERR(207) + ISR_NO_ERR(208) ISR_NO_ERR(209) ISR_NO_ERR(210) ISR_NO_ERR(211) ISR_NO_ERR(212) ISR_NO_ERR(213) ISR_NO_ERR(214) ISR_NO_ERR( + 215) ISR_NO_ERR(216) ISR_NO_ERR(217) ISR_NO_ERR(218) + ISR_NO_ERR(219) ISR_NO_ERR(220) ISR_NO_ERR(221) ISR_NO_ERR(222) ISR_NO_ERR(223) ISR_NO_ERR(224) ISR_NO_ERR(225) ISR_NO_ERR(226) ISR_NO_ERR(227) ISR_NO_ERR( + 228) ISR_NO_ERR(229) + ISR_NO_ERR(230) ISR_NO_ERR(231) ISR_NO_ERR(232) ISR_NO_ERR(233) ISR_NO_ERR(234) ISR_NO_ERR(235) ISR_NO_ERR( + 236) ISR_NO_ERR(237) + ISR_NO_ERR( + 238) ISR_NO_ERR(239) + ISR_NO_ERR(240) ISR_NO_ERR(241) ISR_NO_ERR(242) ISR_NO_ERR(243) ISR_NO_ERR(244) ISR_NO_ERR(245) ISR_NO_ERR( + 246) ISR_NO_ERR(247) + ISR_NO_ERR(248) ISR_NO_ERR( + 249) ISR_NO_ERR(250) + ISR_NO_ERR(251) ISR_NO_ERR( + 252) + ISR_NO_ERR( + 253) + ISR_NO_ERR( + 254) + ISR_NO_ERR( + 255) -// Array of all ISR handlers for easy initialization -void* isr_table[256] = { - isr0, isr1, isr2, isr3, isr4, isr5, isr6, isr7, - isr8, isr9, isr10, isr11, isr12, isr13, isr14, isr15, - isr16, isr17, isr18, isr19, isr20, isr21, isr22, isr23, - isr24, isr25, isr26, isr27, isr28, isr29, isr30, isr31, - isr32, isr33, isr34, isr35, isr36, isr37, isr38, isr39, - isr40, isr41, isr42, isr43, isr44, isr45, isr46, isr47, - isr48, isr49, isr50, isr51, isr52, isr53, isr54, isr55, - isr56, isr57, isr58, isr59, isr60, isr61, isr62, isr63, - isr64, isr65, isr66, isr67, isr68, isr69, isr70, isr71, - isr72, isr73, isr74, isr75, isr76, isr77, isr78, isr79, - isr80, isr81, isr82, isr83, isr84, isr85, isr86, isr87, - isr88, isr89, isr90, isr91, isr92, isr93, isr94, isr95, - isr96, isr97, isr98, isr99, isr100, isr101, isr102, isr103, - isr104, isr105, isr106, isr107, isr108, isr109, isr110, isr111, - isr112, isr113, isr114, isr115, isr116, isr117, isr118, isr119, - isr120, isr121, isr122, isr123, isr124, isr125, isr126, isr127, - isr128, isr129, isr130, isr131, isr132, isr133, isr134, isr135, - isr136, isr137, isr138, isr139, isr140, isr141, isr142, isr143, - isr144, isr145, isr146, isr147, isr148, isr149, isr150, isr151, - isr152, isr153, isr154, isr155, isr156, isr157, isr158, isr159, - isr160, isr161, isr162, isr163, isr164, isr165, isr166, isr167, - isr168, isr169, isr170, isr171, isr172, isr173, isr174, isr175, - isr176, isr177, isr178, isr179, isr180, isr181, isr182, isr183, - isr184, isr185, isr186, isr187, isr188, isr189, isr190, isr191, - isr192, isr193, isr194, isr195, isr196, isr197, isr198, isr199, - isr200, isr201, isr202, isr203, isr204, isr205, isr206, isr207, - isr208, isr209, isr210, isr211, isr212, isr213, isr214, isr215, - isr216, isr217, isr218, isr219, isr220, isr221, isr222, isr223, - isr224, isr225, isr226, isr227, isr228, isr229, isr230, isr231, - isr232, isr233, isr234, isr235, isr236, isr237, isr238, isr239, - isr240, isr241, isr242, isr243, isr244, isr245, isr246, isr247, - isr248, isr249, isr250, isr251, isr252, isr253, isr254, isr255, + // Array of all ISR handlers for easy initialization + void *isr_table[256] = { + isr0, isr1, isr2, isr3, isr4, isr5, isr6, isr7, isr8, + isr9, isr10, isr11, isr12, isr13, isr14, isr15, isr16, isr17, + isr18, isr19, isr20, isr21, isr22, isr23, isr24, isr25, isr26, + isr27, isr28, isr29, isr30, isr31, isr32, isr33, isr34, isr35, + isr36, isr37, isr38, isr39, isr40, isr41, isr42, isr43, isr44, + isr45, isr46, isr47, isr48, isr49, isr50, isr51, isr52, isr53, + isr54, isr55, isr56, isr57, isr58, isr59, isr60, isr61, isr62, + isr63, isr64, isr65, isr66, isr67, isr68, isr69, isr70, isr71, + isr72, isr73, isr74, isr75, isr76, isr77, isr78, isr79, isr80, + isr81, isr82, isr83, isr84, isr85, isr86, isr87, isr88, isr89, + isr90, isr91, isr92, isr93, isr94, isr95, isr96, isr97, isr98, + isr99, isr100, isr101, isr102, isr103, isr104, isr105, isr106, isr107, + isr108, isr109, isr110, isr111, isr112, isr113, isr114, isr115, isr116, + isr117, isr118, isr119, isr120, isr121, isr122, isr123, isr124, isr125, + isr126, isr127, isr128, isr129, isr130, isr131, isr132, isr133, isr134, + isr135, isr136, isr137, isr138, isr139, isr140, isr141, isr142, isr143, + isr144, isr145, isr146, isr147, isr148, isr149, isr150, isr151, isr152, + isr153, isr154, isr155, isr156, isr157, isr158, isr159, isr160, isr161, + isr162, isr163, isr164, isr165, isr166, isr167, isr168, isr169, isr170, + isr171, isr172, isr173, isr174, isr175, isr176, isr177, isr178, isr179, + isr180, isr181, isr182, isr183, isr184, isr185, isr186, isr187, isr188, + isr189, isr190, isr191, isr192, isr193, isr194, isr195, isr196, isr197, + isr198, isr199, isr200, isr201, isr202, isr203, isr204, isr205, isr206, + isr207, isr208, isr209, isr210, isr211, isr212, isr213, isr214, isr215, + isr216, isr217, isr218, isr219, isr220, isr221, isr222, isr223, isr224, + isr225, isr226, isr227, isr228, isr229, isr230, isr231, isr232, isr233, + isr234, isr235, isr236, isr237, isr238, isr239, isr240, isr241, isr242, + isr243, isr244, isr245, isr246, isr247, isr248, isr249, isr250, isr251, + isr252, isr253, isr254, isr255, }; // Initialize all IDT entries diff --git a/src/kbd.c b/src/kbd.c new file mode 100644 index 0000000..f469acb --- /dev/null +++ b/src/kbd.c @@ -0,0 +1,133 @@ +#include "apic.h" +#include "common.h" +#include "print.h" + +#include "kbd.h" + +#define PIC1_COMMAND 0x20 +#define PIC1_DATA 0x21 +#define PIC_EOI 0x20 + +#define PS2_DATA_PORT 0x60 +#define PS2_STATUS_PORT 0x64 + +// Scancode to ASCII mapping (US keyboard layout, simplified) +static const char scancode_to_ascii[] = { + 0, 27, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', + '-', '=', '\b', '\t', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', + 'o', 'p', '[', ']', '\n', + 0, // Control + 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'', '`', + 0, // Left shift + '\\', 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/', + 0, // Right shift + '*', + 0, // Alt + ' ' // Space +}; + +static const char scancode_to_ascii_shift[] = { + 0, 27, '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', + '_', '+', '\b', '\t', 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', + 'O', 'P', '{', '}', '\n', + 0, // Control + 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', '"', '~', + 0, // Left shift + '|', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', '<', '>', '?', + 0, // Right shift + '*', + 0, // Alt + ' ' // Space +}; + +static struct { + bool shift; + bool ctrl; + bool alt; + bool caps; +} kbd_state; + +#define KBD_BUFFER_SIZE 1024 +static struct { + char buff[KBD_BUFFER_SIZE]; + volatile int read_pos; + volatile int write_pos; +} kbd_buff; + +static void kbd_buffer_putc(char c) { + int next_pos = (kbd_buff.write_pos + 1) % KBD_BUFFER_SIZE; + if (next_pos != kbd_buff.read_pos) { + kbd_buff.buff[kbd_buff.write_pos] = c; + kbd_buff.write_pos = next_pos; + } +} + +char kbd_buffer_getc() { + if (kbd_buff.read_pos == kbd_buff.write_pos) { + return 0; + } + + char c = kbd_buff.buff[kbd_buff.read_pos]; + kbd_buff.read_pos = (kbd_buff.read_pos + 1) % KBD_BUFFER_SIZE; + return c; +} + +void kbd_handler() { + print("KBD HANDLER CALLED: scancode: "); + + u8 scancode = inb(PS2_DATA_PORT); + + + print8(scancode); + print("\n"); + + bool released = (scancode & 0x80); + scancode &= 0x7F; + + + switch(scancode) { + case 0x2A: + case 0x36: + kbd_state.shift = !released; + break; + case 0x1D: + kbd_state.ctrl = !released; + break; + case 0x38: + kbd_state.alt = !released; + break; + case 0x3A: + if(!released) { + kbd_state.caps = !kbd_state.caps; + } + default: + break; + } + + if(!released && scancode < sizeof(scancode_to_ascii)) { + char c = 0; + + if(kbd_state.shift) { + c = scancode_to_ascii_shift[scancode]; + } else { + c = scancode_to_ascii[scancode]; + } + + + if(kbd_state.caps && c >= 'a' && c <= 'z') { + + } else if(kbd_state.caps && c >= 'A' && c <= 'Z') { + c = c - 'A' + 'a'; + } + + if(c != 0) { + kbd_buffer_putc(c); + } + printn(&c, 1); + print("\n"); + } + + + send_eoi(); +} + diff --git a/src/kbd.h b/src/kbd.h new file mode 100644 index 0000000..8f981e7 --- /dev/null +++ b/src/kbd.h @@ -0,0 +1,2 @@ +#pragma once +void kbd_handler(); diff --git a/src/main.c b/src/main.c index 4955666..92b0a80 100644 --- a/src/main.c +++ b/src/main.c @@ -1,92 +1,92 @@ -#include -#include #include +#include +#include #include "../include/limine.h" #include "acpi.h" -#include "apic.h" #include "alloc.h" +#include "apic.h" #include "common.h" #include "map.h" #include "print.h" -// credit owed to https://wiki.osdev.org/Limine_Bare_Bones for the limine setup code +// credit owed to https://wiki.osdev.org/Limine_Bare_Bones for the limine setup +// code -__attribute__((used, section(".limine_requests"))) -static volatile u64 limine_base_revision[] = LIMINE_BASE_REVISION(4); +__attribute__(( + used, + section(".limine_requests"))) static volatile u64 limine_base_revision[] = + LIMINE_BASE_REVISION(4); -__attribute__((used, section(".limine_requests"))) -static volatile struct limine_framebuffer_request fb_req = { - .id = LIMINE_FRAMEBUFFER_REQUEST_ID, - .revision = 0 -}; +__attribute__(( + used, + section( + ".limine_requests"))) static volatile struct limine_framebuffer_request + fb_req = {.id = LIMINE_FRAMEBUFFER_REQUEST_ID, .revision = 0}; +__attribute__(( + used, + section(".limine_requests"))) static volatile struct limine_hhdm_request + hhdm_req = {.id = LIMINE_HHDM_REQUEST_ID, .revision = 0}; -__attribute__((used, section(".limine_requests"))) -static volatile struct limine_hhdm_request hhdm_req = { - .id = LIMINE_HHDM_REQUEST_ID, - .revision = 0 -}; - -__attribute__((used, section(".limine_requests"))) -static volatile struct limine_rsdp_request rsdp_req = { - .id = LIMINE_RSDP_REQUEST_ID, - .revision = 0 -}; +__attribute__(( + used, + section(".limine_requests"))) static volatile struct limine_rsdp_request + rsdp_req = {.id = LIMINE_RSDP_REQUEST_ID, .revision = 0}; u64 hhdm_offset; -__attribute__((used, section(".limine_requests_start"))) -static volatile u64 limine_requests_start_marker[] = LIMINE_REQUESTS_START_MARKER; +__attribute__((used, section(".limine_requests_start"))) static volatile u64 + limine_requests_start_marker[] = LIMINE_REQUESTS_START_MARKER; -__attribute__((used, section(".limine_requests_end"))) -static volatile u64 limine_requests_end_marker[] = LIMINE_REQUESTS_END_MARKER; +__attribute__((used, section(".limine_requests_end"))) static volatile u64 + limine_requests_end_marker[] = LIMINE_REQUESTS_END_MARKER; -void* memcpy(void* restrict dst, const void* src, size_t n) { - u8* restrict pdst = (u8* restrict)dst; - const u8* restrict psrc = (const u8* restrict)src; +void *memcpy(void *restrict dst, const void *src, size_t n) { + u8 *restrict pdst = (u8 *restrict)dst; + const u8 *restrict psrc = (const u8 *restrict)src; - for(size_t i = 0; i < n; i++) { + for (size_t i = 0; i < n; i++) { pdst[i] = psrc[i]; } return dst; } -void* memset(void* s, int c, size_t n) { - u8* p = (u8*) s; +void *memset(void *s, int c, size_t n) { + u8 *p = (u8 *)s; - for(size_t i = 0; i < n; i++) { + for (size_t i = 0; i < n; i++) { p[i] = (u8)c; } return s; } -void* memmove(void* dst, const void* src, size_t n) { - u8* restrict pdst = (u8* restrict)dst; - const u8* restrict psrc = (const u8* restrict)src; +void *memmove(void *dst, const void *src, size_t n) { + u8 *restrict pdst = (u8 *restrict)dst; + const u8 *restrict psrc = (const u8 *restrict)src; - if(src > dst) { - for(size_t i = 0; i < n; i++) { + if (src > dst) { + for (size_t i = 0; i < n; i++) { pdst[i] = psrc[i]; - } - } else if(src < dst) { - for(size_t i = n; i > 0; i--) { - pdst[i-1] = psrc[i-1]; - } + } + } else if (src < dst) { + for (size_t i = n; i > 0; i--) { + pdst[i - 1] = psrc[i - 1]; + } } return dst; } -int memcmp(const void* s1, const void* s2, size_t n) { - const u8* p1 = (const u8* )s1; - const u8* p2 = (const u8* )s2; +int memcmp(const void *s1, const void *s2, size_t n) { + const u8 *p1 = (const u8 *)s1; + const u8 *p2 = (const u8 *)s2; - for(size_t i = 0; i < n; i++) { - if(p1[i] != p2[i]) { + for (size_t i = 0; i < n; i++) { + if (p1[i] != p2[i]) { return p1[i] < p2[i] ? -1 : 1; } } @@ -95,21 +95,18 @@ int memcmp(const void* s1, const void* s2, size_t n) { } void hang() { - for(;;) { - asm ("hlt"); + for (;;) { + asm("hlt"); } } - -struct limine_framebuffer* fb; +struct limine_framebuffer *fb; void draw(u8 vect) { - for(size_t y = 0; y < fb->height; y++) { - for(size_t x = 0; x < fb->width; x++) { - volatile u32* fb_ptr = fb->address; - fb_ptr[y * fb->width + x] = ( - ((x ^ y) & 0xff) * 0x0F0003 - )*vect; + for (size_t y = 0; y < fb->height; y++) { + for (size_t x = 0; x < fb->width; x++) { + volatile u32 *fb_ptr = fb->address; + fb_ptr[y * fb->width + x] = (((x ^ y) & 0xff) * 0x0F0003) * vect; } } } @@ -120,29 +117,30 @@ extern u32 fg; extern u32 bg; void enable_ps2_keyboard_interrupts(void) { - // Read PS/2 configuration byte - outb(0x64, 0x20); - while (!(inb(0x64) & 0x01)); // Wait for data - u8 config = inb(0x60); - - // Enable keyboard interrupt (bit 0) and clock (clear bit 4) - config |= 0x01; // Enable first port interrupt - config &= ~0x10; // Enable first port clock - - // Write config back - outb(0x64, 0x60); - outb(0x60, config); - - // Enable keyboard port - outb(0x64, 0xAE); + // Read PS/2 configuration byte + outb(0x64, 0x20); + while (!(inb(0x64) & 0x01)) + ; // Wait for data + u8 config = inb(0x60); + + // Enable keyboard interrupt (bit 0) and clock (clear bit 4) + config |= 0x01; // Enable first port interrupt + config &= ~0x10; // Enable first port clock + + // Write config back + outb(0x64, 0x60); + outb(0x60, config); + + // Enable keyboard port + outb(0x64, 0xAE); } void kmain() { - if(LIMINE_BASE_REVISION_SUPPORTED(limine_base_revision) == false) { + if (LIMINE_BASE_REVISION_SUPPORTED(limine_base_revision) == false) { hang(); } - if(fb_req.response == NULL || fb_req.response->framebuffer_count < 1) { + if (fb_req.response == NULL || fb_req.response->framebuffer_count < 1) { hang(); } @@ -154,43 +152,39 @@ void kmain() { bg = 0xFFFFFF; fg = 0x000000; - if(!hhdm_req.response) { + if (!hhdm_req.response) { print("Failed to get higher half direct mapping\n."); hang(); } hhdm_offset = hhdm_req.response->offset; - if(!rsdp_req.response) { - print ("Failed to find rsdp\n."); + if (!rsdp_req.response) { + print("Failed to find rsdp\n."); hang(); } alloc_init(); - - rsdp = (struct acpi_rsdp_header*)(rsdp_req.response->address); - + rsdp = (struct acpi_rsdp_header *)(rsdp_req.response->address); print("Found RSDP @ 0x"); print64((u64)rsdp); put('\n'); print("With signature: "); - printn((char*)rsdp->signature, sizeof(rsdp->signature)); + printn((char *)rsdp->signature, sizeof(rsdp->signature)); print(" v"); print8(rsdp->revision); print("\nRSDT at 0x"); - struct acpi_rsdt* rsdt = - (struct acpi_rsdt*)( - (rsdp->revision? rsdp->ptr64:rsdp->ptr32) + hhdm_offset - ); + struct acpi_rsdt *rsdt = + (struct acpi_rsdt *)((rsdp->revision ? rsdp->ptr64 : rsdp->ptr32) + + hhdm_offset); print64((u64)rsdt); print("\nSDT Signature: "); - - printn((const char*) rsdt->signature, sizeof(rsdt->signature)); + printn((const char *)rsdt->signature, sizeof(rsdt->signature)); print("\nAPIC Local Base: "); /* I should check cpuid to ensure its supported but it will @@ -200,7 +194,7 @@ void kmain() { print("APIC Enabled\n"); ioapic_init(); - if(!test_if_mapped((u64) apic_reg(0))) { + if (!test_if_mapped((u64)apic_reg(0))) { print("Mapping APIC registers failed :(\n"); hang(); } @@ -213,14 +207,15 @@ void kmain() { print("Enabling keyboard\n"); enable_ps2_keyboard_interrupts(); - outb(0x64, 0x20); // Read config - while (!(inb(0x64) & 0x01)); + outb(0x64, 0x20); // Read config + while (!(inb(0x64) & 0x01)) + ; u8 config = inb(0x60); asm volatile("sti"); - print("Press a key NOW...\n"); - - volatile u32* tpr = apic_reg(0x80); + print("Press a key NOW...\n"); + + volatile u32 *tpr = apic_reg(0x80); print("TPR: 0x"); print32(*tpr); print("\n"); @@ -228,30 +223,31 @@ void kmain() { print("PS/2 config: 0x"); print8(config); if (!(config & 0x01)) { - print("\nProblem: Bit 0 is 0 (interrupt disabled)\n"); + print("\nProblem: Bit 0 is 0 (interrupt disabled)\n"); } else { - print("\nOK: Bit 0 is 1 (interrupt enabled)\n"); + print("\nOK: Bit 0 is 1 (interrupt enabled)\n"); } print("Press keys (polling test)...\n"); while (1) { - if (inb(0x64) & 0x01) { // Data available - u8 code = inb(0x60); - print("Scan code: 0x"); - print8(code); - print("\n"); - volatile u32* irr = apic_reg(0x210); - print32(*irr); - irr = apic_reg(0x200); // IRR bits 31:0 - u32* isr = apic_reg(0x100); // ISR bits 31:0 + if (inb(0x64) & 0x01) { // Data available + u8 code = inb(0x60); + print("Scan code: 0x"); + print8(code); + print("\n"); + volatile u32 *irr = apic_reg(0x210); + print32(*irr); + irr = apic_reg(0x200); // IRR bits 31:0 + u32 *isr = apic_reg(0x100); // ISR bits 31:0 - print("IRR: "); print32(*irr); - print(" ISR: "); print32(*isr); - print("\n"); - if (code == 0x01) break; // ESC - } + print("IRR: "); + print32(*irr); + print(" ISR: "); + print32(*isr); + print("\n"); + if (code == 0x01) + break; // ESC + } } hang(); - } - diff --git a/src/map.c b/src/map.c index 5c89772..19f3440 100644 --- a/src/map.c +++ b/src/map.c @@ -3,7 +3,7 @@ #include "print.h" // MMIO (Memory-Mapped I/O) Mapping for ACPI and other hardware registers -// +// // CRITICAL: MMIO regions are NOT regular RAM! // - They're not in Limine's memory map as "usable" // - They're often above the RAM limit @@ -12,11 +12,173 @@ // Page table entry structure struct page_entry { + u64 present : 1; + u64 writable : 1; + u64 user : 1; + u64 write_through : 1; + u64 cache_disabled : 1; // IMPORTANT for MMIO! + u64 accessed : 1; + u64 dirty : 1; + u64 huge_page : 1; + u64 global : 1; + u64 unused : 3; + u64 frame : 40; + u64 reserved : 11; + u64 no_execute : 1; +}; + +extern u64 hhdm_offset; + +// Get current page tables +static u64 get_cr3() { + u64 cr3; + asm volatile("mov %%cr3, %0" : "=r"(cr3)); + return cr3 & ~0xFFF; +} + +static u64 alloc_page_table() { + void *a = alloc((1 << 12) / PAGE_SIZE); + if (!a) { + print("Failed to allocate page table\n"); + } + return a ? virt_to_phys(a) : 0; +} + +// Get or create a page table entry at any level +static struct page_entry *get_or_create_table(struct page_entry *table, + u64 index) { + if (!table[index].present) { + u64 new_table_phys = alloc_page_table(); + if (new_table_phys == 0) { + print("failed to alloc\n"); + return NULL; + } + + table[index].present = 1; + table[index].writable = 1; + table[index].user = 0; + table[index].frame = new_table_phys >> 12; + } + + u64 next_table_phys = (u64)table[index].frame << 12; + return (struct page_entry *)phys_to_virt(next_table_phys); +} + +// Map a MMIO page with proper cache settings +// physical_addr: Physical address of MMIO region +// size: Size in bytes (will be rounded up to 4KB pages) +// Returns: Virtual address to access the MMIO region +void *map_mmio(u64 physical_addr, u64 size) { + print("Mapping MMIO region:\n"); + print(" Physical: 0x"); + print64(physical_addr); + print("\n Size: 0x"); + print64(size); + print(" ("); + print64(size >> 20); + print(" MiB)\n"); + + // Align physical address down to page boundary + u64 phys_base = physical_addr & ~(PAGE_SIZE - 1); + u64 offset_in_page = physical_addr & (PAGE_SIZE - 1); + + // Calculate number of pages needed + u64 total_size = size + offset_in_page; + u64 num_pages = (total_size + PAGE_SIZE - 1) / PAGE_SIZE; + + print(" Aligned physical: 0x"); + print64(phys_base); + print("\n Offset in page: 0x"); + print64(offset_in_page); + print("\n Pages needed: "); + print64(num_pages); + print("\n"); + + // For MMIO, we typically map to the HHDM region + // Virtual address = Physical address + HHDM offset + u64 virt_base = phys_base + hhdm_offset; + + print(" Target virtual: 0x"); + print64(virt_base); + print("\n"); + + // Get current page tables + u64 pml4_phys = get_cr3(); + struct page_entry *pml4 = (struct page_entry *)phys_to_virt(pml4_phys); + + // Map each page + for (u64 i = 0; i < num_pages; i++) { + u64 current_phys = phys_base + (i * PAGE_SIZE); + u64 current_virt = virt_base + (i * PAGE_SIZE); + + // Extract indices + u64 pml4_index = (current_virt >> 39) & 0x1FF; + u64 pdpt_index = (current_virt >> 30) & 0x1FF; + u64 pd_index = (current_virt >> 21) & 0x1FF; + u64 pt_index = (current_virt >> 12) & 0x1FF; + + // Walk/create page table hierarchy + struct page_entry *pdpt = get_or_create_table(pml4, pml4_index); + if (!pdpt) { + print("ERROR: Failed to get/create PDPT\n"); + return NULL; + } + + struct page_entry *pd = get_or_create_table(pdpt, pdpt_index); + if (!pd) { + print("ERROR: Failed to get/create PD\n"); + return NULL; + } + + struct page_entry *pt = get_or_create_table(pd, pd_index); + if (!pt) { + print("ERROR: Failed to get/create PT\n"); + return NULL; + } + + // Map the page with MMIO-appropriate settings + pt[pt_index].present = 1; + pt[pt_index].writable = 1; + pt[pt_index].user = 0; + pt[pt_index].cache_disabled = 1; // CRITICAL: Disable caching for MMIO! + pt[pt_index].write_through = 0; + pt[pt_index].no_execute = 1; // Don't execute from MMIO + pt[pt_index].frame = current_phys >> 12; + + // Flush TLB for this page + asm volatile("invlpg (%0)" ::"r"(current_virt) : "memory"); + } + + print(" MMIO mapped successfully!\n"); + print(" Access at virtual: 0x"); + print64(virt_base + offset_in_page); + print("\n\n"); + + // Return virtual address (with original offset) + return (void *)(virt_base + offset_in_page); +} + +// Test correct mapping +int test_if_mapped(u64 virt_addr) { + // Try to read - if we get page fault, it's not mapped + // For now, just check the page tables manually + + u64 pml4_idx = (virt_addr >> 39) & 0x1FF; + u64 pdpt_idx = (virt_addr >> 30) & 0x1FF; + u64 pd_idx = (virt_addr >> 21) & 0x1FF; + u64 pt_idx = (virt_addr >> 12) & 0x1FF; + + // Get CR3 + u64 cr3; + asm volatile("mov %%cr3, %0" : "=r"(cr3)); + u64 pml4_phys = cr3 & ~0xFFF; + + struct page_entry { u64 present : 1; u64 writable : 1; u64 user : 1; u64 write_through : 1; - u64 cache_disabled : 1; // IMPORTANT for MMIO! + u64 cache_disabled : 1; u64 accessed : 1; u64 dirty : 1; u64 huge_page : 1; @@ -25,451 +187,298 @@ struct page_entry { u64 frame : 40; u64 reserved : 11; u64 no_execute : 1; -}; + }; -extern u64 hhdm_offset; + // Access PML4 + struct page_entry *pml4 = (struct page_entry *)(pml4_phys + hhdm_offset); + if (!pml4[pml4_idx].present) { + print(" PML4["); + print64(pml4_idx); + print("] NOT PRESENT\n"); + return 0; + } -// Get current page tables -static u64 get_cr3() { - u64 cr3; - asm volatile("mov %%cr3, %0" : "=r"(cr3)); - return cr3 & ~0xFFF; + // Access PDPT + struct page_entry *pdpt = + (struct page_entry *)(((u64)pml4[pml4_idx].frame << 12) + hhdm_offset); + + if (!pdpt[pdpt_idx].present) { + print(" PDPT["); + print64(pdpt_idx); + print("] NOT PRESENT\n"); + return 0; + } + + // Access PD + struct page_entry *pd = + (struct page_entry *)(((u64)pdpt[pdpt_idx].frame << 12) + hhdm_offset); + + if (!pd[pd_idx].present) { + print(" PD["); + print64(pd_idx); + print("] NOT PRESENT\n"); + return 0; + } + + // Access PT + struct page_entry *pt = + (struct page_entry *)(((u64)pd[pd_idx].frame << 12) + hhdm_offset); + + if (!pt[pt_idx].present) { + print(" PT["); + print64(pt_idx); + print("] NOT PRESENT\n"); + return 0; + } + + print(" All levels present\n"); + print(" Physical page: 0x"); + print64((u64)pt[pt_idx].frame << 12); + print("\n"); + print(" Cache disabled: "); + print8(pt[pt_idx].cache_disabled); + print("\n"); + + return 1; } -static u64 alloc_page_table() { - void* a = alloc((1<<12) / PAGE_SIZE); - if(!a) { - print("Failed to allocate page table\n"); - } - return a? virt_to_phys(a) : 0; -} - -// Get or create a page table entry at any level -static struct page_entry* get_or_create_table(struct page_entry *table, u64 index) { - if (!table[index].present) { - u64 new_table_phys = alloc_page_table(); - if (new_table_phys == 0) { - print("failed to alloc\n"); - return NULL; - } - - table[index].present = 1; - table[index].writable = 1; - table[index].user = 0; - table[index].frame = new_table_phys >> 12; - } - - u64 next_table_phys = (u64)table[index].frame << 12; - return (struct page_entry*)phys_to_virt(next_table_phys); -} - -// Map a MMIO page with proper cache settings -// physical_addr: Physical address of MMIO region -// size: Size in bytes (will be rounded up to 4KB pages) -// Returns: Virtual address to access the MMIO region -void* map_mmio(u64 physical_addr, u64 size) { - print("Mapping MMIO region:\n"); - print(" Physical: 0x"); - print64(physical_addr); - print("\n Size: 0x"); - print64(size); - print(" ("); - print64(size >> 20); - print(" MiB)\n"); - - // Align physical address down to page boundary - u64 phys_base = physical_addr & ~(PAGE_SIZE-1); - u64 offset_in_page = physical_addr & (PAGE_SIZE-1); - - // Calculate number of pages needed - u64 total_size = size + offset_in_page; - u64 num_pages = (total_size + PAGE_SIZE - 1) / PAGE_SIZE; - - print(" Aligned physical: 0x"); - print64(phys_base); - print("\n Offset in page: 0x"); - print64(offset_in_page); - print("\n Pages needed: "); - print64(num_pages); - print("\n"); - - // For MMIO, we typically map to the HHDM region - // Virtual address = Physical address + HHDM offset - u64 virt_base = phys_base + hhdm_offset; - - print(" Target virtual: 0x"); - print64(virt_base); - print("\n"); - - // Get current page tables - u64 pml4_phys = get_cr3(); - struct page_entry *pml4 = (struct page_entry*)phys_to_virt(pml4_phys); - - // Map each page - for (u64 i = 0; i < num_pages; i++) { - u64 current_phys = phys_base + (i * PAGE_SIZE); - u64 current_virt = virt_base + (i * PAGE_SIZE); - - // Extract indices - u64 pml4_index = (current_virt >> 39) & 0x1FF; - u64 pdpt_index = (current_virt >> 30) & 0x1FF; - u64 pd_index = (current_virt >> 21) & 0x1FF; - u64 pt_index = (current_virt >> 12) & 0x1FF; - - // Walk/create page table hierarchy - struct page_entry *pdpt = get_or_create_table(pml4, pml4_index); - if (!pdpt) { - print("ERROR: Failed to get/create PDPT\n"); - return NULL; - } - - struct page_entry *pd = get_or_create_table(pdpt, pdpt_index); - if (!pd) { - print("ERROR: Failed to get/create PD\n"); - return NULL; - } - - struct page_entry *pt = get_or_create_table(pd, pd_index); - if (!pt) { - print("ERROR: Failed to get/create PT\n"); - return NULL; - } - - // Map the page with MMIO-appropriate settings - pt[pt_index].present = 1; - pt[pt_index].writable = 1; - pt[pt_index].user = 0; - pt[pt_index].cache_disabled = 1; // CRITICAL: Disable caching for MMIO! - pt[pt_index].write_through = 0; - pt[pt_index].no_execute = 1; // Don't execute from MMIO - pt[pt_index].frame = current_phys >> 12; - - // Flush TLB for this page - asm volatile("invlpg (%0)" :: "r"(current_virt) : "memory"); - } - - print(" MMIO mapped successfully!\n"); - print(" Access at virtual: 0x"); - print64(virt_base + offset_in_page); - print("\n\n"); - - // Return virtual address (with original offset) - return (void*)(virt_base + offset_in_page); -} - -// Test correct mapping -int test_if_mapped(u64 virt_addr) { - // Try to read - if we get page fault, it's not mapped - // For now, just check the page tables manually - - u64 pml4_idx = (virt_addr >> 39) & 0x1FF; - u64 pdpt_idx = (virt_addr >> 30) & 0x1FF; - u64 pd_idx = (virt_addr >> 21) & 0x1FF; - u64 pt_idx = (virt_addr >> 12) & 0x1FF; - - // Get CR3 - u64 cr3; - asm volatile("mov %%cr3, %0" : "=r"(cr3)); - u64 pml4_phys = cr3 & ~0xFFF; - - struct page_entry { - u64 present : 1; - u64 writable : 1; - u64 user : 1; - u64 write_through : 1; - u64 cache_disabled : 1; - u64 accessed : 1; - u64 dirty : 1; - u64 huge_page : 1; - u64 global : 1; - u64 unused : 3; - u64 frame : 40; - u64 reserved : 11; - u64 no_execute : 1; - }; - - // Access PML4 - struct page_entry *pml4 = (struct page_entry*)(pml4_phys + hhdm_offset); - - if (!pml4[pml4_idx].present) { - print(" PML4["); - print64(pml4_idx); - print("] NOT PRESENT\n"); - return 0; - } - - // Access PDPT - struct page_entry *pdpt = (struct page_entry*)(((u64)pml4[pml4_idx].frame << 12) + hhdm_offset); - - if (!pdpt[pdpt_idx].present) { - print(" PDPT["); - print64(pdpt_idx); - print("] NOT PRESENT\n"); - return 0; - } - - // Access PD - struct page_entry *pd = (struct page_entry*)(((u64)pdpt[pdpt_idx].frame << 12) + hhdm_offset); - - if (!pd[pd_idx].present) { - print(" PD["); - print64(pd_idx); - print("] NOT PRESENT\n"); - return 0; - } - - // Access PT - struct page_entry *pt = (struct page_entry*)(((u64)pd[pd_idx].frame << 12) + hhdm_offset); - - if (!pt[pt_idx].present) { - print(" PT["); - print64(pt_idx); - print("] NOT PRESENT\n"); - return 0; - } - - print(" All levels present\n"); - print(" Physical page: 0x"); - print64((u64)pt[pt_idx].frame << 12); - print("\n"); - print(" Cache disabled: "); - print8(pt[pt_idx].cache_disabled); - print("\n"); - - return 1; -} - - // Unmap MMIO region void unmap_mmio(void *virtual_addr, u64 size) { - u64 virt_base = (u64)virtual_addr & ~0xFFF; - u64 num_pages = (size + ((u64)virtual_addr & 0xFFF) + 0xFFF) / 4096; - - u64 pml4_phys = get_cr3(); - struct page_entry *pml4 = (struct page_entry*)phys_to_virt(pml4_phys); - - for (u64 i = 0; i < num_pages; i++) { - u64 current_virt = virt_base + (i * 4096); - - u64 pml4_index = (current_virt >> 39) & 0x1FF; - u64 pdpt_index = (current_virt >> 30) & 0x1FF; - u64 pd_index = (current_virt >> 21) & 0x1FF; - u64 pt_index = (current_virt >> 12) & 0x1FF; - - if (!pml4[pml4_index].present) continue; - struct page_entry *pdpt = phys_to_virt((u64)pml4[pml4_index].frame << 12); - - if (!pdpt[pdpt_index].present) continue; - struct page_entry *pd = phys_to_virt((u64)pdpt[pdpt_index].frame << 12); - - if (!pd[pd_index].present) continue; - struct page_entry *pt = phys_to_virt((u64)pd[pd_index].frame << 12); - - if (!pt[pt_index].present) continue; - - // Clear the entry - *((u64*)&pt[pt_index]) = 0; - - // Flush TLB - asm volatile("invlpg (%0)" :: "r"(current_virt) : "memory"); - } + u64 virt_base = (u64)virtual_addr & ~0xFFF; + u64 num_pages = (size + ((u64)virtual_addr & 0xFFF) + 0xFFF) / 4096; + + u64 pml4_phys = get_cr3(); + struct page_entry *pml4 = (struct page_entry *)phys_to_virt(pml4_phys); + + for (u64 i = 0; i < num_pages; i++) { + u64 current_virt = virt_base + (i * 4096); + + u64 pml4_index = (current_virt >> 39) & 0x1FF; + u64 pdpt_index = (current_virt >> 30) & 0x1FF; + u64 pd_index = (current_virt >> 21) & 0x1FF; + u64 pt_index = (current_virt >> 12) & 0x1FF; + + if (!pml4[pml4_index].present) + continue; + struct page_entry *pdpt = phys_to_virt((u64)pml4[pml4_index].frame << 12); + + if (!pdpt[pdpt_index].present) + continue; + struct page_entry *pd = phys_to_virt((u64)pdpt[pdpt_index].frame << 12); + + if (!pd[pd_index].present) + continue; + struct page_entry *pt = phys_to_virt((u64)pd[pd_index].frame << 12); + + if (!pt[pt_index].present) + continue; + + // Clear the entry + *((u64 *)&pt[pt_index]) = 0; + + // Flush TLB + asm volatile("invlpg (%0)" ::"r"(current_virt) : "memory"); + } } // Check if a physical address is already mapped int is_mapped(u64 physical_addr) { - u64 virtual_addr = physical_addr + hhdm_offset; - - u64 pml4_phys = get_cr3(); - struct page_entry *pml4 = phys_to_virt(pml4_phys); - - u64 pml4_index = (virtual_addr >> 39) & 0x1FF; - u64 pdpt_index = (virtual_addr >> 30) & 0x1FF; - u64 pd_index = (virtual_addr >> 21) & 0x1FF; - u64 pt_index = (virtual_addr >> 12) & 0x1FF; - - if (!pml4[pml4_index].present) return 0; - struct page_entry *pdpt = phys_to_virt((u64)pml4[pml4_index].frame << 12); - - if (!pdpt[pdpt_index].present) return 0; - - // Check for 1GB huge page - if (pdpt[pdpt_index].huge_page) return 1; - - struct page_entry *pd = phys_to_virt((u64)pdpt[pdpt_index].frame << 12); - - if (!pd[pd_index].present) return 0; - - // Check for 2MB huge page - if (pd[pd_index].huge_page) return 1; - - struct page_entry *pt = phys_to_virt((u64)pd[pd_index].frame << 12); - - return pt[pt_index].present; -} + u64 virtual_addr = physical_addr + hhdm_offset; + u64 pml4_phys = get_cr3(); + struct page_entry *pml4 = phys_to_virt(pml4_phys); + + u64 pml4_index = (virtual_addr >> 39) & 0x1FF; + u64 pdpt_index = (virtual_addr >> 30) & 0x1FF; + u64 pd_index = (virtual_addr >> 21) & 0x1FF; + u64 pt_index = (virtual_addr >> 12) & 0x1FF; + + if (!pml4[pml4_index].present) + return 0; + struct page_entry *pdpt = phys_to_virt((u64)pml4[pml4_index].frame << 12); + + if (!pdpt[pdpt_index].present) + return 0; + + // Check for 1GB huge page + if (pdpt[pdpt_index].huge_page) + return 1; + + struct page_entry *pd = phys_to_virt((u64)pdpt[pdpt_index].frame << 12); + + if (!pd[pd_index].present) + return 0; + + // Check for 2MB huge page + if (pd[pd_index].huge_page) + return 1; + + struct page_entry *pt = phys_to_virt((u64)pd[pd_index].frame << 12); + + return pt[pt_index].present; +} // Read from ACPI register (8-bit) u8 acpi_read8(void *mmio_base, u64 offset) { - volatile u8 *addr = (volatile u8*)((u64)mmio_base + offset); - return *addr; + volatile u8 *addr = (volatile u8 *)((u64)mmio_base + offset); + return *addr; } // Read from ACPI register (16-bit) u16 acpi_read16(void *mmio_base, u64 offset) { - volatile u16 *addr = (volatile u16*)((u64)mmio_base + offset); - return *addr; + volatile u16 *addr = (volatile u16 *)((u64)mmio_base + offset); + return *addr; } // Read from ACPI register (32-bit) u32 acpi_read32(void *mmio_base, u64 offset) { - volatile u32 *addr = (volatile u32*)((u64)mmio_base + offset); - return *addr; + volatile u32 *addr = (volatile u32 *)((u64)mmio_base + offset); + return *addr; } // Read from ACPI register (64-bit) u64 acpi_read64(void *mmio_base, u64 offset) { - volatile u64 *addr = (volatile u64*)((u64)mmio_base + offset); - return *addr; + volatile u64 *addr = (volatile u64 *)((u64)mmio_base + offset); + return *addr; } // Write to ACPI register (8-bit) void acpi_write8(void *mmio_base, u64 offset, u8 value) { - volatile u8 *addr = (volatile u8*)((u64)mmio_base + offset); - *addr = value; + volatile u8 *addr = (volatile u8 *)((u64)mmio_base + offset); + *addr = value; } // Write to ACPI register (16-bit) void acpi_write16(void *mmio_base, u64 offset, u16 value) { - volatile u16 *addr = (volatile u16*)((u64)mmio_base + offset); - *addr = value; + volatile u16 *addr = (volatile u16 *)((u64)mmio_base + offset); + *addr = value; } // Write to ACPI register (32-bit) void acpi_write32(void *mmio_base, u64 offset, u32 value) { - volatile u32 *addr = (volatile u32*)((u64)mmio_base + offset); - *addr = value; + volatile u32 *addr = (volatile u32 *)((u64)mmio_base + offset); + *addr = value; } // Write to ACPI register (64-bit) void acpi_write64(void *mmio_base, u64 offset, u64 value) { - volatile u64 *addr = (volatile u64*)((u64)mmio_base + offset); - *addr = value; + volatile u64 *addr = (volatile u64 *)((u64)mmio_base + offset); + *addr = value; } // Example: Map and access ACPI PM1a Control Block -void* map_acpi_pm1a_control(u64 physical_addr) { - print("Mapping ACPI PM1a Control Block...\n"); - - // PM1a Control is typically 2 bytes, but map at least one page - void *mmio = map_mmio(physical_addr, 4096); - - if (mmio) { - print("PM1a Control Block mapped at virtual: 0x"); - print64((u64)mmio); - print("\n"); - } - - return mmio; +void *map_acpi_pm1a_control(u64 physical_addr) { + print("Mapping ACPI PM1a Control Block...\n"); + + // PM1a Control is typically 2 bytes, but map at least one page + void *mmio = map_mmio(physical_addr, 4096); + + if (mmio) { + print("PM1a Control Block mapped at virtual: 0x"); + print64((u64)mmio); + print("\n"); + } + + return mmio; } // Example: Map ACPI tables (FADT, MADT, etc.) -void* map_acpi_table(u64 physical_addr, u64 size) { - print("Mapping ACPI table...\n"); - print(" Physical: 0x"); - print64(physical_addr); - print("\n Size: "); - print64(size); - print(" bytes\n"); - - void *table = map_mmio(physical_addr, size); - - if (table) { - print("ACPI table mapped at virtual: 0x"); - print64((u64)table); - print("\n"); - } - - return table; -} +void *map_acpi_table(u64 physical_addr, u64 size) { + print("Mapping ACPI table...\n"); + print(" Physical: 0x"); + print64(physical_addr); + print("\n Size: "); + print64(size); + print(" bytes\n"); + void *table = map_mmio(physical_addr, size); + + if (table) { + print("ACPI table mapped at virtual: 0x"); + print64((u64)table); + print("\n"); + } + + return table; +} void print_page_mapping(u64 virtual_addr) { - print("Page mapping for virtual 0x"); - print64(virtual_addr); - print(":\n"); - - u64 pml4_phys = get_cr3(); - struct page_entry *pml4 = phys_to_virt(pml4_phys); - - u64 pml4_index = (virtual_addr >> 39) & 0x1FF; - u64 pdpt_index = (virtual_addr >> 30) & 0x1FF; - u64 pd_index = (virtual_addr >> 21) & 0x1FF; - u64 pt_index = (virtual_addr >> 12) & 0x1FF; - - print(" Indices: PML4["); - print64(pml4_index); - print("] PDPT["); - print64(pdpt_index); - print("] PD["); - print64(pd_index); - print("] PT["); - print64(pt_index); - print("]\n"); - - if (!pml4[pml4_index].present) { - print(" PML4 entry not present!\n"); - return; - } - print(" PML4 entry present, frame=0x"); - print64((u64)pml4[pml4_index].frame << 12); - print("\n"); - - struct page_entry *pdpt = phys_to_virt((u64)pml4[pml4_index].frame << 12); - - if (!pdpt[pdpt_index].present) { - print(" PDPT entry not present!\n"); - return; - } - print(" PDPT entry present, frame=0x"); - print64((u64)pdpt[pdpt_index].frame << 12); - print("\n"); - - if (pdpt[pdpt_index].huge_page) { - print(" 1GB huge page!\n"); - return; - } - - struct page_entry *pd = phys_to_virt((u64)pdpt[pdpt_index].frame << 12); - - if (!pd[pd_index].present) { - print(" PD entry not present!\n"); - return; - } - print(" PD entry present, frame=0x"); - print64((u64)pd[pd_index].frame << 12); - print("\n"); - - if (pd[pd_index].huge_page) { - print(" 2MB huge page!\n"); - return; - } - - struct page_entry *pt = phys_to_virt((u64)pd[pd_index].frame << 12); - - if (!pt[pt_index].present) { - print(" PT entry not present!\n"); - return; - } - - print(" PT entry present:\n"); - print(" Physical frame: 0x"); - print64((u64)pt[pt_index].frame << 12); - print("\n Writable: "); - print64(pt[pt_index].writable); - print("\n Cache disabled: "); - print64(pt[pt_index].cache_disabled); - print("\n No execute: "); - print64(pt[pt_index].no_execute); - print("\n"); + print("Page mapping for virtual 0x"); + print64(virtual_addr); + print(":\n"); + + u64 pml4_phys = get_cr3(); + struct page_entry *pml4 = phys_to_virt(pml4_phys); + + u64 pml4_index = (virtual_addr >> 39) & 0x1FF; + u64 pdpt_index = (virtual_addr >> 30) & 0x1FF; + u64 pd_index = (virtual_addr >> 21) & 0x1FF; + u64 pt_index = (virtual_addr >> 12) & 0x1FF; + + print(" Indices: PML4["); + print64(pml4_index); + print("] PDPT["); + print64(pdpt_index); + print("] PD["); + print64(pd_index); + print("] PT["); + print64(pt_index); + print("]\n"); + + if (!pml4[pml4_index].present) { + print(" PML4 entry not present!\n"); + return; + } + print(" PML4 entry present, frame=0x"); + print64((u64)pml4[pml4_index].frame << 12); + print("\n"); + + struct page_entry *pdpt = phys_to_virt((u64)pml4[pml4_index].frame << 12); + + if (!pdpt[pdpt_index].present) { + print(" PDPT entry not present!\n"); + return; + } + print(" PDPT entry present, frame=0x"); + print64((u64)pdpt[pdpt_index].frame << 12); + print("\n"); + + if (pdpt[pdpt_index].huge_page) { + print(" 1GB huge page!\n"); + return; + } + + struct page_entry *pd = phys_to_virt((u64)pdpt[pdpt_index].frame << 12); + + if (!pd[pd_index].present) { + print(" PD entry not present!\n"); + return; + } + print(" PD entry present, frame=0x"); + print64((u64)pd[pd_index].frame << 12); + print("\n"); + + if (pd[pd_index].huge_page) { + print(" 2MB huge page!\n"); + return; + } + + struct page_entry *pt = phys_to_virt((u64)pd[pd_index].frame << 12); + + if (!pt[pt_index].present) { + print(" PT entry not present!\n"); + return; + } + + print(" PT entry present:\n"); + print(" Physical frame: 0x"); + print64((u64)pt[pt_index].frame << 12); + print("\n Writable: "); + print64(pt[pt_index].writable); + print("\n Cache disabled: "); + print64(pt[pt_index].cache_disabled); + print("\n No execute: "); + print64(pt[pt_index].no_execute); + print("\n"); } diff --git a/src/map.h b/src/map.h index b3e50cf..45efde1 100644 --- a/src/map.h +++ b/src/map.h @@ -2,5 +2,5 @@ #include "common.h" -void* map_mmio(u64, u64); +void *map_mmio(u64, u64); int test_if_mapped(u64 virt_addr); diff --git a/src/print.c b/src/print.c index 4c9a70f..17ea5a6 100644 --- a/src/print.c +++ b/src/print.c @@ -9,17 +9,15 @@ static size_t row; static size_t col; static size_t term_width, term_height; static size_t fb_width, fb_height; -static volatile u32* fb_scr; - +static volatile u32 *fb_scr; #define TAB_STOP 4 // buffer at each edge for readability -#define TERM_WIDTH (FONT_WIDTH+2) -#define TERM_HEIGHT (FONT_HEIGHT+2) +#define TERM_WIDTH (FONT_WIDTH + 2) +#define TERM_HEIGHT (FONT_HEIGHT + 2) - -void print_init(struct limine_framebuffer* fb) { +void print_init(struct limine_framebuffer *fb) { term_width = fb->width / TERM_WIDTH; term_height = fb->height / TERM_HEIGHT; fb_width = fb->width; @@ -28,7 +26,8 @@ void print_init(struct limine_framebuffer* fb) { } static void scrollback() { - memmove((void*)fb_scr, (void*)(fb_scr + fb_width*TERM_HEIGHT), fb_width*(fb_height-1)*sizeof(u32)); + memmove((void *)fb_scr, (void *)(fb_scr + fb_width * TERM_HEIGHT), + fb_width * (fb_height - TERM_HEIGHT) * sizeof(u32)); } void put(int ch) { @@ -70,8 +69,9 @@ void put(int ch) { for (size_t y = 0; y < TERM_HEIGHT; y++) { for (size_t x = 0; x < TERM_WIDTH; x++) { size_t off = (py + y) * fb_width + (px + x); - bool padding = (y == 0 || y == TERM_HEIGHT-1 || x == 0 || x == TERM_WIDTH-1); - fb_scr[off] = ((~glyph & 1) | padding )? bg : fg; + bool padding = + (y == 0 || y == TERM_HEIGHT - 1 || x == 0 || x == TERM_WIDTH - 1); + fb_scr[off] = ((~glyph & 1) | padding) ? bg : fg; glyph >>= !padding; } } @@ -79,15 +79,14 @@ void put(int ch) { col++; } - -void print(const char* msg) { - while(*msg) { +void print(const char *msg) { + while (*msg) { put(*(msg++)); } } -void printn(const char* msg, size_t len) { - while(len-->0) { +void printn(const char *msg, size_t len) { + while (len-- > 0) { put(*(msg++)); } } @@ -95,8 +94,8 @@ void printn(const char* msg, size_t len) { static u8 digits[] = "0123456789ABCDEF"; void print8(u8 n) { - put(digits[n>>4]); - put(digits[n&0xf]); + put(digits[n >> 4]); + put(digits[n & 0xf]); } void print16(u16 n) { diff --git a/src/print.h b/src/print.h index eee3faf..7d4a6d4 100644 --- a/src/print.h +++ b/src/print.h @@ -1,16 +1,15 @@ #pragma once - #include "common.h" struct limine_framebuffer; void put(int ch); -void print(const char* msg); -void printn(const char* msg, size_t len); +void print(const char *msg); +void printn(const char *msg, size_t len); void print64(u64 n); void print32(u32 n); void print16(u16 n); void print8(u8 n); -void print_init(struct limine_framebuffer* fb); +void print_init(struct limine_framebuffer *fb);