From 37d442edfc3ddf8a064af0b03eadd208b0d8fb7b Mon Sep 17 00:00:00 2001 From: kieron Date: Sat, 7 Apr 2018 16:44:40 +0000 Subject: [PATCH] git-svn-id: https://spexeah.com:8443/svn/Asuro@372 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c --- Asuro.iso | Bin 5103616 -> 5103616 bytes bin/kernel.bin | Bin 49380 -> 49380 bytes iso/boot/asuro.bin | Bin 49380 -> 49380 bytes lib/E1000.ppu | Bin 10592 -> 13480 bytes lib/PCI.ppu | Bin 6623 -> 6733 bytes lib/USB.ppu | Bin 3593 -> 3725 bytes lib/bios_data_area.ppu | Bin 3667 -> 3689 bytes lib/console.o | Bin 17836 -> 20192 bytes lib/console.ppu | Bin 20005 -> 21006 bytes lib/drivermanagement.ppu | Bin 8241 -> 8527 bytes lib/gdt.ppu | Bin 3470 -> 3580 bytes lib/idt.ppu | Bin 2969 -> 3079 bytes lib/irq.ppu | Bin 930 -> 974 bytes lib/isr.ppu | Bin 1858 -> 1902 bytes lib/isr0.ppu | Bin 1981 -> 1981 bytes lib/isr1.ppu | Bin 1981 -> 1981 bytes lib/isr10.ppu | Bin 1994 -> 1994 bytes lib/isr11.ppu | Bin 1994 -> 1994 bytes lib/isr12.ppu | Bin 1994 -> 1994 bytes lib/isr13.ppu | Bin 2093 -> 2093 bytes lib/isr14.ppu | Bin 1994 -> 1994 bytes lib/isr15.ppu | Bin 1994 -> 1994 bytes lib/isr16.ppu | Bin 1994 -> 1994 bytes lib/isr17.ppu | Bin 1994 -> 1994 bytes lib/isr18.ppu | Bin 1994 -> 1994 bytes lib/isr2.ppu | Bin 1981 -> 1981 bytes lib/isr3.ppu | Bin 1981 -> 1981 bytes lib/isr32.ppu | Bin 1983 -> 1983 bytes lib/isr33.ppu | Bin 1983 -> 1983 bytes lib/isr4.ppu | Bin 1981 -> 1981 bytes lib/isr40.ppu | Bin 1972 -> 1972 bytes lib/isr44.ppu | Bin 3084 -> 3084 bytes lib/isr5.ppu | Bin 1981 -> 1981 bytes lib/isr6.ppu | Bin 1981 -> 1981 bytes lib/isr7.ppu | Bin 1981 -> 1981 bytes lib/isr8.ppu | Bin 1981 -> 1981 bytes lib/isr9.ppu | Bin 1981 -> 1981 bytes lib/kernel.ppu | Bin 3564 -> 3740 bytes lib/keyboard.ppu | Bin 4413 -> 4479 bytes lib/libpconsole.a | Bin 81668 -> 102784 bytes lib/libpmultiboot.a | Bin 29040 -> 29040 bytes lib/libpsystem.a | Bin 155060 -> 155060 bytes lib/lmemorymanager.ppu | Bin 4094 -> 4138 bytes lib/mouse.ppu | Bin 2592 -> 2658 bytes lib/pmemorymanager.ppu | Bin 4056 -> 4034 bytes lib/scheduler.ppu | Bin 3245 -> 3289 bytes lib/terminal.ppu | Bin 7660 -> 7660 bytes lib/testdriver.ppu | Bin 1370 -> 1392 bytes lib/tss.ppu | Bin 3187 -> 3231 bytes lib/util.ppu | Bin 7867 -> 7867 bytes lib/vmemorymanager.ppu | Bin 5430 -> 5474 bytes src/bios_data_area.pas | 2 +- src/console.pas | 48 +++++++ src/driver/HID/keyboard.pas | 6 +- src/driver/HID/mouse.pas | 6 +- src/driver/PCI.pas | 12 +- src/driver/bus/USB.pas | 12 +- src/driver/network/E1000.pas | 264 ++++++++++++++++++++++++++++++++--- src/driver/testdriver.pas | 2 +- src/drivermanagement.pas | 14 ++ src/gdt.pas | 10 +- src/idt.pas | 10 +- src/irq.pas | 4 +- src/isr.pas | 4 +- src/kernel.pas | 13 +- src/lmemorymanager.pas | 4 +- src/pmemorymanager.pas | 6 +- src/scheduler.pas | 4 +- src/tss.pas | 4 +- src/vmemorymanager.pas | 6 +- 70 files changed, 360 insertions(+), 71 deletions(-) diff --git a/Asuro.iso b/Asuro.iso index 364c3710244c54210e43e4eb8f151c052d2dafb5..640446087c0ca734bc8fb03f4c08bb1089f4a33f 100644 GIT binary patch delta 21901 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 MRJut&YWjEo18_T%-T(jq delta 21333 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 NE46r)VaUrr{0~scAaDQx diff --git a/bin/kernel.bin b/bin/kernel.bin index 5f00dbabd2d580ce9279e31e9a10b2e06db30c0a..671b6c7c00487d1affcca9ac446f71b6e71901fe 100755 GIT binary patch literal 49380 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 XiP&F=+ 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�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 S@rub(s75|c46Tdty#62eua@%w delta 16294 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

