From a31bb0f068ad3d748d7c233d4050dd0c338daac0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Fri, 26 Jul 2019 16:23:07 +0200 Subject: [PATCH] Kernel 0.93+ --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/CP.S.txt | 3 +- BIN/CUT.S.txt | 3 +- BIN/DNSINFO.S.txt | 3 +- BIN/KILL.S.txt | 1 + INC/A2osX.I.txt | 16 +-- SBIN/NETWORKD.S.txt | 2 +- SYS/KERNEL.S.CTRL.txt | 2 +- SYS/KERNEL.S.DEF.txt | 2 +- SYS/KERNEL.S.DIRENT.txt | 4 +- SYS/KERNEL.S.FIO.txt | 2 +- SYS/KERNEL.S.GP.txt | 274 ++++++++++++++++++++++++++++++++++++ SYS/KERNEL.S.INIT.txt | 4 +- SYS/KERNEL.S.IO.txt | 46 +++--- SYS/KERNEL.S.IRQ.txt | 2 - SYS/KERNEL.S.JMP.txt | 4 +- SYS/KERNEL.S.MATH.txt | 292 ++------------------------------------- SYS/KERNEL.S.MEM.txt | 138 ------------------ SYS/KERNEL.S.OSDX.txt | 2 +- SYS/KERNEL.S.PS.txt | 2 +- SYS/KERNEL.S.SHARED.txt | 145 +++++++++++++++++++ SYS/KERNEL.S.STDIO.txt | 6 +- SYS/KERNEL.S.TIME.txt | 66 ++++----- SYS/KERNEL.S.txt | 8 +- 24 files changed, 511 insertions(+), 516 deletions(-) create mode 100644 SYS/KERNEL.S.SHARED.txt diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 3ab17d27ce1c0df983ee5cdf677b4e07bd25e94b..d108c7067ed6c401f4459b8b1914e252cb089a3c 100644 GIT binary patch delta 66427 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

