From d1e6d28f9041cb6778fd23fddd7809c09c3c15ca Mon Sep 17 00:00:00 2001 From: kieron Date: Sun, 21 May 2017 17:19:27 +0000 Subject: [PATCH] dd git-svn-id: https://spexeah.com:8443/svn/Asuro@170 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c --- Asuro.iso | Bin 5091328 -> 5091328 bytes bin/kernel.bin | Bin 37092 -> 37092 bytes iso/boot/asuro.bin | Bin 37092 -> 37092 bytes lib/gdt.ppu | Bin 2777 -> 2777 bytes lib/kernel.ppu | Bin 2316 -> 2355 bytes lib/libpconsole.a | Bin 64564 -> 64564 bytes lib/libpmultiboot.a | Bin 29040 -> 29040 bytes lib/libpsystem.a | Bin 140320 -> 140320 bytes lib/scheduler.ppu | Bin 2666 -> 2718 bytes lib/vmemorymanager.ppu | Bin 4384 -> 5584 bytes src/contextswitcher.pas | 16 ++++++++++ src/gdt.pas | 11 ++++--- src/kernel.pas | 5 ++- src/scheduler.pas | 12 +++++-- src/vmemorymanager.pas | 68 ++++++++++++++++++++++++++++++++-------- 15 files changed, 90 insertions(+), 22 deletions(-) diff --git a/Asuro.iso b/Asuro.iso index cf1140d738b0e4a6174363e64b7736c2708d2d3b..f9ba05ceb45840ac1c7a1bb3b6170f5662adf029 100644 GIT binary patch delta 15095 zcmbtbd0Z9c`ky&$2Ry<7Wf2h(L2*IB1(!rYMMuRXmz-`^dP~$4vx3yF3W!ZC>g9_0 zdaK({(_Fe~ZppFb*FjXYH1{OM+;spK+)>H%d!BjULvnlU{_*3}%scP%eZS8>@5~@& zo!xHAf@4!$PC$>?9^HG!#7JFYVtd4N?-Cnp2(~8Y`1rf}TjfSYuPmR9sXgVx3U5iWXV-574ewvO8d)Ztg=U zX|yHWKx4L0=-e&gR!o#hl4SVLb>xWQql#Lsi~ggct=G0hx&289jxV{hA209Pv_bZr z3Hsh9qOtWSw0GE1^=AqC@7nD`yM5pvwHHN~bTnKaSMq!5>bs<9LkTb4u@b_wqP9ER z7~GVd6nEuL&fUASFJU*ZlqbJWDaBn>%DLN0DW5%eMHzOx?V`Bv?c&@oc2Pb%c5$Dh zc2i!>+|9lEcsFJD=I-`}-OxQ0`t}~~)hBx>&DZvD&3)JjhFua**PFc5ntS_8}^9lMeC3Ej&c| zeC803$b6X6{L*3G&H0C^h)x~m5t)uqn#UaBn&%y%xCf7L?mZG6e3YZpk5ZaTj&jXa zBpQE=qp8QJh`u?-Bhrsinx8q|ra>DGOdOr`ls5Y6ICrt)IAtdGXI`*zKU3&tfmZxX zr6&3W*F5?J#a(}58ZUM^g{GBryUWWd&6VX`v-KB>JMkCJE&PSzp8JJ!%_phEy?Bx* zeF2G{;OLT56m`@oPMvd#GJD`ugwGSZo@Y|>prRG~x)595fC}E{lPjp;zN_HD=@pcf zUZ;6*<4;rQW`UNUrZh+Y$~CLMQrz{wa?OW+rDAV=hR2?KhPrbLS0d&6g|y1eZilU+Kx~t5e)G zT|A^o^rk?=Dk*M8CC|pEBznJ+dlg^ivYOU&Xy@Q%!OIR?WFUN#?WZZSC+uys+yZ!U))Lr)II={=pZ&3G9#*G!c zf;AL6wT9m*OG)&KK&>|i2K@fD<^1+~c6f7{Wq;(=q-gHVV8h0TH>t>P+~kpm-l9Bs z^A`8u!&_8r)wde#tzJrEa#6yrZp7aD>TRBd{M(e3)3>=5_d68&!kspTM)7LaNJ&ag z9`Tet{OBES=iwd7-(hz-`qo{_&hES1i|co(D#zdBRsQQeiu=_)&i(ZsmE*4Wd1sEl zPkFWZ{%gDkYAMZAYa6~%3>h(U>{H$-F4gkzEDtC}uRP!`=02dpJMn;rSNDK&ari^7 zIsG9O-oA%Cyn7@%>=D1E-+4sY-TjE$t$IXh?pMdTuh&uN_jTQj#NDf-d>;H8_j&qn zR5nU}aZoO7a7;$`KM0Zu_dl2-8}5Hl zC==WdF35(1%py}{_L3|&{G3T1Gwdm!Gwe95ML$@bEE5%C!%VUf1)E`_Tw$dq;mcK% zOk|5Cy2wTm*)$i@*Y8|}{fjOnzn81vzvfEfJDm7M8t>&M8|}$b-AMj7ZbJWMH!{9n z?sCKZXL!StNV zUM;hTUcG7|-A`;R+@IE%#7ms`RT@w97QHmxo8*@|@fvT^zkWV4|An9P*9^}ljU9ly zd2{Lk-dL8VPn`KGJJeE+DLO0rF0;!1yg967a;I9I%|YW=oVeAO%L1cXj%x7rJVF^Tgnrhs-A#n8t4+vU^lK_|F}W#e z>$|2R7M;f9{RKYRpXU3EPN<^segOiX7C`b#ocMJb9}p<)PY)#drGfHD-U~q_o)#qd z%W3?Y6Ax-e^P36(Kcw*+&4m8oV3Pkvu)sg0@f*QHe@JtZ|7LT+|Cq*aHkUg!=#`Yj z(TPv#mA6AguY4Fn_R6&o(JKKhNMEM55WX&NLH6~P7NV~$p``v-LWTa^Q1ZU{C6xQO ztR)FQ*HXAYt0if^tfl-cZ-p?@{j@OI_de5Yb)^7wxs_%+REd2Cq$9{rA0YA zfyQq;@rZULe|9_B_*i7?+L87jwUZlstXM`RjU2*OTIKG4{3K*E+lyqbXiqA;?ZiVm zkj}i>LEM#}bRhXRI|%*39m(5fN=MO*i#w9~FLZ3U!!#O|oRn0QeV1zNiP54k3!_P0 z=c0wL-knJN)lQ-@7Iz|JIoClAjhM>@TPBYfd~U zmgdJg`LSeUSH_C`Si6w?iCqN0kj5`Lacfta-&O9|;At>=(CDZ9%ND!TRrq4*M&|0p zZlW);x{cJ! z^bo$J^dNm%*+Wj}ebJNbyQw`J-q2oS294_Sl&9>ap3c1XB5l3YOOAN*v)OYDe34$K z?xv%?gx9sSrXjtBr5U}+tnBVB8~+x@YH57ps3&SfnB)p7k(7lrelAIPY8^xtWx^m)l-xn2{S$+Pe|3XM`_By)_U8;H`|sdjc@S2j zi2jS6|Mtfs?0ZEv{#t~UE2RJJh6w*thLHG5C%%`&i<=FV>;6A~D^omShF_wGrplUX z(o`2sb=6ciO?B5)5SlgBQ&YV(wUMS;G_|p&dTXkWrdl=CS5y5owTY%S)l`2?4bap; zO%2l2W||tTsm(PtL{nR6YN)2R)YLFdZKbKME>Se7Mo2|_5W0S0~G@!90l`cweBNgh^4u@lh?s!I6(MTb?KsQZNRz&1MB#%(mr!p04O*NtW^tO@hW7bel1I>HrYjQ4}a2< z`n3rrCKtVhF>!&3i;HfBiEUPb)viAed~Q4EswFQZA}>9{HE&LYIW=!jYTnVjA2vxo z#Xn_P@@1dmQn)HP>s2r(UoJW88d>9TNZFZJd?d-?S(XPvfPJ>R<~Pm)|8iaPInQLv zMKd-2U~mOqt${0_;ywCfNRsUflq@wQrMe{uB->CjpRXx78=#-SWp)&%abW^VOHjHC zq{H;FoQ={i>eu$?LSyYRlpa70(?GgOE(nPzfFKJX$edl4`h=#pVgK{45)^=G^eIlN z%d*Ueh>~jal4=SXFJK4WRoaeoVm{j~^RxFEaa!gV_&dcwF~M3;kXkUNHnkwBPJidI z!;zbGXC(@wAusm4B)uR>_X#i0Pr6g^(#3sF`-SY#-xPm^tJ+iGIzQ*EoYB{*dk-Xb zeu?gm!ghu-J-P)HH?Pd6xGbmEG}l8F4KkjH^rUv~mHP zH%Dn<$icl@-3&^q-Sl%2Y{ML-hbcFLU7iCCJhllm)mxD)WG*!Deo)LCc!ry3U`e0U zf{mREEuY((U7m{!KV(F(ka@_6sAsqfMk9Sv2pc<3VP2njKzFFF1^!K0?L6h#;H-FS zw$(1BC$DS@W5Oytzh}>I)6>}4Or>>SobQ0lNxgoUzTu)Y*=#e4OzVQ!np{va6Kbe0X~rsYLCMu-P9-V6LWzt1zAp>R1GDP_*_u3LxFaKo zRpcQ9H1dv0@e>R${e3G7%tuB5Ta%9rH)I5|ihN|iJuDba1jAE*--iVjC^?xIXTUC* zWLb5n5^DJwY?HQ#32^n1t0b*NS-fe}h7Re`uww%RLP<|C!>Ku3+Ir&3H}PsbUQL24 zeSQF((r{x|u;>Gt!^s66jnc8IQ&jQ(w&@Ib4D09 z1b@CN={hEAE4s84)q8^a>d+?~*^77);_DEv#48(Koq?+-^sK;jQxW|Z(USUg#V%5& zSO`lbeHJbpfbcO~_ySxNB$*2mT=kbxcoBsQ@Jh$4-cH!8_p65|;#D2O&Ff(|9WG0B zuLM01QOjQejfX3Av7KatA26DJ@@rI?!t1`2$P^NUZ zms;)e)SVvr!|QT$OJGvn8fRH3UtrG&fXNUGOm-=R zXkU4820Ob#32u)%z}(KMb|CJ2a)K%aQkGQ;S|U~|quScf@Es}@GMYMc(K}LVf6mUb z8LHCV9d59OeX>&Nnu+@Gc?`<)3PFY4_S$PukkPdc2T1j4Fxqla(w|H4*~lJ(a3Kn# zxzKnvW~1~UC>;w@v8CFUqF@jR^lW&18Eu$qgKEAF+b+yl%BMNInRHA@7 zd|w!kYK^GkxCEmrfcua~)rt#^s4`G$L^TYgTUp#HCBcuUu{BRyKGuZgu2S9zMmdz& zL;o0Vo$9t6FEA?OyIKhhGdvaV3^}{ZSZ3qLwrwJK7k7^-tCcrB_TuD!?=t&p<(Uyb zLqf7I!|Rdcv;D`^ylw{$fxx(QJ#fUhEX{4Y`#8VaoU=aJ=WBrEc?f8iL5#PE>)lImW!r|f_TP3m;I-s93^qFo9>G|`W$FZn~t*Z+icugB`V4S z;`i+7-ZtEP3!455=Z+&ek9_8wvyGkv3s2mFroQEhZ{|Tki0(*$m5{1rc-ru7r6!V9 ztX0BH7M*RJr35rKbneUW%yaz!M2BZ7&An07t0bdw8H%iI=sKl$RI<}FZ1HFs=T6h< zhUuGV+J&1&wB9r@gy}Y{VjY-H7N!lI+%$*`()Oyk^XdZ}R= zUe)zmCVZW17WkxP*rJ8ywya`3SYD{J>2sAp3u@$sLGq8eN=Rdn2)m%34gDPK?#ES_ zZP;1SF3#)i!ZTSvaRcqj_)^%=E|f>ujbas_gWdgLcU}X#Ao<6<26jPx@z8%Oy-n>c z@K84l!&i(^W|%t-Z!-*EMZ?e@?B&@?KoG94&o=bGu-$=GY`{WSibA7SQRqrhXb?FI zT?tWdRN|T><1&mI-gu2d15mV4Nen{3X{8U?7FIg4s~fSV!iqr`H5FD+Y5O;)ZK)Hx`XyGil2;XVimFx`RkeV` zS=CB5yFdxaG~1fJ4eBLOUzSwo3LRo=fr1;A4o9_Xp(Clz_^wGf?rYv{kaTL*Y87uq;7^$Rt}dN|!jLshMR7rty+37Nv7R zIyny(y`E4ormp0CKz0>O>^sII5AIh<{}H#f?zr|jSerMo*47Ir1D)#ND=aTXwZ)^b zGYC^{QId~TZc9W#CW)}fl`w<_ViCj<8z^k`V#y#WQT|LRjEdJbOqu^Vvi>;~5ip!NW&J`x`0 z*zke90Cslb7a-)FSQsPTmn`~V*aqRt6My4iJl%)p-Roaq`Jhh~+X!?ETH}2JlEbs% zE(D3_6EIzTa+}h|WzAPg{jvQkWxQ#b4erfulZ*S%Ud@bDUN9swLNh?F#|9baZu7_k)N(pX5f5)rx$=BUu( z74c5`U#CrY>#Yg1aXosGlEz-HR^q%;rg2><(~3W-R{FctX9zRn%n&LEw;x_tUK{Gn z;2&{r9OdwlVq_Lxij5IItfb^Ot@aQx?`Vu{-3?{XpV>3lD9>j)?S(-4&>tKzNR*>~ z{&ThxlAH+tt5knD2EZ{8jwCn+!7&&P1&$$b425HuBsKOOJ$l01Q%9vwNS`=r;-s{R z)6>U0bv3{;e+MIA!5oo#95IbJqE|S=hlVj?ws7txM)VfvxM$*s*})NaY8){N90SCN z*}{1+j+t?y`RVoVSt2a<5e?&BiTF4%z6_%z`KJ75YH69VSYm&xQC>A!?Zt^P&A<039zVq0 e&xOgg%6eIP|KGI=97Et33dgYGf7d3DDgHlYf>&4o delta 19124 zcmc&*2~Ge;dg?};x z&);dVSu9Xq*Wg^#Pw<{bvdK@6}yQ-IesD`i4PO14-yptA3xlrd6`x zZ&h^aPE>Is+t7DUAHvPt!{ct+L%9d`OyKm}xtb<_Ts4ndTur$NmW(|NA#|?rXW|fWs8cIn3jJ#L%OMc_H@vmi8-t%bSvlZ|Q^`<)Xch&?(70!sC8; zWD%Y0qrAkudXy$^{ZU@bKOdzd@;}B?&OJs~v;7!vM5m6?5gESYDNp&1DzEvD$35~L z<=*3>DaR?g@HkJo>Nr)t%0w@RXnVzE6u~loX$1ddf1|`8^Hs z^!L1OhWtP$Z0Zj@bUQ;&|G-Plpc<;2Q^VtaTr;0eb}bKGP)qwQtK}(Qsin%sA9>ta zKT>YVk38<#A1T-WBrkC`lnMoYW68gU3H4r?cq~VLCto(08?7>hK&b@ za<;t0({!EBKFu54m#69Aw9~v^#+;#pn|_9eZf9ui8J_Z>pQy6*6Oa4xPgMEnPrR}B z`k9VB?PuPZ``*v5)2XiGDbJ~+$|YR%EJOXz^7?)0ESs*gync_LrI~Etawnam+`MzV zY#clnLt=i&MKjLR3(uPKJnnIZ8ZPkA7cNk)%tcRKpy##!MIJZzBAp|Ji=JVq|0OQ> z6612wGYs{=%;jEYTrPU%@@P808jrg`V;5;IdYhpUS9sj~D>NH_=A!qn(5ND>^0>>d zQuNPU^!`;ERiAnu_lr z-r%iv>kYcv|KkSlEPHf=o@J3YdFN67&5d*hZ}HH1x9FMj78kwDP~+{Skl&xSyw6^f z)4S@`!uMKt+_3s~80q8P+q{wAyiG^m{TE&Yi+`aJy!#7pZ1umi*jrnR@o5|4_73Ol zt*`t_vta*~*UOn-X)k_vc<76F`Vd8SYt}|IrKM#&We-1ohxYUE4lmwGcPYB$F0Y?` zcWD$i?($}N{5?9$FW=*FciyAipYHK;JnTMQnbYs{qS}6cCS3y!Jmq-}E$=8&GqPTI z${oeU20FaJ2Rxx^4`_(W1K#jz9?;=6KH!Cz{*Wr?J>(7V;6pmRdt7wVBYH|Nd&KK^ z-y_=Z)ki$#iH(#yw~>c_)i|6a?p`A==9J%P%nN_xWuxjhnvJVmbo^tAnjiD}{o-+S zyJoi({!f2W@X*2i!NUvTZ=Ts0erc$l6MpF&Jqf?GM9<-tp4XEA)j&Outmf+VEgxsn zrc8Ru*9>}2w$ykZJ()yxz7IFnFMU}5 z7ks$Q z=A<82Y)~tftmj*Clkrh2{X#Msq5fR{Jb%W2%bz=#EB;#X|6CxGUlGV%tNR1lTD=y?4L`mu z3x9rFE?(uuukrEtc5E#zY{%tSd+}TCxbaO4($g1y-q#G1O)n(kZr+u50dK3Kjee8xhefzhK`e3>^jNIhTGkO;XAHVFyjqSPFozb3US82~3-I?|*d;T4`{1-bg zenAKB=#O+@vva2dS3k9*KDx!zbB36h%D>jB`#Q3|u65+*Vqzzji`kvHeSO)9jYZ?* z$B)u2<74nLK(k|k6-uV zp`vo*y9XD3 zt_KT$MGtQG`+Mjo)1?r>4Szv|o;<#&??-U;Z$>cvke=M|=k#RZ|EVWe|8h@#i~FH~ zOld>=?>H}&)ftg2QF0_#=~N_}biZC){H0zDm-+Z9FYXt`9q9{EY@}lDzWS+jB}8-MTM+GC z34HulFCNv8%U{_~PaYQ4E&aItKkBD%@vst@ZOTejHyQOKo_r)!m-lDM+}NKh_Nx~U zAHWS}@c?#KzCVD=zdeBIhYjSOHgg8D#rWnxuKxLfEq9nU*=Z)zhQhnNg*|H!o0#>3 zxLRiiu~^&1aPe1S*ur=-hC7zCF>EZY2Xpz;1~dKjgSlfpHCR8EE{s?%e?ctkzl@Jx z_u`>L`1~PW{t)iMzA}X6$2gSBpEZ>6OZfOjFK!&h=MU2lY;iTnNzQr7H(Tn(VJw!w z;oMxkG@PxAg5lh;92?H~4Sase2*#g3g3JGM#6LWn@(XsUx}L-aeA$ z?es|QSO$z@v1E?o#7?`^M_YcVTJ+A5VXVZG&r`;qs3^!}xyVxcE!s z^g~J3O2%=sc77Z?TLZ^)`7_3|ZM0-Och-I$&&KaNfvf+*1g2jwfy+NKK_A&X)9s#5 zQE&R_$8a{`)QM~XEGPnPlWENjzGPnQdQds}1 zQn>5yNQyogXJP~Y7d!vmk44n4L_PVnh*~Rh|M0gm z9XY?1schfSF`<<#>1D|vOFpvXD@%eb`NX%mf~b7UX~JMDN&Y^WXU8;$+DEPOAL*tv5#9L|0dUQ~Rp(-~dn&-``UdTOHvs_F`{ z*dPs6`>YfPx9Zzjr_&OKsZ&>qQJu?&c^O7MW3<;s4N%pU;>z$%QE^6BP-WbxI7cv6 z&9;P5)u4`lYTD~!|I|JqpmogS@qAEF0Ql#6o!P1P(FQ{U^XCRQF!*SZ22Ev+7^)x|sdfJ0ZjO#SK&F*F24f+|go1%YezU>j_vTaLB`>h(9oz7{VQv@39J z;lTo6DS>Mp!Cp5|44d#^5Fjp_NpqOApvYRMf__^6^jqeKy zw(Sq9++WmSSlvon4H>U*YqmW!+iq!#)WfU9i5laKn+nwKtHo}_Z+4g(v``SK z7qr_kYWiw%l%Xs}l~=?1c(o(U>Ds~S?$xk9PJ=LAQAd5*`p{|1`>OX>!-^^!q{?fM z(E%AT>h3kjh-qR7jL}A0-bcN^MpRp`X$8|J`8tA)YMDix+(CCW$086VYU(lAl zT_E-vg@>PETE=|6%FhxorgpiYO@Kw_2#+e->+4-K&Trx&pFbEOvu&ZRwp*Q1Adc^b zWaK*IS^;cq2ek{>a2YhLRu2`3v4(hm^|t~s#n8}SO)iA^_Xh#}+yHe|A;dp!pf~rw1{r;fIV!wcL&jP^1f{q&;J_)+)o)8apx~RI>va0y284 z%a|vE?SLO~;xFHSLoKC@R9BSkVQFSKt)TCWJ!K4|lSp8y=5# z^8pn0U!lnFF%-x~1CZ%|aDJ!Wwi z#`_imfdJHZZx-bt#NS4I3*y(X=ET}LsL^)#t3T}nY_|~6-H7gOYWI0lJ7}TP-oSRr zh@QZ9mZ?y6nEV}azS<1*UO?}^Vok%^crWa)B{adavDS!i_a<1-pjxH1j?=;r4SX5U zIH=JO;VjT;dhGfeh?Wi@5>TymdJmoM;2xL?o%*0y4A*y4L*5jJ_;iP3xLkEqbKevr zL!b?v_(j2N;v=+!A!_NHVhLRE`utHG0lcYy6nlpNkG3obVJ(BS{lS&$AH~;&fw1M8 zZ70oz=R9zY`QAsX2gfJv%+3=&S{+n_DvwuP^(V-&&Xwa!#aHx}qHDgk@F?>az?@`G zR8DTwX>%Y}bK#>Nx+OPS?lZ-CeRNZ77mKb1+H&vM@*8Zc8|}INUqSPNpk24BF0~JM z9JFgsRb88aTZLym;I2CBA5ayv>v+{UL%`Q&XG5U&C0unJxpy4-4UW}~2lx0|s9=sQ zcdIRbn{D-uxjN;zV%oi3rxjrs<2|0dIdlD$T&I1C)1JFqsRiU6KzgHoQG-5z^juhf zu1tUlRtyUz|1r={%ycsFH<_qVAt)dYc*>>unL)(|WP+AnL4z6cPX&#p8yY0Dwj(mTZ(9hx^ zU7zT*#UPeFS8q?>t)#EB(`KdPps}42t^QEgxNV*J^5Rqiwa~ZKiUaHDUBnYAVaYlv6D*5+iN#%RZLD# zz7rNg#R+iQi%CfsN@)pt2t%>vKwYy?9^AZ`oJG)Ib@p5zN>S1++w6p(l%|pHkf2yY zvAYM5D#dgld#=HrzD-HrVJA(L(oE72n<&&%LrLFaCry;n9MTY*DAovU z_z`LNHA&JIrMMRQve-#8rL+tV?4+4uoeFjB4bu1!CaEcAWGLxncG6lYolZKy)`~S6 zJ4hj%Za{zl10p z3ED--IACi8QNhwq1eD?nLt?K@0K_p9ON`?xsMt(LK?P|B@omkolUn#zZ zb;4JyTOV6ch6q&52Y|?ICNd{L26;p#8Y-ThSlWqzQhW#NAb`Pa!#d?xEJ6cTqZSFA!5gZb_eW~L5QkVaI7L&dYxg2qk+lwu9*r6{13Zp6Bk2v`fCu9Xmp z3m}0MA~6~&o}F0Q30En;g>@@(6{{2L706X8)?tZ(JWEtGP(fOe%L1pr;>lNFoe{E9 z?2oikBrBzhK;Ld9WNR$cwcQWN)^W{lQWVo>PyS|DVT7R+HxeE)l+qnoCk(}!2X$>7 z<=ucSU^59l4!oY7ab*4pRVl6`B%~_VEm*HWs!}l{BqIY5$9yq8dsq*&Kuosudt5yc_I5bAwMLjj3D5Z9k)XCSsE zY^C@ctP{3keGBW9T_Hi8XgEN_W@>;mAdScvq2k$zCGM=KprpTLCv?R+6EHiaR}9C{ zFp$4AK*iK(w^)&-SXTky*@-1?SZ^uCKp# zH$wg@kb~C`Y_F6~B`j>OSbd??h7s0dyJ=%4TseNUS3nDk2d?Q94kob2xeD$?v@N$h z9@u&{9o&68OVIN+dMZsW?fNfXR}ppX(M~qG77?E5fVRKMl}lX*wG-g7-EVd?icht^F|!q8|u=}+tbRP-l!2sf$!GtUqeNo!OpwE+Br_`~W2xvcKRssO(V1 z?7m0qzzct7xWP6*Tf9tXPN3`pCy~nY^9ayJjVTj{Sx^t&lT?Gatpp@o&J%MWXF2c` z172-DSZ4!z5~v4XP^gd>XCpcXQ73snQHWmsT=2dCUUvWM^hHN9IJ82TV{*%HcEa8L zQkYjbQtQgZu->8A=Zfc!mpm53GKi-r=w?hy?XLJv2XTlFKpf~)M=qEPb(+NesB)z&Q%Cr zxe6TgeWrs4Fu0ps0V8rM2z^T+XsK<6Idr~-zR$0!Iptz+!_7hJ8|7j@%P#=iYO6FO zxvf@w@7`gKP_N@YIu4MVWEjfbTjUT3MRh@i=Wan(0*(Uh9=P!o@x6N&YR;(n(APIt z;AFg|eGkSNi;hQ7qfbV7^Iifs?cvVR2%HB1Mi_b})YVt##4bJvyArBStPuayH4Ph# zL=A+=lYvu0U*r|_T7?)L9S&}*E3cgspP?O{D)89zUD2bURcD=hv0;q{i~1K|eB;xl zGl1Uv?lgEYK_4`y4_4>DFGlzPRXtKDhKxYTgZTkA-%?bo7m6MRExA;U4~He>%y`yz zFToK=z%f<%ZTFLQ>dE)TvC&hJi{Zdq01O9@z2RIS;atXWeDHNr%W#0e!iiPq|2u>O zRQ1T(7U7`UQ^P@!g@e?S{|@1ld&7Zcf#Kk>Hyqyum>pQN+AjutSJg5cc(iBX3{mHA zgm8eW9w}-O4yrvh90XZ7NIkg`!a3~?2jAjBIC$I?4!r)+YA#|pdVCSqG8~v)7S2$0 z{w4?qsOph*Ey6*yr-p+d3kRx|CpU>>4gJI6wGx>ve7S>*2adh*M3H#TVLY%Ss%r}2 zr8~e)%Lh&>7SRZG{$^Z0SK0DGQMP=b`qYT9Gw<>N>dDRG$c|Hyi^~UIvy$ZlK(7zQ z_)rAAUE@`lbv;sD^&u`5>>8H}(rMR7cxu-OdY1}NuYM?w?O%>u>>A(n;8KBOZ!VHB z7yIiV7v~x=7ey^|F%GV=G@wPJ)K!1M#exChVnI)5kFyM8n~I!!^A+14o+ZNUTm@^hpEvjaK+ee(zC zfASqviCegZ{daW>zknIy7Vdx<>K5*S8RixmzzlZ_55bIZ3yok#x`oGJM!5xDeW+`+ zTQGnb;}(3u#JUAPFoWEJKbY}up*0wPw-5*>z%8@`v)C;d!7O(R9l*?T3!UmMp{^xv zAp{Qd+(Iarm2M#nOukzP2Q$YlbO-aATZjO&$Sp*IdC4tAfys3XeZaJJ3(;V7ZlOPz z8E#=9n5AwZ2Fy&i5DUia7KVa()h!GMGuthU1T)tyjIIy0xaPTqv2ZxwEsO*6j9Zuh zrmtIw12f$%B!B_!BrsFmLNb`w-GT^ago#t%@~zlP#NSgo4zKGeFx zDWLT^1x5QKP;A`?MXSS57*0Y_u@{O4=)+lt9lw9t<7v9n0SWcZEn>*n6`=D49O)+6 z?j<^WE3REC2?cx}dGxC7Ab&Z}Jixwxap1htFN^$~n3;j6=rmGhEEiHhQMb6 zd?vw1g3m1YED5Vzb5gvdw}7B-vMD>qloXLLB|9QHW6Itj6XJvPn!m5X(rk6h14ul8Z>C;>ykP- z2mTLPYKm!c&a~8w=14aDe{Dc=o(L`2G&wQr#Y_wK*^CgLotiQkI%QE{V85r(Kg$F$ zJ#R|#f!X=LnF>qO^dzPJe@um?*Bw{yBPaEx~?F&1!u)r|xP-qMW+i)YopfyI;l4Y2r}Fa<1p zfvS557EicR;K3KeIuR^xY`$RIgIxg@@0_G!-A1wV~iZ5 z!bq_b6hv|ie6SOY9L2F?U7H+OfUpBBG|zbz)&KE0fZz$K**WmI)vRtLb#c~=nX{Hm z%UQW-mJarxC!O#FP8z1qTJYMEmD3X9v#=AMk9G{F9BacrrW@Grf&PBn!9qHsj%f)? z=FEI`maYTG*FGolwFL`iESxzlYu2lCmgdb`qSNtw#+>ZD8F~3jn>B+0KIwyCGSkz? zMyPX6i)X^Lg>;tC;wnIkv+i7~PCp~|G_07b7M&3z4P|pHKRP4&_=R;^WOTvpJbV!p z=$klu#u6mqU(}+?z30V0>kY2O>g;3=ruMHx6QsMI~d?r=?wIOXv<$nP>sO@S1 diff --git a/bin/kernel.bin b/bin/kernel.bin index 35590a2c8c885b5fd54c5948c88337984bf941d8..74f98bc28c525c08fe82fad38a2521ed5770cf0c 100755 GIT binary patch delta 5234 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 delta 9281 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 delta 9281 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 Cvv&*t delta 716 zcmXw%zi-n(6vyvf>e!AILE1QkDn$wt&wF>i^MQNd?&h;k4?o=%nPcDc zLWt4l<$9{NS=zr{CjLw{{zp@MUsfr{T`F263<+u&!L54cE@hjs>7NnqGLrQdXDE97F8+rT7tG{XWg8K~!BLho*^$voh_g63BQ>QoC$&hH?cwXwjcfcS&t=@h zD7ZO_iGztzWby?jvB{MzS&Yh)pRgp_2muXd%T3D6OUq|qlowO2R;rJvS*gF+DRGsCsfEt2U$1=C!N~7~Me*WR&Fxk_h`57-iVN1`2{D z1%M=TfU_r19Yk0XBrFP&WX;Y^%*+EBxthHn=rU`LZ6YE-aUK4`A^{05O_6s(_<=FX<7M>Ej{kL z;!IJYJuYO3!c=%%1(|0m3E!W9DWAl8t5m2@avDkOSK&ZiAQr6#ECB&w+hLb@>!^u) zr%Zgrox+=X;<+YUV8>c33x~^GGbCs2QOjlS)lX@Yct*AfZt~WI8g%WJXqWw(N?o%_ z&{eiio*1&IvQ>lxZY1>^TcZU#VLa9ue5yxJ=Mx?}4snH$ilKawZ7J-L_a- z0P2Q1qdHwP?{=S27m`}oJPjD%ABzaVi6{e8-KI;lOM!l zuR~8J7NL8(gCGuin7ya%Abgp-`+;V7_dFA1ig^Bm1$zFVuSNo8@j?pF delta 812 zcmZuvODIHP6z<*`QAT&l<4%poG#(qdelsK%QW_;BHHth!DI$+DMOj>>D4M2znFWQU zDI1S7B}r_sV4*Cg*v!(xV<8h#%o+a~l->F6_nq&2_xvaLY6!j>d|3(QPFCvJwPz)L zSDYy-v?oOjahL&*YasI+#q|9NnDR-iuS$jbRJW1D0Tm9_MPkuv&>9pFc3cjLw~m>) zZ`#a9J?XruH<@d)6?Sd4vT(R6us~YwKDAsGT>q4IiD&1T;ihn1s6p3miSBlUsMIyP z1YP9^2jR>7-4C?DyZ4zOQ^fNhF4FUd{WTIOOP7*ZV%V?HVDw5} ze*D`Ul+7jDNU_aUQd&{wjGbHb$k6s!2!RDwC1~EfAxjpRBufl`y4678qmVzj>v{Ep w5vI0}NQJN00v4ONB3*OC+4U^37;7NJG6jpny^&}v_FpV-gkten-`j=!1(Y29eE+3Pxg^yI6lSBXJjS9%O=Z#W&aTyg}x+^8Y|^ z#WpYC+|D%FUz7_;L#gN=bQSy-dinYah9;J##$X44tp#h9mqXTCtEk1eIbZ%0Ba(5o ziZTe-iErMjqJ`j!ZT_Wx6v36)d`DXlm8;1(`L7xOWEmEr&1$;)82L%mlxRl*6ISXlWyAlLikX8^Lu*^WJ83U7b3Xgo6o!bLsop= z4QM9FNq3m|HY<1^M>dz)mj|I!Y_nFtNn|cx$Uv^-C)^D2%?tC+GXVgJe3#Y$ delta 539 zcmezHi1EWC#tE{l=EeplMjMrUSs|>+3Pxg^yI6lSBXJjS9%O=Z#W&aTyg}x+^8Y|^ z#WpYC+|D%FUz7_;L#gN=bQSy-dinYah9;J##$X44tp#h9mqXTCtEk1eIbZ%0Ba(5o ziZTe-iErMjqJ`j!ZT_Wx6v36)d`DXlm8;1(`L7xOWEmEr&1$;)82L%mlxRl*6ISXlWyAlLikX8^Lu*^WJ83U7b3Xgo6o!bLsop= z4QM9FNq3m|HY<1^M>dz)mj|I!Y_nFtNn|cx$Uv^-C)^D2%?tC+GXVg)ewHKv diff --git a/lib/libpsystem.a b/lib/libpsystem.a index 4b7fde257e1b857358da33930a360046ff58dd06..f357d2d38c6dc6546ebe9a5d6d2ff116e43029ec 100644 GIT binary patch delta 3015 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 RGysSh8CaQsw8-ReCV585&E-tW zOpJb$XS4J$8co(<^%mdkJ07ifFwXj(3GTcNZoE6_6jxId5(Ceq3XE0jjI5tCgDT#!IJ?AX+q z$itH9!V@{u7n5aA%c3T367<2u=!5Y|CGo)+6C*J`7#~bbj1NrXIk)#KjO;e|eCPho z@B5weec!pa_oCa0NH#mw^UNvjCJ0r0k&TK6h7g~Ayn4UyTVHjT5Mp8@a#rnn5ZRdh zPPwDuN%#aB@DB(>BkD>A9433rSEUkD1p%T;Auoidl`yp61+r1Ru7ndYj=6wH6z+9s z$Danq@m-}AHwx7JVEiZ$)v~>JH zb3+eqX%X;l{-A|bxP<@IY`}YX+cgbA{M>yM|8u-dyf)cHM4wWc8QV4?l7!l$aD4_6(SOJ3z+v*(ZJrog-kj#k($ug80&83H5ATEC7YH#L)O46-Fo5(&{MrQ;5>&RK=x&j#c+=5&i^jcG++dl6PIkkIlPlfS`|9A-u#zv3{GlJO@oxY@x7tG%7H$h|cdY7;OEO^mB_PYj*WY z>2(1;GP{?!Cv7el+``-?t5md>O7d^cX?FNl47O}rHcatk<9?uPOF-gLx$$zw*rDZco7nUvv^?@jxG!P?-hzSO!2}=bLJjyaBbX4t z2V~3e1z8h+3Y8cVP3)86_*znMQQQmlxF!bBE3HEmKT1KYm34d~dY}>iO3^N0z!YHA z0)4<_fqa;Q@=hd@+i5wgZ!tR+<@iAkgZAdDY>Lo^qPh&1aYY^Q6jMQcI(^X^n!GYG zY-JhLAZQsliDTLzl;96FfZsHqtCV!|@c7io7=supx(N$dt+yFIYR*p|gS(ncjzpEGF@Q~`Yv8Y*u24$V=CEJhv)cFUft*;q@SbkRL@t5{Rv|gDTnSfz3H5+$8Vkdcz%9P8mh|^&xqg)HhBPUdn4kKC*-Dyu>}8(I;&a4cb>y~J3+@d3=JrGhuu1b zT{~n+5$_aK>t_k-b!4x+*AMbPhTTG#B5y@svLkuAdm!0>Op* U^D~SH&KqG&c~l`S;+j$M54;M1& diff --git a/src/contextswitcher.pas b/src/contextswitcher.pas index e69de29b..b8061f83 100644 --- a/src/contextswitcher.pas +++ b/src/contextswitcher.pas @@ -0,0 +1,16 @@ +{ ************************************************ + * Asuro + * Unit: ContextSwitcher + * Description: Switches context between processes + * when preempted by the scheduler. + ************************************************ + * Author: K Morris + * Contributors: + ************************************************ } +unit contextswitcher; + +interface + +implementation; + +end. \ No newline at end of file diff --git a/src/gdt.pas b/src/gdt.pas index cb1b8d26..452386b4 100644 --- a/src/gdt.pas +++ b/src/gdt.pas @@ -35,6 +35,7 @@ var gdt_pointer : TGDT_Pointer; procedure init(); +procedure set_gate(Gate_Number : uint32; Base : uint32; Limit : uint32; Access : uint8; Granularity : uint8); implementation @@ -71,11 +72,11 @@ begin console.writestringln('GDT: INIT START.'); gdt_pointer.limit := (sizeof(TGDT_Entry) * 5) - 1; gdt_pointer.base := uint32(@gdt_entries); - set_gate($00, $00, $00, $00, $00); - set_gate($01, $00, $FFFFFFFF, $9A, $CF); - set_gate($02, $00, $FFFFFFFF, $92, $CF); - set_gate($03, $00, $FFFFFFFF, $FA, $CF); - set_gate($04, $00, $FFFFFFFF, $F2, $CF); + set_gate($00, $00, $00, $00, $00); //OFFSET: 0 + set_gate($01, $00, $FFFFFFFF, $9A, $CF); //OFFSET: 8 + set_gate($02, $00, $FFFFFFFF, $92, $CF); //OFFSET: 16 + set_gate($03, $00, $FFFFFFFF, $FA, $CF); //OFFSET: 24 + set_gate($04, $00, $FFFFFFFF, $F2, $CF); //OFFSET: 32 console.writestringln('GDT: FLUSH.'); flush_gdt(uint32(@gdt_pointer)); console.writestringln('GDT: INIT END.'); diff --git a/src/kernel.pas b/src/kernel.pas index c05b8db0..5692ac4b 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -25,6 +25,7 @@ uses vmemorymanager, pmemorymanager, lmemorymanager, + tss, scheduler, PCI; @@ -64,9 +65,11 @@ begin pmemorymanager.init(); vmemorymanager.init(); lmemorymanager.init(); - + tss.init(); scheduler.init(); + while true do begin end; + STI; isr32.hook(uint32(@bios_data_area.tick_update)); diff --git a/src/scheduler.pas b/src/scheduler.pas index 867f13dd..06dbf971 100644 --- a/src/scheduler.pas +++ b/src/scheduler.pas @@ -32,6 +32,9 @@ type end; PScheduler_Entry = ^TScheduler_Entry; +var + Active : Boolean; + procedure init; procedure add_task(priority : uint8); @@ -70,9 +73,11 @@ end; procedure delta(data : void); begin - Tick:= Tick + 1; - If Tick = 0 then context_switch(); - If (Current_Task^.Delta + (Current_Task^.Priority * Quantum)) <= Tick then context_switch(); + If Active then begin + Tick:= Tick + 1; + If Tick = 0 then context_switch(); + If (Current_Task^.Delta + (Current_Task^.Priority * Quantum)) <= Tick then context_switch(); + end; end; procedure init; @@ -85,6 +90,7 @@ begin Root_Task^.Next:= void(Root_Task); Current_Task:= Root_Task; Tick:= 0; + Active:= False; isr32.hook(uint32(@delta)); console.writestringln('SCHEDULER: INIT END.'); end; diff --git a/src/vmemorymanager.pas b/src/vmemorymanager.pas index c44f30ae..bd82a9d1 100644 --- a/src/vmemorymanager.pas +++ b/src/vmemorymanager.pas @@ -36,17 +36,42 @@ type PPageDirectory = ^TPageDirectory; var + KERNEL_PAGE_DIRECTORY : PPageDirectory; PageDirectory : PPageDirectory; procedure init; function new_page(page_number : uint16) : boolean; function map_page(page_number : uint16; block : uint16) : boolean; +function map_page_ex(page_number : uint16; block : uint16; PD : PPageDirectory) : boolean; function new_page_at_address(address : uint32) : boolean; procedure free_page(page_number : uint16); procedure free_page_at_address(address : uint32); +function new_page_directory : uint32; +function new_kernel_mapped_page_directory : uint32; implementation +uses + lmemorymanager; + +function new_page_directory : uint32; +begin + new_page_directory:= uint32(kalloc(sizeof(TPageDirectory))); +end; + +function new_kernel_mapped_page_directory : uint32; +var + PD : PPageDirectory; + i : uint32; + +begin + 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); +end; + function load_current_page_directory : PPageDirectory; var Directory : uint32; @@ -67,30 +92,26 @@ var begin console.writestringln('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.'); end; -function map_page(page_number : uint16; block : uint16) : boolean; +function map_page_ex(page_number : uint16; block : uint16; PD : PPageDirectory) : boolean; var addr : ubit20; page : uint16; - rldpd : uint32; begin - map_page:= false; - PageDirectory^[page_number].Present:= true; + map_page_ex:= false; + PD^[page_number].Present:= true; addr:= block; - PageDirectory^[page_number].Address:= addr SHL 10; - PageDirectory^[page_number].PageSize:= true; - PageDirectory^[page_number].Writable:= true; - rldpd:= uint32(PageDirectory) - KERNEL_VIRTUAL_BASE; - asm - mov eax, rldpd - mov CR3, eax - end; + PD^[page_number].Address:= addr SHL 10; + PD^[page_number].PageSize:= true; + PD^[page_number].Writable:= true; + console.writestringln('VMM: New Page Added:'); console.writestring('VMM: - P:'); @@ -107,7 +128,28 @@ begin console.writestring(' - '); console.writehex(((block+1) SHL 22)); console.writestringln(']'); - map_page:= true; + map_page_ex:= true; +end; + +function map_page(page_number : uint16; block : uint16) : boolean; +var + addr : ubit20; + page : uint16; + rldpd : uint32; + +begin + map_page:= false; + PageDirectory^[page_number].Present:= true; + addr:= block; + PageDirectory^[page_number].Address:= addr SHL 10; + PageDirectory^[page_number].PageSize:= true; + PageDirectory^[page_number].Writable:= true; + map_page:= map_page_ex(page_number, block, PageDirectory); + rldpd:= uint32(PageDirectory) - KERNEL_VIRTUAL_BASE; + asm + mov eax, rldpd + mov CR3, eax + end; end; function new_page(page_number : uint16) : boolean;