C*e4sZ+h@tyIpTkt5FQaX7y%J2BUu;>5hP;=R4 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 diff --git a/lib/E1000.ppu b/lib/E1000.ppu index 8aee150dcd3551c7aadad9714e016b26ff5be0be..e8fe55063aa67ff230dd74dcae1c8a3d50e07e30 100644 GIT binary patch literal 13480 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 aBgNG!zmj3i1j3*%@SR5USZhwu7yl1ij{-OV literal 10592 zcmd6te{fvYb;s{r{r)Y$vh1LMEDPfzz>;iZ8v=N}`y?%1X_wu#EStc3Ev;=~{bF|w z#w1`cb`mm!(}ql-nKbDnbjY-{4V{o_Lz=Wrrk!?5n@lE6(wU~6q|;6&?M(kjli(Kj z`@QG9rzhJH>o$M%&b<5X-t)QVoqO)@E2Y!>hPH06J!4Ic`D(h)?EDpD{`g0~I%{7! z^X3L)%nNuJ>hV}x=M4=G4%RZgkGbtkMVegh?MsF7Z_WJq!RMJ*Q(u0(Tq(|f=3Bp$ z|MpAsM+i4eFD{f9=Zb&u(HFOTl(z)#Rzfc)VIvd9$u2%0&B%!8(iGz;wBe2yLiUMEiTUV;AO9)ruyuGY|b0+ zjAs&)US>Qx5gql$y@}jy&||NuBa*VFu7(BNue3Fd*1+G!H2aDA%M!JIPLQZ~rT43@ z8ux2zHC;i;RTA~qEUT!2ZrXe3N|}XlX04Kk!##0drM}%j>>M@yoxy3S8%g zqCX%x3L`G3#>KTR7N*{%8^T?Djo&Yu!nv(}E;@cV|CdeUGnNKp^!Z<0nREl~d0z$_ zLrEw5wXk{qa6b~xTy{Kjod>M1MFul1s9BNa{|M*$dBaW(XO*S!XNGL8{Uf|q)&iSv=uWP8W zP;EcAc{#}n(7k9m_lC&5Tb7YfK_s2D)x~WtZg+8qi#uI>jf<~!@pUd<vunWmhQo)GD$MqUOf_m)l-Ez_d&Kj4Sb4O0YFq4sReS zYxHeM+1s$9y6p%F%Gz^oUC)FF2pHapT`MHz4 z#a&N7fA`#vxS=pJQ!19r#ul6E@SA~#`C%gxk)90V`nlr5(aJGnj|AY2O6|t`COnaz zEaJxLW5wy?OT7G0^M1 zcp^RTMO-sIKVxhupx%!>hABMq(Fc(V+NKP$5PH!LaM1o0)oJ(}z8kCY z$aesKkF@=6v+t4h;*n7=Hy({eM4~CaSUvYmlkK zW9&Z!c5M{9vfe~I9gXeva{ZI3M7)20DiiPTPo^eD6BF;)gdEg27AFbcyX|+cv}FUNS$47BRL>q!uf;vFA=hjBpbk+s&RR zN9KIon>4mv(KSTdI|<6vXS;d)Y)lLf?GUmwTfnm{;dOj zl=XCIM(WnB=zEF!wG$hz0qShXOvSxyESbV*l`cA(7=qB(A{C;?62`7qdVzGU(%huj zZg%rFTCBRg31i=-IJUHKo#MARoX%-q#>c!Uy3qB?pC;eAf@jl*_*^uBX6#Y^L*&;f zFAn4y?!1x{uiT(0jsx%s2MGd8*lu3SxO(OSuiU8gCmg+#tWUF@LNvY7tMq3{*D5Vu zSr6KIMRn6F8x(()c%$Otm3IMmwG>>u(x?3E8sgH8V$Z#(H{^sw?c{_ruHJ`l;#rYQDbjW^2a1Qwf&^2H-K#N*v$ECavzo*MSntc zH-rou@!0M@#0?lH$vhk4HU-}%=w@$-yt(d3A++qA&lVfDAW0_?=s zh6>!jFPh1D=xE!u%!n(aM!BtYH$QbvsEn5w9m|awdxsWDxgv-dq;ImHG`m`ir}A6x zFm{KsQ(=>Y9v2`lxI32+D4cBghvHgV9)4{t~F#+Cn)@Z9_uBRuD!Fu#2WP2nm3HQ^B> zNSEG)R7Xhv(BLrIc|;5RwG@#4DFyDlq`>gtww=a~YJqP{0qXa^a2HbHFKip!g({3` zf$vL!8fTMy;XRiW*g3Qdbx3G|f0Y6eSAZSgcHfP-GhBx|w(dkF?$Z+gAthu&lWFfB zlxT>J$Maqali9d}ZxQq-2xgC07dx zgK$x#9G8KKN52Jm!OwNsN$;f;SV~4H3geJhnTI z*lA3}0cI5(BzPJk1_3>!8n8`}MPX9GT?FAF7sNXwNH;n#orNFwE4hcHUmKa0M?tnZ zGM39{#}Xsh?M*4Zm$>gF=>lWGI|NT9<9>kyS|G;)+?F!P-Zz0%iz|@bKb0E6_&ccZ zgM^LQO;-1k_aW8f;7l%w)_OqEBZA5ru@R8%-ix>)hn;Uej@9`=1s4hW9Yw%o0D92) zkb)-(`aTnIJOKIWyn;^?^nD=U1i>Ufox>V_NWtd_`o8T2V%MY)x2NSS=wEf&>9uvp zHXjAvi?>~qMttdon4J;orGVo3%-7}L-Pn1dJ{3??AzcBrAk@pC*71v7hY;7!F3eVp zJt>EJYkoVB7AQS3TPhm+xG()Yq#In>!-(6C7Arh(`!{Z<zg1^5GQJej`4yzUuD>r{6#8m)wxHOXA)Vhu`aAz?or}m6y*Y_RGx5YkG)e8NU4C&` zbIpzPJ%YGtDIZ)7KetYr!kT|qbAO6A+#K2Lc-{pyEae|9%$-2*f9_VFc6THskb&c% zn>QjCr1Csjw+e_9`Xkd--5l|DW)o?9KDas3%4cxMTv7M_YAervEtRhz6|VewnFcV4 zu2*yW@Mh%!q8~qu*beaUuk~iO86;a(b#{Tgi?n?qsLu7$mT?bFnUkvr+|Q*_NiRC_ zPR+=#Gej;dAhrXX3!>Do!K>P`10Wx8mc0~McB5D(HqqVg+OYqs{4Aa33D~oI1^!at zTAJCSip?#C19 z`vBsarAo=zH#)>FYkn*V^Ao(6rwM?;)jS=`>nPiG1aV8h*dhD3r>rY(%|*O#BD9uu zZ#-NmC?Al|98)g^thYMwpPX}bDlI!snrL!O#@&8?l zJ`#cPV;rfX)-u-7nB{0UA|w6mM|=SC$57ojy@QqkJH+GNEK9Ai3B# zK&g-)49J|458~Ym#&&VP+WJ^&wo;5O&f{O+W`fO)HF;3dlx0vYrD9q*4z{9Jh7t}BQ&kAdSg zs_l9jaTETSU8*E!7mgdN6S+0-2f{mF+w~0M`qD}1e>$~Vb0(0Vp}eAUo$svq5ab(O z`DYP#6c-AI=ZcAi3LJl83FiZyjjTBjaDxNSB5ped2hJ5U#pxpcgV0!=AguWqFgeYf d16Dh?$cpP=wdNC$GS~}TX>Hd1xFoU{{|6(>3uDJXik*XWnTa3#6(|Xj=+LV zM@`jNsZH#-z<6qNB;yXI$-kK`CckGEn{3RoX!3rREsV;OOIS~_i?K2@FffQu?q_k^ z9M5)&PdthR$cKVB5SxjEfkA+CvZJW<wgPD`pdla=nSPf5Nk(lkAlZ+kdGh3bF-_JJK#^0E_lgyB&VkA;oop$t z#JL>G+b}r=$lCPOMya1I4iC+QP!p6zUz`)Hq znMb0M^Db2K+2lS6CC(R6-p9#1fxOR9-k-@&BviQm0eJ#IBiLCd3rSit39?T1my}@= XXPulYsmdhFI(Z6^Qf8gJTT%r8{C!zH delta 421 zcmX?Wa^F}sARyGx*p#K2k%5`vK!6g%c1Z??@BYH~-&RTdP?;#J%gm5#bk5O*&Hr7+@LafXT3=G1PFS6)t zzR$LUPh5fp$cF+M5SxjEfkA+C@XUDahVkhlsWfDn951NB>IxKc zpPVC>qH6_}bOzE~Ktn(#GW{+Al8o9yK++dUbKvB^Vw$XNK#`8g+Tz8WQBb+$$;-u+ zI8&j#yvdh;ac+e2c1;eFRN>kK+0k}^zJ YStj3>RAsu&GMPzAmFXeNWKAg*0I;-G_y7O^ diff --git a/lib/USB.ppu b/lib/USB.ppu index 6a1180d7c860da545c1b2089e959b87839a166ae..bcb4ee0f1fea196f1a48d91ba951439dd3a0af3d 100644 GIT binary patch delta 295 zcmeB_>6MiY2naPaHf3pMWMF1E5TL}6%E!QvP4 zsHyrYwT}oBV)DY4QXn9w;p~nTffEQDAZ)i`(S&%sN0UHu*O5 z9w2S9c|OZ-Hs0Ng3~;c2ayqvW>j|L9smb%W!+0+s$z7Su$fL>n0x0rovOZ6S?p>(d zGa${yz`z7Dgz0xCkYv;r0Fob&^nL;9W#a&<;bNNnnJ1m=FI19^X>tm$HIo3-5nR`=?PxMvd*gScL z{)8wa@r~s?jEupXTNw2iC!b&nn5@TK!^k)JAal%QW0pOerCATN@%A$^z`^9nueps_ z=Kw|KO;+Lw<6VLzw_>sfuO{mrpvb<-n|U&HH$vrh0ckD<1}2apOusXMB%?MTkUWB< x_XJ2U+Z~|DJ;ur9yy;vQp^~>4C%@peW_rRnS(Q(L=@sK-cOdnFadIY~3IOPCINksN diff --git a/lib/bios_data_area.ppu b/lib/bios_data_area.ppu index d8e223d308cecf094f0368c8a05f7f0f3ae7fc5b..3c206fe816c6dd0b4e3dd00d759ee6842667df83 100644 GIT binary patch delta 135 zcmcaC^HN4OARyGx*p#K2k%5`vK!6g1BOe396aGcHEw^gh`6kLbGw=U$Vq$VXp9~WN z1EU}-kYr$DWSIPrQEamq<4wlRH<=!Cas(D^I%=xEN^SBX9%pezkQyj}sOMl{5a68r bkyCoIIj;m8A5dO^X>us<4MwradVHz?n6Mw} delta 122 zcmaDUb6G|XnBTx+#yl0%O$!o** S11R*1adI~A4WL#RK2-qC`X8_W diff --git a/lib/console.o b/lib/console.o index ce299f54504bb6ef5e8b07f0898fbf9324c632be..a05a7f87cbe7e64ab29ca325d2ac13eba510482c 100644 GIT binary patch literal 20192 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 ee;;<$n?k zV16c#3XT=zI>Pu0!I^@39YH)ltfXA86TpXr?-2Z%;9G)!6&#Iqfa%5xRte4$>=wLM zaGM~KD8K{B4T|>NPnI!@ohvny;S0_ zm-t(WSO;&H_-{%47QtT;v7dWc%$A~EG1i=LHGNo#W2ztJP zT+dU$YZ#C9eU-@hodMI|PsIBD4T*nD;-4jAa{jr*zbx^8BEp~dh!5hO4EsMOZ8J_z zC5K%-UZ6LP9F2Ja5o!2+0n;reqEXuw-@t!~L4@7`B09lABJ{Z*^|G&wWJr z!F?;!&n3dHo^Q&nZw@H`9OGf<^TcV`w-XV6r^Ih0;<;^;#BY)K-9*^qw+6m%;+>(y zb8hif;d416?8Jz$ujeV~Pb9BU>JuWbCO)jxr-{?C&zJbc60hekJSSc+@i$5Q-9*@X zgoyn4T>|sjBDjZGjd!y|`0+Xs`Mgg=x+v<3f73pK2syv%XFYNM?3;mgTjHlmd=qgh z>QUksNc?gl?CJe8{OBi#AGZpAhnP_6Q6lpB0TKD|n*^qNmH0W#k0L)L@%~|m$Mbv+ z5$W`P`4OegAqRevi1ZfyP(WA-MI5$`OHrQO5Eay^>74} RrKeC)^UyhHkA1}0`yYDgGU5OL literal 17836 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 IleHC90Pj;=3;+NC diff --git a/lib/gdt.ppu b/lib/gdt.ppu index d7a92e00481d42ebebc1d2c2b2cc558683ae90fb..d36799116adacb012651f1ce5358247bacf4fc25 100644 GIT binary patch delta 264 zcmeB^{v$0L5D;o;Y|7Hi$iU2SAV7)X3NHgg(Ei=+OE0zaC`^>qWhwk}B5IHall_<+fV9};J|^eM4orMdah}N+nW7kZH|sF3 zW)}};Vt|8i5SxjEfkA+CvLJ`dWG-$VwgjM964PWE?ohrAB&9h_lk2%PSQ~&sO_SGf z=Wv!nCF>?D@(4=;oyyRGq`U{jX6ImFnf!rOk#zx(w`g)PPbTM7sG50`pYqr+u9&RE StHii&vMaALHm{+rlKV@WqgO?yS69)r>0O#aH zHtEUb+`Md`fMQ=5CwFm&^8G?m`j2t)TW$?jAtnX}k;zg#Ip*v@76=FcX)d5CAU4zQ zG$6^S%>yK*pz$q#ulIn|*m4JHTk+Avy8p1`Zb Q=rDORuQH?CurzI+J~wQYPm!l`-;ce#Z2UOlmD6jcC{EIIj! VDGZD@+^j$j10%zG#>tPlRRGVCE*<~? diff --git a/lib/irq.ppu b/lib/irq.ppu index 99d52d070aebe270f3954c7023e004c313b81e97..c1cf59c751630a43565393c06b1cb4ac27b463bf 100644 GIT binary patch delta 105 zcmZ3)evVx>ARyGx*p#K2k%5`vK!6g%GG+#b8T)VlS}(aLgMFf`E=$*!6HycWj5q=d zHXSupU!^v&Bbl*p;+u%cdW>S5^%(mZd5akkpnUQvCL`7cpg_}PM&@e9j>)ymssQcM BA2$F1 delta 115 zcmX@dzKC5mARyGx*p#K2k%5`vK!6fM6*B|FjQzKNt(V-B!8%b^mt~{c?8u3JMjV?b z&(NO`Wh6eaBbhO2;+u%g1&o!9;_eIx;0j)ns diff --git a/lib/isr0.ppu b/lib/isr0.ppu index fb8d7d74da5a7a815ef1263f9d05301525e1a924..6f8c89231882364b2948890331354afa810157e2 100644 GIT binary patch delta 19 bcmdnXzn6bP6GvddrlY3ntJF4j8M6ZbPgn8PptDz%M04cq`qW(Sb~ delta 19 acmeB?=#iMv!m)Ys4E+gFM&cWL8n^*VR|jnX diff --git a/lib/isr5.ppu b/lib/isr5.ppu index 8356cab7568b729d72381a5ef723e1965bdbfe85..70d626b4d28611bc02e36194c5f68864ad126a59 100644 GIT binary patch delta 19 bcmdnXzn6bP6GvddrlY3ntJF4j8M6ZbPgnUP^$c7JEm5qJeJKznK&6IH?VYUzQkM4rJDRTvNo5=JWIY}Ywpl=-In0x%b7$)H zLuF?GX)d5CAVZmcR{}{!ZIIL=s60q~8CW;#E}+n!$>IJ0{=f5f?m!r1Th& deSR`KZ#LtN$;G^ijQ1u_4C=(~+<{%a`#?4z;x3G%uWnzGXgCI5& z2Lpou=j29ismU|B1=&sk#m+EI-oPErcL_=9HKxh;cr@5v0fpW$O?KzW)VmLreF3Do zfX0AKW%^wSBpJ1tf#fHsJV^W-ST`#dP@HEnH*YoPf2btKV{>d2|yHh(%*e1%FGynQ@Vq&-wM_|FG zqo(Ss)Fw7AWKw6_til-1I60NcVsbtc&*bN9yqgy=1+suRo1e24u!{$o zz#zam`5>3nxoe{Nx3E3B0LDDl;eZ@@ulz0!8X4Tk~ge7D45zC$Hld7ivXP x*$HBEOm5&-VVw(P&YvWZ$vFusKYMbKKq}+X$u|TP8COsKB_PYVak7Md2|yHh(%m?z4bGtWvnJ~3R0WAo%0 z`V*pz#3wc`WO~ZFS%op2aq>0Ow>z zZkfqv_yk!Efnvs!AMqvdS|X{mo$SxA$r=b037%ZbpT+40mGhtcfnQuG5=mt&h|Mwi s50?sSA&^--*-0RiGYzUBfASWARL085Qi6(%^^h($ diff --git a/lib/libpconsole.a b/lib/libpconsole.a index 01e83ae0b8b36027303bc6dc5e629dee17f7d27d..7742b7aee44c8d95c56b78002a9a0a0bf2b0586b 100644 GIT binary patch delta 13306 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 delta 8653 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 diff --git a/lib/libpmultiboot.a b/lib/libpmultiboot.a index 5ca66c38b270d54e2f03b86cbf9aeac2b70e63a0..84be8355081865393e8454da6079672a9208fa3c 100644 GIT binary patch delta 486 zcmezHi1EWC#tAa4hDOE)MjI7+jY8s^yI6lQL%5q8h0ZbY8SCZiD;Sy@8G{v1 z{-`Ihxt8ZO6I2I?+sgkP$_47U4wE@(Be}Uu^cO+~XqE+vS(^i;;i|#LDrzxq&X@nl zh-7xHqBPVsV4Jt9Xu`N4xBgN;0(0v}JtxM=`SJpjWmyC_tLYwt8nXGL9$d#qJ;}`$ zMtsNyB$>LfKs|fV#t3Y{=C@YoVVV!x2*Ol@9QfXz9mX|GmDnuoJRfHJMNf$4$#+jY8s^yI6lQL%5q8h0ZbY8SCZiD;Sy@8G{v1 z{-`Ihxt8ZO6I2I?+sgkP$_47U4wE@(Be}Uu^cO+~XqE+vS(^i;;i|#LDrzxq&X@nl zh-7xHqBPVsV4Jt9Xu`N4xBgN;0(0v}JtxM=`SJpjWmyC_tLYwt8nXGL9$d#qJ;}`$ zMtsNyB$>LfKs|fV#t3Y{=C@YoVVV!x2*Ol@9QfXz9mX|GmDnuoJRfHJMNf$4$#rCi^aV2Iah=9n39fhm=A=U8*H6xT}U z!jIQ_3kyXXI0L4>=$k-D5hjALTS|$Fv^A#_5zQu|%%1a}^PY3hmHXFye$R7$&-Zig zt#1seZw%QzJ;;@i7@u(5d2)vKjpVqZ*!>v~#+f3wuU1Ydk%@DQ;vD#K%}+=a4-wy} zhuCM^>DD1F}0IoLmkHXZt-1$_9+NLEkHjwPP%YW;Yv-jE z!Yp=KrEbN1X+hGbFHQ5wrezw|-rRha?yi@dD3Ww{FFAP2##X$2LFZ)7RR)Q3l}=KS zWg#hFV<9PDqmdlQHb}g=F)|Ww?h=tb>n-S#aeH%9+0eQkGm=y?wC;&oBR0Ig70Bfc zVS3`uVh_tGGTfm^GK#JWOZUc3Bj(~L>CRcKyW74=stLM7eg|vXe9G$5L7FxTvb~=L zvmZ*Dz^;#vF+J4vD#Wn5Qbp(2>nupcY9+HeGlA791GW6KSb{%gw`{-dU%y`I~>me;n>&}sS^t|>4# zXT3?E_4t)Rq;_gB>u<2md(#8yFUOU7qUD^Q#O$pW(Q(!y#XIkof$CB0jk*GpjqvX?z9P=!I-> zGxr?aBKFdi1LWyalk;%< zOsJBkDnJqF6s9+4LMzbIFZsnTyv=^u@TSiPUp(7{a5Z>F9GHDe^H7wrkSXj^``` zW8(0YMVnW{a_&oq=lq8DR3=OxuU%P{N*;YoF^Z%80-%|N5Kdxkp?vo$n5@@Ks^C2M^s)kiqYoLT_1pWz45FA8F*C*$o0}# zP$L7-fIFpDfFhvNwr;~Aibxhe9E_KU2s?PY@sKK0lttK){O(Tp%`fai{z92K&N!om z6oEE1#Yq0R49-A=%gV1tRY+G*XcGxc{?d{_AxDi|500kVf#P%b8)hmhFNO$i%VE76 z>6Jz|L>8#9*5ZpQD?ky@YvHL@Yq2mOR&@<{b&WCW+Fl^gA+~V)F>_&YFg&!c5hn1K z6HpGoZ2|nK8H3-^F&00f8voO-0REJVI)CWz0sN>LgWvttO6Pm@hK7l&_5LJ*O*rN{5$t{XJ z8tPvK+7hI6Y8QIvI7QwoRl`vuUmZg3nrM+J%AMLFst!?b@&mUN=P!@no}?HHqyiLy z4(eWlZ-nm2MkLxzjEGjWo7g*5vED?~NEUICyPj8S67&+Q2mGt$%7Fhtu2`v*_{;cT bi7E8fJBs=HO#HEFmSxIuMf2NPO1ttu>vn7r delta 3458 zcmZu!e@v8R9N+gCxMV6Oax(9N{NcJHK!91%_gGEzR&Z%&wKZt++X+oe82DK`}_Oe z)is3FHH7S*8kCTjn4ECjadMjejpR6^*!^h_#`r{TU!|SUA`@p9#mC~uId4v)e292Q z+{8Z9PPfd0NhCI9AM2Yj0D;euZ{xxPvB;!nxX`Wchq#=EJ6 zljDILoEJ`NgMwMt!d9R2820OuDL{752`86>!dYL+S*z}WX2j%8%Oi11+l3_?dhNWj zLYT!ZtuU;ZH!Vo{^rq=P*_2Gv+LN2l(p`0m6Gf8l>LCYj+1T>8FBqK6vC<@QtTadp zvMeNJt1TpDt96nC*(Ql6H%3L`$z3e7XFUa-DsE41DjQte?TaLp46c15YQ%=twE(%i zKFmnmQS4?JMW#CxNk-9CY3bU~Va8k>rQA7+4R_l%Dm6iO$REoZH=VM&j3temB-!52 zg4quxjbJy%$DAJOd=+9?ZK-DP>vHF(R(arat2|+cRi3@mDrfFdGRBtA>i3xmil)@> z!+K&Vn!Z*AV|&WXdhRJR5*#j9Y9v|5k}8h*l3PcTD!L^}^dYS0qe`QmGJH~7n!(mr zsap83oktZ$ylHM$U2{k=qDZQ1I>_K-8{2if&DTdaYi8y{o?JI+W_ovy)S=()r&S+w zoH*-^#;hl-2qHC;gIQm_b>15vD1SN5)Dz9;{3K>?v52u}En-5OMO@Nh5nWwMWX?-C z(qfBN{c%xEkMmN5(Oo<%se7Aa*^$4F`1uydk5~MVC|1&&=X)fIJ^5RS%yZLlaPWqj zKg856AfB7~WMJUDT={oHgV~vW^Bkax4Gj27K9bLd?|rZ0@Q&n@;d|$0PkaAUooB}% zniuEiVe_kZBt-3lcLd|XwvoG`F43l#uGpp7P!gNJ;!Ry=V{bk1-+YcoS22Iu#BmLIF?&+C-^%Z!Di)1d|E>6iRsm)>T+Ykn@VRV)wpMIWcbQWatzSp6|C>_sP z3g*P&D~mR*f@R#B4$t`w?Ws(dI#$23f=V5IOfib1{d}OAg%D2SY@vMjN|*J51V>a|G>XyY(On;ae7*6kLQsn%H5@f+ zK1peE9^YSNktxdUa$Nc54bX0sKu$70S!|l>qm6(*+Wec1W-z+y`X@Ltco}$Q38?kb zSx}<_(1AOpR)8X4(6(&FA&N+rKOD@LhzvV;oB5ECDatbJNPc$*{N@*SA%9_~Z=7*P z3n>DvBE?Alcqg2J2&a`_L{&(aQ)rb5O#IT4Kp{tsS`Ut<`hnuJ_nT${RTo1BxB0Nq zjr0n$8!`)2SZnb`r4^tE7`1R$iCQcOh*hisuc|g@UEd1?+T|8*JLX$h91J(@ZGdsS z`2>`!tu;}K=vk88ZQ}<{`5Ld(9kLcjPn+?JX>xOQ|X#M zytg9!^j?!*C^#xEs!bP$o&E44{pki=lGa=Qu~| zzvogpl0NHX*1v|6`-7u6L9N9}$|ECzR~}ldIVvpNn9vNqP^1`a}RVT_iGpl_)F)=xlBd}o8 zQB(C*Y7?(iGMa4mW2|DFe1%D9vK9;160^g zbNJ>W$t`4>{D4D)brn!(&13<-OukJ>lG`AXM}R`dCU46F5qRET*)iW znh6xoo;;N|hqn+(b?Ib2K26p-ph&}H8@^25HYB+&u-puw$gIf^_}V!qK;@=QF5q`( XTrhbDzbfOh$@lox7}rc@6;K5L$7(PL diff --git a/lib/mouse.ppu b/lib/mouse.ppu index ee7b60c2e1836ad343762cb79e76dbb7d956e7e2..54f8726bc5720f68e78f427eb4c7dc709b66f9a1 100644 GIT binary patch delta 255 zcmZ1=@<>EBARyGx*p#K2k%5`vK!6g16&C}8Na@`DAJXrB6PPG#$Sm~v#Kb@)j=+LV zM@`jNsZFeY&LqV&Ife1mWGQB@$vjLvll7RCfV9};0H!M-db0|15R14xBLf^LgV;r&Zq|$p$%>qs ptPVgCr^)`DX`H4|IlIaGIPDlcCjaGBWb~UX&n3$kGTD|(6#z9_GNS+h diff --git a/lib/pmemorymanager.ppu b/lib/pmemorymanager.ppu index 2ea1e620f619b766562c15ddadd8a7f854aed196..590b28100c063000729740743d90c7e29bafd31b 100644 GIT binary patch delta 286 zcmca1e@I?7ARyGx*p#K2k%5`vK!6g%EPe(C@s&zk2bKv&X-$-MW)}H+Vq&r}M_|FG zqo(Ss)F#fG$tbYdg0Y2h@&qP}$+^rNn}wK_ImN}87~nt(#Af1PU=ZM(+{h_Dc>^2k zf{!l96oI%)%r}6|FdeaMgoPRCu{R|a#}zo9VhSQRpE4o@_Z)0;#Jl2 zgYv?Gv>XG_%^;h8=K@JaZ9X8G2$ctkr$P+Q0}2&P&f=TIST^}Dp9W_QR7ulhJ$@z5 Z7AUWGawNY2WB=qXehtQ{lQ;9L0sw`{H(dY# delta 270 zcmX>ke?wk2ARyGx*p#K2k%5`vK!6g%27U$x@s&zk2bKv&X-|}OW>$|qJ~7#tWAo%0 z`V*pz#3#<1$*8v3g0Y2h@(U)O$+9f$lixG5PR?O6+x&$|o0C_Ei2)7_ChPFnvRVQ~ ztS9I3nC&IOW;+I&E=94ZeIuZ9@e0u*YS9Ktt=v1jsgJ`K)EP$e@aOYkdk&Vuq5Pj==v RU|c%6gkOVk_2jwyssOTVIHCXm diff --git a/lib/scheduler.ppu b/lib/scheduler.ppu index b3a6507d66c574aa9276b8b652f32b6c51a1098a..6465bf31c1ab5140c23ba29d8ed38a5b8018c821 100644 GIT binary patch delta 319 zcmZ20c~eq0ARyGx*p#K2k%5`vK!6g%Mji%+4O%Zea@{^Gl$a=M$zuQYMAXD6MUKFN zO-D`DSE)^G-o@BG*^cqTzCJQko0cjo}Uubg;6F(bo1tS9-)J&eiVZqu8 z6ltG)l_QC-7fEg+8Hoz#zamS&&O+@+%G@)<~dO z^khcPB;G_Mm8p{pI5k=GfFcEx=W)jHmLbVif#v#uA`>Q?awT&Dod*UzlNWM{^G-uj zISZ_E9Z+P$471Atj{_g(7#08k delta 67 zcmV-J0KEV33fc-CP*7DdGc^Q*0RRI4z)&IpG6ett5`-f6(D@I62az2+19)`Cky|1N Zvy+%FkXkYqk%gZD$CD)iu(Rs{g#)$37LEV_ diff --git a/lib/tss.ppu b/lib/tss.ppu index 024b647ac9c4e7bbbc50b6283b1e5072ad2e4539..9916f0d02efca6e17fb9261cd7cf13fb8f0649ad 100644 GIT binary patch delta 110 zcmew?F<(+PARyGx*p#K2k%5`vK!6fMIS&IvsEqjb%Et07oD*erSss2l5jD}zha<3H z(@|6PRcaF#B{S-5W@Eg=R{mS?alzBPaU#aBQAD zLw`b)k@&<#$&3t}*%+@dZf0ZN!ol~HkpT`~GEP3hZOHZsDD;JK@_+6sreBPct9eua D50f33 diff --git a/lib/util.ppu b/lib/util.ppu index 9c242c3dc638d40fb51b4706ebbd7fda9354f21a..5e46d28eb85096b4bea4fe3726ff08b551ec373f 100644 GIT binary patch delta 21 dcmdmOyW4idYe|m4f=x$F)mN!){w#Td1psXz37h}` delta 21 dcmdmOyW4idYe|mHlV|8ph%yr2{8{n@3jl5H33vbi diff --git a/lib/vmemorymanager.ppu b/lib/vmemorymanager.ppu index 300b3a01deadbf851501488352ee702f640e6dbd..f725536b07a9cda8366038a5d657f1bf52d8f3b7 100644 GIT binary patch delta 156 zcmdm{^+-!LARyGx*p#K2k%5`vK!6g1l_&#)b-(%6+v(3YYE6`NX1@I8#KdGjj=+LV zM@`jNsZHEj$)v`z*@V%PX>vNV*yeQRb^PL&m>J;U8i>ur!N4HEIr$=o%w!K?an}1l rv4@jWgmd_wBdL7NJUO3FgY_d&=<{T5kqeAJC*Kh`TGx&LzF*Crys>y!Bwyc|hB3ma<5YFM-jU>09dGbXr b4c4PTq2rUyMJ_O&oy;L>!gzVIt*9yhE~O_f diff --git a/src/bios_data_area.pas b/src/bios_data_area.pas index 89d26339..1311adee 100644 --- a/src/bios_data_area.pas +++ b/src/bios_data_area.pas @@ -71,7 +71,7 @@ end; procedure init(); begin - console.writestringln('BDA: Loaded.'); + console.outputln('BDA','Loaded.'); //TO-DO search for important structures like the MCFG or the EBDA. end; diff --git a/src/console.pas b/src/console.pas index 95777ce4..02235a08 100644 --- a/src/console.pas +++ b/src/console.pas @@ -42,6 +42,9 @@ procedure writecharln(character : char); procedure writecharex(character : char; attributes : char); procedure writecharlnex(character : char; attributes : char); +procedure Output(identifier : PChar; str : PChar); +procedure Outputln(identifier : PChar; str : PChar); + procedure writestring(str: PChar); procedure writestringln(str: PChar); procedure writestringex(str: PChar; attributes : char); @@ -57,6 +60,7 @@ procedure writewordln(i: DWORD); procedure writewordex(i: DWORD; attributes : char); procedure writewordlnex(i: DWORD; attributes : char); +procedure writehexpair(b : uint8); procedure writehex(i: DWORD); procedure writehexln(i: DWORD); procedure writehexex(i : DWORD; attributes : char); @@ -278,6 +282,36 @@ begin console._safeincrement_x(); end; +procedure writehexpair(b : uint8); +var + bn : Array[0..1] of uint8; + i : uint8; + +begin + bn[0]:= b SHR 4; + bn[1]:= b AND $0F; + for i:=0 to 1 do begin + case bn[i] of + 0:writestring('0'); + 1:writestring('1'); + 2:writestring('2'); + 3:writestring('3'); + 4:writestring('4'); + 5:writestring('5'); + 6:writestring('6'); + 7:writestring('7'); + 8:writestring('8'); + 9:writestring('9'); + 10:writestring('A'); + 11:writestring('B'); + 12:writestring('C'); + 13:writestring('D'); + 14:writestring('E'); + 15:writestring('F'); + end; + end; +end; + procedure writehexex(i : dword; attributes: char); [public, alias: 'console_writehexex']; var Hex : Array[0..7] of Byte; @@ -340,6 +374,20 @@ begin writehexlnex(i, Console_Properties.Default_Attribute); end; +procedure Output(identifier : PChar; str : PChar); +begin + writestring('['); + writestring(identifier); + writestring('] '); + writestring(str); +end; + +procedure Outputln(identifier : PChar; str : PChar); +begin + Output(identifier, str); + writestringln(' '); +end; + procedure writestringex(str: PChar; attributes: char); [public, alias: 'console_writestringex']; var i : integer; diff --git a/src/driver/HID/keyboard.pas b/src/driver/HID/keyboard.pas index c527f65e..fd384016 100644 --- a/src/driver/HID/keyboard.pas +++ b/src/driver/HID/keyboard.pas @@ -62,7 +62,7 @@ end; function load(ptr : void) : boolean; begin isr33.hook(uint32(@callback)); - console.writestringln('PS/2 KEYBOARD: LOADED.'); + console.outputln('PS/2 KEYBOARD', 'LOADED.'); load:= true; end; @@ -71,7 +71,7 @@ var devid : TDeviceIdentifier; begin - console.writestringln('PS/2 KEYBOARD: INIT BEGIN.'); + console.outputln('PS/2 KEYBOARD', 'INIT BEGIN.'); if keyboard_layout[1].key_code = 0 then lang_USA(); devid.bus:= biUnknown; devid.id0:= 0; @@ -81,7 +81,7 @@ begin devid.id4:= 0; devid.ex:= nil; drivermanagement.register_driver_ex('PS/2 Keyboard', @devid, @load, true); - console.writestringln('PS/2 KEYBOARD: INIT END.'); + console.outputln('PS/2 KEYBOARD', 'INIT END.'); end; //2A AA diff --git a/src/driver/HID/mouse.pas b/src/driver/HID/mouse.pas index 9529c151..92ecb341 100644 --- a/src/driver/HID/mouse.pas +++ b/src/driver/HID/mouse.pas @@ -107,7 +107,7 @@ end; function load(ptr : void) : boolean; begin isr44.hook(uint32(@callback)); - console.writestringln('PS/2 MOUSE: LOADED.'); + console.outputln('PS/2 MOUSE', 'LOADED.'); load:= true; end; @@ -116,7 +116,7 @@ var devid : TDeviceIdentifier; begin - console.writestringln('PS/2 MOUSE: INIT BEGIN.'); + console.outputln('PS/2 MOUSE', 'INIT BEGIN.'); devid.bus:= biUnknown; devid.id0:= 0; devid.id1:= 0; @@ -125,7 +125,7 @@ begin devid.id4:= 0; devid.ex:= nil; drivermanagement.register_driver_ex('PS/2 Mouse', @devid, @load, true); - console.writestringln('PS/2 MOUSE: INIT END.'); + console.outputln('PS/2 MOUSE', 'INIT END.'); end; end. \ No newline at end of file diff --git a/src/driver/PCI.pas b/src/driver/PCI.pas index 391b754f..ed2bb101 100644 --- a/src/driver/PCI.pas +++ b/src/driver/PCI.pas @@ -79,14 +79,14 @@ var current_bus : uint8; begin - console.writestringln('PCI: Scanning Bus: 0'); + console.outputln('PCI', 'Scanning Bus: 0'); scanBus(0); //while unscanned busses scan busses current_bus := 1; while true do begin if current_bus < bus_count then begin - console.writestringln('PCI: Scanning Bus: '); - console.writeint(bus_count); + console.output('PCI', 'Scanning Bus: '); + console.writeintln(bus_count); scanBus(current_bus); current_bus := current_bus + 1; end else break; @@ -99,7 +99,7 @@ var DevID : TDeviceIdentifier; begin - console.writestringln('PCI: INIT BEGIN.'); + console.outputln('PCI','INIT BEGIN.'); DevID.Bus:= biUnknown; DevID.id0:= 0; DevID.id1:= 0; @@ -107,7 +107,7 @@ begin DevID.id3:= 0; DevID.ex:= nil; drivermanagement.register_driver_ex('PCI Driver', @DevID, @load, true); - console.writestringln('PCI: INIT END.'); + console.outputln('PCI', 'INIT END.'); end; procedure scanBus(bus : uint8); @@ -315,7 +315,7 @@ begin DevID^.id4:= device.vendor_id; DevID^.ex:= nil; - console.writestring('PCI: Found Device: '); + console.output('PCI', 'Found Device: '); console.writehex(device.header_type); console.writestring(' '); console.writehex(device.device_id); diff --git a/src/driver/bus/USB.pas b/src/driver/bus/USB.pas index 66bf4700..e85d0f17 100644 --- a/src/driver/bus/USB.pas +++ b/src/driver/bus/USB.pas @@ -50,12 +50,12 @@ var begin devices:= PCI.getDeviceInfo($0C, $03, $10, count); - console.writestring('USB-OHCI: Found '); + console.output('USB-OHCI Driver', 'Found '); console.writeint(count); console.writestringln(' USB Controller(s).'); if count > 0 then begin for i:=0 to count-1 do begin - console.writestring('USB: Controller['); + console.output('USB-OHCI Driver', 'Controller['); console.writeint(i); console.writestring(']: '); console.writehex(devices[i].device_id); @@ -80,12 +80,12 @@ var begin devices:= PCI.getDeviceInfo($0C, $03, $00, count); - console.writestring('USB-UHCI: Found '); + console.output('USB-UHCI Driver','Found '); console.writeint(count); console.writestringln(' USB Controller(s).'); if count > 0 then begin for i:=0 to count-1 do begin - console.writestring('USB: Controller['); + console.output('USB-UHCI Driver','Controller['); console.writeint(i); console.writestring(']: '); console.writehex(devices[i].device_id); @@ -103,7 +103,7 @@ var UHCI_ID, OHCI_ID : TDeviceIdentifier; begin - console.writestringln('USB: INIT BEGIN.'); + console.outputln('USB Driver', 'INIT BEGIN.'); UHCI_ID.Bus:= biPCI; UHCI_ID.id0:= idANY; @@ -124,7 +124,7 @@ begin drivermanagement.register_driver('USB-UHCI Driver', @UHCI_ID, @loadUHCI); drivermanagement.register_driver('USB-OHCI Driver', @OHCI_ID, @loadOHCI); - console.writestringln('USB: INIT END.'); + console.outputln('USB Driver', 'INIT END.'); end; end. \ No newline at end of file diff --git a/src/driver/network/E1000.pas b/src/driver/network/E1000.pas index 85f72d26..10fb6eeb 100644 --- a/src/driver/network/E1000.pas +++ b/src/driver/network/E1000.pas @@ -7,7 +7,9 @@ uses strings, vmemorymanager, lmemorymanager, - drivermanagement; + drivermanagement, + drivertypes, + util; const INTEL_VEND = $8086; @@ -95,6 +97,9 @@ const TSTA_LC = (1 SHL 2); // Late Collision LSTA_TU = (1 SHL 3); // Transmit Underrun + E1000_NUM_RX_DESC = 32; + E1000_NUM_TX_DESC = 8; + type PE1000_rx_desc = ^TE1000_rx_desc; TE1000_rx_desc = bitpacked record @@ -117,62 +122,203 @@ type special : uint16; end; + TCardType = (ctUnknown, ctE1000, ctI217, ct82577LM); + procedure init(); procedure fire(); -function getMACAddress : uint8; +function getMACAddress : puint8; function sendPacket(p_data : void; p_len : uint16) : sint32; implementation var + loaded : boolean; + card_type : TCardType; bar_type : uint8; io_base : uint16; mem_base : uint64; eeprom_exists : boolean; mac : array[0..5] of uint8; - rx_descs : array[0..65535] of TE1000_rx_desc; - tx_descs : array[0..65535] of TE1000_tx_desc; + rx_descs : array[0..E1000_NUM_RX_DESC-1] of PE1000_rx_desc; + tx_descs : array[0..E1000_NUM_TX_DESC-1] of PE1000_tx_desc; rx_curr : uint16; tx_curr : uint16; procedure writeCommand(p_address : uint16; p_value : uint32); +var + mem : puint32; + begin - + if (bar_type = 0) then begin + mem:= puint32(mem_base + p_address); + mem^:= p_value; + end else begin + outl(io_base + 0, p_address); + outl(io_base + 4, p_address) + end; end; function readCommand(p_address : uint16) : uint32; +var + mem : puint32; + begin - + 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; function detectEEPROM() : boolean; -begin +var + val, i : uint32; +begin + val:= 0; + writeCommand(REG_EEPROM, $1); + for i:=0 to 1000 do begin + if eeprom_exists then break; + val:= readCommand(REG_EEPROM); + if (val and $10) > 0 then eeprom_exists:= true else eeprom_exists:= false; + end; + detectEEPROM:= eeprom_exists; end; function EEPROMRead( address : uint8 ) : uint32; -begin +var + data : uint16; + tmp : uint32; +begin + tmp:= 0; + if (eeprom_exists) then begin + writeCommand( REG_EEPROM, 1 OR (uint32(address) SHL 8) ); + while (tmp AND (1 SHL 4)) = 0 do begin + tmp:= readCommand(REG_EEPROM); //Might be wrong? + end; + end else begin + writeCommand( REG_EEPROM, 1 OR (uint32(address) SHL 2) ); + while (tmp AND (1 SHL 1)) = 0 do begin + tmp:= readCommand(REG_EEPROM); //Might be wrong? + end; + end; + data:= uint16( (tmp SHR 16) AND ($FFFF) ); + EEPROMRead:= data; end; function readMACAddress() : boolean; -begin +var + temp : uint32; + mem_base_mac_8 : puint8; + mem_base_mac_32 : puint32; + res : boolean; + i : uint32; +begin + res:= true; + if (eeprom_exists) then begin + temp:= EEPROMRead(0); + mac[0]:= temp AND $FF; + mac[1]:= temp SHR 8; + temp:= EEPROMRead(1); + mac[2]:= temp AND $FF; + mac[3]:= temp SHR 8; + temp:= EEPROMRead(2); + mac[4]:= temp AND $FF; + mac[5]:= temp SHR 8; + end else begin + mem_base_mac_8:= puint8(mem_base + $5400); + mem_base_mac_32:= puint32(mem_base + $5400); + if (mem_base_mac_32[0] <> 0) then begin + for i:=0 to 6 do begin + mac[i]:= mem_base_mac_8[i]; + end; + end else begin + res:= false; + end; + end; + readMACAddress:= res; end; procedure startLink(); -begin +var + val : uint32; +begin + val:= readCommand(REG_CTRL); + writeCommand(REG_CTRL, val OR ECTRL_SLU); end; procedure rxinit(); -begin +var + ptr : puint8; + outptr : puint8; + descs : PE1000_rx_desc; + i : uint32; +begin + 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 + rx_descs[i]:= PE1000_rx_desc(uint32(descs + i*16)); + rx_descs[i]^.address:= uint64(kalloc(8192 + 16)); + rx_descs[i]^.status:= 0; + end; + + outptr:= puint8(uint32(ptr) - KERNEL_VIRTUAL_BASE); + + writeCommand(REG_TXDESCLO, uint32(uint64(outptr) SHR 32)); + writeCommand(REG_TXDESCHI, uint32(uint64(outptr) AND $FFFFFFFF)); + + writeCommand(REG_RXDESCLO, uint32(outptr)); + writeCommand(REG_RXDESCHI, 0); + + writeCommand(REG_RXDESCLEN, E1000_NUM_RX_DESC * 16); + + writeCommand(REG_RXDESCHEAD, 0); + writeCommand(REG_RXDESCTAIL, E1000_NUM_RX_DESC-1); + 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); end; procedure txinit(); -begin +var + ptr : puint8; + outptr : puint8; + descs : PE1000_tx_desc; + i : uint32; +begin + 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 + tx_descs[i]:= PE1000_tx_desc(uint32(descs + i*16)); + tx_descs[i]^.address:= 0; + tx_descs[i]^.cmd:= 0; + tx_descs[i]^.status:= TSTA_DD; + end; + + outptr:= puint8(uint32(ptr) - KERNEL_VIRTUAL_BASE); + + writeCommand(REG_TXDESCHI, uint32(uint64(outptr) SHR 32)); + writeCommand(REG_TXDESCLO, uint32(uint64(outptr) AND $FFFFFFFF)); + + writeCommand(REG_TXDESCLEN, E1000_NUM_TX_DESC * 16); + + writeCommand( REG_TXDESCHEAD, 0 ); + writeCommand( REG_TXDESCTAIL, 0 ); + tx_curr:= 0; + writeCommand(REG_TCTRL, TCTL_EN OR TCTL_PSP OR (15 SHL TCTL_CT_SHIFT) OR (64 SHL TCTL_COLD_SHIFT) OR TCTL_RTLC); + + //The following is needed for I217 & 82577LM + if (card_type = ct82577LM) OR (card_type = ctI217) then begin + writeCommand(REG_TCTRL, $3003F0FA); + writeCommand(REG_TIPG, $0060200A); + end; end; procedure enableInturrupt(); @@ -185,9 +331,88 @@ begin end; -function load(ptr : void) : boolean; +procedure writeCardType(); begin - load:= true; + console.output('E1000 Driver', 'Card Type: '); + case card_type of + ctUnknown:writestringln('Unknown'); + ct82577LM:writestringln('82577LM'); + ctE1000:writestringln('Generic E1000'); + ctI217:writestringln('I217'); + end; +end; + +procedure writeMACAddress(); +var + i : integer; + +begin + console.writehexpair(mac[0]); + for i:=1 to 5 do begin + console.writestring(':'); + console.writehexpair(mac[i]); + end; + console.writestringln(' '); +end; + +function load(ptr : void) : boolean; +var + PCI_Info : PPCI_Device; +begin + console.outputln('E1000 Driver', 'Load Start.'); + + writeCardType(); + + PCI_Info:= PPCI_Device(ptr); + bar_type:= PCI_Info^.address0 AND $00000001; + io_base:= PCI_Info^.address0 AND $FFFFFFF0; + mem_base:= PCI_INFO^.address0 AND $FFFFFFFC; + + { !!!!! Dirty way to alloc the pages, needs fixing !!!!! } + kpalloc(io_base); + kpalloc(mem_base); + + eeprom_exists:= false; + detectEEPROM(); + if eeprom_exists then console.outputln('E1000 Driver', 'EEPROM Exists: YES.') else console.outputln('E1000 Driver', 'EEPROM Exists: NO.'); + if not readMACAddress() then begin + console.outputln('E1000 Driver', 'MAC Read Failed.'); + load:= false; + exit; + end; + console.output('E1000 Driver', 'MAC Address: '); + writeMACAddress(); + + startLink(); + load:= true; + console.outputln('E1000 Driver', 'Load Finish.'); +end; + +function loadE1000(ptr : void) : boolean; +begin + loadE1000:= false; + if not Loaded then begin + card_type:= ctE1000; + loadE1000:= load(ptr); + end; +end; + +function load82577LM(ptr : void) : boolean; +begin + load82577LM:= false; + if not Loaded then begin + card_type:= ct82577LM; + load82577LM:= load(ptr); + end; +end; + +function loadI217(ptr : void) : boolean; +begin + loadI217:= false; + if not Loaded then begin + card_type:= ctI217; + loadI217:= load(ptr); + end; end; procedure init(); @@ -195,6 +420,7 @@ var dev : TDeviceIdentifier; begin + card_type:= ctUnknown; dev.Bus:= biPCI; dev.id0:= INTEL_VEND; dev.id1:= idANY; @@ -202,11 +428,11 @@ begin dev.id3:= idANY; dev.id4:= E1000_DEV; dev.ex:= nil; - drivermanagement.register_driver('E1000 Ethernet Driver', @dev, @load); + drivermanagement.register_driver('E1000 Ethernet Driver', @dev, @loadE1000); dev.id4:= I217_DEV; - drivermanagement.register_driver('I217 Ethernet Driver', @dev, @load); + drivermanagement.register_driver('I217 Ethernet Driver', @dev, @loadI217); dev.id4:= LM82577_DEV; - drivermanagement.register_driver('82577LM Ethernet Driver', @dev, @load); + drivermanagement.register_driver('82577LM Ethernet Driver', @dev, @load82577LM); end; procedure fire(); @@ -214,9 +440,9 @@ begin end; -function getMACAddress : uint8; +function getMACAddress : puint8; begin - + getMACAddress:= puint8(@mac[0]); end; function sendPacket(p_data : void; p_len : uint16) : sint32; diff --git a/src/driver/testdriver.pas b/src/driver/testdriver.pas index fda02bc6..a5f7ca12 100644 --- a/src/driver/testdriver.pas +++ b/src/driver/testdriver.pas @@ -11,7 +11,7 @@ implementation function load(ptr : void) : boolean; begin - console.writestringln('DUMMY DRIVER LOADED.') + console.outputln('DUMMY DRIVER', 'LOADED.') end; procedure init; diff --git a/src/drivermanagement.pas b/src/drivermanagement.pas index de731863..41d63022 100644 --- a/src/drivermanagement.pas +++ b/src/drivermanagement.pas @@ -307,7 +307,12 @@ begin 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; @@ -336,9 +341,18 @@ begin end; dev_list^.Next:= new_dev; end; + console.output('Driver Management', 'New Device Registered: '); + console.writestringln(new_dev^.Device_Name); while drv <> nil do begin if identifiers_match(drv^.Identifier, DeviceID) then begin + console.output('Driver Management', 'Device/Driver Match: '); + console.writestring(new_dev^.Device_Name); + console.writestring('->'); + console.writestringln(drv^.Driver_Name); if drv^.Driver_Load(ptr) then begin + console.output('Driver Management', 'Driver ('); + console.writestring(drv^.Driver_Name); + console.writestringln(') successfully loaded.'); drv^.Loaded:= true; new_dev^.Driver_Loaded:= true; new_dev^.Driver:= drv; diff --git a/src/gdt.pas b/src/gdt.pas index 6c38ba5f..11a1a567 100644 --- a/src/gdt.pas +++ b/src/gdt.pas @@ -58,7 +58,7 @@ end; procedure flush; begin - console.writestringln('GDT: FLUSH.'); + console.outputln('GDT','FLUSH.'); flush_gdt(uint32(@gdt_pointer)); end; @@ -70,7 +70,7 @@ end; procedure reload; begin - console.writestringln('GDT: RELOAD.'); + console.outputln('GDT','RELOAD.'); reload_gdt(uint32(@gdt_pointer)); end; @@ -90,14 +90,14 @@ begin gdt_entries[Gate_Number].limit_low := (Limit AND $FFFF); gdt_entries[Gate_Number].granularity := ((Limit SHR 16) AND $0F) OR (Granularity AND $F0); gdt_entries[Gate_Number].access := Access; - console.writestring('GDT: GATE '); + console.output('GDT','GATE '); console.writeint(Gate_Number); console.writestringln(' SET.'); end; procedure init(); begin - console.writestringln('GDT: INIT START.'); + console.outputln('GDT','INIT START.'); gdt_pointer.limit:= 0; gdt_pointer.base := uint32(@gdt_entries); set_gate($00, $00, $00, $00, $00); //OFFSET: 0 @@ -106,7 +106,7 @@ begin set_gate($03, $00, $FFFFFFFF, $FA, $CF); //OFFSET: 24 set_gate($04, $00, $FFFFFFFF, $F2, $CF); //OFFSET: 32 flush; - console.writestringln('GDT: INIT END.'); + console.outputln('GDT','INIT END.'); end; end. \ No newline at end of file diff --git a/src/idt.pas b/src/idt.pas index 3c3f609e..f90bba7f 100644 --- a/src/idt.pas +++ b/src/idt.pas @@ -52,7 +52,7 @@ begin IDT_Entries[Number].selector:= Selector; IDT_Entries[Number].flags:= Flags; IDT_Entries[Number].always_0:= $00; - console.writestring('IDT: GATE '); + console.output('IDT','GATE '); console.writeint(Number); console.writestringln(' SET.'); end; @@ -65,14 +65,14 @@ end; procedure init(); begin - console.writestringln('IDT: INIT START.'); + console.outputln('IDT','INIT START.'); IDT_Pointer.limit:= (sizeof(TIDT_Entry) * 256) - 1; IDT_Pointer.base:= uint32(@IDT_Entries); - console.writestringln('IDT: CLEAR.'); + console.outputln('IDT','CLEAR.'); util.memset(uint32(@IDT_Entries[0]), 0, sizeof(TIDT_Entry) * 256); - console.writestringln('IDT: LOAD.'); + console.outputln('IDT','LOAD.'); load(uint32(@IDT_Pointer)); - console.writestringln('IDT: INIT END.'); + console.outputln('IDT','INIT END.'); end; end. \ No newline at end of file diff --git a/src/irq.pas b/src/irq.pas index b815853d..bdee02f7 100644 --- a/src/irq.pas +++ b/src/irq.pas @@ -19,7 +19,7 @@ implementation procedure init(); begin - console.writestringln('IRQ: INIT START.'); + console.outputln('IRQ','INIT START.'); outb($20, $11); outb($A0, $11); outb($21, $20); @@ -30,7 +30,7 @@ begin outb($A1, $01); outb($21, $00); outb($A1, $00); - console.writestringln('IRQ: INIT END.'); + console.outputln('IRQ','INIT END.'); end; end. \ No newline at end of file diff --git a/src/isr.pas b/src/isr.pas index 9b8c1650..66a05462 100644 --- a/src/isr.pas +++ b/src/isr.pas @@ -24,7 +24,7 @@ implementation procedure init(); begin - console.writestringln('ISR: INIT START.'); + console.outputln('ISR','INIT START.'); ISR0.register(); // Divide-By-Zero ISR1.register(); // Debug ISR2.register(); // Non-Maskable Inturrupt @@ -49,7 +49,7 @@ begin ISR33.register(); // Keyboard ISR40.register(); // 1024/s Timer ISR44.register(); // Mouse - console.writestringln('ISR: INIT END.'); + console.outputln('ISR','INIT END.'); end; end. \ No newline at end of file diff --git a/src/kernel.pas b/src/kernel.pas index bc9f4e82..f8749144 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -89,8 +89,8 @@ begin if (multibootmagic <> MULTIBOOT_BOOTLOADER_MAGIC) then begin console.setdefaultattribute(console.combinecolors(Red, Black)); - console.writestringln('Multiboot Compliant Boot-Loader Needed!'); - console.writestringln('HALTING'); + console.outputln('KERNEL', 'Multiboot Compliant Boot-Loader Needed!'); + console.outputln('KERNEL', 'HALTING.'); util.halt_and_catch_fire; end; @@ -99,9 +99,10 @@ begin MOV dds, CS end; if dds = $08 then begin - console.writestringlnex('GDT: LOAD SUCCESS.', console.combinecolors(Green, Black)); + console.outputln('KERNEL', 'GDT: LOAD SUCCESS.'); end else begin - console.writestringlnex('GDT: LOAD FAIL.', console.combinecolors(Red, Black)); + console.outputln('KERNEL', 'GDT: LOAD FAIL.'); + console.outputln('KERNEL', 'HALTING.'); halt_and_catch_fire; end; @@ -121,7 +122,7 @@ begin isr32.hook(uint32(@bios_data_area.tick_update)); //drivers - console.writestringln('DRIVERS: INIT BEGIN.'); + console.outputln('KERNEL', 'DRIVERS: INIT BEGIN.'); keyboard.init(keyboard_layout); mouse.init(); testdriver.init(); @@ -130,7 +131,7 @@ begin //Nothing beyond here USB.init(); pci.init(); - console.writestringln('DRIVERS: INIT END.'); + console.outputln('KERNEL', 'DRIVERS: INIT END.'); console.writestringln(''); console.setdefaultattribute(console.combinecolors(Green, Black)); diff --git a/src/lmemorymanager.pas b/src/lmemorymanager.pas index ab1e397f..04ddef54 100644 --- a/src/lmemorymanager.pas +++ b/src/lmemorymanager.pas @@ -86,7 +86,7 @@ var i : uint32; begin - console.writestringln('LMM: INIT BEGIN.'); + console.outputln('LMM','INIT BEGIN.'); Root_Page:= PHeapPage(new_lmm_page); Search_Page:= Root_Page; Root_Page^.Next_Page:= 0; @@ -96,7 +96,7 @@ begin Root_Page^.Entries[i].Root:= False; Root_Page^.Entries[i].Last:= False; end; - console.writestringln('LMM: INIT END.'); + console.outputln('LMM','INIT END.'); end; function kpalloc(address : uint32) : void; diff --git a/src/pmemorymanager.pas b/src/pmemorymanager.pas index 83805634..6ee9e6c8 100644 --- a/src/pmemorymanager.pas +++ b/src/pmemorymanager.pas @@ -109,15 +109,15 @@ end; procedure init; begin - console.writestringln('PMM: INIT BEGIN.'); + console.outputln('PMM','INIT BEGIN.'); walk_memory_map; force_alloc_block(0, 0); force_alloc_block(1, 0); force_alloc_block(2, 0); //First 12MiB reserved for Kernel/BIOS. - console.writestring('PMM: '); + console.output('PMM',' '); console.writeword(nPresent); console.writestringln('/1024 Block Available for Allocation.'); - console.writestringln('PMM: INIT END.'); + console.outputln('PMM','INIT END.'); end; function alloc_block(block : uint16; caller : uint32) : boolean; diff --git a/src/scheduler.pas b/src/scheduler.pas index 2f8c5aeb..2da94438 100644 --- a/src/scheduler.pas +++ b/src/scheduler.pas @@ -105,7 +105,7 @@ end; procedure init; begin - console.writestringln('SCHEDULER: INIT BEGIN.'); + console.outputln('SCHEDULER','INIT BEGIN.'); Root_Task:= PScheduler_Entry(kalloc(sizeof(TScheduler_Entry))); Root_Task^.ThreadID:= 0; Root_Task^.Priority:= 1; @@ -116,7 +116,7 @@ begin Active:= False; isr32.hook(uint32(@delta)); terminal.registerCommand('TASKS', @terminal_command_tasks, 'List Active Processes.'); - console.writestringln('SCHEDULER: INIT END.'); + console.outputln('SCHEDULER','INIT END.'); end; end. \ No newline at end of file diff --git a/src/tss.pas b/src/tss.pas index 35d7e818..d3e253e8 100644 --- a/src/tss.pas +++ b/src/tss.pas @@ -79,7 +79,7 @@ var cCR3 : uint32; begin - console.writestringln('TSS: INIT BEGIN.'); + console.outputln('TSS','INIT BEGIN.'); ptrTaskStateSegment^.ss0:= $08; ptrTaskStateSegment^.iomap:= sizeof(TTaskStateSegment)-1; asm @@ -95,7 +95,7 @@ begin mov AX, 40 ltr AX end; - console.writestringln('TSS: INIT END.'); + console.outputln('TSS','INIT END.'); end; end. \ No newline at end of file diff --git a/src/vmemorymanager.pas b/src/vmemorymanager.pas index 26aee3de..8a72eade 100644 --- a/src/vmemorymanager.pas +++ b/src/vmemorymanager.pas @@ -90,13 +90,13 @@ var i : uint32; begin - console.writestringln('VMM: INIT BEGIN.'); + console.outputln('VMM','INIT BEGIN.'); PageDirectory:= load_current_page_directory; KERNEL_PAGE_DIRECTORY:= PageDirectory; map_page(KERNEL_PAGE_NUMBER + 1, 1); map_page(KERNEL_PAGE_NUMBER + 2, 2); map_page(KERNEL_PAGE_NUMBER + 3, 3); - console.writestringln('VMM: INIT END.'); + console.outputln('VMM','INIT END.'); end; function map_page_ex(page_number : uint16; block : uint16; PD : PPageDirectory) : boolean; @@ -139,7 +139,7 @@ var rldpd : uint32; begin - map_page:= false; + map_page:= false; PageDirectory^[page_number].Present:= true; addr:= block; PageDirectory^[page_number].Address:= addr SHL 10;

C*e4sZ+h@tyIpTkt5FQaX7y%J2BUu;>5hP;=R4 z>>~Z6AK?Qjb3j#2sYQ*>S65ge;S$CrOH@kstP;YJhR%|9aC zVB%E%F5!J99>rfL%uGC*ze2di#P{&$fjwWYGl?|*1c;V0(Rw=HL|~2p6L(4*YWQK`8&RKbFq!!qy5k;>4d$e`OPvj{(hRigEN(rCjeu zlYiLBm;Bh#Ap!S_IHb#U(OkrFkB~KOGam^v?moVl-0H83R6$r2U`<=xBX+(VgO7U? zIF66)RG0V_#jG$`pUSZ=D?Ca#BA}nvhu2A^t5G2uXYWlWCq)p~`FI`6j zETmvSVmqL3w-uw~J7%NnAMCh#8@=cCEjiGX6^gemnN2U48vX)q%@vl~-N|fs!M-pj zjJ0)6Ho0)E#mTh7_=ul{!fpje71X7$PYdq~OA&f1i!DkDOBH$=a~HY7(u5w*))u)e z@oY!Y-Ih3Zt|)OtU7RpDaIKxS$2;q2t$VxI?d2cf2%$`CxARQeRJi$yJ8J95$;;wr z#d-Fd);q}Bh{x-R=9fWTvTAzA@7d)q_}r_w-iI+Lqq`&;(AK#V$kw~vau^@IfQQo@VfC{ zbtIHm3;o)P?zN&eZ{1L;N>u2bb+A@c=yh-A&DV^sju%0+t%#_Vu5g0+q-l1VEhdc= zHMfht_7VEOMe7klzb;x26?%t;r>erQe!xm*r+TytltjH-DI?wQ@L%ABMdL(;5p}{H z;P(fqE7-@v>rFmANPR4+b383by(_7=xEoZ&36=6uq@M$KYp3)p>ww9f5U9%w_?ln8 zj5d8|@K$u`Q?Xfo_Rkm?k$rxVnSPO(evz3-cVlspqMj|hFFT|@jqSg$|DZUul2O-+ z5vnYVIPvc3kGs_RdI|0dapO&{H~ad&WQ&8v7Eg6(u5IY?(_b4;?|Qbjc&z>Wc-(B6 zWO(W0hLgohEg_ljHzdp*ZwZ;TjV+m%;4UUxHkMhRt}P^eH0ez(aoTc1$?DE>w$u*ef9eQ#lu;vpgvCe z5;wzp=%{$LD$|f-jmT~TSrmTk1`5IXC6MN&g74rga4&_yKZT~%6Zbu78fpK8Cg+u(&s2D6?NKJ8KMoZ@O zr5Nu23gl%X`%5y5*vhXGL4QN^bkGf!mM~t96WIpE+uV7>QpKLUKdGM_z5x*@8WC)* zm0_m+4VSESC zj!n2bxLN+*vL^NL{DeS9m_`lnI|5y6C+nBkED7$U zg5TG$tb3_THU`tX!URvgpVByrxKrRnH(8%W{bv7tiX&iC8nr8AdW_ry8{qyn+=F3M zB+}VGh2}7y;F_`>{m75D^XmxI?^~ zdaeIDYY=fJ(L}_X!2$sRQK05h#HLSLF+JhuQA`I-%Z&A3Z$Q%=6w|!VuxhpPlF#O$ zFY(0Gg7GhC^;cf;Z*0T4v^mytFM^(FE^=D}H;gfbis7Rc_nm>h0=tTnln-Koz-oc@ zqK*A>abL^dn6|iY{%crCmi+*B*?;4565}A35)C^H{P}{c-`>V*C2KXT;(sPu8b$DX z+#=@~{hGfM6B#^4!7JE!S<nD4+TbZpTGEe^8u92sSZ7Sqa;e-0 zAB*Yx2tr#(#92Y$!5nd7v#MYZ!+T(&wA4~E9_(xkA>&mHgeGiTgSO+F)vjdwfjLY2 zx`xs|$oE4To^bCSr^ZmXf0yb2Z3OiA9JZ*mx21}CN{4u!!a=0Aj2h#Yg8lplRN2p- zXhrsn`uQ;Rb2kmeblJo2%2%2_`xVL{F^^DD(X*X`=-ji2}^gM28S$QsG@Y`~LyK6Y^6Dy${ zUHQKzDwfoYfhfSj%K9b7cFw>+@dK8)C)nvV6UPv1PQk8!2iv{RXg8TB;jQI1?V=oIzNpm5{6}d0 zwG$Ieeec@L!MSF;_`OJ^KCqekQTR6ikHw1#&&D#(`nh5=I>!S}j)SAvh^ISG!pqQY z;z28v_?_a(74dYV=FQB1g!z8a*P|8hN2~cCV2@k`t*j}_W>ZYHY^mZaZI5s^``m4U z!>!@Vw;F1jFF$^n5B*q?<&UPqo4x`FoLq{lhIK>XClMasj!T)AjAM*uZ51{4=>?G? zVwdKz`WCeN8mq^~y-dG0jPlBJ?}+18clS+Vie~MNf(dh#YuZjoTfQ)KoNu|?G*BUr zDC9H?#hNxM1e;mNplfp523O)Zh+4OJn=^lH0>!_e9Rq9J9a7Y5^>YyZ@t2Y6@hHIK z(UHz~$W!YQqqJ1AT*69>e^`d#=NFZ)W8>Flc(Uf=UdbopbsZHfByBU?{0o}>l^6XR zF9neLUp}2_bTv<+84xA9I+Kt`SMwpuboE|oEPz<5 ztA!F3K`hhNSrW~LSfQ);NmLB6Qdj3lG#6r(uFjKaKExPZT_Dl@5J|fFGl>>LEY#IS z0(sQMkcfMUG?qZj*VR&q${-%n)uj?GgIKSt%OzR?u|!u_O0){1N>_g_(Q1gry1GW9 zwGgXy^%oMAL;PG<*Gc55fE=o;l@eA#4Aa#IBw7zKTvs2I=phIM`mjVBAO`E|Mu{Gg zHY1&@ftFSdb)k93s)ol_z1(B_*Orq@&6LocmL{CHH=;|{P?WE=bpOx^J5?#v(aX|yK%#>XQM&poiGEG@-xgi{jf96F9@Ev|O7sdu z4_*D8M2DsA_YxhEs6nEm5*?H1xI`x;(j+=5(J6^umFP7H4;uV~gs)5EA0-M%bXuY_ z5;aP6R-!i~(j{t=XmPbnXDNE%VbNb#qaZL_F%Sc=szbPRwKv2-+<)muh(uj= zLLjdaAd+>}1u;lh6Cr-4tH}^UbafcSy}FtLai6Y^gmCL>Dnx;gqHIq);wIp{~w=KwjiSOw!c?h{?KI1TjTd zXG2WW)nbV0x;hskS6AmlWa#Ss5DEAXJj5fqS^}{_SIZ#g>gqCxVqIMUfqYyAFiESgxE!Fuq@{Rau zfKT}?E)#!;%W9lz^7O;F?8jRfe*vd({1gt~_)D|_2+#)LH`urGk)OYbYve1qw7-B$ z*dbg(uoLC~cpew;zi5 za#6`7in{Ezi%gb<1oiVk@neCoDb%wCr;M_BEhOu|+=i(2|vNq<} z7KdLtrfwUvZI6v@-c}t`IB|+QXI8Ge;HGL=@23)?Z#7YE3UfcTsQ3Ea^4|<4&o}~B zL_wJLbQ_*$fu~a0e)cx83QO5>G$Hpk5#HcLgx7bZ4ZpD2>~FX5qA8_|*5)r-T540e zD0Jjvwnvg`zOtE>KAqIC{pl!6*pvymMN?-?X0JZ;TefQF1=jp*N`&d(hQAZRpRM`j z9JcnC3n#tlbp)usS0QPSG(?c3-e`HJzKcva8SM1YvR=%Xz`67GaJe+0+;Mgdlw$dm*DhmzD@Z41>Z05y@qdC3c7`Fe|(4GI|kn=_|C$2 zF}~D*Qhi5&zA5V)y6)|2@l1MB@}nSW^v6I_r{$;B+ba=1;l5U&XkPse)8m306Aqs{ZsSr7kGX+A8 zQiBu(HAIb41JoEQ34W*p`4gvRI1867TD^Mt>ZQ)?%5@pe6mqx?4{idSZ@E+9=*%f! zUR7Fd6cToEpUFxlt*KmH;>;jyRLFMMtXt|3{1U=ba39flC&HL! z(b1{{6Fd~Lf)7c$KS}^og}F%)w^U@ zypXgsZQaFoz2fTk86c&iYWBzKy(>Rs%kS4MZOeohWb^>YpVe)n={ zPJZF=k76~oyxJ+BXix9HfToVcIUg4?pAvCk)&8i zQqGg4G$To?CP^E6rr})hDNo}{B}mG7V-FoInMM$-pl>$Iu^@ZrCm>;()~z_nGN)Be zA4@(q=|8pRJvKYnY%LezQEMb=#EGZptNiT25mr%Q;ZGLY8=T0>amRbHF~^-A^PVzq zL8^=@CrmvhNlzf+sWHOTC6aVDXf{rmx<<0M!JA!l8rWsXPMPZw75sz7ytkO diff --git a/iso/boot/asuro.bin b/iso/boot/asuro.bin index 5f00dbabd2d580ce9279e31e9a10b2e06db30c0a..671b6c7c00487d1affcca9ac446f71b6e71901fe 100755 GIT binary patch literal 49380 zcmeIbdwf*Y)i-`7nUhRl!VDT9Rn!rqqD2ad3W}QB01*O_B#IXbkz^zg2puLMEo$Nr zJ11joYNfSLr4OiW?eo~a)C&yp(p=~ORx94|QVoi_HPl8y3`oiE``!DT$t0OrpWp9& zKfgcT9GJ8AT6^ua_gZ`JwJ&F%lRLa~X4q^t&AO7bWQ~|pbGJ+Z9NVH|rf43-jMsF{ zF5@*f>2Aa#unIx^bV<@wd@X5+UxoN=ggqx|DF9@@=EFcagZ-~m5D-0d4Ow8w0z(!U zvcQl9hAc2-fguYFSzyQlLlzjaz>o!oEbzbC0!dr{aB4DSem!sgfgN0|yT-lg^6U@p zal6LtcX?Xt_8_v>HLkTWeKMB&J^Od*a#;_m%XS3|^R(9GZYip3N3f+>RGpz|#}50N zV*gx^_*|QPDZbOMyLSFH#YLsYhvNPlHO&`UtO?gbNZGdUS&Er!9GMZeKY9G0?w0zN zz;I(mF9%P!)*pDxu>n}BHtOlRG({$&-MEk8=p9bA{qnd zXpkSFj2+n^Jf?}~kznaP2sbZA@qIfS+SW70n0b)WPWGl|L}^zWM{>i?jZ8PKHE>Sw zn9Ki9713nT>-W^88FtCisgvQO!P3{H?^1k}+^NwnahETFJwi8V+Ee72Z5+u9+c!;z zL1BXtk&&QdzoG8leA{EGXdGo_%R{coc&^BlptwxcX}z4`O5zwXC~D)7m54 z5fW?0ASmlgboTW0?7&u(R?w6a9#xBc!Wj)lMyT#+4~YKGm@w5QV2|KIhs(3i@OFp2 z-Q1#TLD29X4||XAX>V$Ng88*DzmdpKJP+{?ZGhB=DB9O-Lrb+Ki;YO^B1$Ez3ma18)LJKK$hM3>z_2&_O4pzl@dwS6Fx9@I!e^@vW zwza-*uY11>w7QR6n%0x{x&b1hUE4Ckbc&+nJ2%^4S;dDh@2+g}%JBEczerap%u%9jSeP8C= zW`Ne4*tN}hXWbr|z4OjqGGrzxVZLx_w-0s{qhYm>_wW|xZ~=-76N|7{xW?^k@E#5? zJb=!oOwtrQ=(OyyKFi@VqL0T)8x7m<40hORuC%g>y0+QxY!xXao+o9CzZak$j9sqn zyMoL18G|rf!bSh z<1WcVtGKr5Ow`(u>Do5xC5GO2r|m`fWf^v)?MxI0PK$4K%nmb|}JseAqvtB?CgIU*=e+=|=Q!(uYSRk$gC?MX5H z^#pOtEL7e?xGUpG{CLF@C-T?QF3MjsIH7~DBkaiv5uM^e(zT&>))jLQm$16%e zJrK9Xs|~1ZkqVz6+DZ~t0PG(jzh(Kcu#2g`!_;3Bx6Dj9UNK!F{bhNS{tOPPze+Fl zXON};cKXlntN+-~P5p-}{fS%pKP>g1K>cC0fen!QlRu_EtYqq+X6ip&+%hAf{!Euh ze_0--KZAqnuhL8X8BD1EmVHnloSpU%VVu8-q=Q|&i(wmI z@M#R};FF|Ihw)sl@lyE4v~Y3S<&vT1A4Xo9;Yj32b2nvrNilNMB$RcwOQ$`UEUHVRMw*5}c-9%1wrIm)sjVIKPqMV2d3QVhJey zv<+bXZOL!zBfo8c{BUOHI5lnZZIL;g+$RUI0jSZARYRXj=J;sMzhn!+e2#0642%b8 z5o+PlG^6&45DKl;jF&MS4~_O(GgSq&x)Xwv%)f0W8ChAgFsn_i!T4_F z7iyQ{P1%9-UE5x1#X$L-O=j{i{CsD+aYQ0t0WqRR7xD~z)_IQPOtLtCNY3Gs@5LBj zQs6VAt5vw=q%f`^u&0&(<2Ebn>oH7~Q>myNpB`*N;hEa;;7<|4I5#sc^4?hF&ls5` z&X0?{FBZ8Gq0WLWYyg-z;jU}&T)~$yo0BxzDC*iI@g*&MQvJ(;@5o9mFplIjWH>@U zWhsJ3Q~aNICOxjjCT*P4TGnLy@I~Ne-oUtNv<08bmRKb)i>KdwGU84G`z-ijw1s#7 z%vL|oI5N}d#zYtYZC!@_na#*I;`V^g13o#PhMkgX*oy zeUcG{Ve`?ZiUY?{q_-q)675sPi;{@=@nR=}GKnu@A1}5^3}y309OK0!y>agG;y;L? zHzF=`yto^fZ9v|2;%uS@WV4!M)7ot;jOo9c5EMnjsJF6mj`18;75Hy! zGcp=I5Vs52Yuc_{J3&~{qPfF+gHBuUsKXykq%d?l^mTuQVTE@=Y_5eo=rvXBB}VDK zh%}ssiYI_UuUw_qG0l!{pxMPHkhcWb61tNEI%b76W1Ek4B~Ox(wUjW-vzYSi z!Vj!(@8*KgY6#YRwLji`nEp%)!Y6%xE?g(`;{L*{fM-_Vyjg(}of9K XiP&F=+ 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�F=C~N+kuv()Lk&>Fu(pCh>8rK4FxD9{dd$D|qp{Ch z%`-Xck0a)JJ4oINecV(k*H5mwjmQ(i}fArD<3jnrh|N_C&OGF z4;F8&ddI}l7ghw8R+sn3Q3g}K)rn-e;%M}AY~0M4+7f>N<)a?N+1LkOR@*FCiR$#% ztoo+;=+sNxEi>`E7QYJo0{8{-yBEJL`27LD9r*nPznAd)JAR+w_a%O|OWiHM!*4r& zyYPDhzmM_z3cu8;?v^q5or~WT{BrP{i{Fj-Eyb?}zdP}hrLP^{qTy#lpS0m`h}bT~ z?;`xB;CC^8m*9t0nr$k6)9}NVg)JAqJpA(U^Wrx{(th}p$L4$AZ3`gV@b3WG zf?fn<%YPIQe;7#H56IQ`tAP9(&Rc+7%^w70OZym*W;_l!0`M>(-SJa^Y?<2uIT-E% zPv5%gVwqv zwm9jthm%oKv~=C-$|Yr0Y9%9Ag{&cUr4Je(?|0~bXmLWe7EWQ&bskOCJMQFv#W%RJ3SXzu>v2eOm$}Hllx56(u zDNY+mr*tbf+Lkyjr<7%;Pk>7%b(=A#w0IU2#adCD?^Rk`HcDilK5b-J36c%4M;{tX zZeHB`73W?sZ&q)| z_ke&28}^Z_tFT=;e)V}1F>kTZ8?}XS05*?GR~nZtzCTignt=E9BiIXJR*MP?F*Az` zV?V{B7olkK>PO?Omle-ALUukvHc!Gt>j%=gejw!fgwSKcEEA45;RF-XyO0l~s)QI# zC7f=;Y!l|2aFz+@0QR{G^5=b{{pVK0%Dr1+1NOJHVOemx6+Y~_mG=p!X333~D&`g+ zc4h^zzgQlN?1$U*tTok@<#bZ=8i3n#*99tMG~ZX%Z2fUZ@zQF40MjL{7H;bf$&-j? zzpmO}E`1*#b3jf%+)=y&vvJ5tiV3nMq|K>bc?;9hlW5XY+8haJsiZ+1TZCCMTLM~! zehr0D7B9-Tuakiv!rByakf_fj}JTYYOn#iatWRS z+T+4nYVR=HC!C(O1eLOAl^Vn`c=y9cX03(c`tl^A4VzKsx3Y*2>sdZLFv6Nd!QrXb zmif733_bgVhs~?1Fr$XYh3$4M6;~x|7R0k!Eahn=6Q=R8O!*9%M_f4FowaDun!wFf zi&h2vi|AT2kjT9BtW|4PPza_V8rwgup1sMM&?QdGZrp*9A3#E;%l@?*!e#+FfzJWt ziUgOLhjUmKOHt;>8jC5|D<1|IJ7%IdN@QI6h^!TIL2Xt{Y#x_@PMIt{fP_*b#}YiU z;@-A&KNJanF_5O|t5~-vuL-e2q^H3itb(aUHSna9FQM>(;ft`0wdnC-<#`pq3a1pU zhMcL8t6-{xmR!=}!J8hk#qbHD32l05Ze>80 zUalV#<5-~M;#^O~_s6Hmc&-;!e19AZdt7J4;``&$s@het`2M(jY^&W7i|>z5Q%)Yu zSLGjvr%=Dim$EIuyQ{HfP}+r)Og_1TV3T|aX&0J&EV5?uC8Awy^2v-%zC^UC7N4}C z$~OV+BCC8o(pHkMFHLilK;J?<&PT!egp1SJ&_%QT$p4Yo z#~rDEmpkLB4Pk}}xlEe=aPKl{f=TCc2v=IsifW!-VL9W%=?;r*SqJ6nL$kD}5aws$ zeXM~*MJwck=tV2aRxyu$c)Bw_nq^hjK)NNL@lLcY;)Jxir7z<&trj14h+nhf*?OOT zg6CMVvpwcnq@^k)ikCR<9K`qE0K@CcMdn-#6i66W(mXaufOh+3x$>IWbK#54`p9 zgR{NY=g!NSpAWY9x|Ke1cE!4zt1+dq;;g+cM+sthdO;3_G6Otwh@+8i`8oP4ITZ5Q ziOGZLxbT<}t5z*qT3x+-k(z$>$7Ke%$?{qIcg6Gjv_10RcolXr2RkVP|FR0dt@t&K zYa##8HDrMy3k+Fc$O1za7_z{>vB1RDOIHW{SQuy%d9Xv9SYC$X;S+COz53rI?2YEL zV9o@%n!!Qr7LBvGRT7amqP+Nq0QuyuCCBVqAldj?m&rH=I46jbkK=j^kPh?x0t7wy S@rub(s75|c46Tdty#62eua@%w delta 16294 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