From c8b3b14893a4d8828bc9c67715663f57c2258800 Mon Sep 17 00:00:00 2001 From: kieron <kieron@6dbc8c32-bb84-406f-8558-d1cf31a0ab0c> Date: Wed, 11 Apr 2018 14:21:06 +0000 Subject: [PATCH] git-svn-id: https://spexeah.com:8443/svn/Asuro@484 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c --- Asuro.iso | Bin 5115904 -> 5120000 bytes iso/boot/asuro.bin | Bin 61668 -> 65764 bytes lib/E1000.ppu | Bin 15190 -> 15655 bytes lib/IDE.ppu | Bin 8930 -> 8930 bytes lib/PCI.ppu | Bin 7889 -> 7889 bytes lib/USB.ppu | Bin 3725 -> 3725 bytes lib/drivermanagement.ppu | Bin 8572 -> 8770 bytes lib/eth2.ppu | Bin 2120 -> 2231 bytes lib/ipv4.ppu | Bin 2845 -> 2978 bytes lib/kernel.ppu | Bin 4447 -> 4447 bytes lib/libpconsole.a | Bin 102784 -> 102784 bytes lib/libpmultiboot.a | Bin 29056 -> 29056 bytes lib/libpsystem.a | Bin 184408 -> 184408 bytes lib/lists.ppu | Bin 4562 -> 4562 bytes lib/lmemorymanager.ppu | Bin 4138 -> 4315 bytes lib/mouse.ppu | Bin 2658 -> 2658 bytes lib/net.ppu | Bin 2751 -> 2928 bytes lib/netutils.ppu | Bin 3681 -> 3902 bytes lib/pmemorymanager.ppu | Bin 4034 -> 4233 bytes lib/scheduler.ppu | Bin 3289 -> 3289 bytes lib/storagemanagement.ppu | Bin 6429 -> 7294 bytes lib/strings.ppu | Bin 4852 -> 4852 bytes lib/system.ppu | Bin 12619 -> 12619 bytes lib/terminal.ppu | Bin 7705 -> 8038 bytes lib/util.ppu | Bin 9239 -> 9339 bytes lib/vmemorymanager.ppu | Bin 5863 -> 6105 bytes src/driver/net/include/netutils.pas | 22 +++++- src/driver/net/l1/net.pas | 13 ++++ src/driver/net/l2/eth2.pas | 7 ++ src/driver/net/l3/arp.pas | 17 ++++- src/driver/net/l3/ipv4.pas | 10 ++- src/driver/netdev/E1000.pas | 87 +++++++++++++++++------ src/driver/storage/storagemanagement.pas | 4 +- src/drivermanagement.pas | 84 ++++++++++++---------- src/include/lists.pas | 43 ++++++----- src/include/system.pas | 2 +- src/include/util.pas | 14 +++- src/kernel.pas | 4 ++ src/lmemorymanager.pas | 17 ++++- src/pmemorymanager.pas | 17 ++++- src/terminal.pas | 32 +++++++++ src/tracer.pas | 54 +++++++++----- src/vmemorymanager.pas | 21 ++++++ 43 files changed, 340 insertions(+), 108 deletions(-) diff --git a/Asuro.iso b/Asuro.iso index 577cfa82f1cfeb219e9ae518ca87e470052c5e68..99ab8281593275e94bb4b17d18eaeecbf46e73fe 100644 GIT binary patch delta 42177 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 Me-{DF>axK92Um%=tpET3 delta 38067 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 diff --git a/iso/boot/asuro.bin b/iso/boot/asuro.bin index 30feac9b0fc88221a853dd6d040dc66048ab4fa3..d2c55bb5694b57cb2bf67c74de60028f83de2936 100755 GIT binary patch literal 65764 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 H<qZD?Kl9PC literal 61668 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�Xm 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 IbT*Fu0#;%Wr~m)} diff --git a/lib/E1000.ppu b/lib/E1000.ppu index 9a1f57453602e3d5069ce4b23c47de862a5e3431..ad33e6f9a921b93594cd75bdcb93f7e5408572b6 100644 GIT binary patch literal 15655 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 literal 15190 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 E0-gPxVE_OC diff --git a/lib/IDE.ppu b/lib/IDE.ppu index b90ec6063d270487db335153ab8e69411ef24784..ec1e3d1b422bae6597a0310153e27187c7ad1d9e 100644 GIT binary patch delta 64 zcmaFl`p9*H7xP!Ha}#}!s?Gb*y7WCuNCN{92o{&*7bT{r<|gKW$ke=&#I;NEl;0kj RzuAH@gO!nc^FlU9832my8W8{h delta 64 zcmaFl`p9*H7qjcCGZTG}s_hlIG$SvpDxU!e1dB`ZixSgQa})DGWNKbXuS(Ch{D9r2 Rn=KeKSQ$AtFJyC+0RUT37<T{w diff --git a/lib/PCI.ppu b/lib/PCI.ppu index 025f824a8a2b358130382e2e67a8d41d3b448362..250de2342191e328715b31969b4918705ae733a7 100644 GIT binary patch delta 19 bcmca;d(n2nW{!CuT9>|O32E54TTBiBW;F?i delta 19 bcmca;d(n2nW{$lgmuBRJRpoEoEhYy5Uxx_r diff --git a/lib/USB.ppu b/lib/USB.ppu index d1a577a54ae7bb739f3e8ea0078168a6e697a9f7..183ff18e1ea60ada2706c551f14647d587eb3369 100644 GIT binary patch delta 19 bcmeB`?UkLdiR1mBNI^II;^vLJF7pBaR6hv1 delta 19 bcmeB`?UkLdi9>v)64!xcf>9fHUFHP<N3jQ| diff --git a/lib/drivermanagement.ppu b/lib/drivermanagement.ppu index df7c5c2fa8d83070a05dd4d4367ff016933ea9be..3dec292b550c389a5e41ae88c4b004eff5c1ad3d 100644 GIT binary patch delta 721 zcmez4bjU?EARyGx*p#K2k%5`vK!6g1loA6&VA}GdKdi5P@R=y<&Kxg!Zen^8$Gi`% zOW(7EG)%mxz)^qU+^dP_oqkXJ*~WNca|7dSrpXQLVw2-pI)K;($o84MfZcMk1M6lW zEjIZKJMSd6&%)BI%nS?+%3x9pOzKSj$l?T4qJxA%%I8D1Et&k2Lu~SMpb`9>W|P%f z#3mPVifxYO^kQdJoV-k63ZvF$YrzCYM#If>gyt|ZhHkbL>0=eY#{#ql3Lb&jOdJdh z0-Tct1!X4xl9Xh94HSDjSwgCS_cM~p?~`?8HQ6{=85p=&Cm)fj)MEfLL4XY;!~hH( zAYl643?vz~#ek#$R30QQ!a7-3R)bpuD5M1vW(=8}Ageq1v~-Z3EL52qkOmsV1X9lQ zyA`BJTN+3jK;=Q=CSYUOJb*%8tdlEc+VpIpvTi^cp&Q}|WuT4#B;6rk-K-fvp{&VK zvaPzYP{}kD%~OEd7`3&4WC4=qlF9$&G+CQ~A}y1x<YwqrLFF1CdZE6b2iB_tB)gFG z_JQ<rF9(XO1c@^Koop=MWAj%AqJ)uQI#lgkAPovhki(gj;z4Al5m31TOyPW}!ljdc z%X>1epX{oj%D8oMwt^w!?#Xi%j2RD3z6fL=pUkYN!FYDEj-n#hUoNl~Muy9i!xdEl DsN|B6 delta 699 zcmX@)^2bRwARyGx*p#K2k%5`vK!6fMh#~_+VA}GdKdi5PaGogZ&fKJSc4B%G$6k?3 zGxEZ!@+V$Y;CS-0Ywhjz_vTIf*~ZAUxq)#u)8w5jE>JvS@_P>6$xW=A!E^-MXJIK; zW(EcZMKGxjCN(B+WSup60lN-R&63FhY#fvSaMS?Vtdl2micQ|nX*SuMOKh_umlr#u z)Z`q&DU6Dn8HExU8Pzr?3D03<^xXVkq>q)ijRj~d6m(6VC1uY#87MM!@;#{nzS&4} z^I0Yv%4o1{019nlncO8^skZ_uyADWmF#vrI1Wdo1fh4207?9k7q<arU_XVKPC6>wY zGA(*Xp|a;7x|txlTfw@efaDD%-FG0mKLCY3u}rp?ZPR-Sm3@bz8)7#w>=}L_>HY)O z%__jkz#uePL9W$^703bsJ|GQrIMnJXKoLf5bs#ALl?SPj0kJtIUl37Y)dDhgCdtp> zRD#NDOkOB2ET#ceV1%T@46cLQAIJ;@aT$M4{wd#M^BZg$kjr2X)!+)GL1Cv1RK%nd z4<a*-fXWph@{A1bP=&se4=Q*vhEL{JRAr2vY^Z3+m^?XI(U>uF@^m0OfAUF14V_Y; qT2+v3qOm|yFf%1JuOu@qGqtEVJ~y!>IRj`e7uYyPhU&?(N~!?<3y>fH diff --git a/lib/eth2.ppu b/lib/eth2.ppu index ffedd5727bcd7cb0a969b2de585a7aa26d22872b..94544023b98e00f2a216cb6cbf1bb714df4111ee 100644 GIT binary patch delta 928 zcmZ{iO=uHQ5XWbBv&kl#nrzy9C<#qcYl(#xKPuuyn@|w78be#eO9<(r!H|Sxt$GS5 z=uyMFc@dAEqzCb)Efgs|RKbG?3hF_q2NCrki0I7AZt<WC`~Gide*2jDzgZ7IHZ#TI z{JsNIo*M`%tQ50wTL;)EzF+_R;i)wU0LflvTssllJa6~TCPH4jU8!2_?u*S&z32I# zJu92oN>1Ed%im=d)P`lRu06c8@bSl&-o5K6L>4Dc`w$Rxq%<Q4nnD`T_zUEUe*;4< z>Hl|Byut}_ABWKpt9TMkF`(q)-v6-EN=%$lbTO~o!l-zwoI678fo9EJYgvFsLgN~! zx&f&GG134PIYz2v{j_>ZR&}Y6Cs;Jq8s^1obr$_%%rj*UQ5sX+jAM&vdg5K1j_v^Z zG<h~3h$#=PI(c*1uGKjgk~vf6c+0*4>iu7$GVG<*S8X;r%{o=;@2Aq7iuz~`wyg`b zj%~G_P7HY>!m*u{OiGOU0Nup^gF?{?@ns6S&m-O_WJuUAmepNiNedZID73<H42wHj z$$Z9p=h+~ADZXh(O)l<@8zy}x9w<2@Kvx{3ml_sVybIk3ZN07XV#TgdC@d=^ueY2Z zzml@odq|Zm&yUtB*R2Mz!!G;XVSka5-RfS+vhn^_ncT6ht7Kei(&c|UJkO9g<x6)B z3Iuk~%pKoft~F}JhS6~<LI__o#)8b096zl^K(p^Q<r3TucpyVMDq)@!ea61XzSC7k vw$TxZ0^~^365RoC7}VM60^r~_Htt{tNfV4kc?>*lnlfs{y~aagL?8VFW2A^F delta 797 zcmYjPO=uHQ5T4oWZZ=6{lG>!9KPC;<Qk9mr1iXkpp&)1>Em6cvi0z_*kj7*!R*Dg& z2X7`%5PJ}BUOb2hLPb!Jl8XoNBuMG0C$B|{KlPi9DGtmG`+eVgJ2P+IL|WmYZ1&>B zR9e5!<e~T36eTU9C#tvnYh&kjn27otL&uEu-cMHwjoEl(<xo7hwA)%czS{&xp0e%S zDfEB6`*UKw@#-GWsx*(MOeQ9aL5qaR(2#wGe32Vj#k4WC#R>K|weuWS7qn3})I)7R zJ=1jcLR;k?HR-t=^vVf4w_LG_{pztNaRAkkIcLu=WzGup(NpA;YD}MDORebXdJHrV z%Kt2s=HOtB*fb0P)aIlL;chy`l5ioHivZ<89Z^~$_O_2iU04*}`NeW=v4lFTHkA}A zY9e-3?Q6xFV^?#_BW|Gq_e!SIAO~ET57Fw#hy&_|kqNE>?AQbK!I%ojOdkovA+=}B zMb<hr@>BS8b=5o-k=tMX$Gld5w9&vOkS#&EPi>o*>e7)}$uAU~0-&&45}xIqNMIXq zKe|1FtfjgUjY_^`m!VB`v@M`wpW!{w9!1tt2N8XhJm%rpw=k-{@s9or7_o0~_12rL z;|JtFJe@l?nJ<=$(1zI6GHrtyfpaV%nz?@yv=@lO?fHWH4vI*p9mHWc$GQ-$Y3I6Z z1RgK4FZ}^R>^D3K=U9;F1bJr8WQe=>WqY8+WI5x=9F-N<tJo(r(s?((YFfj80jRBj Ae*gdg diff --git a/lib/ipv4.ppu b/lib/ipv4.ppu index 7b0a92b7407e5c6d038f4c20e499b12ed876b348..e8fafb9a1bee145142a17ee4107c8462faad0881 100644 GIT binary patch delta 1120 zcmYjQ-Afcv6hCJ^_EXn&bymyO)m1C9v`nF(2U*=jLRy8S#8}34w9R#QTPHISRtlom z<x)@~L_{wI_Aa7<4^gnzpHL5d_#izRzI5*08F66Fnfd*G=iGD8xpy`Ax~?T2zkdEg zukr{%hOKx6mb?Jixp#Se<=MrP0MJ%!=}-sjO5^W}BlT4dGp{F&eBo<px408MC>l}M z$L+P*v7h^Yi))c%e?py)x1%p=C=L|Eyxsjd{{7S5k4>Yvd*AU*qRiE76E(JsTEv5Z z;6k8v=|xb9hDw$Hfw0Kpat~X_r|4rN(p3zwRVj=OY(wgzG%Iow`zJLsO`c^XIlw;9 z{|f0#@&evvF=b+qHUi#wK5J%^*>qxP0MHv!d3IX2Qh0zMc@Hh$NnVOnkgd!c$%RBx zPp2pK<SfOo-%1L{*{C{<73`JTTc{-!Hu7q%ZU8z|kvJe2z60f+nMwmX%eW?Rg{(7~ z&CF-h22oxS!VADg{^>G}{9G!d^RQaMRSV8RR?ZkEpi5*ch@!F4$zupNALNXAB0Wd) zxh#%X!MSq2a(Qmz#B2cF<?`AHL5<n~{=6}hnx{hSw$c8}bt3c;AEGya8t<OVmIAfq zi=*F%G)ntXk%gSyULQez4x^vlbdCmsM<mDTyA|1nGwM5Y1U`o>te*0Y6EwkLIxKyz zu>wC)j$C3&H+6#iVyiU9OIBo*JRjo;l1ULhAT^gr8yV7uZS8=i9VSl-`LxjT(YSL7 z8jEQxQjfJRTYt^c-yk1pq5x8Ybg)PkJNRfOEdj@;%VjSSw9H|Qu{-Wt&AeZZoSxU` zXbQ1*J9XBITx7r8tpy*6JZ(eqv7SUKlcE~@D1-<PNyqOX2CKMc)EbU4Mfa#YI^v#) zWC|3?^ZjGcPu6WukQNRcYMHh0bMmc1TMbvJ#Qtn%IyD1WbEtf2Dc_K<=Sq#A9)({H Z`nJ!+TVl@&wt?+<!k(B-yl4BK_WwfYu>1f3 delta 1078 zcmX|AO=uHQ5S~ePlTEg1(>6)dR*gxjqOI0e>p?*z^-}yHwirYr>zZ!s(#<BM+u9bf z1<yj`yQt8Ef>-gZ2qGw6JbEZd58}x~3qq073eJ1G+l4pt-uHboJ3I6CRo7Z7TP)rj zIx`|YMhL>kVh*;W09zZI<*7IC%Xt9EH?#fn>-4wV&zd*V&4(A2M|$u2%I?s+=BHeD zY<}nKi-Db|qyx!t?hij_UH0CW?WN|w2e`=Qa4;7^Ku{1UJuL(|K)yxhClD6dA6&y2 zTMb;ncJ?EX!5+337{oX$1`n~j!8w+Zdc3uYGwiKY?xY$)EjDUStx~hJvCDu_mXR|_ zmGD@@sLX2>-LmfKl^M=V$R?K92l*PRObv}JcaRDX@;anB$Fu-LvP=g^3Y=FKuGH+= znq?5B3MwTiiLBxnjjCzuJS-u&cERy&&^8>vu$#>d3GonuoyEE_OI%cjWrAEX?2)_* zPP+Nr@)Y7kO92%(VILuwjF62tjA?V03h`S&U+LC~aEbT>LfJxA@s)t8uVA;r7h1m) z=|AhhUWSL&pLG7kF>GTS;qi{&K2Ls=)?Z)+r4XZW?mrT1D#z7Rgq-FmCfH}CB>Eew zYm>U86BHLsqNtb`m?BRD3?8M3K(3RlT-PkaCT+&oraf(ze1fzmgqC&?scSSG$5^0F zCkB0e-qR0|&mN)xQbJ&Nfh_jN$)58B96v9rzD`JyqgY^DkvoTbX&b8R4ZTXEC>-%K zk9vVunH9}1$4C_I8!ML1YNl;c32i8Z2qn@T<JnTJTr=)X$e09-yYnNiERsoJkmsL| zsW!3^e~k3v_I>TN_u?w~ywJw^)d`K(>?v~^uw!3Y^OOtZ(_ES4S5o5t0rkiq`x3Dy m1=~Zm+rP%t&1zM*CpB}5`YJLP{E!tdG4Apf;smfKYVtp-BdvJ= diff --git a/lib/kernel.ppu b/lib/kernel.ppu index 01753f52f1dc4f32cacb1818a98ea7e564ff801f..e89dff7159b36649c97ab5055f355c0053a0f8f5 100644 GIT binary patch delta 113 zcmcbwbYE#g0P_yXa~p$&8O`4Ri4=6RFK%W40=}Hw)ZF}{%G|`f#Prmnc^_JrzGn$( z07<cx6eT977S&%k_iEyKr{9z3Fs|h=7qpvT{q}q5<Ul4hj>NS~@|52mnm@UoNs8m( Rk@eYO&whN^ypU-h9{?n~Fp2;G delta 113 zcmcbwbYE#g0P|{@vm1kj8O_93DsdfHCK$y41bjKUsk!+@mAQ#|iRr0DdqpnI$P25= z2T8G&6eT977Crgdwf6S<d-EpGVO-0xv)$@N(K>zi$$?C29K9+%+wuc;n@+B0lH#aK Ql)l;U+i=(Bg-rYS0F$;YAOHXW diff --git a/lib/libpconsole.a b/lib/libpconsole.a index 0633eaaf98bff02db745aa81b95c55473bafdf12..767e544ca6404655e137cee80b92e4c81043299c 100644 GIT binary patch delta 1565 zcmZXUUr1AN6vz23T{9=B$(@wop8`#7&gmL~n)MJFw@?`9!(yUAl7SLE3=|p&q9g3$ zPg;b;nxhA?(2jODP%%g<3Q_POlt7APl`yHSghAb_&Yg36yPxm*p7T5Rocp_;5xr+b zFXiYfPgyLs@`-}c)V)XU-x45_`s)DV=lu+H{7EM9EN4cr2i^;gB$UIwVG)LodWgr8 zyGgj}*iXV@;Sk|iG37DyFphJnT7+?{NVGAt$j7a7aNI8GP(QGEI*5HBRo~aJkwN{r zJ2;73dPFXro#TBsjF5i5kHo}6@mbvkQsb&PNqDVMsae}Fj`P6i2x&~y8a6UMTw{bq zXOJXHu9w8v**Zs9aw(@ZwS`DhX?qi13-~+S20WHZx8WdWwPjx0kPf#zep1NN<0q$W z^pagb(EA6+`C6m8hh#{(+m3aR21(bxdNUItbdQMKl6x6GJ_wLR|3l(|?!apjZ+=YU zRiij=g8Zi^iU0aU4xWti!Cr#s)NSJNhTjpsIg^BQVDLqZ#7F0|NPOju6LB^;7QUjP zW`lES9kB^q%RdkcI~Om*R$=Za%gZabSu1w0t8zz8aOFcO;|nQz=vtj;i4CfO->60_ z%&a{k{OS|srFF`yUnqaxpd5`--u}MN;NMD$&%?Kw##$k5dq21<m|_|s|1TBf5*^bh zwq&hx#-LT|QWJ`-98LOYk)0VV5TC+MBl5MZM1rcc$ekvwr|U?<qy89o_Tl@M%kZCY zcS&~p|4S0&jRMvZABb8&75bSkT*eOjrc2mGxxR>XqwNWD<OCDZCnLzp{V)>2ZDoey t#KHwGxoYGUC+j5#bvLuNBIHuKoQ)4)?^PyszJURDC}A?mQv>X+?jO!lA(a3C delta 1565 zcmZXUUr1AN6vz23T{9=B$(@wop8`#7t}R&uHR~ZVZlN&Hhs9(DNd`*vAUJ3sh)S%B zKWPyXYmOeoLOa@3&@f0U3Q_POlwcHz)j+ANghAcwoIB_Cc0b?qJ?D4sIrn#c!+PJa zUdq$k9Co|o)OgWI`tBnSZV9lS{%arNXMGHG{Bbt%EN8D{54;zgDJX~cPm3^k*hf5; z{7u4DM}86(iw6nEN-2+;hj5%r)gp{pMWT(GMLuSogQIpyhx&m<M;QA+s=lXTBZK<0 zw{a4;bc<X%Gsk<c8zJ*tFNul8;?uhGq{bC-f^ei!sae}FhV#JaoYI(PG;CyisKyA3 zt}scI+%Ji-qh*e;<W^2=YMmlU<!w!PEf8$)G~ltE>@@7hthUT+8#3XhFGvbmx`X7j zXb;&1g!}*CIFB@{dq{<}J8f78X@GPcs5dhartT7vTk<c#$NM3Y7<@oH;0?Vd@#aS~ zUNwT_CMbMzocOPe=i$jHAM8cgn7l<i{nPIV-<VCoIWX`dM&cv$IV8UF#)UW+oC{yk zP;<exw1(IO?&Tkdg`JC+RcSM~R}>VSsI=PR*HyWrCb;~eobiP;J#?+kv*ZTVz;9He z1!f};3BUS8d1;OE>KDqNqm(x`C~tq?V+d}gB<2y=%wR2$vAq|J3#OPxDEvzWxlG42 zN@c26Ic?A?b?He(R*oipcw|==3niwo(};XECz+rs9=XG$^>iIddek4|&OQR)@)`aU z#+PKb|Gy+bjutUbVjyY(Rp?`Z=?Zo*FjK}Z$n_=6i?%1o>&KXgJ{dt)?uU^GomOTj tO)gyElDkG;aj_n9khht&mLQkX<@3Y<c3)*e7x4SpfuzYKPx{$g-9I1OD#8E& diff --git a/lib/libpmultiboot.a b/lib/libpmultiboot.a index 10dd5c6c851bfff49ece367e527c227e1592b012..b28f2b30976db836b1b55b41d35ad7b92d0dfe3b 100644 GIT binary patch delta 568 zcmZp8%-Halae@q+iJ5_cso_Q?A66)HvVxJ=<}TJ>%*gx&oClZ?eDTe-Jg-sst^D7S z_+pzEaBgRs>@UiRtfy4;H-;L13%z`O1w&IKV~9JzmV-6R%b{qlRn%hKoG<^85!u9A zMQJ2gif`VkqKU*8+x$!Y2ohgn^BrvgG`=R|<iBS8lVw<hHmm9GW8^ahItSsJ%?d_p zNE*a8Cz-miAUoiujTGbLe0hP*Z>`Rwxa_9QPb9yJZ+>sjj$)9I^8zHk_~!F&e^Jz* zcLN#>a@idwzRe2W$50Gs_T@&>EVfxI-~<YvFJuKT!j)p1FC`|S$OokMpzy)ry*?W$ Xyg?DTgK2V49tXl4@y#3a&NBf3JeQjA delta 568 zcmZp8%-Halae@q+v8B1WrNu@iA66)HvVxJ=<}TJ>%*gx&oClZ?eDTe-Jg-sst^D7S z_+pzEaBgRs>@UiRtfy4;H-;L13%z`O1w&IKV~9JzmV-6R%b{qlRn%hKoG<^85!u9A zMQJ2gif`VkqKU*8+x$!Y2ohgn^BrvgG`=R|<iBS8lVw<hHmm9GW8^ahItSsJ%?d_p zNE*a8Cz-miAUoiujTGbLe0hP*Z>`Rwxa_9QPb9yJZ+>sjj$)9I^8zHk_~!F&e^Jz* zcLN#>a@idwzRe2W$50Gs_T@&>EVfxI-~<YvFJuKT!j)p1FC`|S$OokMpzy)ry*?W$ Xyg?DTgK2V49tXl4@y#3a&NBf3>R+BU diff --git a/lib/libpsystem.a b/lib/libpsystem.a index 2387949360da6fc7d41f11663ea9610e76d9a9e6..5a046edfe92c3f5b54875355744273411e557413 100644 GIT binary patch delta 4357 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 AcK`qY delta 4357 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 Bf#3iD diff --git a/lib/lists.ppu b/lib/lists.ppu index b4c2eec40c0d385fc257e00a2667d5c82035959d..dba6b15b85c65e0160d2bc92ba1420c82ace3cc4 100644 GIT binary patch delta 46 zcmV+}0MY-_Bhn*~P6Kcd&XG|)2%hkTrSAk(fU%a(3jwLKW())Y0lSlH4a@<<vp5c# E1I=?1q5uE@ delta 46 zcmV+}0MY-_Bhn*~P6L|V%#l$&2)z{2m~K{jZ?Tro3jv<9W())Y0kD&64a@<!vp5c# E1KsQr-v9sr diff --git a/lib/lmemorymanager.ppu b/lib/lmemorymanager.ppu index 5b265cc63ab924c7a1fb7d32cfe73714554b352f..9db0f8f59d8bbea801e7781f2480ba0923031cf5 100644 GIT binary patch delta 1444 zcmYk5O>7%g5P;w8kL~q(*YUp_JMmA_q(3r>W2^{qh)md&N^xS@t`rxLwMw_G$!~2_ zNL9&HRk@pyxFB&us2s`x2~}L0V^1vyxB#LY5C<fbUN}@iz`WhH)sf!pzL{^{%zN|R zSJ|I)xmxW~u~e4s0u$L$EziE0VC?hf_r5rmnjf8KjJ-b0EzAE-Jh^;lXf=Gt|FlA@ z%e}k9qh!$2@0wdyckum_KZj4>I2rzMs6P}LgODsxoF5ntV3x*Nh~Rx#garNqX-o=P zNZ|{}z!bhFWFUhr;oc`=7=IEj;4{&O-w8VYDnzj?MxcmADUNM%8XpL8EQqN<!3T^g zWz0kCKM*Df4d4-lIYYw7;ymQ=xfm_vfdP{_D>~Yq^V;U@xzE;$tyMcgQA!17MhO%* z!8=k0&fsn7<Dg2R-dfk{S$lm(TM5ajQh;nyeSe<}Q;JLzE+OYb=^4w>5YifHY0c~r zHjQmLRo2NM*R9^oB7@90aE7d0c+q(pLOMv=<`x-b@oS2t{y3HrgWNc>Oja(u1SgUg zVMo5oAdmmaDJ?v*lo`z6yyxk)C|Q(s>%)G#W?r)x%#GLECeKLb=toG$NGr7an=U&) zX8SHE(RbEn<D|XDUccM1dW=r*UGE)e;WO_LZs85zW*|*|sn@whDU0}{uLHZdth9pD zJj}dug^rlQ7V%4^1NSlHuLiO_!0cKkgA%^yKTlWcQ~$REUO!BENV}JjK}5E@FwZ>+ zFKM;1wzjd-ZqzC(27|cc2D&~BeB|chz<j1wE1PX&y;;9#G$`JMgB+$DFTo0j^*1Zc zN_%5<wP7?FB=M0tIq;Li-+aq55BUBM8KlB?K{;9=MLvi|NGmqs9Qx^yQ}Gx`aG=JQ zaDa0TP#}P}0^&&y@Jr{mqTtj?))H<8LXlJSr#39JyLH_qUcuXe)L@eAQfIG2w{StV zlLA|zRk<BvygJXexwEssMQ!oB{)?lsVpHVzZXdY7;t1FvfG31lhP1qWwQEsZOQZEK zk(&#g0LHb2#Bcloy7D{!7wFt46g0IY9%vFCY6<l(vLACFEa7L`RqgMWVqT!GpH&5V zArgNjL@X<(@NIoH%%7*9+g#B_4C-gpG?}Jt)WAP<YmPTtU3tITrC02nuaUI(N-d7M z;gcfX2<8VlLZh>5RinC5Z&fSnl?z6_?VR5dxaTuVAz9)emM0z9vp#6=?C!P??Dw=Z hI;3+%@zo&4JE(E$I`!AZj1jir=7$sh$}v2V{2!fa>aG9) delta 1377 zcmYk6O>7fK6vyYScWtlNU+dV86Pv^~I2IxiiSu!w5|xvh7RgR5+aTcLTCf2t#tC)^ z6jchSYQ>=!>j}Z7NL;FdIQ77ZLey3TArKM=gv5z+4_wNLOW)g%C?n0=@qd2*`FJzq z_n8OjOtpGqW_Diw0fbBJRI@?~3-L$v&7JPaYwI~7#F0VfOJ(BI^E2InQTGnt&-!+L z)z1ue5`%v)2j^TufUZcysUYw=EKrTOO(BAhp#X9G2q_przch}Tl!g?RrEwU;j`Smb z>x$wlDUDyaLe$Q~G~RU0VaJv9O?pAldW3MJE@$zud?=m<0m6|BAj~;3xFL@m$tjF_ z&8V8uw+GzQG(A~I;1z$A_d_0sl%E!SG=!(xGx|n%Q$SKx=r<Ry^)X|HqLk7o%C+@% z!czEJNzVCMD7X3~?A!H?nhxUWo24qH0u+^+(chX8lz=gJaz5xN1p(u`&Ph_a$W$$7 zh+3v|RzMoN<fKEglsN&JUFT6!xwxrXPMun&b6!9epSWM^L!_w7#?{ScwRPSQki)y4 zq#k9JcE4q-6ZpcD48=(Gl)9U}w$T@qr~f=Rpn+T70bD|_ddi=qe!1ViM#D^FM{UC@ zzEw|$_OY#X?i?kPY%_S&*M__Jo3G*@XG5!Jv;-6ov_lZVDecjAo@5y2Rcpm^d1a|t zuNId|0%D4J3gD*O0M0>Ju!rGF@l><4+^8Kd)dj?DIK;4(10gJ!t=d<`MzOha>{z|j zpvi1F!7zUB4{oc(_!{3BtqtDrcLGKu=HwY7c%KlBP*hFA%G?3n1oFE;oPjD2VF3p% zV2XeV9w9!=0N)%t%ahhBNS#GBpbsUerPYmA@9YJen8K+*a(jeyx!rBk1v{)+DG^IF zD&H}PadfY>I-T{ibPhhd|G2ZPSc>{RYa2E&;{YoJ@W2ooqo}N{_6$15f;0XJ>gEEU z0iOk?hi~#lw#(1lmME)X6+d`KFdrP%ZjpAIb@~q|2Ui2X?BVa>)8N6_15zGZgtZ1@ zb9gT_gyGPl&hPK{J)TGG(f%goAJemlw?oDR=TTd_-0RURwUWG;FgHv`{@8Z^DPcC8 z-A)r4Jy5QcDl4_qmEv;o>r$<0C2;}lB)udHa}di=^mmOb&CbP(%?<NqEI65ZLlpNz bEJrcG)CD?Z8(Va+clP}7nO`UV6;AvQxKYxb diff --git a/lib/mouse.ppu b/lib/mouse.ppu index 4039b4cae7c0280d924d8717c531b840c68a4168..a37f475fff50248b4d79a91914d08c02f3230cd3 100644 GIT binary patch delta 19 bcmaDP@<?RDMvi$OT9>|O32E54b0sGLWEKh0 delta 19 bcmaDP@<?RDMvlEAmuBRJRpoEoxsnqAU1$k9 diff --git a/lib/net.ppu b/lib/net.ppu index 61b51ebdfaa6a7e748f932067d9ea92f6d6932e4..e9fd148f060246d05b172a37d3064e1495637e35 100644 GIT binary patch delta 1134 zcmcIjOKTHh6umd|$UEsHnYOl}wx-y+C|Fx@p@In(1+B5Zuqbg%KI+hrhRImlRYV~h zH--;f6e%e9!bMlE3bsNQeLz)^x>8U<&_yY9Be?N?lcdQXFfcdYoO5#T%{eoR;ccxe zk+^j5(2#r|L4u`3H=ObUyjz~1xcu|ab~6A(OI>}6q-~6)OXpgHs%7daW)?nd{4TwZ z{Vk;qyMA@_7nftR&7~(9+~fgl<D;nYV;JsoA|SXBs54!3KyhdnsN$fLhtJ^w^ognk z>$QUwK@<Oq(Ly~Fs<w0gFSNR*ECz`68_N6FCUd`|UF)u&FID!{_;JSrJk8e}MQrEi zrBuj8f75q?Wz%szlewv<CIG#BMe6jqiI9_LPs9bVBN^Dkugh0LWIp&tS!$}L_wg0k zz<xfU3<vx~tGQ%aw{$>1FDjiF;1AU>Ur=t~5bscj1GH{U65u(t)89ytl1pY-7D)bB zH893i=O{UU)j3!Q5sML#M<rZ9RZ-{`!Zsr^bEYP<`N<3ebe1X2revzFEVHbc9Loc` z>N(LtaJMZZBe<a5vQ_*ptWuSYtYHCq3SOH)SSN75O*^SJn{3?3Tg)6`)}2XnBCeZh zvZ^ZnNRl2~?4jCN6Hi-b^ciLX`l`~;Bq)#d(Mirz801}*{W7#m2L)}C_vBKQ{z2Ft zx-i^CRUK!R9a)e+cSZZKf9vSN-A6}=0ZBJ=FQ47pOuv3w6!$W-ZVjv@zO8J1Uu1m8 z)$5<77oqx@<Gt<y?+Zd+36$O!=Dt=CubXV-rUn5+Wh+H;7!e7H{sfoz61!kT#AA;k zyumgxBJi-t#vL6wc`;eGSi_3L^E7LpkZ3Jb)p$%in1C(iSuh6p#@<nex4TN=94SZG iG=<e#Q35Vigsb$u*KXNHRkF=#+f}VsRG;{)r{^Dk$gXby delta 918 zcmZ9KO=uHQ5XWbl{m6E+X=<{YS_w66L#;}oA0GTb)X<95##k+dQV47MT9<}x*sQhf z!4?D$dXV@IqTtQ5AbQe+J&7V7Jc#t57cZW)f*y(<oVQ6@bzx`U{^z$dJOB4KtruoG zpP%R-JS1I52*G;36Ye$xT(kFVto`bLW&l7}HQg)Uj=!BcUp?1WT^R@)i(9YmAKbcA zeOkhCp2poM^P{*Q6+Vj{sPV_N)<v|U2nb;WsthoMAUDyom4C<X9#T=L(m%leY?`k( zCD7#Wn{MH8ZijAQJO2_YCRF+|a)G%sS-VuaWEbZFn|VR%h=fJS!q~~I5N=8icJd$6 zWP(P5$T%x5?(jM<$PV`M*YZd-LTRO3n6Z5uFv3$xhao1H%Y_nig>pu5u#Z1cMzDp) z6pP1H%ZU9&7<^E5@GyU%j??Iy>QJ9aSxkv})#8F%Stv0;MV9FutRN+Z54+6wm&>fe z^Wo&`72hdU0M(X&Y7>+xmXhN-KA@%tI>H;$dV;J%G48QBr{Xg&$NZ}c-h9^fW@z{Z z{Em=J0BaOmci<)eti8-UK)sGmzy~5~ZFO2n74nycZ&doYosEjDM{WWdjqGRA+UZ8K zm7+4o{9qHJd{XP~{r2hW^z5VO)0Bab?UmPDI59Dr5f*^N{L2IPc+&m-^5+VFsO>W> zIxvl^oo{FZdKW1fq0&*Xnx|KH(Nc2Ci$j3%nx~>Ers5PueUfYcB|uCi1TNZ;9t%uN z3EdQXq;=<pFBWPJn^<@F0QKq;h$Z$)$(|BNjoxa#U<$B5_(utjY?H|vnPW?|SIIgF cc&rW%({pc7QaBt6%xT-EPS>eCAJsE|00rimumAu6 diff --git a/lib/netutils.ppu b/lib/netutils.ppu index e51fa5a89948a814311d43a19181eb86298cf552..9defaa6d131395752c872bfa826d05d8171d1931 100644 GIT binary patch delta 745 zcmZ`$%WD&15dS9o-s~oAH=Cqsk~YzbNqwNfL$O#4c<@k&Z3XKC4Q0`4HqqU*5Jako zo{a;73XM=i4_2^v5>XM)wSRyY(TiRbuO4*vBNZvShhct?nQvz2WBOG#SE(G`Q`#q9 z2PUvLl{||_8T*pnb@N^Mo;A!E+uP2Sc09A!j$bAKg6y~arsLk9b4OP1bY2q2<fd1h zb-cy(wXf~><)3YLLS6cP<KZ`P`fB^_0=&Rc*bNFEfFkG=lPWMNM0MuhAd0_8?+s!+ z1`HUvKp>acbtiB<GzdvN9U6le9ux-gLultevMinxqJQ|!s3TbYd1_6|^48s#INa!( zMRMgc|8s5d8up3<k;3K<wkC8ZPGMO*4`*;ioCNi@Q~(W&k`FaplBOVxKZr3fE&EW$ zTk;e{@H6ElJf=)T53VR4Y{4P*B=q4GwFnkIR@cGCmR5i`E^9s<!G!(@X7IIs3i>e< z-Vafn36CzuXfwzJKe&4s2C^g(WPM!Wo6k4rYQ&qIk8@t6sMeikvvtw&Nwc_Sb1g`f z*+$)O)EtsBTuO6ErWmQYj@$5BZna*u&N?1hwsFfqV6hd{jUl@Ih>-&mCyebh>4H(9 zYd<h@`Cwk<aOKdY`6`WM>bwxxI2~y#FHhhnGAGeAPb50Q^xbbc$U`b)JsMs!Q+U_3 X<R`>E6>!zO04dByGVmP7BE!D{55|q) delta 607 zcmYjOOKTHR6uxI>?#$#dleT#oGO3MFNK&DMqEgJFTR}0}>cSTUnc7Dt37J@oAd3C~ zi64mQqRTGa3GTEO+_(`$aN|bBg&;n0RTS~e7^N5Pd3@iw=bp#r_&cXqub-&S?9*<L zP{me#kC?TEu-3Mp-QBx=t007^4vI6m-SYXVC3Z;F{l4FGy?e{v)PvjWj|SI{n2%F0 z@3c-{ZVz6qQ51)1nsgka3Po7%!V@wm{@=3kftis&?oW~+VX{y;vqnNHtTRK9s}Vxo z!4CN>x=IcA)e=4_i5>a?+rceiLQ7H+RW<w1i#wbq%*UT#Q_E8c-?S9vAms`zpd*iy zfv2)eCO%7_&Y_{tb0-h=GR5#l_o>E65{t$hS=caqnnvDSpaeQ*m%n;%o}p39MJhCg z)yNA<p%yJu8jDe%4&illgO1{Q>@3gXZR{Y~aN@I9$AV!Nf`+w=z2&ALT}pODCd7l@ z&6eBi^*gT5TrA|$A*Zo4&bM2ByXi8O4k;(30@H4KuGjANy+*5X!R>Oyco>lnBGUTb z#~pl$=XgJ+Rpi}NtP)o>Z<Tp3R~SiR-I|~bwiwCcqjfs_H7Im=egw8+3NaGFcf-LY XdsP3$*lz_l?NuJ?PrE=Ga*4@5%9esv diff --git a/lib/pmemorymanager.ppu b/lib/pmemorymanager.ppu index 0556ebb0e310bb34e760391e0274f75393452345..0dd99164d02f8b6f03f87377d302ebd3bc14b6d2 100644 GIT binary patch delta 1208 zcmZ9LO=uHQ5Xax_=4-RbZlX!kHi_HBrnOcSKk=ZHwp6`Dqt%0o#BI8@!E{s7i1Z*8 zs-Pzu1`i(8n+FeyRuRR62qIoo5Il(>cqn@C<D^v4c`v&XT*$o5e||GN@6EiY#>Gsg zP&l-4^H$G1Fqu6mWSJRZ?8~pi(Om;G^BWmsn;V${Z#nw%h}p14bzi+^maN*`>zAJz zuZETz_vW>mGGh?+O2qnr;a=#(BIuxE6><>5%di&0_=Ic(KZ5})#d{pLNq2EUT8B$g zFZAPasS`iS5v)iWreq_uJ^+jgYNq7QB`JnQIRNbx9>+6s7bNj4#2|}{ayRHA!IBih zw8xKM<SdR$Z4|@*-`D+=$3I#!ZQB}W(1ss8Nj<=|Ld}}7>^g%4s@~)dg*0WbQmK~A zIw#u|FDd-#Y%Yv%GDklt6(k$To72<Q_`xcJ4jl77gj1OEHQ+qn@>yYx0Ph&(I>}%a zcKHoWC&gDXD;2B8rM$lk6ZpVC7LK-{2KEFDZAB|;;Ao&MT@PYIX~(yLAuZPG?ZO_V z42!s+91XX%B+B3q#n2M1Xa;k^erm@4;H5d91JZndPD>fA@QUsBa8JxfHg>QuIXhFP zlJnM7wKh9q*K4y3;wi!XBqAeNm8||B%OIH$*dKDXb1WVr>nYo1I`8y$RXBlpsn3RR zhsmmRI@MCqJ+`0&sRZQ&6u~oUVvpfQN6C>Ej+JB;+dA#WcDb<$LRJYRPBu7Evn-d% z;5&6Ve2zEOc`o3(&`z~M3UU>4SPxBTS6Yax5*}05sLx4yA&@>yhV8i&(Vj7L#$wR7 zT2#$|-EiV=(@OIq_Yx#!dA+`hWuK@|61>TU?>O)yTB$km8Ugdl{nPH4_6@uAV~2i5 zD=`MYDok3QA`AU|&|WzJ*WWa2en--KF2e{O(Iz+WuEe?v`H}p-1Bdg2dk1%q94I#X zlLPS~U>}L^=OJw!_)UxL>1oag37?z~e5Exf2!2Td_P;yT`w#u@pv!KucoOq^dP|?% i#^2;v&2z-FWcAZ#<z#V6j9hWboThqRP?qtU-u)MdYuz~j delta 1241 zcmZ9LOHUI~6vywGP9HOU18t#{mcFnlF$R#tN7MjuVIrgn7$cZ8L%EfPGOaC<kdTmo z8%-4P=t8$fd@NYFb7PD<qb}4hVBGl;)C4_uI#bX)nRDC!`Q0<;+;i`(<hw+&P`ETS zGAeHYv$3~@6npGvEb=0yzTFMZ<{4wdJIQnQ^DjTnPVMmNoevwnfQ>N-+9mSYfuRP` zfX4-lmJ@8qDsDm+-1r>w_zb+5m*U{ZeMmqD#-%)T;RWdxzL7mRV(V4%z*-M(+0yD! zE0hDT%TfGhb3p`u*ha%q0a;EPFyl)}JT7Ozhc)>mHswzIEbsXpl!tS=r0F_eU=YH) z_TI8nXoUuEa(#tCSh3T8F@mj$A~QBXuM~5URmQ5-T1i_G>mzM8YO<p6tidW|U6We9 z&KG8C47$<pcnvzfckIAA&N;c)OMrczVl6S~!%xnH&qs=*q*bfDA*5f<3TU|Cnm-jd zgvR??`2o8}su+*xRcVWl&@81y*6kqi`$|Q6pyFAz8@H5kU*}<G0>3I1*u^vIoHs-c zE17<LswRBl!)QN#Q3t_;`|7q+Yz1`LanBvy=!zN1{3I!9$dm{3&lDEdniVQ!k}ua9 zYYd_h1N%eHZh?i|WaWxpq5Y1z4IlN4_BmmAJ!IXq4Yg9y+8@<~+yrF}h)yEA8Z6fu zC0_i8javbO#P%6%2U$hut5&##6)r+Z+(5d>s^tdf7SoSUJQI<yXs9`&;<rR+AfVuo zGlo6hh&xSMR_Kty)84Xg@DP7Y!Xa1AeTAes1IgicufEYsv^=jhIfGo<D2q<m33J^T z%?G`V5$dRN{o2YR!NV3jVZs+_ro3%AkylET>a1JGI5%O@Qzm_xW~wzIt|F6uFO!8q zapW`;5IS$=tdmq1GK^!=zeu<2wm-U&0V5``8{`@k-mqw=@BemZ?X7P!ST{p&(wsFG z^pJJw?b|lcMsJ$v9V>Q7+^I;DuN0S!V^kd18eA(LRA}{in^vSn@KBPhe^sk4Sxc6+ NI+b974<+P*%wGp(!<Ya7 diff --git a/lib/scheduler.ppu b/lib/scheduler.ppu index 9bcafba101e61a3cf09f73a111f7ae77f96b25d2..28d599c6876c1460713d1a7f25e52972f0685ea4 100644 GIT binary patch delta 19 bcmca9c~f%23XXXnT9>|O32E54L6ZjnVde=s delta 19 bcmca9c~f%23XZ)ZmuBRJRpoEopveOOTQ~@# diff --git a/lib/storagemanagement.ppu b/lib/storagemanagement.ppu index 11cead0a3b0d3d10c818e4748957fad5536a1b92..1bbc7bb7d392d836d4560e3681b10f71afca57ee 100644 GIT binary patch literal 7294 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 literal 6429 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 AO8@`> diff --git a/lib/strings.ppu b/lib/strings.ppu index 3fa5be24840da04f5e956f53133f101ab20bfdb2..ea9dc236414514f91936acf72dc54c27c54f27ce 100644 GIT binary patch delta 19 bcmeyO`bBj@KgYZetxMmtgfwiN9xDU@W)BIF delta 19 bcmeyO`bBj@KgV8?OEdDqs`58Zj}-y{UttLO diff --git a/lib/system.ppu b/lib/system.ppu index 404e748b4b4a681cd59fe35d63cb6c1a1ed26f43..c1d15dfd851a72e2cfd462911526e46930cefa59 100644 GIT binary patch delta 14 WcmX?|bUJB50P`R5a~p$y7ytk_wFgT8 delta 14 WcmX?|bUJB50P_^Jvm1kd7ytk@G6wMg diff --git a/lib/terminal.ppu b/lib/terminal.ppu index ce6908bc6af1d7f969f4fdb9677afc81bcd7c7ee..ca7dbc190a3b7c893e62c798e0f26f022756eb50 100644 GIT binary patch delta 1275 zcmZ8hT}YEr7(QqFzHQC<le)R3QyD1LGLcXRiCPe)3C>9T$sgAG{7K!$wxkeJ5eqU3 zdAq0!Mfw4Sq>I^=Mc#A~iA6U>L_~#@UD!pxNYwj&-`SK7oacP!d7k$<-}%nryHT-P z>GXOVOZJsYW1Q*PlGnv5^B7wS%ozXNo4?gL=`7dp$yk|e@)u8k9lx_K9Uo!XjFD)# zH_#pV7-}vxPj%E0XNZP<ekDBod}VF&*};v;&x5)PrkIca;Bd)khLDsD&HDZDPO`;7 zf1A?-l*@ULYI4Cz`52rx+Te<u1y5x=I1LsE>dmnaaw{)!$a;*=R?(?qzKSjt3sfvp zv0TL}jLL;U>><el^(Gs3Gh8!zaLHUTPl07)i<qZCf$1!C>us?qQ?10S;FD#77eh4p zGJhH4DV3bp#;Q~2I1k0v(yFDD3YoU6wQ3nW)-pp4Qb%QoT2G`qP-xiVXq4eV^3J3# zq<V<vqmXIq^o-gx4`&_1d<sW1!$ZKP+ZZ6LI~y?|bmGHW*cejdM00?*7zT;3Az>cH z5yOmBq}%8wtJ{e<A#~!eYGE@--6Wb%!E9EGXDUteaCTjor*YhTvmUa#^ATr-j*slF z7WNRSM?~{^=(o3e=C^Ae&h88IB90iQqaxkLX|lRqh>wL%{1YwgHBxVg<_l2bX!9&& zXdcd92=gl(H^a1T7GS}9p;OqZ7WNaV-$e68_~mHvEGD+OF3jI?{6DM+3;qh7!t@69 zG&2p1*|0Od3=ej+c$O1k7Gklb<A`D6G_^M?M?OdB<jL2<b|K{^ny<o0cAdSC9^F-l zC0op;s@YP5)KTmbw{!d`8L&I2tgsNhI#)ZQ)Enpul4jLjnzKrgao7OkIn{*?IL)O6 zth9i+E37D9U)VPg!Hb!s)^OHjfG;_YVTjM$vBs{}9HJ!@e@_rEOI-D%N|&Bnk08qa ze#IBY<B!X|DAP6O)>=g4pc0Ps1_OAcaYHbXPQMYUN9hmY870YuIAffhNyzmiN0mqv qzk0lQ$N+QB+`X&u`6#-z?X{tMTc2{SQyEkOQTilt&qes=EcgfM2Gg_v delta 1265 zcmZ8hZAep57(Qpacbm?1e(b}!C7OmXA<WDhi64bvCbb`FYBibb`cZDP-Q|z=L!v+7 zBC_*Gp+c#Y5R({0NU0zq1cFw7DyRr6DiG{P5~lW^d+wdmfj#fJ&-1*`J@=f$zLpP` zIo<C1qT&+n8b(?)<IY8^PK0IxL;8)0@%!$6XQ}pJ_Co(@-@X?auLc4QSAqzJUJ8dg z1MSjscVkK7T~8h5bm5TKCx({)^o_rt_;9cPdyl3}AM@hhnE172v1#oCOs2I4a+SA| z$GnFu@)jcKGGpz!W?W?9wGd&I(I%r^#w;0~GUmxxC}T1C%kL%427#;??C`6Qqu;=M zh%*oqXCZ?LLhM^YEr)Z+{^Tf5CsWBc@NDdON;$?gu|CryjJsk7(keOYGmb8wjpuZ( zF(710AgM_XGHOZH%>g&hktxfWGz+K;JM2pw+1gcL{0!7GrE!FKtSv&s!pm_Oy;IDe zpe7>NVHlcqKef87fIk$S@+&NC3n)zcag-F;T7+mkY)vt5urNJs(yX^rtIGzcXK$r6 zGV=1u96;@s!wC6hYZ8cwc`(XQ%yy{TE9-z(?6L#qDLM@+U}1-VI!tLiOrB;o3&W|* zgHe%UE`<tV8rq~;zd)_7EWj#7r+hUFYXGW|(s+bK>}Q3Mbmqb6gknAgbvulGCfrTr zQFI#C%EBa|E>jwhkt116!dUz>FDm9sQ2!6hgNBHr)39C^b_=N6l*W@p=V%fp<6+ko z^G&D_rko~QSs^qGC^`+h!@?c{HA-o`NM1VXY-~@8ff(Ome!|RiK+VhMP15Q-mY)wc zP3}2Bt~1aUM0nH8nlPGV6Ew?{C1+*t0zB@fZ!uQ@Cboq{(d`X+{SsVBqin_Kb=-55 zdcvX<Ry|SG^A<exDq(XqASe1d;H^YeKZ2Smt2KbUuS@iX;4&EbUU)<peF2>wH#XM- z>U+eH)ENxG39A7=<MH$_gX<8xy5Y!Fbv3S@q$*t?oPnyYfx1TyuLn%&4h4OpB(?a0 ee!n*@a2_^Tb#8#uNpiB&lVHbGQcJ3`^Zx;$*4WVi diff --git a/lib/util.ppu b/lib/util.ppu index a37a39aa5959e9e78774a1e24e996697736e7d07..99159254b13d165af3a14119065135843792c64e 100644 GIT binary patch delta 605 zcmYk%T}YEr9LMqV-=00sGuPD3JyXM%J#&k&5_9<i1rskyZ`@>vMi?PhHx&(vsEfRq z=!IT1eix-6XkbJTBc7|E;vpEJ;EISY>>@8rL~rbk0zvva63@9fd^w+UIOja<-sv`z z$^MhERwYBiDePoeq#{B*{x*C5&R9#KPY7`<YaVmvsteh~8GZCaVKe)_YbT4#YC;!+ ze3*9zEI-XCc%jwdgc?Cqt-zAYgH=})oqEu6sc#9F^q@y4!B+?oBVoPMCWwZRaF5e4 zKJ$DPLnY&s!di(<gIMs`bPZPyeWE`&?R`o&vF1IeC?p6?r9bEq%(88ogui^7?!)Q( zMa%f>%ae^a{ybS2t5~EJt2c0jXv4Z~*bZ7iTUCypW4-DnxiMG0MQLm5@Rm~9rSXgY zkF$I2;BS??;q%tuS-n?H@LHdS*Yzo*j&(rVet~-gcSCU_#ByDdH21xtL|HPDOmIKI zGM_ohGA+q0_Y;_A+-PLUNn&xoD#~$|yd;a<AB)n&@<o!b+#9G3$Bkx|?~?rH-bFeb w54Nyq{M-HE;ST7y(a?d5AvJi4*J~v<xf>6-jX5T9J9p<EXB<5`el|q@0jaozg8%>k delta 577 zcmYk%Pe>GD7{~GVan{*!)%EYFiL$fnP>3wDYnGO{2ay#m+z<`1g9Rpd*+WnrqzF^6 zL$Lm!Kv76N2qB_#(t`|wh)B`FLm}3|KNw1GA)$HcaaDNV!^?Nx&%?{Srw#8Lypc$2 zprX>zM?w*H#3v3*gc#o$ZGZMU`1!67;z`U~rqmmsV$C($_Q{*+jhXLbF?6X1P9Z1@ zACz1xn}!`J8VSBZi0gQ$==hs_+X|~o1dpa!LG2|`2j)@+s1wz$0qTOy`#pqHZEAy- zW>XJV)7I%X#?q%Kim*GZ2>OR1_aAzP{){*c;%R1_deNPAL~D4Ey-bVn<t)=I_HtI~ zt2LK<m1x`grrSw0f#HG~`iRCW^Q6F0xKB|lUbydY|4{k=F4mTcpPrz4z(>DSc#Rgl znB_>CIOZm78X?`o;^OCCE;o06LQFm~Br&=D2zW#KHI^Ha+~Tf--xtzLS?)*@;cibz z8OtL{9&<+%;%9j-NiTOlUim`B<t%R{8R8zf_%1@sxS1E=iAiZ<ihI_H7bUfM6-)~f cEpo4%Qzg?EiPpI{&!`G6vngrUiTkGc9}7o-`2YX_ diff --git a/lib/vmemorymanager.ppu b/lib/vmemorymanager.ppu index a1e1c07db2fb2e0b9df5028c52c56cd5a64028e0..cd1c5cbd4a48815a309c9dd9aaec1dd6ca6b8722 100644 GIT binary patch delta 391 zcmaE^dsAOFARyGx*p#K2k%5`vK!6g%MsWs)Dz(KvrsiRR787Ninbn2PO-#1pc>gC- z(9OQMdE!!ej`|DdUQImj^n2o&N~U_&&F+k|nI<n_7USk%WB{7Nz+lA40OU(eE@hFQ zEWjc#c?q-FWCa#qD6Kwu3X3>M{bU^$>B+|+^8Abpj0`aSY+(He^Pv36A6OK?W;nCT zPu6Eun7jsPh77Cl<RsP*Mp2N7o42!uGczVk=I5NqxNGu4&Z~@5HkWg;F)|izuH$xO zWIQ|h0M7%)8<Q9Eo@IQsIiIhIk<n@LC;sh>t2eI_c*D#w??da-_bed|ljn(Oh>NlU zy#fW2AT|>R1A_qP<VFGM$v;FS*pz@`Dy);mMAL;tfwEdi%Jo<$@8{RxHUSEmfrJ?Y dCm#|$#bm=exlc@sJCF;kl##)Sb@E{`6#&@KV*vmF delta 352 zcmcbq|6Er#ARyGx*p#K2k%5`vK!6g%elZ4yDz(KvrsiRRx)WucnGeaIotSLJA-+<H z>%cO>sEJGEIiCFNT6=r_y?GPQR5JClY<6dy%`|xdEB9nc7URiBS=1+YvZw)RyU7b! zI3{bd2v0U)6_8+LU}WH6WB}U2z`%yYoUF(u%c={Koh;8LKlv-G!eni>bVlLLE7`)C z8KWmNa!q7hJ9#qKRmSekncQrQj9HrtcpMqI_i?cTO#%W&lgV?r#3x_o-OqS@@?^fV zjMq0O@;5OuI!t~du$^(i<~f3Im^t=}T$+&=R+T?_f~bbLB@09+h_nT<nK&321UM%P z3P?|WB`U$@1{CvPnam-UE+h<;^+Qq~#4>rKfChI2P$&u{%;-CLi`Xfq1eVDS;#%Ck P5H~S0q_IriDy{+md1Y2t diff --git a/src/driver/net/include/netutils.pas b/src/driver/net/include/netutils.pas index b485a8df..658b662b 100644 --- a/src/driver/net/include/netutils.pas +++ b/src/driver/net/include/netutils.pas @@ -3,7 +3,7 @@ unit netutils; interface uses - util, nettypes, console, lmemorymanager; + tracer, util, nettypes, console, lmemorymanager; procedure copyMAC(src : puint8; dst : puint8); procedure copyIPv4(src : puint8; dst : puint8); @@ -21,13 +21,15 @@ var i : uint8; begin + push_trace('netutils.IPEqual'); IPEqual:= true; for i:=0 to 3 do begin if ip1[i] <> ip2[i] then begin IPEqual:= false; - exit; + break; end; end; + pop_trace; end; function MACEqual(mac1 : puint8; mac2 : puint8) : boolean; @@ -35,13 +37,15 @@ var i : uint8; begin + push_trace('netutils.MACEqual'); MACEqual:= true; for i:=0 to 5 do begin if mac1[i] <> mac2[i] then begin MACEqual:= false; - exit; + break; end; end; + pop_trace; end; procedure writeIPv4Address(ip : puint8); @@ -49,12 +53,14 @@ var i : integer; begin + push_trace('netutils.writeIPv4Address'); console.writeint(ip[0]); for i:=1 to 3 do begin console.writestring('.'); console.writeint(ip[i]); end; console.writestringln(' '); + pop_trace; end; procedure writeMACAddress(mac : puint8); @@ -62,23 +68,29 @@ var i : integer; begin + push_trace('netutils.writeMACAddress'); console.writehexpair(mac[0]); for i:=1 to 5 do begin console.writestring(':'); console.writehexpair(mac[i]); end; console.writestringln(' '); + pop_trace; end; function newPacketContext : PPacketContext; begin + push_trace('netutils.newPacketContext'); newPacketContext:= PPacketContext(kalloc(sizeof(TPacketContext))); memset(uint32(newPacketContext), 0, sizeof(TPacketContext)); + pop_trace; end; procedure freePacketContext(p_context : PPacketContext); begin + push_trace('netutils.freePacketContext'); kfree(void(p_context)); + pop_trace; end; procedure copyMAC(src : puint8; dst : puint8); @@ -86,9 +98,11 @@ var i : uint8; begin + push_trace('netutils.copyMAC'); for i:=0 to 5 do begin dst[i]:= src[i]; end; + pop_trace; end; procedure copyIPv4(src : puint8; dst : puint8); @@ -96,9 +110,11 @@ var i : uint8; begin + push_trace('netutils.copyIPv4'); for i:=0 to 3 do begin dst[i]:= src[i]; end; + pop_trace; end; end. \ No newline at end of file diff --git a/src/driver/net/l1/net.pas b/src/driver/net/l1/net.pas index 6fb21914..eb1b855f 100644 --- a/src/driver/net/l1/net.pas +++ b/src/driver/net/l1/net.pas @@ -3,6 +3,7 @@ unit net; interface uses + tracer, console, nettypes, netutils; @@ -25,22 +26,28 @@ var procedure registerNetworkCard(SendCallback : TNetSendCallback; _MAC : puint8); begin + push_trace('net.registerNetworkCard'); if CBSend = nil then begin CBSend:= SendCallback; MAC:= _MAC; end; + pop_trace; end; procedure registerNextLayer(RecvCallback : TRecvCallback); begin + push_trace('net.registerNextLayer'); if CBNext = nil then begin CBNext:= RecvCallback; end; + pop_trace; end; procedure send(p_data : void; p_len : uint16); begin + push_trace('net.send'); if CBSend <> nil then CBSend(p_data, p_len); + pop_trace; end; procedure recv(p_data : void; p_len : uint16); @@ -48,22 +55,28 @@ var context : PPacketContext; begin + push_trace('net.recv'); //console.outputln('net', 'RECV.'); context:= newPacketContext; if CBNext <> nil then CBNext(p_data, p_len, context); freePacketContext(context); + pop_trace; end; function getMAC : puint8; begin + push_trace('net.getMAC'); getMAC:= MAC; + pop_trace; end; procedure init; begin + push_trace('net.init'); eth2.register; arp.register; ipv4.register; + pop_trace; end; end. \ No newline at end of file diff --git a/src/driver/net/l2/eth2.pas b/src/driver/net/l2/eth2.pas index 42a26f18..730dfe75 100644 --- a/src/driver/net/l2/eth2.pas +++ b/src/driver/net/l2/eth2.pas @@ -3,6 +3,7 @@ unit eth2; interface uses + tracer, nettypes, netutils, net, console; @@ -19,8 +20,10 @@ var procedure registerType(eType : uint16; RecvCB : TRecvCallback); begin + push_trace('eth2.registerType'); register; if EthTypes[eType] = nil then EthTypes[eType]:= RecvCB; + pop_trace; end; procedure recv(p_data : void; p_len : uint16; p_context : PPacketContext); @@ -30,6 +33,7 @@ var buf : puint8; begin + push_trace('eth2.recv'); //console.outputln('net.eth2', 'RECV.'); buf:= puint8(p_data); @@ -56,6 +60,7 @@ begin EthTypes[proto_type](void(buf), p_len - 14, p_context); end; end; + pop_trace; end; procedure register; @@ -63,6 +68,7 @@ var i : uint16; begin + push_trace('eth2.register'); if not Registered then begin for i:=0 to 65535 do begin EthTypes[i]:= nil; @@ -71,6 +77,7 @@ begin MAC:= net.getMAC; Registered:= true; end; + pop_trace; end; end. \ No newline at end of file diff --git a/src/driver/net/l3/arp.pas b/src/driver/net/l3/arp.pas index aa7ca3f1..567b601f 100644 --- a/src/driver/net/l3/arp.pas +++ b/src/driver/net/l3/arp.pas @@ -3,6 +3,7 @@ unit arp; interface uses + tracer, util, lists, console, nettypes, netutils, eth2; @@ -30,14 +31,16 @@ var r : PARPCacheRecord; begin + push_trace('arp.findCacheRecordByMAC'); findCacheRecordByMAC:= nil; for i:=0 to LL_Size(Cache)-1 do begin r:= PARPCacheRecord(LL_Get(Cache, i)); if MACEqual(mac, @r^.MAC[0]) then begin findCacheRecordByMAC:= r; - exit; + break; end; end; + pop_trace; end; function findCacheRecordByIP(ip : puint8) : PARPCacheRecord; @@ -46,14 +49,16 @@ var r : PARPCacheRecord; begin + push_trace('arp.findCacheRecordByIP'); findCacheRecordByIP:= nil; for i:=0 to LL_Size(Cache)-1 do begin r:= PARPCacheRecord(LL_Get(Cache, i)); if IPEqual(ip, @r^.IP[0]) then begin findCacheRecordByIP:= r; - exit; + break; end; end; + pop_trace; end; procedure recv(p_data : void; p_len : uint16; p_context : PPacketContext); @@ -63,6 +68,7 @@ var CacheElement : PARPCacheRecord; begin + push_trace('arp.recv'); { Get our converted Header } Header:= PARPHeader(p_data); AHeader.Hardware_Type:= (Header^.Hardware_Type_Hi SHL 8) + Header^.Hardware_Type_Lo; @@ -104,15 +110,18 @@ begin end; end; + pop_trace; end; procedure register; begin + push_trace('arp.register'); if not Registered then begin Cache:= LL_New(sizeof(TARPCacheRecord)); eth2.registerType($0806, @recv); Registered:= true; end; + pop_trace; end; function IPv4ToMAC(ip : puint8) : puint8; @@ -120,12 +129,14 @@ var r : PARPCacheRecord; begin + push_trace('arp.IPv4ToMAC'); register; IPv4ToMAC:= nil; r:= findCacheRecordByIP(ip); if r <> nil then begin IPv4ToMAC:= @r^.MAC[0]; end; + pop_trace; end; function MACToIIPv4(mac : puint8) : puint8; @@ -133,12 +144,14 @@ var r : PARPCacheRecord; begin + push_trace('arp.MACToIPv4'); register; MACToIIPv4:= nil; r:= findCacheRecordByMAC(mac); if r <> nil then begin MACToIIPv4:= @r^.IP[0]; end; + pop_trace; end; end. \ No newline at end of file diff --git a/src/driver/net/l3/ipv4.pas b/src/driver/net/l3/ipv4.pas index 7655002b..bab52fe0 100644 --- a/src/driver/net/l3/ipv4.pas +++ b/src/driver/net/l3/ipv4.pas @@ -3,6 +3,7 @@ unit ipv4; interface uses + tracer, util, console, terminal, net, nettypes, netutils, eth2; @@ -26,6 +27,7 @@ var len : uint16; begin + push_trace('ipv4.recv'); //console.outputln('net.ipv4', 'RECV.'); Header:= PIPV4Header(p_data); AHeader.version:= Header^.version; @@ -61,12 +63,13 @@ begin if (IPEqual(@Config.Address[0], @AHeader.Dst[0])) OR (AHeader.Dst[3] = 255) then begin if Protocols[AHeader.Protocol] <> nil then Protocols[AHeader.Protocol](void(buf), len, p_context); end; + pop_trace; end; procedure terminal_command_ifconfig(params : PParamList); begin + push_trace('ipv4.terminal_command_ifconfig'); if paramCount(params) > 2 then begin - end else begin writestring(' MAC: '); writeMACAddress(net.GetMAC); @@ -81,6 +84,7 @@ begin else writestringln(' NetUP: false'); end; + pop_trace; end; procedure register; @@ -88,6 +92,7 @@ var i : uint8; begin + push_trace('ipv4.register'); if not Registered then begin for i:=0 to 255 do begin Protocols[i]:= nil; @@ -102,12 +107,15 @@ begin terminal.registerCommand('IFCONFIG', @terminal_command_ifconfig, 'Configure Network Settings.'); Registered:= true; end; + pop_trace; end; procedure registerProtocol(Protocol_ID : uint8; recv_callback : TRecvCallback); begin + push_trace('ipv4.registerProtocol'); register; if Protocols[Protocol_ID] = nil then Protocols[Protocol_ID]:= recv_callback; + pop_trace; end; end. \ No newline at end of file diff --git a/src/driver/netdev/E1000.pas b/src/driver/netdev/E1000.pas index 8ec3c20e..64c01e7e 100644 --- a/src/driver/netdev/E1000.pas +++ b/src/driver/netdev/E1000.pas @@ -3,6 +3,7 @@ unit E1000; interface uses + tracer, console, strings, vmemorymanager, @@ -157,6 +158,7 @@ var mem : puint32; begin + push_trace('E1000.writeCommand'); if (bar_type = 0) then begin mem:= puint32(mem_base + p_address); mem^:= p_value; @@ -164,6 +166,7 @@ begin outl(io_base + 0, p_address); outl(io_base + 4, p_address) end; + pop_trace; end; function readCommand(p_address : uint16) : uint32; @@ -171,13 +174,15 @@ var mem : puint32; begin + push_trace('E1000.readCommand'); if (bar_type = 0) then begin mem:= puint32(mem_base + p_address); readCommand:= mem^; end else begin outl(io_base, p_address); readCommand:= inl(io_base + 4); - end; + end; + pop_trace; end; function detectEEPROM() : boolean; @@ -185,6 +190,7 @@ var val, i : uint32; begin + push_trace('E1000.detectEEPROM'); val:= 0; writeCommand(REG_EEPROM, $1); for i:=0 to 1000 do begin @@ -193,6 +199,7 @@ begin if (val and $10) > 0 then eeprom_exists:= true else eeprom_exists:= false; end; detectEEPROM:= eeprom_exists; + pop_trace; end; function EEPROMRead( address : uint8 ) : uint32; @@ -201,6 +208,7 @@ var tmp : uint32; begin + push_trace('E1000.EEPROMRead'); tmp:= 0; if (eeprom_exists) then begin writeCommand( REG_EEPROM, 1 OR (uint32(address) SHL 8) ); @@ -215,6 +223,7 @@ begin end; data:= uint16( (tmp SHR 16) AND ($FFFF) ); EEPROMRead:= data; + pop_trace; end; function readMACAddress() : boolean; @@ -226,6 +235,7 @@ var i : uint32; begin + push_trace('E1000.readMACAddress'); res:= true; if (eeprom_exists) then begin temp:= EEPROMRead(0); @@ -249,6 +259,7 @@ begin end; end; readMACAddress:= res; + pop_trace; end; procedure startLink(); @@ -256,8 +267,10 @@ var val : uint32; begin + push_trace('E1000.startLink'); val:= readCommand(REG_CTRL); writeCommand(REG_CTRL, val OR ECTRL_SLU); + pop_trace; end; procedure rxinit(); @@ -268,6 +281,7 @@ var i : uint32; begin + push_trace('E1000.rxinit'); ptr:= puint8(kalloc(sizeof(TE1000_rx_desc) * E1000_NUM_RX_DESC + 16)); descs:= PE1000_rx_desc(ptr); for i:=0 to E1000_NUM_RX_DESC do begin @@ -297,6 +311,7 @@ begin rx_curr:= 0; writeCommand(REG_RCTRL, RCTL_EN OR RCTL_SBP OR RCTL_UPE OR RCTL_MPE OR RCTL_LBM_NONE OR RTCL_RDMTS_HALF OR RCTL_BAM OR RCTL_SECRC OR RCTL_BSIZE_2048); + pop_trace; end; procedure txinit(); @@ -307,6 +322,7 @@ var i : uint32; begin + push_trace('E1000.txinit'); ptr:= puint8(kalloc(sizeof(TE1000_tx_desc) * (E1000_NUM_TX_DESC + 16))); descs:= PE1000_tx_desc(ptr); for i:=0 to E1000_NUM_TX_DESC do begin @@ -338,13 +354,16 @@ begin writeCommand(REG_TCTRL, $3003F0FA); writeCommand(REG_TIPG, $0060200A); end; + pop_trace; end; procedure enableInturrupt(); begin + push_trace('E1000.enableInterrupt'); writeCommand(REG_IMASK, $1F6DC); writeCommand(REG_IMASK, $FF AND NOT(4)); readCommand($C0); + pop_trace; end; procedure handleReceive(); @@ -356,6 +375,7 @@ var i : uint16; begin + push_trace('E1000.handleReceive'); while (rx_descs[rx_curr]^.status AND $1) > 0 do begin got_packet:= true; buf:= rx_buffs[rx_curr]; @@ -369,6 +389,7 @@ begin rx_curr:= (rx_curr + 1) mod E1000_NUM_RX_DESC; writeCommand(REG_RXDESCTAIL, old_cur); end; + pop_trace; end; procedure writeCardType(); @@ -388,6 +409,7 @@ var data : uint32; begin + push_trace('E1000.fire'); //console.outputln('E1000 Driver', 'FIRED.'); status:= readCommand($C0); @@ -412,11 +434,14 @@ begin //CLI (Not 100% Nessisary as this is done on IRET) CLI; + pop_trace; end; procedure console_command_mac(params : PParamList); begin + push_trace('E1000.console_command_mac'); writeMACAddress(@mac[0]); + pop_trace; end; procedure console_command_sendtest(params : PParamList); @@ -436,6 +461,7 @@ var ); begin + push_trace('E1000.console_command_sendtest'); TestPacket[6]:= mac[0]; TestPacket[7]:= mac[1]; TestPacket[8]:= mac[2]; @@ -450,6 +476,7 @@ begin TestPacket[26]:= mac[4]; TestPacket[27]:= mac[5]; sendPacket(void(@TestPacket[0]), 42); + pop_trace; end; function load(ptr : void) : boolean; @@ -460,6 +487,8 @@ var iline : uint8; begin + push_trace('E1000.load'); + console.outputln('E1000 Driver', 'Load Start.'); writeCardType(); @@ -484,58 +513,66 @@ begin if not readMACAddress() then begin console.outputln('E1000 Driver', 'MAC Read Failed.'); load:= false; - exit; + end else begin + console.output('E1000 Driver', 'MAC Address: '); + writeMACAddress(@mac[0]); + + startLink(); + + for i:=0 to $80 do begin + writeCommand($5200 + i*4, 0); + end; + + net.registerNetworkCard(@sendPacket, getMACAddress()); + + IDT.set_gate(32 + PCI_Info^.interrupt_line, uint32(@fire), $08, ISR_RING_0); + enableInturrupt(); + + rxinit(); + txinit(); + + load:= true; + + if load then registercommand('E1000', @console_command_sendtest, 'Test sending a ARP Request.'); + if load then registercommand('MAC', @console_command_mac, 'Print MAC Address.'); end; - console.output('E1000 Driver', 'MAC Address: '); - writeMACAddress(@mac[0]); - - startLink(); - - for i:=0 to $80 do begin - writeCommand($5200 + i*4, 0); - end; - - net.registerNetworkCard(@sendPacket, getMACAddress()); - - IDT.set_gate(32 + PCI_Info^.interrupt_line, uint32(@fire), $08, ISR_RING_0); - enableInturrupt(); - - rxinit(); - txinit(); - - load:= true; - - if load then registercommand('E1000', @console_command_sendtest, 'Test sending a ARP Request.'); - if load then registercommand('MAC', @console_command_mac, 'Print MAC Address.'); console.outputln('E1000 Driver', 'Load Finish.'); + + pop_trace; end; function loadE1000(ptr : void) : boolean; begin + push_trace('E1000.loadE1000'); loadE1000:= false; if not Loaded then begin card_type:= ctE1000; loadE1000:= load(ptr); end; + pop_trace; end; function load82577LM(ptr : void) : boolean; begin + push_trace('E1000.load82577LM'); load82577LM:= false; if not Loaded then begin card_type:= ct82577LM; load82577LM:= load(ptr); end; + pop_trace; end; function loadI217(ptr : void) : boolean; begin + push_trace('E1000.loadI217'); loadI217:= false; if not Loaded then begin card_type:= ctI217; loadI217:= load(ptr); end; + pop_trace; end; procedure init(); @@ -543,6 +580,7 @@ var dev : TDeviceIdentifier; begin + push_trace('E1000.init'); card_type:= ctUnknown; dev.Bus:= biPCI; dev.id0:= INTEL_VEND; @@ -556,6 +594,7 @@ begin drivermanagement.register_driver('I217 Ethernet Driver', @dev, @loadI217); dev.id4:= LM82577_DEV; drivermanagement.register_driver('82577LM Ethernet Driver', @dev, @load82577LM); + pop_trace; end; function getMACAddress : puint8; @@ -568,6 +607,7 @@ var old_cur : uint8; begin + push_trace('E1000.sendPacket'); tx_descs[tx_curr]^.address:= uint32(vtop(uint32(p_data))); tx_descs[tx_curr]^.length:= p_len; tx_descs[tx_curr]^.cmd:= CMD_EOP OR CMD_IFCS OR CMD_RS OR CMD_RPS; @@ -578,6 +618,7 @@ begin while (tx_descs[old_cur]^.status AND $FF) = 0 do begin end; sendPacket:= 0; + pop_trace; end; end. \ No newline at end of file diff --git a/src/driver/storage/storagemanagement.pas b/src/driver/storage/storagemanagement.pas index 4d64f57c..654b2cda 100644 --- a/src/driver/storage/storagemanagement.pas +++ b/src/driver/storage/storagemanagement.pas @@ -31,7 +31,7 @@ type PPCreateHook = procedure(disk : PStorage_Device; sectors : uint32; start : uint32); PPDetectHook = procedure(disk : PStorage_Device); - PPHIOHook = procedure(device : PStorage_device; LBA : uint32; sectorCount : uint32; buffer : Puint32); + PPHIOHook_ = procedure(device : PStorage_device; LBA : uint32; sectorCount : uint32; buffer : Puint32); TFilesystem = record sName : pchar; @@ -58,7 +58,7 @@ type maxSectorCount : uint32; sectorSize : uint32; writable : boolean; - volumes : array[0..7] of TStorage_Volume + volumes : array[0..7] of TStorage_Volume; writeCallback : PPHIOHook; readCallback : PPHIOHook; end; diff --git a/src/drivermanagement.pas b/src/drivermanagement.pas index b80b7731..d26ab476 100644 --- a/src/drivermanagement.pas +++ b/src/drivermanagement.pas @@ -88,7 +88,7 @@ var i : uint32; begin - //push_trace('driver_management.terminal_command_drivers'); + push_trace('driver_management.terminal_command_drivers'); Drv:= Root; i:= 1; while Drv <> nil do begin @@ -120,7 +120,7 @@ begin end; Drv:= Drv^.Next; end; - //pop_trace; + pop_trace; end; procedure terminal_command_driversex(Params : PParamList); @@ -130,7 +130,7 @@ var i : uint32; begin - //push_trace('driver_management.terminal_command_driversex'); + push_trace('driver_management.terminal_command_driversex'); Drv:= Root; i:= 1; while Drv <> nil do begin @@ -161,7 +161,7 @@ begin i:= i + 1; Drv:= Drv^.Next; end; - //pop_trace; + pop_trace; end; procedure terminal_command_devices(Params : PParamList); @@ -171,7 +171,7 @@ var i : uint32; begin - //push_trace('driver_management.terminal_command_devices'); + push_trace('driver_management.terminal_command_devices'); Dv:= Dev; i:= 1; while Dv <> nil do begin @@ -209,7 +209,7 @@ begin i:= i + 1; Dv:= Dv^.Next; end; - //pop_trace; + pop_trace; end; { Main Functions } @@ -222,6 +222,7 @@ var new_ex: PDevEx; begin + push_trace('driver_management.copy_identifier'); New_DevID:= PDeviceIdentifier(kalloc(sizeof(TDeviceIdentifier))); New_DevID^.Bus:= DeviceID^.Bus; New_DevID^.id0:= DeviceID^.id0; @@ -246,6 +247,7 @@ begin end; New_DevID^.ex:= root_ex; copy_identifier:= New_DevID; + pop_trace; end; function identifiers_match(i1, i2 : PDeviceIdentifier) : boolean; @@ -254,6 +256,7 @@ var b1, b2 : boolean; begin + push_trace('driver_management.identifiers_match'); identifiers_match:= true; identifiers_match:= identifiers_match and ((i1^.Bus = i2^.Bus) OR (i1^.Bus = biANY) OR (i2^.Bus = biANY)); identifiers_match:= identifiers_match and ((i1^.id0 = i2^.id0) OR (i1^.id0 = $FFFFFFFF) OR (i2^.id0 = $FFFFFFFF)); @@ -267,28 +270,36 @@ begin b1:= ll1 <> nil; b2:= ll2 <> nil; identifiers_match:= identifiers_match and (b1 = b2); - if not (b1 and b2) then exit; + if not (b1 and b2) then begin + identifiers_match:= false; + break; + end; if b1 = b2 then begin identifiers_match:= identifiers_match and ((ll1^.idN = ll2^.idN) OR (ll1^.idN = $FFFFFFFF) OR (ll2^.idN = $FFFFFFFF)); end else begin identifiers_match:= false; - exit; + break; end; ll1:= ll1^.ex; ll2:= ll2^.ex; end; + pop_trace; end; procedure init; begin + push_trace('driver_management.init'); terminal.registerCommand('DRIVERSEX', @terminal_command_driversex, 'List all available drivers.'); terminal.registerCommand('DRIVERS', @terminal_command_drivers, 'List loaded drivers.'); terminal.registerCommand('DEVICES', @terminal_command_devices, 'List devices.'); + pop_trace; end; procedure register_driver(Driver_Name : PChar; DeviceID : PDeviceIdentifier; Load_Callback : TDriverLoadCallback); begin + push_trace('driver_management.register_driver'); register_driver_ex(Driver_Name, DeviceID, Load_Callback, false); + pop_trace; end; procedure register_driver_ex(Driver_Name : PChar; DeviceID : PDeviceIdentifier; Load_Callback : TDriverLoadCallback; force_load : boolean); @@ -297,33 +308,34 @@ var RegList : PDriverRegistration; begin - //push_trace('driver_management.register_driver_ex'); - if DeviceID = nil then exit; - NewReg:= PDriverRegistration(kalloc(sizeof(TDriverRegistration))); - NewReg^.Driver_Name:= stringCopy(Driver_Name); - NewReg^.Identifier:= copy_identifier(DeviceID); - NewReg^.Loaded:= false; - NewReg^.Driver_Load:= Load_Callback; - NewReg^.Next:= nil; - if Root = nil then begin - Root:= NewReg; - end else begin - RegList:= Root; - While RegList^.Next <> nil do begin - RegList:= RegList^.Next; + push_trace('driver_management.register_driver_ex'); + if DeviceID <> nil then begin; + NewReg:= PDriverRegistration(kalloc(sizeof(TDriverRegistration))); + NewReg^.Driver_Name:= stringCopy(Driver_Name); + NewReg^.Identifier:= copy_identifier(DeviceID); + NewReg^.Loaded:= false; + NewReg^.Driver_Load:= Load_Callback; + NewReg^.Next:= nil; + if Root = nil then begin + Root:= NewReg; + end else begin + RegList:= Root; + While RegList^.Next <> nil do begin + RegList:= RegList^.Next; + end; + RegList^.Next:= NewReg; + end; + console.output('Driver Management', 'New Driver Registered: '); + console.writestringln(NewReg^.Driver_Name); + if force_load then begin + console.output('Driver Management', 'Driver ('); + console.writestring(NewReg^.Driver_Name); + console.writestringln(') forced to load.'); + NewReg^.Loaded:= True; + NewReg^.Driver_Load(nil); end; - RegList^.Next:= NewReg; end; - console.output('Driver Management', 'New Driver Registered: '); - console.writestringln(NewReg^.Driver_Name); - if force_load then begin - console.output('Driver Management', 'Driver ('); - console.writestring(NewReg^.Driver_Name); - console.writestringln(') forced to load.'); - NewReg^.Loaded:= True; - NewReg^.Driver_Load(nil); - end; - //pop_trace; + pop_trace; end; procedure register_device(Device_Name : PChar; DeviceID : PDeviceIdentifier; ptr : void); @@ -333,7 +345,7 @@ var dev_list : PDeviceRegistration; begin - //push_trace('driver_management.register_device'); + push_trace('driver_management.register_device'); drv:= Root; new_dev:= PDeviceRegistration(kalloc(sizeof(TDeviceRegistration))); new_dev^.Device_Name:= stringCopy(Device_Name); @@ -365,12 +377,12 @@ begin drv^.Loaded:= true; new_dev^.Driver_Loaded:= true; new_dev^.Driver:= drv; - exit; + break; end; end; drv:= drv^.Next; end; - //pop_trace; + pop_trace; end; end. \ No newline at end of file diff --git a/src/include/lists.pas b/src/include/lists.pas index 89c30282..035b3901 100644 --- a/src/include/lists.pas +++ b/src/include/lists.pas @@ -128,31 +128,42 @@ var begin LL_Insert:= nil; - if idx >= LinkedList^.Count then exit; + if idx > LinkedList^.Count then exit; Base:= LinkedList^.Head; i:=0; while (i < idx) and (Base <> nil) do begin i:= i + 1; Base:= Base^.Next; end; - if Base = nil then exit; - Prev:= Base^.Previous; - Next:= Base; - Element:= PLinkedList(kalloc(sizeof(TLinkedList))); - Element^.Data:= kalloc(LinkedList^.ElementSize); - memset(uint32(Element^.Data), 0, LinkedList^.ElementSize); - Element^.Previous:= Prev; - Element^.Next:= Next; - if Prev = nil then begin + if i = 0 then begin + Element:= PLinkedList(kalloc(sizeof(TLinkedList))); + Element^.Data:= kalloc(LinkedList^.ElementSize); + memset(uint32(Element^.Data), 0, LinkedList^.ElementSize); + Element^.Next:= LinkedList^.Head; + Element^.Previous:= nil; LinkedList^.Head:= Element; + LinkedList^.Count:= LinkedList^.Count + 1; + LL_Insert:= Element^.Data; end else begin - Prev^.Next:= Element; + if Base = nil then exit; + Prev:= Base^.Previous; + Next:= Base; + Element:= PLinkedList(kalloc(sizeof(TLinkedList))); + Element^.Data:= kalloc(LinkedList^.ElementSize); + memset(uint32(Element^.Data), 0, LinkedList^.ElementSize); + Element^.Previous:= Prev; + Element^.Next:= Next; + if Prev = nil then begin + LinkedList^.Head:= Element; + end else begin + Prev^.Next:= Element; + end; + if Next <> nil then begin + Next^.Previous:= Element; + end; + LinkedList^.Count:= LinkedList^.Count + 1; + LL_Insert:= Element^.Data; end; - if Next <> nil then begin - Next^.Previous:= Element; - end; - LinkedList^.Count:= LinkedList^.Count + 1; - LL_Insert:= Element^.Data; end; function LL_Get(LinkedList : PLinkedListBase; idx : uint32) : void; diff --git a/src/include/system.pas b/src/include/system.pas index ea647c30..e21bcec5 100644 --- a/src/include/system.pas +++ b/src/include/system.pas @@ -14,7 +14,7 @@ interface const KERNEL_VIRTUAL_BASE = $C0000000; KERNEL_PAGE_NUMBER = KERNEL_VIRTUAL_BASE SHR 22; - BSOD_ENABLE = false; + BSOD_ENABLE = true; type //internal types diff --git a/src/include/util.pas b/src/include/util.pas index 3a592c69..0f04146d 100644 --- a/src/include/util.pas +++ b/src/include/util.pas @@ -57,7 +57,8 @@ var buf : puint8; i : uint32; -begin +begin + push_trace('util.printmemory'); buf:= puint8(source); for i:=0 to length do begin if offset_row and (i = 0) then begin @@ -76,6 +77,7 @@ begin end; end; console.writestringln(' '); + pop_trace; end; function hi(b : uint8) : uint8; [public, alias: 'util_hi']; @@ -219,10 +221,12 @@ var i : uint32; begin + push_trace('util.memset'); for i:=0 to size-1 do begin loc:= puint8(location + i); loc^:= value; end; + pop_trace; end; procedure memcpy(source : uint32; dest : uint32; size : uint32); @@ -231,11 +235,13 @@ var i : uint32; begin + push_trace('util.memcpy'); for i:=0 to size-1 do begin src:= puint8(source + i); dst:= puint8(dest + i); dst^:= src^; end; + pop_trace; end; function getWord(i : uint32; hi : boolean) : uint16; @@ -257,6 +263,9 @@ begin end; procedure BSOD(fault : pchar; info : pchar); +var + trace : pchar; + begin if not BSOD_ENABLE then exit; console.setdefaultattribute(console.combinecolors(white, Red)); @@ -298,7 +307,8 @@ begin console.writestring(' Fault Info: '); console.writestringln(info); console.writestring(' Faulting Module: '); - console.writestringln(tracer.get_last_trace); + trace:= tracer.get_last_trace; + if trace <> nil then console.writestringln(tracer.get_last_trace) else console.writestringln('Unknown'); console.writestringln(' '); halt_and_catch_fire(); end; diff --git a/src/kernel.pas b/src/kernel.pas index 1c0f683c..f1837841 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -100,6 +100,8 @@ begin multibootinfo:= mbinfo; multibootmagic:= mbmagic; + tracer.freeze(); + { Console Init } console.init(); @@ -177,6 +179,8 @@ begin console.writestringln(''); console.writestringln('Press any key to boot in to Asuro Terminal...'); + GPF; + keyboard.hook(@temphook); util.halt_and_dont_catch_fire; diff --git a/src/lmemorymanager.pas b/src/lmemorymanager.pas index 04ddef54..151bdc41 100644 --- a/src/lmemorymanager.pas +++ b/src/lmemorymanager.pas @@ -15,7 +15,8 @@ uses util, vmemorymanager, pmemorymanager, - console; + console, + tracer; const ALLOC_SPACE = 8; //64-Bit Allocations @@ -56,11 +57,13 @@ var i : integer; begin + push_trace('lmemorymanager.new_lmm_page'); i:= KERNEL_PAGE_NUMBER + 4; while not vmemorymanager.new_page(i) do begin i:= i + 1; end; new_lmm_page:= i SHL 22; + pop_trace; end; function new_heap_page(CurrentPage : PHeapPage) : PHeapPage; @@ -68,6 +71,7 @@ var i : integer; begin + push_trace('lmemorymanager.new_heap_page'); new_heap_page:= PHeapPage(new_lmm_page); if CurrentPage <> nil then CurrentPage^.Next_Page:= uint32(new_heap_page); new_heap_page^.Next_Page:= 0; @@ -78,7 +82,8 @@ begin Root:= False; Last:= False; end; - end; + end; + pop_trace; end; procedure init; @@ -86,6 +91,7 @@ var i : uint32; begin + push_trace('lmemorymanager.init'); console.outputln('LMM','INIT BEGIN.'); Root_Page:= PHeapPage(new_lmm_page); Search_Page:= Root_Page; @@ -97,6 +103,7 @@ begin Root_Page^.Entries[i].Last:= False; end; console.outputln('LMM','INIT END.'); + pop_trace; end; function kpalloc(address : uint32) : void; @@ -104,10 +111,12 @@ var block : uint16; begin + push_trace('lmemorymanager.kpalloc'); block:= address SHR 22; force_alloc_block(block, 0); map_page(block, block); kpalloc:= void(block SHL 22); + pop_trace; end; function kalloc(size : uint32) : void; @@ -118,6 +127,7 @@ var miss : boolean; begin + push_trace('lmemorymanager.kalloc'); Heap_Entries:= size div 8; If sint32(size-(Heap_Entries*8)) > 0 then Heap_Entries:= Heap_Entries + 1; hp:= Search_Page; @@ -153,6 +163,7 @@ begin Search_Page:= hp; end; end; + pop_trace; end; procedure kfree(area : void); @@ -161,6 +172,7 @@ var entry : uint32; begin + push_trace('lmemorymanager.kfree'); hp:= PHeapPage((uint32(area) SHR 22) SHL 22); entry:= (uint32(area) - DATA_OFFSET - uint32(hp)) div 8; if hp^.Entries[entry].Present then begin @@ -180,6 +192,7 @@ begin end else begin GPF; end; + pop_trace; end; end. \ No newline at end of file diff --git a/src/pmemorymanager.pas b/src/pmemorymanager.pas index 082b0e1d..18fc13c5 100644 --- a/src/pmemorymanager.pas +++ b/src/pmemorymanager.pas @@ -14,7 +14,8 @@ interface uses util, console, - multiboot; + multiboot, + tracer; type TPhysicalMemoryEntry = packed record @@ -44,6 +45,7 @@ var i : uint32; begin + push_trace('pmemorymanager.set_memory_area_present'); FirstBlock:= base SHR 22; LastBlock:= (base+length) SHR 22; if (FirstBlock > 1023) then exit; @@ -61,6 +63,7 @@ begin end; end; end; + pop_trace; end; procedure walk_memory_map; @@ -71,6 +74,7 @@ var i : uint16; begin + push_trace('pmemorymanager.walk_memory_map'); address:= multibootinfo^.mmap_addr + KERNEL_VIRTUAL_BASE; length:= multibootinfo^.mmap_length; mmap:= Pmemory_map_t(address); @@ -92,10 +96,12 @@ begin for i:=0 to 1023 do begin if PhysicalMemory[i].Present then nPresent:= nPresent + 1; end; + pop_trace; end; procedure force_alloc_block(block : uint16; caller : uint32); begin + push_trace('pmemorymanager.force_alloc_block'); PhysicalMemory[block].Allocated:= True; PhysicalMemory[block].MappedTo:= caller; // console.writestring('PMM: 4MiB Block Force Allocated @ '); @@ -105,10 +111,12 @@ begin // console.writestring(' - '); // console.writehex(((block+1) SHL 22)); // console.writestringln(']'); + pop_trace; end; procedure init; begin + push_trace('pmemorymanager.init'); console.outputln('PMM','INIT BEGIN.'); walk_memory_map; force_alloc_block(0, 0); @@ -119,10 +127,12 @@ begin console.writeword(nPresent); console.writestringln('/1024 Block Available for Allocation.'); console.outputln('PMM','INIT END.'); + pop_trace; end; function alloc_block(block : uint16; caller : uint32) : boolean; begin + push_trace('pmemorymanager.alloc_block'); alloc_block:= false; if (PhysicalMemory[block].Present) then begin if PhysicalMemory[block].Allocated then begin @@ -143,6 +153,7 @@ begin GPF; alloc_block:= false; end; + pop_trace; end; function new_block(caller : uint32) : uint16; @@ -150,6 +161,7 @@ var i : uint16; begin + push_trace('pmemorymanager.new_block'); new_block:= 0; for i:=2 to 1023 do begin if PhysicalMemory[i].Present then begin @@ -161,10 +173,12 @@ begin end; end; end; + pop_trace; end; procedure free_block(block : uint16; caller : uint32); begin + push_trace('pmemorymanager.free_block'); if block > 1023 then begin GPF; exit; @@ -182,6 +196,7 @@ begin exit; end; PhysicalMemory[block].Allocated:= false; + pop_trace; end; end. \ No newline at end of file diff --git a/src/terminal.pas b/src/terminal.pas index e0af1d96..ef162040 100644 --- a/src/terminal.pas +++ b/src/terminal.pas @@ -60,6 +60,7 @@ var i : uint32; begin + push_trace('terminal.paramCount'); current:= params; i:= 0; while current^.param <> nil do begin @@ -67,6 +68,7 @@ begin current:= current^.next; end; paramCount:= i-1; + pop_trace; end; function getParams(buf : TCommandBuffer) : PParamList; @@ -78,6 +80,7 @@ var current : PParamList; begin + push_trace('terminal.getParams'); root:= PParamList(kalloc(sizeof(TParamList))); current:= root; current^.next:= nil; @@ -103,6 +106,7 @@ begin inc(finish); end; getParams:= root; + pop_trace; end; function getParam(index : uint32; params : PParamList) : pchar; @@ -112,12 +116,14 @@ var i : uint32; begin + push_trace('terminal.getParam'); result:= nil; search:= params; for i:=0 to index do begin search:= search^.next; end; result:= search^.param; + pop_trace; end; procedure freeParams(params : PParamList); @@ -126,6 +132,7 @@ var next : PParamList; begin + push_trace('terminal.freeParams'); p:= params; next:= p^.next; while p^.next <> nil do begin @@ -134,14 +141,17 @@ begin p:= next; next:= p^.next; end; + pop_trace; end; procedure testParams(params : PParamList); begin + push_trace('terminal.testParams'); while params^.Param <> nil do begin writestringln(params^.Param); params:= params^.next; end; + pop_trace; end; procedure echo(params : PParamList); @@ -149,6 +159,7 @@ var current : PParamList; begin + push_trace('terminal.echo'); current:= params^.next; while current^.param <> nil do begin console.writestring(current^.param); @@ -156,22 +167,28 @@ begin current:= current^.next; end; console.writestringln(''); + pop_trace; end; procedure clear(params : PParamList); begin + push_trace('terminal.clear'); console.clear(); + pop_trace; end; procedure version(params : PParamList); begin + push_trace('terminal.version'); console.writestringln('Asuro v1.0'); + pop_trace; end; procedure help(params : PParamList); var i : uint32; begin + push_trace('terminal.help'); console.writestringln('Registered Commands: '); for i:=0 to 65534 do begin if Commands[i].Registered then begin @@ -181,15 +198,18 @@ begin console.writestringln(Commands[i].description); end; end; + pop_trace; end; procedure test(params : PParamList); begin + push_trace('terminal.test'); if paramCount(params) > 0 then begin console.writeintln(stringToInt(getParam(0, params))); end else begin console.writestringln('Invalid number of params'); end; + pop_trace; end; procedure registerCommand(command : pchar; method : TCommandMethod; description : pchar); @@ -197,12 +217,14 @@ var index : uint32; begin + push_trace('terminal.registerCommand'); index:= 0; while Commands[index].registered = true do inc(index); Commands[index].registered:= true; Commands[index].Command:= command; Commands[index].method:= method; Commands[index].description:= description; + pop_trace; end; procedure process_command; @@ -214,6 +236,8 @@ var uppera, upperb : pchar; begin + push_trace('terminal.process_command'); + { Start a new line. } console.writecharln(' '); @@ -249,10 +273,13 @@ begin console.writestring('Asuro#> '); bIndex:= 0; memset(uint32(@buffer[0]), 0, 1024); + + pop_trace; end; procedure key_event(info : TKeyInfo); begin + push_trace('terminal.key_event'); if (info.key_code >= 32) and (info.key_code <= 126) then begin if bIndex < 1024 then begin buffer[bIndex]:= info.key_code; @@ -270,10 +297,12 @@ begin if info.key_code = 13 then begin //return process_command; end; + pop_trace; end; procedure init; begin + push_trace('terminal.init'); console.writestringln('TERMINAL: INIT BEGIN.'); memset(uint32(@Commands[0]), 0, 65535*sizeof(TCommand)); memset(uint32(@buffer[0]), 0, 1024); @@ -284,13 +313,16 @@ begin registerCommand('TESTPARAMS', @testParams, 'Tests param parsing.'); registerCommand('TEST', @test, 'Command for testing.'); console.writestringln('TERMINAL: INIT END.'); + pop_trace; end; procedure run; begin + push_trace('terminal.run'); keyboard.hook(@key_event); console.clear(); console.writestring('Asuro#> '); + pop_trace; end; end. \ No newline at end of file diff --git a/src/tracer.pas b/src/tracer.pas index 3ac04696..55f89d40 100644 --- a/src/tracer.pas +++ b/src/tracer.pas @@ -6,6 +6,9 @@ procedure init; procedure push_trace(t_name : pchar); procedure pop_trace; function get_last_trace : pchar; +procedure freeze; +function get_trace_count : uint32; +function get_trace_N(idx : uint32) : pchar; implementation @@ -13,11 +16,11 @@ uses console, util, lists, strings; var - t_ready : Boolean = false; - Locked : Boolean = false; + t_ready : Boolean; + Locked : Boolean; TraceStack : PLinkedListBase; -procedure lock; +procedure freeze; begin t_ready:= false; end; @@ -27,38 +30,51 @@ var mem : void; begin - if not Initialized then exit; - console.writestringln('WTF?!?!?'); - if not Locked then begin - Locked:= true; - mem:= LL_Insert(TraceStack, 0); - memset(uint32(mem), 0, StringSize(t_name) + 5); - memcpy(uint32(t_name), uint32(mem), StringSize(t_name) + 1); - Locked:= false; + if t_ready then begin + if not Locked then begin + Locked:= true; + mem:= LL_Insert(TraceStack, 0); + memset(uint32(mem), 0, StringSize(t_name) + 5); + memcpy(uint32(t_name), uint32(mem), StringSize(t_name) + 1); + Locked:= false; + end; end; end; procedure pop_trace; begin - if not Initialized then exit; - if not Locked then begin - Locked:= true; - LL_Delete(TraceStack, 0); - Locked:= false; + if t_ready then begin + if not Locked then begin + Locked:= true; + LL_Delete(TraceStack, 0); + Locked:= false; + end; end; end; function get_last_trace : pchar; begin - if not Initialized then exit; - get_last_trace:= pchar(LL_Get(TraceStack, 0)); + get_last_trace:= nil; + if t_ready then begin + get_last_trace:= pchar(LL_Get(TraceStack, 0)); + end; end; procedure init; begin TraceStack:= LL_New(255); + t_ready:= true; push_trace('kmain'); - Initialized:= true; +end; + +function get_trace_count : uint32; +begin + get_trace_count:= LL_Size(TraceStack); +end; + +function get_trace_N(idx : uint32) : pchar; +begin + get_trace_N:= pchar(LL_Get(TraceStack, idx)); end; end. \ No newline at end of file diff --git a/src/vmemorymanager.pas b/src/vmemorymanager.pas index a6cf226e..7367eaf2 100644 --- a/src/vmemorymanager.pas +++ b/src/vmemorymanager.pas @@ -58,7 +58,9 @@ uses function new_page_directory : uint32; begin + push_trace('vmemorymanager.new_page_directory'); new_page_directory:= uint32(kalloc(sizeof(TPageDirectory))); + pop_trace; end; function new_kernel_mapped_page_directory : uint32; @@ -67,11 +69,13 @@ var i : uint32; begin + push_trace('vmemorymanager.new_kernel_mapped_page_directory'); PD:= PPageDirectory(new_page_directory); for i:=KERNEL_PAGE_NUMBER to 1023 do begin PD^[i]:= KERNEL_PAGE_DIRECTORY^[i]; end; new_kernel_mapped_page_directory:= uint32(PD); + pop_trace; end; function load_current_page_directory : PPageDirectory; @@ -79,6 +83,7 @@ var Directory : uint32; begin + push_trace('vmemorymanager.load_current_page_directory'); asm MOV EAX, CR3 MOV Directory, EAX @@ -93,6 +98,7 @@ var i : uint32; begin + push_trace('vmemorymanager.init'); console.outputln('VMM','INIT BEGIN.'); PageDirectory:= load_current_page_directory; KERNEL_PAGE_DIRECTORY:= PageDirectory; @@ -101,6 +107,7 @@ begin map_page(KERNEL_PAGE_NUMBER + 2, 2); map_page(KERNEL_PAGE_NUMBER + 3, 3); console.outputln('VMM','INIT END.'); + pop_trace; end; function map_page_ex(page_number : uint16; block : uint16; PD : PPageDirectory) : boolean; @@ -109,6 +116,7 @@ var page : uint16; begin + push_trace('vmemorymanager.map_page_ex'); map_page_ex:= false; PD^[page_number].Present:= true; addr:= block; @@ -134,6 +142,7 @@ begin // console.writestringln(']'); map_page_ex:= true; + pop_trace; end; function map_page(page_number : uint16; block : uint16) : boolean; @@ -143,6 +152,7 @@ var rldpd : uint32; begin + push_trace('vmemorymanager.map_page'); map_page:= false; PageDirectory^[page_number].Present:= true; addr:= block; @@ -155,6 +165,7 @@ begin mov eax, rldpd mov CR3, eax end; + pop_trace; end; function vtop(address : uint32) : uint32; @@ -164,10 +175,12 @@ var loadd : uint32; begin + push_trace('vmemorymanager.vtop'); idx:= address SHR 22; paddress:= uint32(KERNEL_PAGE_DIRECTORY^[idx].address) SHL 12; loadd:= address AND $FFFFFF; vtop:= paddress + loadd; + pop_trace; end; function new_page(page_number : uint16) : boolean; @@ -175,6 +188,7 @@ var block : uint16; begin + push_trace('vmemorymanager.new_page'); new_page:= false; if PageDirectory^[page_number].Present then exit; if PageDirectory^[page_number].Reserved then exit; @@ -185,6 +199,7 @@ begin end else begin new_page:= map_page(page_number, block); end; + pop_trace; end; function new_page_at_address(address : uint32) : boolean; @@ -192,8 +207,10 @@ var page_number : uint16; begin + push_trace('vmemorymanager.new_page_at_address'); page_number:= address SHR 22; new_page_at_address:= new_page(page_number); + pop_trace; end; procedure free_page(page_number : uint16); @@ -201,6 +218,7 @@ var block : uint16; begin + push_trace('vmemorymanager.free_page'); if PageDirectory^[page_number].Present then begin block:= PageDirectory^[page_number].Address; asm @@ -210,6 +228,7 @@ begin end else begin GPF; end; + pop_trace; end; procedure free_page_at_address(address : uint32); @@ -217,8 +236,10 @@ var page_number : uint16; begin + push_trace('vmemorymanager.free_page_at_address'); page_number:= address SHR 22; free_page(page_number); + pop_trace; end; end. \ No newline at end of file