+?ZJ*P+zMW|mge8tDym3YXH*J(+oS_OC zjpyt!z_n}-f7h0r5gd!UWO{?k*0=;{v-!pMI(-W;BNGV1#5fmjn}lcIhkxG#Te-Wx=E@r}zSk)~uo2zul*g7n@gr9u5D^LpO zLh=WV?JAKJ-M4gL;WWyQA6&-wqru514}7OG)Gr@csxs8C7+5M&EPGedp_E&(rFl2# zGt?hB%g}^ z2iNhpuW$trvDba2%fnOu;0i`M)#mQPGDs%Jw^1#CII_(xP_SZcH=(_MGjIBX%NN~( zy3&#m!;A$_>qitx{A+QY3T>l)dVH7A=lhs<+lg&$+X0(g35lj)xU}#Dn0e0}SQ$zF zne8lAicRu6iQ@ozlYTa;gGbIsGW>asa~c-2j3{^RaRrmlK?k93K5P#>Kz8uydt7WBkA}cha-Ob-99>q#`@xShI4NZsNq1fjY*yq0ou*~!MS9@F; zNf)qvd@6SZXALmIK(9KxYThgs*o^~Oz9(_|#HcO?gy1E32WLEN{sH4MF6CX^6$)R5 z9*F`#&w4qkJFZacL%f(C;L%v_5E`FW<{#kb!~2Eb~q!F zSILSf+iOt#HLGs8u>25jt6zH%dlXWBt z@jt(Nm6)tl=&mFymHAKnZv|X<<(naxczjTTbW&;e$~uCJA*EJ~i*ephO=zLSmnR;e zr#KHI;ICjQ(00j>NIZlKT&$4$_^(Jj!k1p<%8ov&2;^fi0x3Te@;KHd@C4nRiUL+Q zG&a}L#man7#wnL9q>p*}pE|BktTNPHF$yZHN^1FxEG4qbk6z_+1fM;wnw;^#b3FTM zoY&`%dn>ciL-i$u{{N%p=*KSaMc#I`E7yRci{>b{tdy}soF;@rz09u%*Z`DVi6=yW zV41J+XRdZ-L|;Fy`5US^u4<^e5UUZ}{^Sh-A0B3Vn-0-CvHMqTh;%5vq%|{E&;Fj; zU+?$hE#}JoL4U!tDBUWg1rxjJBXyQOmQB+?>8~kg%JXS|iP)4T%Ylv>p)QjKv3{>K z*VnO|SlUv*!KCQl%64)}kWvt7Jt(DMDimb2f_dLFe)hGlob(?D!Y??=_@QfEc{6_k z5XaB*Wj+Pt>(F}*IJ3}yiHSNUCn{heDMwu|a%+IEV8J8`zVSzGaDimH(qzRq2-H|& zgJ6ZBzGCUnRt$=oh7ekRb~bhtwvw{4)iqR9%R^DnQ%=JiT}TWvGLPXi{ut*WKzo^+(` zh_i6eOR>xhUbP=gK_>ohgg8Es5<)8dv+xszo@ro5NOKP+E}IY%OdM28A|@S7TvwZ7 z;xuTKl>DwkjYNp&*OJ@h43=6TMRm|$D3gSsS)?Smv|^I0U>SmeGIfZQu?AJM5hXnH zdRHU_@4L7#S&IM1=$&tv{07e~D2bHx7W)QIgi5G)qJ+K?;(bh-qi#?Lwb2Q(TxL0a zf+u5a1>Plod1s`O=7OUvvm*1*UPwKd;uynADx~Z&-2I=V@F*yd1Y-%Ukz_0--GuUp z`Nz|0D7q;;!30w|L40h-@1IB;OK_FqojCj%lfq@Daq((xe=9b(W8in$GKZ97_2n#xOVb4?zb+!QN4nt!xtjP`T#u(;3BOlWW6 zbL2*b#Yi|-?S=VAi$)=d^lh$yenVcYblF@u@;dp$x49@7F_g-`xXsnBe^wHE??*7= zAQx}F-8EVNaY3wfaMsZxm+SEDx4YhO^V0)^w)Q>X`rc=8AO7KGSDKX%ehrN3d51^7 z=6bp|si}2yUyi;h#o+|gMdMr)X>6`Jd}fJ$p*x(tTaG=ypt`IFw5Ypz6%Jcxcg?1b z)7m#3HYVsVTlY-X9}lG9+ZEz=O+%JS?5vg!2wB-_yl#pf)*Mts+KK`v@0z0Lk9Nrd zx=%g2xHKs;t9uI?k=4m9iekHmN>P|DtTxsX4}W8dUXTOuDPDE6ru%TSQjfcZ!Wur^ zK|jx#rUym@KmrMLJ$d%mHZ-!7pu#gfgK+3>qGlEJ58{Ja?^NB&S5MP(wUETHnvF8} zWz+PLjajmQQ1*ree!}7!!`Xx6lsFM$7#k$Up&U^Z8%BRm7)-9n_!Y$0Fa&FmpN|3b zS2&Mf|6$PM&>%?*nqSV0BEF(p55ZUVtZF^%AEI8smm8Qz7S~q6S-*rIs@600a>&d? zkcF4$)o4uEOpQB>fEw+L>t_R-NVU((Q0mPJ*~aF1_kyA zNO;#KW*>oeoAFzwe#_Nwh5Yr8#4jl#6*@33=xO@?+U>lENgeOpU{R51H*xrt)I@?5488V3{ z)#}9)C(D{Jj2TmCEbIFFtM2aT>?V-~(KQgpMf%I~om;xrtXYRBQC3pLSJ&!8EYtYK zwR%V|fgs*LsTDo^-da5~tyYb@f`#g6eSH4e9nd#I7AJCKpCJce)N{Q~4<*k8V!m0t zyiWI88pN0aYrD2$S|NH1CGZ@ygYRDmF`a;wv7TT-#Ll4mKf z)t5jvnHNTjB(W{@1Ct(8W~e1yY5t|ox_$To8dK&>K2 zbLKu3$iu*xKXxaKBi&HxtV8qE^`!lvDbPD<7L@@KgVVbPj>EA5P?rxOf?+#9wtfZ+Hu z`OJE~vd(@Mx`(9Vhh#0T@-aJCx3Ao^wRO{W_>I}lMpZpZ823-I8)9|B8R%w(-Mq0; z5AZkZb%$>Ujs9E)H*cCgqeo01pIfhckuMbzcWeeh@Rbfs+ZCHZ8P%8id(!LB+}Y1p zT8ax4a-*5;Lcq6QBp1iF8xP)#C3-OmP*b&-4ZDO#XX>SvOZlH?>iJV4K{Lv7k`_3CmDK(aM}p${#MDCI=4ct-%bm0Iti}5V_Op;W@?1%a1o1+UwF*+R*{&iC zua?tlzeaMRDc8nG|8+#myQ}+2f8KuHGYeGzdU`<@)u;pf&@52>8)Si?`jDREJP%QL z+*F=}qD)YI@auF>g?dF%jOzDy0;>N&;!&%Rq@ zx>7kTp*=Ki4XpnH>T! zZDiXMcu0McCtsZbW~wddrs|J4Cr|R_5w~I>{!14 zW9tXpT5>PFDCZz?FF|@G=L}i78eiF&KMwjs}hcU ziz)ZL#@&s&r@;MsjHIfD?l)w^c+H`2(n&6fzJ+dmZ_8V&MO{m+n>OJtcqevU;iIEy zjGNi^9x6NEmyne8@&h$1BgY``%ZGCI^^X#&04vAGveF2uq2N`zeesRt$la`5>&ewTm1aE!28O z5>wl+yWj*uE!0@j`%$xoqMD}XoKv^Qhg+0ZdkjWr9oH~yBNL=K1i$7p>QFn zs)&j^T>4S?A-u+4#l0A8aHU{&gG`~@nG?b+K~k1@2(rgxlC7+=IZ~KT&4mOg@(;T6 zVBT8{R-n4Q6UNW&lz?*Rj$}>zN0pVK zQW>1M3N1rT_`$GIMf{6-`p77WyU13C?1nB#yF22X2J@8AV>Oz=4L~p-Fgi($e5DpK zv-O*aC!ww(SOgG-CN8kDodOwjSB6X4IXotXi;Sre%mn#zfY6wP9ly3&&&Vi)m0TpA z9Jy0qOSqz~ube;Etb0#^#{}|bsGv%-6X>i%zswH536kA2$IwpuEdUziU%@xvvV;iC zT;nLplx*~bIJ1veGd)3$Yr;f6r$rxMFiGhG^vNWbcQVFFzz2M(oGwFOH7}d5dwn%1lCG!SlmNCBUWKK#eDQpJsHKkg%-2gS)A?=m zGlRb}UoW)O^Izxd<(8SeYyqmw;wRBh12-3-a5ledfgZNZ;V&=H3oMQNXL@Slp@sSs z%UpiaLO_|vcP`ZP+Tab*FKgi%&S((@u{#&}y;sZ2*f(FIJiy8wT7Xo8on4*nk?z)Y zr?+n3+`W10s#WdnZ4s8TP^leq7jbQoo?}_ehb_`GQsE=LpKtrRY7AVrPavkUlIY0;;5OD?v2ti@ip@=99+&bV05$miIfE-;G z@TEd~1lD;2UJ~m(nguq>qb$KkX#+&6wk%>IHKar~b&Caoh$4qJTp%dfr5#QWB;jbM zE1Cq5+v5F&k^6D1h|d_3fHZU-u=btHa?YY1E{IIo&X)E~kaCcizPp;TvUfz_+u;6P zBCUW`*nYO6Sy8o*;TJ*bx8iP|wL~w1RjG!4&gG{r(YIQ9_`6H=ykR?~-XZ~ksw#4N z5E_nz(rHN8&PSZ2`-Yu&!n^u<=KK8#rA^F#KHq>ADe!wBJSr~ayHC=~n=V3CI7*Ep zcg|{N+ikg$g)hbp5?{Bfs$HPHyH;;ShU}WIg>c2EmA_Px+=Pn6vt?X{tlE08;&OW3 zFIx*Pg+Am$i<{7d!u4%`0K8#)_~NB{sgDoDW-ngl@8kQH>UqgmQny#}`QjAB7t??SO1c@&9Qzs2x=fHXhM0 zu`BW*+K=hwE0^h`Q*NS7vz-;(%=a(T^P_*lD^FsUNbmrou-dnv8*p{5TcuBtWCob) zHn}U*W7_Sp{*bNbkPPgRuYj2C4uIC~#BnX(gDaA0e?evG;*?CGEiCjmd_HvA$$Bt+ zn2wk5n!1aSjtLQ?NQemjU7Xt{``v<&i^Pv~5+z#!RJ9|3tE__mK$rG^s$+Ps>Te`V zy`OeFk#GA0a<}9?$lp3y&&_!#vA>bjU)sZph?E1vM|k#fJ#+Y@7&QsDRP-324qS9N zde^kCLUNMF(R=O_eD!iYXUUT%0)DC=u=X^d(9s9;_l&HWU%a81d7hQ~1#W(%6lq<# znYo@Lf+tRDaceOPJ};(YnB#?5v-K!MqApUoQoJ?X04c8#xjHc0i@>PxUp#LGNcl^A z`U*Yldl^NpSEw<}i(_}@ZHM;jRer__y(Hx|IX9WF^IKNv8PPXR7=r)J#Df$YxAvBT zhU6G;(|>VJipz?b{T)d$eD5akDOD9XBiNp{_kc(6ec6Q!-JG)(-_YGO4S~49572_w zw1SKL@HcBmwyfQ{N!IoJJ6>3~sY5jP{U=`3jF`PmqR{hYf8kcy zwf!rF^Vf+ug94b*M5Mjn#9Pj6?IguS9z(W)*g)!(wjz(Ee-|&D-MVSjT9o`ZUQ&ew zN$c{Mj?{dy8KB`)mP++Jb8BZi3VuLAgPfz8Ti2nA=f`-Js;z6bZr+l|{72(O&Fveu zw69;;z6n$LQ@pfs)s`+%=0oa&+*P{A|4aNGPK|0{|Ml?K|4DX{I=`iNP=>X4wQjXs z#NGc({*pBOh#^M!=dr$1bc=O#l2o__20_9HtKNby`}WW7a{9Xy?n<>4nIDxs!fU`JdN;@6q^6>tM4<<45Vofh@9m;UuSQ=yb)Q z!Nnj$C)IqT$XqtNp$j(7$pz)BAtyWB@oIBeFrA;XUJnF4@iH`pl3ZH1GJO2@^?Gom zKmK+O3j{C}I6*Yd8xOZHe1o71D$zB}8I0E<2pNZuuGj6>XeLT2zk!N)AsY4_T1Z0&QwrteX^8-Oz*I1Nd zX=Tq?6{nbgh5nMIcaLrz3@^Q`JQnHOtN)nMcc*?!cAf@FSveO5AuRVdAKf!jHs_B# zua^$8Lry;YzvuO&x?XFBwJ+1XW}@CTBxc3AbQV5TibSXj+!NC^_OvHfK61s;A|FEG z7q}<8E_SgUg%c=1ej|)enLK@=`>*ado7wqA<5E$WpL4XRLi-uaKw3%fB6k5;DCVZa zBn=hK6n?=xI7)Q0Bt(1KRX*7CpFtNyWXxrPx*}1~ud!Pp!AaLRCU0kig$~<(?!0!` zhBmi%H*RX91S5DklzclFcfFdZp1 z#N7iUb18h}!-Hic7%J>+>e}3~1qP_@((c-A8z$kc4VgArdI~kc<$|D`NJ9$+UL(oI zId8aqm1#0wG+~4xq}iaG>o?+A?M|7EArl^y*T3lw4%P` zOjte1JL+)7dG5bieE#tX8>**L?MD54_g96WSf1WP?!0I_n4S=(Th6vUONO?lghh-Y z%)!}mfW90n@FmYA@{kqzN};LBl{m#*6Uilur6Xa77+zzfX;W7X^1`MeRfo_4G}N=S z0vec1zTzvi?yDm+;(+$NKF~85aVNPWte-toZt%x7mE5701GzLHWDxG zqv)XnmMJ_0$HY6VT~yyv6={Y&jMCl($I^>!-GDrYF z$qrZc;0bsrm}upVJ6ySYUUW~yXFVsq=$?b03tx1P@Ey6i@R2tzd*kL)#J@@6U&K1U z=*~oq&tF7*;1QnoFZUk&-0&~=vQ)dej4B544R5*2EjE7OE%%Ugb?w*(%UdL9XZ)*_ zus=0LKIf(~uBV2xqZ;&uX=$VY!zQNl;~*ucQ|KnK>;>*;?K;M4j>wCAHiTkSB$F%$)Th=SPLi}95}EbtQiajSZJN-h)d1ccBbQkNeo8Q zaj%fpDE8itOGFsTaD9*pSHtZg>~;tNz)=w_K8BJD;IOQMu^0Q3;%9{JD$;_NxFe8j zxm?*aa37%64)WJ8q8GRegmw(KfZ*9nM`ITuMWFw0D{hn9d zsoXOz>)$wdsr+fGA-$7X!EnaE(ZYH3DL|GsB4MJ-P@tF7L_?C66UlTKQt9InF-5CB zGVvMHJ}U8<;%5NFIYt&r4VykT;R%~huN2QwIeBpQ)yE}P01S{3mNEe|ObL61)zmpj zYD6VO=VZK#MeQ;B6s19)nox)OsYqY^o>&ix zj2X0_gi2rdG}~uNCA58(`fZTEHds*^eH2hALK@X}K(<=@Tnronm~9>^q&L&1i*G9W zj$n&yug^!nvCW40vM*5O3lqx$ZjmgHnNsCs*_Hr!%cXE;A=70m{&jIy0I9h)gfZ8yFV)z$&MNNyYBmpa4Q@%1C5VmLLM1REUHMm5A~}e&x1q0VlYDieWPnjG`2- z8d@p);6_?YA$;05%cEx7f{D|&$~~aW#7sL4^%SRYI=hnjxAohbbCfSLLN)bm^@t-7t<^J<%siyc?D`yxrK`U`f`s1s^XLQ|oBxI~Qxz%B(a`(;!< z6Y8_e)qcQfynX5&57fZd4Y{Ej5w;#~SrQ>>fjnN#S-V%`4Za_D5>|jj4 zk#IYx8uY5)KdRrGbWH6T6X?$17@n`vU)S~=?k>KWU#lXO83E@2LHZ=fPd~LS_ zbipCUi_*h+xp&Y6s@=qFcj8srUr-mEX{54(75$Czj`VPWr!UqXbaroHbychYi?cY;#hAXnM!rk2ICY8P{FRr+Vi z7t^EIS z`S=;$FsuQT6w8KeTiMh387NskLlK*L*0iuDva+UQ)0XWjGoO2=C|g@IO@&Z-W{HBD zX;3bS9DK;U+@Ok@@eNZIGgUBKl+{sW6}Nnl77XA*5IR~1E`+#n9&F;*)q4XJz@o|^ z`Pp$jL~5Iuw^=3ksx6BkCpqSLD9dl*@78;>k?*~Aw{4cSx4~<*H`Mmf%gVkvUVM1H z$vcEUzc1)L?Ahl1!qR(&H`UVA+vBw!wwT@->HZ@(v&t1WGvexQ$;-JlKj(lyhaKU| z_j>(c=uX?~EyT~&d%eS4M^@bG%g;P;Cte>~ykrJ1n~;>@KeG0W1AD1t^ew*peg6EL z4kY7K>O6TLzIAqlkK5-Rf}fT9ym=a`9DJX;Irttwbj<24M$hzk<9i3+Kd>Jl&bebo z&V#vYD_0!+;6MeQ4}K`V*3O^U=gq=5*gx6l4O$N;T}^9yL8PkpT5n`91SJv|`=0Xt zXz6{%d%m^n)V@U!1ACYF+BAwRiL}5Rku{!Y-s>|mCm>@}>O`4ps)wacN>ZOSEt|rd z?uB3IRDRCAzR{^wGJ#b2v?TuWKG%q$)o7;GP@*SdNSUn`&z?F;^h5_nI`5&Eq0^Ii z*_Ey#(HWHd3M8~%CBK5)GE1h3lHqPukve=(oP`^b1W`^DMoLHSsDiy`GgyMz=p`@* zDW?*mGpgYUO5aOsOp-iclf*PKH%ZB16cb_D&7Zgz;?uk&e)sLV;hxioZ{8r3u34tE znqAv_pD+Dz(hEM!Bm5WoUi7_Pq#w!oaplB$wAi+px#v&|WO{FySJlw6q>1T`z?Sq9Qs82ZbFF;uxvtsK zW|TuoT~G~G5jKV1GVs}kOn1z^KteK!7{M+^}`?+U{OG=>OveN;@_rxHp+d^4Olf`+`R;eGdeO4#L8eJ`&8s z&zwhs6Yz8XBf%n^vpXIMHrgCwtg)O=eNP3y#rX;j+B3>w8@!uhKkd&PzW*KX6wBpP z&-h#4i^10ixm|a>@YU>_ErLEAIE$A5i&ui#z9WZ5_I$MSB`M+N2a0Kt#HJIl401ArV$M=1GcYgU$q5nZN_RV@7n1KWUfJ__0ahuR}2WfxAv2Wk&s`jWh6hh&EQb&dOik=_)bSV{;%Af_fLJ1rTQI#126c zF`i?(a>_QSjj{2!HpZqCH%8xA!PQPo-I`y6*;9^ymd2<2(04uW?R?+-_~3_MWr#H* z+PgPSfOlY3&Y4V$@uz=ednFBc_}5^*osRV|TC%Tx4Ne?zTV&?k8p=7ah~7;*7OW@{ zH_1mIfO?B7Vo=XJJKtTg7dgInzITcB;QK2Me*Be9Q1rvs91E_prZM|wxrv7%-`QEF zYiRT|I`5~8A)9NU?5oHUeHAFhgVr4vDR@SM?()Wronr9V`p1x0% z(DbSj`;`*0ysNBy_x-M%)T`xl<~3IS>;ul=xNEIL_mVbMtlGS-a9qAl*6{7O4xP5? z)ESTr*0pciP2_wiqz={m08Ze8&S2^d^11LvD}TGtlAm=@K5M<0ylF`348Hx3vS`Rn zRzA7dQdD@ee9k})H?cZncFId-#*#^6%GRF2LdfVA=}XS&@s6bGA(+vO1TL)OF7lf$NEPoBk|lsAa+pGLWItTue> zeY7iMX0jAJ6Y_ie2TMVSjI#BcYdY3+Y>6O7(+-IvGlj|0`kDo;>pI$YNwF+a%=}Od zo-^9z9SW_WEL@I4$BB?2^Ed%1%fw49g@(`?9uK{e=^2pMu-nw&m@lM8rN+8T&=y1KeV{dDzVLt= zm2kuuzlsI22b9J>9b-q}203jY{Y|FmL(5!~x@!oEI8ip?sM*dE=N1x=2~2t{6<1 zR;(aEOF4ufl*C@s%ntoc2&Je}4eauZR}+ZfFsgOpA~_>5pIcDL0-;zf*eh8k zl#)bIX!?-bl&Vq=QK)n6Qx!HXM%h>$j`aLl&Kwrt4%peht^YNrWPg8nnDG-$w}@m zOBIA=j31uq%_@NIGqEa`Xt^5Y3RyF!mGK{Ddc#9jN)%~P=d^F@_bEa01u-oma3rT4 z>bzOraQSM1VPeG#m}^aJsR(fqKN4G_4#qE<8T|q1g*>}=F#em3# zpe>C9w=IMAApd0k&{LUt*5yh3oqKezd&NK)l`Fa9>CCZNZE=N2drTo>Uo902p*6hq z>CDWcwem5mBMDiRTi_m1*9Z+vb9bJ|V?&R5%zg@g*J|6=`%LC!TPMqWhVkb;;b7od z+zRyhAwe{dmXa>7Auq5!-f&T>%0HR?BI9M=a8~-iFu9U6*j_@jz{`v;_lA9Kuh8;~ zNwd9*a^Gu-D)$QI{QWxKBxIWu;rFTZ@geC$_qHNNk{A$m6L}}8yGj;#SN0TrPxXWg z@qI%41F4a&Usptr&d?O|idaLh<778}vziM7pgnS_)T31S^vK&?Rj_Sd*(a+lQ6N!$gVkZ-~}3d#eO%sdiTb6556bS&&~NH=a7*whW;tJ zc@5O2;NCy_=-@|^x4y2(D8(c^S%l<+NBA#AMxgS@!FPilTW>n}UI)AJ1L!k*(96x| z2%(!EN$a@+0>JxUIfY<+@Es)~?`kME4mT8M{q2n?bUiBfCqDlqZC@>2;QFc-?Gna< zqadBab04M+?WdTrfZ2bR#ufXoa@X09VfT_%g~4}_ekoXlei11`zqTZDfgEJPZtKGS z6SfhT&9bjha(m+hw?|PTWFs5LG~_-Ydw4#~2X@Oo-uj%=n>0+b@bmoPp{dBfN$0!} zi8qhMHh z9QV%qWc7j?;XHOfc_YDASxMj?066jWbSRJD={B1@$e0c8x6BTQTgrnUd_*GI4>U4! z{f0%%2Jc(uddw1ulEXTP5)EI6uk8Tk;}Zj)ZScQEXqt3Yw>^!d`Qc|0&=rt(lJGJl zBC{00@s|07t1Zc~a`TCV!k*`)@A>SiC|nps;!);>^KHDE%uma_@WG9j$&9qj3;)}A znM|U}y#GollW9|#_oalg`6A~j^TJU#-j=eBj!Xr0h2t)(eAU98XS>D}ye?}L)Q+t# z@1f5lzyS(QyVMG0RaHH8&GY$JIibvGAYaaHzdafcD+j7TRmN%OT41eEwJI4P7#4{`AZdqOM6JLwRv zS0ugy8#J>2)u_Z*BU#qy*sGn0Iw~91-32!{--53e?I;RF=FizlHtJefDGHnLVuK`~js$-Fof<^HPU=a9_b zwrO~!RfCvR?h$uajpzZMi?#BYWYoz#mtxd3>!vcU6wcsJuQm#@>gfO?!gr=}Tc4%+ zEoUXOE&SgZ;o`w_&__w5cnFOh)s4?o$l0|uQRj2jA%&@P9{m>-0ygeuyh=etj##3? z1s1+O6E@g|2}?B$I{QTli-l+VVw!CHE)ijEOgl+UHn!eU01Pb~Fqn#6!h41s6cCk; zfs^+PJz;hA<%!RDzXH!q@d_|5wF01hrI;>CPAZ5>W}E6j@;c{{OeV+bX~)i%E@ji| zTe>NAr?DFOLqg%qX$aSe8;hyywTaK@x+C!!&L*d*PEVDc8tW|l9)h!8))USo1gA6c z8F0E1p8;osg0oS=$=PJ#0V5n9vKg}$OZzLliG-uX7FBzzs(qS;FGFqX=@$MwBOFZK zrm)#=;nx}A%sFSAFksu6m@?xmHAUp#0>DuCW5s2xp?0>~3z*(0P479t7}rQC@{<~8 z86~UERTmJ^P_0K@Y;X|yCr0w?r>N`JS699n-DVppT zsL@@>bDvBem!Z79;;%1JuP;@O-c!$brR;9NRd?(?3KiV3bn$5apd*Zv3L#isH^c5# zH|~9MnhNh%H!j^Q_6OCCiwkAojf=}gIH!pl7dK4&#-&>&@3Dj%_i;H@HrymE?@4jv zE{KkE5U@vsz;+BZrxVRj|r_+_1O6s3*6U1)Zm-t6Hp@L`t1pauInrJde zJQ)jZuL6wrnra4`49cE3G<52C6SEd$h-`?$U@33MX!5%W2c0?JlglellJ-6URW$j7 zMCuBf{2|^cn*34XE70VR`(J&M_zE=n)7Y!uqRF2DvGmVRq{#@P5HuNa6M`oH2lev4 zlr;G(095kP*C-BuBWd!tD2~zO?@;bXSi`_Mq?2YtXam!}@2AN>h#o+bf0TPC<7mPT z9zc_S7Bt!TMbYG6)d@JJ`UOq4@GmmLLz2mLx+IDIZ;VN#$mB(h4=iG-z^Q;D3;$_J zkq47W#ts!d-4lhWd|hU^ph}b9xe+Tv1Q{;UahgX28D@V$ke$kX+XXustq%w?`9p`? z{Q1mqW*yw22M}L)M)yC1a=|aU{~5%=hqiXVGW!IihC4IJ%R}J|FTA0TC$yRTnPbA1Jyqc+*B)b3upXUB&fGJRT z7D_yGin!khXBQVslcMBl6ftD*WR?PWiK;x5FGXcbDL=~yXQT|1rN(f6tr3R8;)J2v z;JM64_lTdgK2-U(=e*X^l!>O?rCFA6d1WZ;k;lv#Y*i3$l zQ0~adgumR8fXGs&#&+a1xg+6h5a;G-N7hKhV>{Gdt9B&Z4%*tcGi`eRj+_B_p?bL^ z;egP;3NcbT1?>O`VAB6sA z^a3A*{%35Z1*(IEY9B0;I}&~e{W}g|;BwIa3@|4pJ_F2B1!kGrWGBlVx%@YGB+T$) z-C9-Um2yX}k~^|ZVbU&lh=b`?VO^HrkPmrV%!cY}3dwja<{nGmU)H zC@_se(W0+|SH;ssCj4+Kd( zOk=ib%rOmM)npoTO=F&EG@C|?Y0Ni`1*WmkG!~i0V$)b+8Yh{?Qqx#w8Yi2^a?@C0 z8m*?W(ll0?Mw@B0o5pI>SYsM%O{2p!PBD#BO=F#DtT&BL)95md4W_ZtG&Y&WX4BYW z8e2`{G}AcUG`5+>cGEb+G|n`QvrOZ6rg64uL`~xy)95yh9j0-vY4n)JPSY?=W0z^1 zXBxjZjq^?80@JwAG%hlY-KKG|XwC%(Q6uiG>w}~<7U(NlWF|fG;T4CTTSCO z)41I<4w=Rsrg5if{KYi>Y8rntjXu*jY#Mi&#@|ijZqvBOG>(|YKTPAFrg5)n+-Dm1 zo5lmC@t|ouWEu~f#v`WjsA)WA8jqXC6Q=Q`X*^{bPn*Uwrtz$4JZBouo5l;K@qecA zqG|lgG+r`|mrdgp(|FZ1UNeo?P2&yIc+)iAGL5%Q;~mp@*EHTUjrUFC1Jn4>G(Iwo zk4@tf)A-ahJ~NHaP2&sG__t~N$27h)jjv4OYt#6~G`=;B?@Z&rrtv@1_}(;rFpVEg z~d9EcmnHFA0Bx@MptcGX4hR&yK$o{H5Yg!(STy9QbqM z&xJo7e{TGxmyN$1{N?_C4ck?B2mk;; z;p2aJGF>y>wrS?*9%dhu9mB+QcX#Ks$xTii-^2GW?xhF;6r~u&DM3j} zQJON8r5xo6qyj-yq!N{>LRG3!of_1n7PYBEUFs1`2%*%c0S#$HW17&EW;7>^7O3qC zx1<%VX+vAu(Vh-;q!XR#LRZ4+Mt6D;K~ExyBAOUtiK7?2=|f-Q=|=*I^k)DA8N^_Q zFqB~=F`N;MWE7(r!&t^Ko(W835|f$2RHiYV8O&rBvzfzOl1X76^I5<`Qdz`emXO9$ zma&|4RHLpFQa$9@iQkV72i2uC@_ zaZYfOQ=H}uXF11tE^v`cT;>W_xyE&FaFbiy<_>qc$9*2~kVib`2~T-O4$pbPOJ4Ds oH@xK?xxD8CANj;*zK};gU-`y&e(;lD6!4or{N-PvOoL?3f7?wND*ylh delta 67081 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 Q0gX6;CNu|vbuv(R3P0TY8~^|S diff --git a/BIN/CP.S.txt b/BIN/CP.S.txt index 26c91592..0aa1bcb7 100644 --- a/BIN/CP.S.txt +++ b/BIN/CP.S.txt @@ -1,6 +1,5 @@ NEW -PREFIX -AUTO 4,1 + AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 diff --git a/BIN/CUT.S.txt b/BIN/CUT.S.txt index 335502d2..cd0842cc 100644 --- a/BIN/CUT.S.txt +++ b/BIN/CUT.S.txt @@ -1,6 +1,5 @@ NEW -PREFIX -AUTO 4,1 + AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 diff --git a/BIN/DNSINFO.S.txt b/BIN/DNSINFO.S.txt index b2a4b88e..7d30de76 100644 --- a/BIN/DNSINFO.S.txt +++ b/BIN/DNSINFO.S.txt @@ -1,6 +1,5 @@ NEW -PREFIX -AUTO 4,1 + AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 diff --git a/BIN/KILL.S.txt b/BIN/KILL.S.txt index 1754abf3..de96f622 100644 --- a/BIN/KILL.S.txt +++ b/BIN/KILL.S.txt @@ -108,6 +108,7 @@ CS.END MSG.USAGE .AS "Usage : KILL PID\r\n" .AS " -0 : No Signal\r\n" .AZ " -1 : SIGQUIT\r\n" + .AZ " -2 : SIGKILL\r\n" SSCANF.PID .AZ "%d" *-------------------------------------- .DUMMY diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index e49aac79..abd97247 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -42,15 +42,15 @@ ZPBIN.SIZE .EQ 32 PSCTX.SIZE .EQ $100-pSession *-------------------------------------- * A2osX GLOBAL PAGE -* $BD00->$BD0F : Public Vetors +* $BC00->$BC0F : Public Vetors *-------------------------------------- -A2osX.SYSCALL .EQ $BD00 -A2osX.LIBCALL .EQ $BD03 -A2osX.ATKCALL .EQ $BD06 -A2osX.FPUCALL .EQ $BD09 -A2osX.BADCALL .EQ $BD0C +A2osX.SYSCALL .EQ $BC00 +A2osX.LIBCALL .EQ $BC03 +A2osX.ATKCALL .EQ $BC06 +A2osX.FPUCALL .EQ $BC09 +A2osX.BADCALL .EQ $BC0C *-------------------------------------- -A2osX.SLEEP .EQ $BD10 +A2osX.SLEEP .EQ $BC10 *-------------------------------------- * $BEE0->$BEEF : Public Variables *-------------------------------------- @@ -289,7 +289,7 @@ SYS.PutPW .EQ $D4 * .EQ $D8 * .EQ $DA * .EQ $DC -* .EQ $DF +SYS.OSD .EQ $DF *-------------------------------------- SYS.GetMem .EQ $E0 SYS.GetMem0 .EQ $E2 diff --git a/SBIN/NETWORKD.S.txt b/SBIN/NETWORKD.S.txt index f7c72fb5..038d8db9 100644 --- a/SBIN/NETWORKD.S.txt +++ b/SBIN/NETWORKD.S.txt @@ -1,5 +1,5 @@ NEW - AUTO 4,1 + AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 diff --git a/SYS/KERNEL.S.CTRL.txt b/SYS/KERNEL.S.CTRL.txt index 855eb087..6354d9af 100644 --- a/SYS/KERNEL.S.CTRL.txt +++ b/SYS/KERNEL.S.CTRL.txt @@ -23,7 +23,7 @@ A2osX.E0.S .EQ A2osX.E0.E-A2osX.E0 * ERROR:AUX too big .LIST OFF .FIN - .DO A2osX.GP.SC>$1E0 + .DO A2osX.GP.SC>$2E0 .LIST ON * ERROR:GP too big .LIST OFF diff --git a/SYS/KERNEL.S.DEF.txt b/SYS/KERNEL.S.DEF.txt index 8c5f6879..6cf688f1 100644 --- a/SYS/KERNEL.S.DEF.txt +++ b/SYS/KERNEL.S.DEF.txt @@ -109,7 +109,7 @@ K.Buf256 .EQ $1100 *-------------------------------------- K.IOBuf .EQ $1200 *-------------------------------------- -Mem.MHiMem .EQ $BD00 +Mem.MHiMem .EQ A2osX.SYSCALL Mem.XHiMem .EQ $C000 DevMgr.HiMem .EQ $FFFA Protect IRQ vectors in Aux LC *-------------------------------------- diff --git a/SYS/KERNEL.S.DIRENT.txt b/SYS/KERNEL.S.DIRENT.txt index f7c6d928..c2bc9069 100644 --- a/SYS/KERNEL.S.DIRENT.txt +++ b/SYS/KERNEL.S.DIRENT.txt @@ -29,7 +29,7 @@ K.OpenDir jsr PFT.CheckPathYA cmp #$0F Directory ? bne .98 - jsr IO.MLIOPEN + jsr IO.MLI.OPEN bcs .98 .8 lda IO.hFD @@ -55,7 +55,7 @@ K.OpenDir jsr PFT.CheckPathYA * note : A = 0 means no more entry *\-------------------------------------- .DUMMY - .OR ZPTMP+15 conflict with PTime2Time + .OR ZPTMP 8 Bytes K.ReadDir.hMem .BS 1 K.ReadDir.BufSize .BS 2 K.ReadDir.ECIB .BS 1 diff --git a/SYS/KERNEL.S.FIO.txt b/SYS/KERNEL.S.FIO.txt index 6ef9ad03..888e859e 100644 --- a/SYS/KERNEL.S.FIO.txt +++ b/SYS/KERNEL.S.FIO.txt @@ -42,7 +42,7 @@ K.ChTyp jsr PFT.CheckPathYA * X = hMem of Loaded File *\-------------------------------------- .DUMMY - .OR ZPTMP + .OR ZPTMP 5 Bytes FIO.bTXT .BS 1 FIO.hFILE .BS 1 FIO.MemPtr .BS 2 diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index 8068377a..8be37e07 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -171,6 +171,237 @@ GP.AtkCall dec IRQ.InKernel inc IRQ.InKernel rts +*/-------------------------------------- +* # FAdd,FSub,FMult,FDiv,FPwr +* Return X+Y, X-Y, X*Y, X/Y, X^Y +* ## ASM +* **In:** +* `>PUSHF X (float)` +* `>PUSHF Y (float)` +* `>FPU fadd` +* `>FPU fsub` +* `>FPU fmult` +* `>FPU fdiv` +* `>FPU fpwr` +* ## RETURN VALUE +* On stack (float) +*\-------------------------------------- +*/-------------------------------------- +* # Log,Sqr,Exp,Cos,Sin,Tan,ATan +* Return Log(x), Sqr(x), E^X, Cos(x), Sin(X), Tan(x), ATan(x) +* ## C +* `float log ( float x);` +* `float sqr ( float x);` +* `float exp ( float x);` +* `float cos ( float x);` +* `float sin ( float x);` +* `float tan ( float x);` +* `float atan ( float x);` +* ## ASM +* **In:** +* `>PUSHF x (Float)` +* `>FPU log` +* ## RETURN VALUE +* On stack (Float) +*\-------------------------------------- +* >PUSHL ARG +* >PUSHL ACC +* >FPU ADD32 +* >PULLL (ARG+ACC) +*-------------------------------------- +MATH.ADD32 clc + .HS B0 BCS +MATH.SUB32 sec + + php + + jsr MATH.PopACC32 + + ldy #0 + ldx #3 + + plp + bcs .2 + +.1 lda (pStack),y + adc ACC32,y + sta (pStack),y + iny + dex + bpl .1 + + rts + +.2 lda (pStack),y + sbc ACC32,y + sta (pStack),y + iny + dex + bpl .2 + +MATH.SUB32.RTS rts +*-------------------------------------- +* >PUSHL ARG +* >PUSHL ACC +* >(I)MUL32 +* >PULLL (ARG*ACC) +*-------------------------------------- +MATH.UMUL32 clc + .HS B0 BCS +MATH.IMUL32 sec + + php + jsr MATH.MULDIVMOD.COMMON + jsr MATH.MUL32 + + plp + bcc MATH.SUB32.RTS + +MATH.RETURN.ITMP + lda ACC32.Sign + eor ARG32.Sign + bpl MATH.PutTMP32 + bra MATH.PutNotTMP32 +*-------------------------------------- +* >PUSHL ARG +* >PUSHL ACC +* >(I)DIV32 +* >PULLL (ARG / ACC) +*-------------------------------------- +* >PUSHL ARG +* >PUSHL ACC +* >(I)MOD32 +* >PULLL (ARG mod ACC) +*-------------------------------------- +MATH.UDIV32 clc + .HS B0 BCS +MATH.IDIV32 sec + clv + bra MATH.DIVMOD + +MATH.UMOD32 clc + .HS B0 BCS +MATH.IMOD32 sec + bit MATH.SUB32.RTS $60 + +MATH.DIVMOD php + jsr MATH.MULDIVMOD.COMMON + jsr MATH.DIVMOD32 + + plp + bcc .3 + bvs MATH.RETURN.ITMP IMOD + + lda ACC32.Sign IDIV + eor ARG32.Sign + bmi MATH.PutARG32 + bra MATH.PutNotARG32 + +.3 bvs MATH.PutARG32 DIV +*-------------------------------------- +MATH.PutTMP32 lda #TMP32 MOD + .HS 2C BIT ABS +*-------------------------------------- +MATH.PutARG32 lda #ARG32 + sta .1+1 + + ldy #3 + +.1 lda $ff,y SELF MODIFIED + sta (pStack),y + dey + bpl .1 + + rts +*-------------------------------------- +MATH.PutNotTMP32 + lda #TMP32 + .HS 2C BIT ABS +*-------------------------------------- +MATH.PutNotARG32 + lda #ARG32 + sta .1+1 + + ldy #0 + ldx #3 + + sec + +.1 lda $ff,y SELF MODIFIED + eor #$ff two's complement of X bytes + adc #0 + sta (pStack),y + iny + dex + bpl .1 + + rts +*-------------------------------------- +MATH.PopACC32 ldy #$ff + +.1 iny + lda (pStack),y + sta ACC32,y + cpy #3 + bne .1 + + sta ACC32.Sign + + tya +* sec Add 3+CS=4 + adc pStack + sta pStack + + rts +*-------------------------------------- +MATH.GetARG32 ldy #0 + +.1 lda (pStack),y + sta ARG32,y + iny + cpy #4 + bne .1 + + sta ARG32.Sign + + rts +*-------------------------------------- +MATH.MULDIVMOD.COMMON + php + + jsr MATH.PopACC32 + jsr MATH.GetARG32 + + plp + bcc .1 + + jsr MATH.ACC32ABS + jsr MATH.ARG32ABS + +.1 rts +*/-------------------------------------- +* # float +* Return 'floated' long +* ## C +* `float f = (float)12345678; +* ## ASM +* **In:** +* `>PUSHL X` (long) +* ## RETURN VALUE +* On stack (float) +*\-------------------------------------- +*/-------------------------------------- +* # lrintf +* Return float rounded into a long +* ## C +* `long int lrintf (float x);` +* ## ASM +* **In:** +* `>PUSHF x` +* `>SYSCALL lrintf` +* ## RETURN VALUE +* On stack (long) +*\-------------------------------------- *-------------------------------------- GP.FpuCall dec IRQ.InKernel jsr .1 @@ -274,6 +505,42 @@ GP.SetFAC ldx #FPU.SETFAC >LDYA pStack bra GP.ROMCALL *-------------------------------------- +K.Float ldy #3 + +.1 lda (pStack),y + sta FAC,y Reverse Order + dey + bpl .1 + + dec pStack keep 5 bytes on stack + + stz FAC.SIGN + lda #$80+32 + sta FAC Positive + Exp=32 + + ldx #FPU.LTOF + +MATH.RomCallPushFAC + jsr GP.ROMCALL + jmp GP.GETFAC.ON.STACK +*-------------------------------------- +K.lrintf jsr GP.SetFAC + + inc pStack keep 4 bytes on stack + + ldx #FPU.QINT + jsr GP.ROMCALL + + ldy #3 + +.1 lda FAC+1,y + sta (pStack),y + dey + bpl .1 + + clc + rts +*-------------------------------------- GP.MLICall stx .1 sta K.MLI.PARAMS jsr GO.ProDOS @@ -382,6 +649,11 @@ CORE.Tick10t .BS 1 CORE.CPUStatCnt .DA #100 CORE.LastPSID .DA #0 *-------------------------------------- +DevMgr.Stat .DA DevMgr.FreeMem +DevMgr.Free .DA DevMgr.FreeMem + .DA DevMgr.HiMem +DevMgr.DevIdx .DA #1 +*-------------------------------------- IRQ.InKernel .BS 1 IRQ.InLib .BS 1 IRQ.SkipA2osX .BS 1 @@ -392,6 +664,8 @@ IRQ.VBL.0n .BS 1 IRQ.Mode .BS 1 IRQ.Tick .BS 1 *-------------------------------------- +IRQ.Vectors .BS K.IRQDEV.MAX*2 +*-------------------------------------- *GO.Reset jsr GO.A2osX * jmp CORE.Run *-------------------------------------- diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 6934ade5..81122e90 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -33,9 +33,9 @@ Kernel.Init2 sei >STYA A1L Src Start Address (MAIN) >LDYAI A2osX.GP >STYA A2L Src End Address (MAIN) - >LDYAI X.GUIOSD + >LDYAI X.OSD >STYA A4L Dst Address (AUX) - sec Main To Aux + sec Main To Aux jsr AuxMove >LDYAI A2osX.GP diff --git a/SYS/KERNEL.S.IO.txt b/SYS/KERNEL.S.IO.txt index af12c7e4..9658d9e9 100644 --- a/SYS/KERNEL.S.IO.txt +++ b/SYS/KERNEL.S.IO.txt @@ -13,6 +13,8 @@ NEW * A = hFD * REG File created on ProDOS : T=TXT,X=$0000 *\-------------------------------------- + .DUMMY + .OR ZPTMP+20 9 Bytes K.Open.FLAGS .BS 1 K.Open.TYPE .BS 1 K.Open.AUXTYPE .BS 2 @@ -20,6 +22,7 @@ IO.hDev .BS 1 IO.hFD .BS 1 IO.hFILE .BS 1 IO.Counter .BS 2 + .ED *-------------------------------------- K.Open jsr PFT.YAToMLIPATH >PULLB K.Open.FLAGS @@ -116,7 +119,7 @@ IO.OPEN.REG.E ldx #0 jsr IO.MkFD bcs IO.OPEN.RTS - jsr IO.MLIOPEN + jsr IO.MLI.OPEN bcs IO.OPEN.ERR lda K.Open.FLAGS @@ -181,21 +184,6 @@ IO.OPEN.DSOCK IO.OPEN.SSOCK lda IO.hFD clc rts -*-------------------------------------- -IO.MLI.CREATE sta K.MLI.PARAMS+7 Storage Type - - ldx #3 - -.1 lda DATELO,x - sta K.MLI.PARAMS+8,x Create Date/Time - dex - bpl .1 - - lda #S.FI.A.FULL - sta K.MLI.PARAMS+3 Access - - >MLICALL MLICREATE - rts */-------------------------------------- * # close * ## C @@ -759,11 +747,6 @@ IO.EOF lda (pFD) .DA STDIO.IOERR DSOCK .DA IO.EOF.SSOCK .DA IO.EOF.PIPE -*-------------------------------------- - .DUMMY - .OR ZPTMP -K.EOF.MARK .BS 3 - .ED *-------------------------------------- IO.EOF.REG >MLICALL MLIGETMARK bcs IO.EOF.REG.RTS @@ -771,7 +754,7 @@ IO.EOF.REG >MLICALL MLIGETMARK ldy #2 .1 lda K.MLI.PARAMS+2,y - sta K.EOF.MARK,y + sta ACC32,y dey bpl .1 @@ -781,7 +764,7 @@ IO.EOF.REG >MLICALL MLIGETMARK ldy #2 .2 lda K.MLI.PARAMS+2,y - eor K.EOF.MARK,y + eor ACC32,y bne IO.EOF.FALSE dey bpl .2 @@ -848,7 +831,22 @@ IO.MkFD stx .8+1 IO.MkFD.Y .DA #S.FD.REG,#S.FD.DIR,#S.FD.PIPE IO.MkFD.T .DA #S.FD.T.REG,#S.FD.T.DIR,#S.FD.T.PIPE *-------------------------------------- -IO.MLIOPEN >LDYAI 1024 get a ProDOS IOBUF +IO.MLI.CREATE sta K.MLI.PARAMS+7 Storage Type + + ldx #3 + +.1 lda DATELO,x + sta K.MLI.PARAMS+8,x Create Date/Time + dex + bpl .1 + + lda #S.FI.A.FULL + sta K.MLI.PARAMS+3 Access + + >MLICALL MLICREATE + rts +*-------------------------------------- +IO.MLI.OPEN >LDYAI 1024 get a ProDOS IOBUF ldx #S.MEM.F.ALIGN+S.MEM.F.NOMOVE jsr MEM.GetMem.YAX bcs .9 diff --git a/SYS/KERNEL.S.IRQ.txt b/SYS/KERNEL.S.IRQ.txt index e8ce8323..7861fb67 100644 --- a/SYS/KERNEL.S.IRQ.txt +++ b/SYS/KERNEL.S.IRQ.txt @@ -227,8 +227,6 @@ K.IrqH.DEV ldx #0 .8 clv clear V (no task switching) rts *-------------------------------------- -IRQ.Vectors .BS K.IRQDEV.MAX*2 -*-------------------------------------- MAN SAVE USR/SRC/SYS/KERNEL.S.IRQ LOAD USR/SRC/SYS/KERNEL.S diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 1e003cf7..939584ef 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -131,7 +131,7 @@ K.SYSCALL .DA K.GetMemStat $00 .DA 0 .DA 0 .DA 0 - .DA 0 + .DA X.OSD *-------------------------------------- * $E000 *-------------------------------------- @@ -395,7 +395,7 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00 .DA #$80 .DA #RRAMWRAMBNK2 .DA #$80 - .DA #RRAMWRAMBNK2 + .DA #$C0 Off Screen Driver .DA #$80 *-------------------------------------- .DA #0 $E0 : MemMgr at $E000 diff --git a/SYS/KERNEL.S.MATH.txt b/SYS/KERNEL.S.MATH.txt index caeff736..53bf81d4 100644 --- a/SYS/KERNEL.S.MATH.txt +++ b/SYS/KERNEL.S.MATH.txt @@ -1,274 +1,9 @@ NEW AUTO 3,1 -*/-------------------------------------- -* # FAdd,FSub,FMult,FDiv,FPwr -* Return X+Y, X-Y, X*Y, X/Y, X^Y -* ## ASM -* **In:** -* `>PUSHF X (float)` -* `>PUSHF Y (float)` -* `>FPU fadd` -* `>FPU fsub` -* `>FPU fmult` -* `>FPU fdiv` -* `>FPU fpwr` -* ## RETURN VALUE -* On stack (float) -*\-------------------------------------- -*/-------------------------------------- -* # Log,Sqr,Exp,Cos,Sin,Tan,ATan -* Return Log(x), Sqr(x), E^X, Cos(x), Sin(X), Tan(x), ATan(x) -* ## C -* `float log ( float x);` -* `float sqr ( float x);` -* `float exp ( float x);` -* `float cos ( float x);` -* `float sin ( float x);` -* `float tan ( float x);` -* `float atan ( float x);` -* ## ASM -* **In:** -* `>PUSHF x (Float)` -* `>FPU log` -* ## RETURN VALUE -* On stack (Float) -*\-------------------------------------- -*/-------------------------------------- -* # float -* Return 'floated' long -* ## C -* `float f = (float)12345678; -* ## ASM -* **In:** -* `>PUSHL X` (long) -* ## RETURN VALUE -* On stack (float) -*\-------------------------------------- -K.Float ldy #3 - -.1 lda (pStack),y - sta FAC,y Reverse Order - dey - bpl .1 - - dec pStack keep 5 bytes on stack - - stz FAC.SIGN - lda #$80+32 - sta FAC Positive + Exp=32 - - ldx #FPU.LTOF -*-------------------------------------- -MATH.RomCallPushFAC - jsr GP.ROMCALL - jmp GP.GETFAC.ON.STACK -*/-------------------------------------- -* # lrintf -* Return float rounded into a long -* ## C -* `long int lrintf (float x);` -* ## ASM -* **In:** -* `>PUSHF x` -* `>SYSCALL lrintf` -* ## RETURN VALUE -* On stack (long) -*\-------------------------------------- -K.lrintf jsr GP.SetFAC - - inc pStack keep 4 bytes on stack - - ldx #FPU.QINT - jsr GP.ROMCALL - - ldy #3 - -.1 lda FAC+1,y - sta (pStack),y - dey - bpl .1 - - clc - rts *-------------------------------------- * http://6502.org/source/integers/32muldiv.htm * http://nparker.llx.com/a2/mult.html *-------------------------------------- -* >PUSHL ARG -* >PUSHL ACC -* >FPU ADD32 -* >PULLL (ARG+ACC) -*-------------------------------------- -MATH.ADD32 clc - .HS B0 BCS -MATH.SUB32 sec - - php - - jsr MATH.PopACC32 - - ldy #0 - ldx #3 - - plp - bcs .2 - -.1 lda (pStack),y - adc ACC32,y - sta (pStack),y - iny - dex - bpl .1 - - rts - -.2 lda (pStack),y - sbc ACC32,y - sta (pStack),y - iny - dex - bpl .2 - -MATH.SUB32.RTS rts -*-------------------------------------- -* >PUSHL ARG -* >PUSHL ACC -* >(I)MUL32 -* >PULLL (ARG*ACC) -*-------------------------------------- -MATH.UMUL32 clc - .HS B0 BCS -MATH.IMUL32 sec - - php - jsr MATH.MULDIVMOD.COMMON - jsr MATH.MUL32 - - plp - bcc MATH.SUB32.RTS - -MATH.RETURN.ITMP - lda ACC32.Sign - eor ARG32.Sign - bpl MATH.PutTMP32 - bra MATH.PutNotTMP32 -*-------------------------------------- -* >PUSHL ARG -* >PUSHL ACC -* >(I)DIV32 -* >PULLL (ARG / ACC) -*-------------------------------------- -* >PUSHL ARG -* >PUSHL ACC -* >(I)MOD32 -* >PULLL (ARG mod ACC) -*-------------------------------------- -MATH.UDIV32 clc - .HS B0 BCS -MATH.IDIV32 sec - clv - bra MATH.DIVMOD - -MATH.UMOD32 clc - .HS B0 BCS -MATH.IMOD32 sec - bit MATH.SUB32.RTS $60 - -MATH.DIVMOD php - jsr MATH.MULDIVMOD.COMMON - jsr MATH.DIVMOD32 - - plp - bcc .3 - bvs MATH.RETURN.ITMP IMOD - - lda ACC32.Sign IDIV - eor ARG32.Sign - bmi MATH.PutARG32 - bra MATH.PutNotARG32 - -.3 bvs MATH.PutARG32 DIV -*-------------------------------------- -MATH.PutTMP32 lda #TMP32 MOD - .HS 2C BIT ABS -*-------------------------------------- -MATH.PutARG32 lda #ARG32 - sta .1+1 - - ldy #3 - -.1 lda $ff,y SELF MODIFIED - sta (pStack),y - dey - bpl .1 - - rts -*-------------------------------------- -MATH.PutNotTMP32 - lda #TMP32 - .HS 2C BIT ABS -*-------------------------------------- -MATH.PutNotARG32 - lda #ARG32 - sta .1+1 - - ldy #0 - ldx #3 - - sec - -.1 lda $ff,y SELF MODIFIED - eor #$ff two's complement of X bytes - adc #0 - sta (pStack),y - iny - dex - bpl .1 - - rts -*-------------------------------------- -MATH.PopACC32 ldy #0 - -.1 lda (pStack),y - sta ACC32,y - iny - cpy #4 - bne .1 - - sta ACC32.Sign - - tya - clc - adc pStack - sta pStack - - rts -*-------------------------------------- -MATH.GetARG32 ldy #0 - -.1 lda (pStack),y - sta ARG32,y - iny - cpy #4 - bne .1 - - sta ARG32.Sign - - rts -*-------------------------------------- -MATH.MULDIVMOD.COMMON - php - - jsr MATH.PopACC32 - jsr MATH.GetARG32 - - plp - bcc .1 - - jsr MATH.ACC32ABS - jsr MATH.ARG32ABS - -.1 rts *-------------------------------------- * ARG32*ACC32->TMP32 *-------------------------------------- @@ -276,7 +11,7 @@ MATH.MUL32 jsr MATH.TMP32ZERO ldx #32 -.2 lsr ARG32+3 +.1 lsr ARG32+3 ror ARG32+2 ror ARG32+1 ror ARG32 @@ -285,26 +20,21 @@ MATH.MUL32 jsr MATH.TMP32ZERO clc - lda TMP32 - adc ACC32 - sta TMP32 + ldy #0 + +.2 lda TMP32,y + adc ACC32,y + sta TMP32,y - lda TMP32+1 - adc ACC32+1 - sta TMP32+1 - - lda TMP32+2 - adc ACC32+2 - sta TMP32+2 - - lda TMP32+3 - adc ACC32+3 - sta TMP32+3 + iny + tya + eor #4 + bne .2 .3 jsr MATH.ACC32.T2 dex - bne .2 + bne .1 clc rts diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index 80db1b37..1987f1cc 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -633,144 +633,6 @@ MEM.GetKrnlBuf pha * sec rts *-------------------------------------- -MEM.GetKeyCharY sta CLRREADAUX - lda (ZPSListDataPtr),y - sta SETREADAUX - beq MEM.IsDigit.9 - -MEM.IsIDValid cmp #'.' - beq MEM.IsDigit.8 - - cmp #'_' - beq MEM.IsDigit.8 - -MEM.IsDigitOrL cmp #'z'+1 - bcs MEM.IsDigit.RTS - cmp #'a' - bcs MEM.IsDigit.8 - -MEM.IsDigitOrUC cmp #'Z'+1 - bcs MEM.IsDigit.RTS - cmp #'A' - bcs MEM.IsDigit.8 - - jmp IsDigit - -MEM.IsDigit.9 sec - rts - -MEM.IsDigit.8 clc -MEM.IsDigit.RTS rts -*-------------------------------------- -MEM.IsHexDigit jsr IsDigit - bcc .8 - - cmp #'A' - bcc MEM.IsDigit.9 - cmp #'F'+1 - bcc .1 - - cmp #'a' - bcc MEM.IsDigit.9 - cmp #'f'+1 - bcs MEM.IsDigit.RTS - - eor #$20 -.1 -* clc - sbc #'A'-11 cc so A->10 (11-CC) - clc - -.8 and #$0F - rts -*-------------------------------------- -MEM.SetKeyCharY sta CLRWRITEAUX - sta (ZPSListDataPtr),y - sta SETWRITEAUX - rts -*-------------------------------------- -MEM.GetDataByte sta CLRREADAUX - lda (ZPSListDataPtr) - sta SETREADAUX - bra MEM.SetDataByte.1 -*-------------------------------------- -MEM.SetDataByte sta CLRWRITEAUX - sta (ZPSListDataPtr) - sta SETWRITEAUX -MEM.SetDataByte.1 - inc ZPSListDataPtr - bne .8 - inc ZPSListDataPtr+1 -.8 rts -*-------------------------------------- -MEM.TXTPTR.GetY sta CLRREADAUX - lda (TXTPTR),y - sta SETREADAUX - rts -*-------------------------------------- -MEM.TXTPTR.GetNext - sta CLRREADAUX - lda (TXTPTR) - sta SETREADAUX - beq .9 - inc TXTPTR - bne .9 - inc TXTPTR+1 -.9 rts -*-------------------------------------- -MEM.SPtr1PPtr2 >STYA ZPPtr1 - >PULLW ZPPtr2 - rts -*-------------------------------------- -MEM.SPtr2PPtr1 >STYA ZPPtr2 - >PULLW ZPPtr1 - rts -*-------------------------------------- -MEM.GetCharPtr1 lda (ZPPtr1) - bne MEM.NextCharPtr1 - rts - -MEM.PutCharPtr1 sta (ZPPtr1) -MEM.NextCharPtr1 - inc ZPPtr1 - bne .8 - inc ZPPtr1+1 never Z -.8 rts -*-------------------------------------- -MEM.AddYp1ToPtr1 - sec - .HS 90 BCC -MEM.AddYToPtr1 clc - tya - adc ZPPtr1 - sta ZPPtr1 - bcc .8 - inc ZPPtr1+1 -.8 rts -*-------------------------------------- -MEM.AddYp1ToPtr2 - sec - .HS 90 BCC -MEM.AddYToPtr2 clc - tya - adc ZPPtr2 - sta ZPPtr2 - bcc .8 - clc keep CC as some JMP exit here - inc ZPPtr2+1 -.8 rts -*-------------------------------------- -MEM.GetCharPtr2 lda (ZPPtr2) - bne MEM.NextCharPtr2 - rts - -MEM.PutCharPtr2 sta (ZPPtr2) -MEM.NextCharPtr2 - inc ZPPtr2 - bne .8 - inc ZPPtr2+1 -.8 rts -*-------------------------------------- MAN SAVE USR/SRC/SYS/KERNEL.S.MEM LOAD USR/SRC/SYS/KERNEL.S diff --git a/SYS/KERNEL.S.OSDX.txt b/SYS/KERNEL.S.OSDX.txt index 986a2757..815cd67e 100644 --- a/SYS/KERNEL.S.OSDX.txt +++ b/SYS/KERNEL.S.OSDX.txt @@ -12,7 +12,7 @@ ZPTmpPtr .EQ ZPDRV+14 * YA =Ptr to S.CB in MAIN * X = DstBM hMem *-------------------------------------- -X.GUIOSD >STYA TXTPTR +X.OSD >STYA TXTPTR ldy #S.CB-1 diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index 175bbd07..98c6a720 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -2,7 +2,7 @@ NEW AUTO 3,1 *-------------------------------------- .DUMMY - .OR ZPTMP+21 + .OR ZPTMP+8 7 Bytes PS.Flags .BS 1 PS.ArgV .BS 2 PS.ArgSize .BS 2 diff --git a/SYS/KERNEL.S.SHARED.txt b/SYS/KERNEL.S.SHARED.txt new file mode 100644 index 00000000..c59a2be0 --- /dev/null +++ b/SYS/KERNEL.S.SHARED.txt @@ -0,0 +1,145 @@ +NEW + AUTO 3,1 +*-------------------------------------- +MEM.GetKeyCharY sta CLRREADAUX + lda (ZPSListDataPtr),y + sta SETREADAUX + beq MEM.IsDigit.9 + +MEM.IsIDValid cmp #'.' + beq MEM.IsDigit.8 + + cmp #'_' + beq MEM.IsDigit.8 + +MEM.IsDigitOrL cmp #'z'+1 + bcs MEM.IsDigit.RTS + cmp #'a' + bcs MEM.IsDigit.8 + +MEM.IsDigitOrUC cmp #'Z'+1 + bcs MEM.IsDigit.RTS + cmp #'A' + bcs MEM.IsDigit.8 + + jmp IsDigit + +MEM.IsDigit.9 sec + rts + +MEM.IsDigit.8 clc +MEM.IsDigit.RTS rts +*-------------------------------------- +MEM.IsHexDigit jsr IsDigit + bcc .8 + + cmp #'A' + bcc MEM.IsDigit.9 + cmp #'F'+1 + bcc .1 + + cmp #'a' + bcc MEM.IsDigit.9 + cmp #'f'+1 + bcs MEM.IsDigit.RTS + + eor #$20 +.1 +* clc + sbc #'A'-11 cc so A->10 (11-CC) + clc + +.8 and #$0F + rts +*-------------------------------------- +MEM.SetKeyCharY sta CLRWRITEAUX + sta (ZPSListDataPtr),y + sta SETWRITEAUX + rts +*-------------------------------------- +MEM.GetDataByte sta CLRREADAUX + lda (ZPSListDataPtr) + sta SETREADAUX + bra MEM.SetDataByte.1 +*-------------------------------------- +MEM.SetDataByte sta CLRWRITEAUX + sta (ZPSListDataPtr) + sta SETWRITEAUX +MEM.SetDataByte.1 + inc ZPSListDataPtr + bne .8 + inc ZPSListDataPtr+1 +.8 rts +*-------------------------------------- +MEM.TXTPTR.GetY sta CLRREADAUX + lda (TXTPTR),y + sta SETREADAUX + rts +*-------------------------------------- +MEM.TXTPTR.GetNext + sta CLRREADAUX + lda (TXTPTR) + sta SETREADAUX + beq .9 + inc TXTPTR + bne .9 + inc TXTPTR+1 +.9 rts +*-------------------------------------- +MEM.SPtr1PPtr2 >STYA ZPPtr1 + >PULLW ZPPtr2 + rts +*-------------------------------------- +MEM.SPtr2PPtr1 >STYA ZPPtr2 + >PULLW ZPPtr1 + rts +*-------------------------------------- +MEM.GetCharPtr1 lda (ZPPtr1) + bne MEM.NextCharPtr1 + rts + +MEM.PutCharPtr1 sta (ZPPtr1) +MEM.NextCharPtr1 + inc ZPPtr1 + bne .8 + inc ZPPtr1+1 never Z +.8 rts +*-------------------------------------- +MEM.AddYp1ToPtr1 + sec + .HS 90 BCC +MEM.AddYToPtr1 clc + tya + adc ZPPtr1 + sta ZPPtr1 + bcc .8 + inc ZPPtr1+1 +.8 rts +*-------------------------------------- +MEM.AddYp1ToPtr2 + sec + .HS 90 BCC +MEM.AddYToPtr2 clc + tya + adc ZPPtr2 + sta ZPPtr2 + bcc .8 + clc keep CC as some JMP exit here + inc ZPPtr2+1 +.8 rts +*-------------------------------------- +MEM.GetCharPtr2 lda (ZPPtr2) + bne MEM.NextCharPtr2 + rts + +MEM.PutCharPtr2 sta (ZPPtr2) +MEM.NextCharPtr2 + inc ZPPtr2 + bne .8 + inc ZPPtr2+1 +.8 rts +*-------------------------------------- +MAN +SAVE USR/SRC/SYS/KERNEL.S.SHARED +LOAD USR/SRC/SYS/KERNEL.S +ASM diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index efad6610..6277d9d2 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -232,11 +232,11 @@ K.FPutS jsr PFT.CheckNodeA set IO.hFD * + %011s : 'ABCDEFGH000' * + %2f : '3.14' *\-------------------------------------- -* .DUMMY -* .OR ZPTMP + .DUMMY + .OR ZPTMP+5 3 Bytes PrintF.Cnt .BS 2 PrintF.hFILE .BS 1 -* .ED + .ED *-------------------------------------- K.PrintF.GetFormat lda (pStack) diff --git a/SYS/KERNEL.S.TIME.txt b/SYS/KERNEL.S.TIME.txt index fabfb948..2a09063c 100644 --- a/SYS/KERNEL.S.TIME.txt +++ b/SYS/KERNEL.S.TIME.txt @@ -7,13 +7,6 @@ SECSDAY .EQ 86400 60*60*24 CENTURY0 .EQ 19 YEAR0 .EQ 70 DAY0 .EQ 4 day 0 was a thursday -*-------------------------------------- - .DUMMY - .OR ZPTMP -TIME.DWORD .BS 4 -TIME.Century .BS 1 -TIME.Year .BS 1 - .ED */-------------------------------------- * # Time * Get System Time in Buffer @@ -46,7 +39,7 @@ K.PTime2Time jsr MEM.SPtr1PPtr2 lsr C is high bit of month ldy #S.Time.YEAR sta (ZPPtr2),y set year - sta TIME.Year for conputing Century/WDAY later + sta ACC32+3 for conputing Century/WDAY later lda (ZPPtr1) Get Month/day pha save Day @@ -63,7 +56,7 @@ K.PTime2Time jsr MEM.SPtr1PPtr2 iny sta (ZPPtr2),y set day - lda TIME.Year get back year + lda ACC32+3 get back year cmp #69 if before 70 CC,if > 70, CS lda #0 @@ -71,7 +64,7 @@ K.PTime2Time jsr MEM.SPtr1PPtr2 eor #1 toggle C adc #19 set date before 1970 -> 20xx sta (ZPPtr2) set Century - sta TIME.Century for conputing WDAY later + sta ACC32+2 for conputing WDAY later ldy #2 lda (ZPPtr1),y Get Min @@ -87,22 +80,22 @@ K.PTime2Time jsr MEM.SPtr1PPtr2 iny lda #0 sta (ZPPtr2),y set seconds (ProDOS does not provide it) - +*-------------------------------------- * 1/1/1970 was Thursday...if not leap, add one, if leap add 2 - +*-------------------------------------- K.ComputeWDAY lda #DAY0-1 Thursday : 4 (-1 for mod 7) pha lda #19 - sta TIME.DWORD + sta ACC32 lda #70 - sta TIME.DWORD+1 + sta ACC32+1 -.1 ldy TIME.DWORD - lda TIME.DWORD+1 +.1 ldy ACC32 + lda ACC32+1 - cpy TIME.Century + cpy ACC32+2 bne .2 - cmp TIME.Year + cmp ACC32+3 beq .4 .2 jsr TIME.IsLeapYearYA CS = Leap @@ -114,24 +107,25 @@ K.ComputeWDAY lda #DAY0-1 Thursday : 4 (-1 for mod 7) sbc #7 MOD 7 .3 pha - inc TIME.DWORD+1 - lda TIME.DWORD+1 + inc ACC32+1 + lda ACC32+1 cmp #100 bne .1 - stz TIME.DWORD+1 - inc TIME.DWORD + stz ACC32+1 + inc ACC32 bra .1 - +*-------------------------------------- .4 ldy #S.Time.MONTH lda (ZPPtr2),y get month tax .5 lda K.StrFTime.MDAY-1,x get day count in this month + clc bne .6 february ? - ldy TIME.Century - lda TIME.Year + ldy ACC32+2 + lda ACC32+3 jsr TIME.IsLeapYearYA CS = Leap .6 pla @@ -217,13 +211,13 @@ K.CTime2Time jsr MEM.SPtr1PPtr2 ldy #S.Time.WDAY sta (ZPPtr2),y - lda #CENTURY0 - sta TIME.Century + ldy #CENTURY0 + sty ZPPtr3 lda #YEAR0 - sta TIME.Year + sta ZPPtr3+1 K.CTime2Time.Year -.1 ldy TIME.Century - lda TIME.Year +.1 ldy ZPPtr3 + lda ZPPtr3+1 jsr TIME.IsLeapYearYA if Leap year CS rol Toggle Carry @@ -241,23 +235,23 @@ K.CTime2Time.Year pla sta ARG32 - inc TIME.Year - lda TIME.Year + inc ZPPtr3 + lda ZPPtr3 cmp #100 bne .1 - stz TIME.Year - inc TIME.Century + stz ZPPtr3 + inc ZPPtr3+1 bne .1 .2 pla - lda TIME.Century + lda ZPPtr3+1 * ldy #S.Time.CENTURY sta (ZPPtr2) ldy #S.Time.YEAR - lda TIME.Year + lda ZPPtr3 sta (ZPPtr2),y K.CTime2Time.HMS ldx #3 diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index dc25f8bf..bdcc4e22 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -36,7 +36,7 @@ A2osX.AUX .PH $1000 Mem.XLoMem .EQ * .LIST OFF .EP -A2osX.GP .PH $BD00 +A2osX.GP .PH A2osX.SYSCALL .INB USR/SRC/SYS/KERNEL.S.GP .EP A2osX.D1 .PH $D000 @@ -65,15 +65,11 @@ A2osX.E0 .PH $E000 .INB USR/SRC/SYS/KERNEL.S.MEM .INB USR/SRC/SYS/KERNEL.S.MATH .INB USR/SRC/SYS/KERNEL.S.TERMLC + .INB USR/SRC/SYS/KERNEL.S.SHARED ********* TMP ***** go to A2osX.D1 .INB USR/SRC/SYS/KERNEL.S.IO ********* TMP ***** go to A2osX.D2 *-------------------------------------- -DevMgr.Stat .DA DevMgr.FreeMem -DevMgr.Free .DA DevMgr.FreeMem - .DA DevMgr.HiMem -DevMgr.DevIdx .DA #1 -*-------------------------------------- PWD.bDirty .BS 1 PWD.hDB .BS 1 PWD.DBPtr .BS 2