From 5f215b75adf0f5d6d562cee128781769303c0126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 26 Apr 2018 17:38:02 +0200 Subject: [PATCH] Kernel 0.9.1 : KERNEL, Preemtive mode, Working. --- .Floppies/A2OSX.BOOT.po | Bin 143360 -> 143360 bytes .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes BIN/PS.S.txt | 21 ++- INC/A2osX.I.txt | 6 +- SBIN/GETTY.S.txt | 15 +- SBIN/INSDRV.S.txt | 3 +- SBIN/LOGIN.S.txt | 2 +- SBIN/SHELL.S.txt | 2 +- SYS/KERNEL.S.CORE.txt | 286 ++++++++++++++++++++------------------- SYS/KERNEL.S.GP.txt | 2 +- SYS/KERNEL.S.INIT.txt | 8 +- SYS/KERNEL.S.IRQ.txt | 64 +++++---- SYS/KERNEL.S.PS.txt | 13 +- 14 files changed, 239 insertions(+), 183 deletions(-) diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index 6f97e149ee597ce430d66ab050ff414c5e04803f..a25f98d3bc7b6c2f23b0658ae5f9e7e75c09b98b 100644 GIT binary patch delta 7141 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 diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 615837bc2bc38b78c59c24d03ebeb9a0d08b5bda..700cf9a1505f258e7149e33d88b27d82924e6c74 100644 GIT binary patch delta 5838 zcmZ8F3s@A_x%1j(c@OL?EC_Ny0fAkDuLO-EC1MtekHkk3n_NeP6mN_+#-zr?%i6Mv zWQPLl=V*i8=~lT6Wx2bMxN5?>X-&U{Rx&rW6p;m^utlSE8r#Ou#J&G4q;0yhbI$qS z=ltiK|NLjn=0#@nB4;LrC)%>8cc`Dv&y2HuM9rg4%wHa9yGy+Sn7A0*cGWy+#Kzg` zRj&YviL!mI`Z=Cz`WY9f%JM{ANg;~+mAGw&rQBBiZu;ZiJTBa8__6XAmWk_U z)k-0?X`(!CHp28RD=a zZJYOA)uWfi9Q(5f>lO2UJ<>8FzM+)DC$mW54KdIDE>MTVTXOz|+`15>Xq(~xG{YIs zO?pfnqWRPVkJui`}^lNKlbqqA9l%S&vVXm{7)X|&f_lSA?#BBxjc;t>fd_u zY8E&(;=Nhf&qK0LUU1>*Jzrjkox8>e-Pb4`XM~96K`xK+L1_q;Mn=zmXVIQlpG6zr zcy(X(%V^_{z17vbv7xtQ-F7VWTerCa131&RZYYg<@s_pP_R7%G$ZO(F?)972*KP`% zZLXoDxu5+5E}Zq6o<$RxqQqrU!mGB)p(kS#7*5ZKkz69fB{2g!ThTQOuCrafmQ9B+ zeJYu-uV_qQ8uhlnU;9~FzQ|PE%@P`Cs=!PYbYYw^TL8%R{%~%>K2eA6X0hCYY-@J5 zL(B9bdBK#{_V?j!3oYNw=vnTrM|_97=MkeVzt^+EJF|pVb2LEzI}4$;wzse6;U{hG z>xQI-%JkbWhUQv$47_)K#(U57e04p7!fSfMZWQ1+W-IzMQJw$%-sg8?wiiCtYiF7p z_UziVbNBbr+C5d(`L>2nuTk4~?tQc8`#0C%c)P9ZR%+#1L*qI_4Oa&58iOOw%ROdr z#Cy5L21kR}5&XDyzOgmah$;;7lYN;|s8Q5cAgOlGH<~|hitJnN49kh-GL7a5JLTVM zkX8Nk19N{vM8{j(41Lc_ksxVX_{&FX*BT^pYMp_tT3ut>xYMx9aNqDJ!?eMUNz*l4 znz0cXThooL8OGLmMmzl=Ce4_Sj2Z!3a3S6JM!NB2x>4ivl9IfjU%EA9#{^Yxy3v#q z8}2-rWvs6$hhL~USx*NXnMPSHstfOB8rv^q8T*{Fx^VZS(A{XSN)8tV!+awhCOWsG zdtV>$dDYTL#f`igH2k&lDorlJ$i*9LxNsvEXN#LisJ)Rlv-W07M;gP;W#ofhbD7?> zX!!@|$b{t&b%Wi5M>TS+K)MFeU*ns$b`O?mS_aX7XwiP{z=xiuoDKnZ4a$1-$9Sh! zi2>ah@P`8v)*wVTW8H%}tHM#spg9#3QBvYjv#c)j0vug?6v^QN0ebm(Gl^c(4$Nhw zAERH#Inz;Yd{YWqs})(x)$XgZssKYd+Ot>nJ2jT8j#Nha%&^@{YaN)Ej_GqXMfAPr zRCBZ!X|xqsoFdbj${2JE9pUhLo!^353tywnbA9Z^7cnwTm7%Ymb$UQD%EmsFp8CFQQ`Tv+x8=B{|qs3ChQL{wa z)vy-~cEVt%&R#Q}9WrV5Pkrbq-d{$w40ewMMml7TQkf>D2SS2t&{Y5Jw*%k0ppdc?!PEIz+5$!ceN>~AHCzKi-4t7M$RD3^h-*#wn&Lgnc zS2N}CMD>3A5ndA^OmiIBIk1g(2)zR4vk&M?1(=iBU2y}*P5y@yLIParIa z{@m+~Y#d;$A2Y(0e^q2Fyq)sgR}8JAb#ry!R)JRPP`VDpp4VAl&@ep8dn7Oh|ULPfvzGL6vzv~;K|ikJ^clXN^OqYOKaNEcCo9Q%`T^Te z&V8Wk=nd#NmIQPJx1D53lEg_I$0@9POI3BoFycxN8I!FJ_NQSD%YIk_)dQlXC%%yHq!5N_^lN$j#E zqV0+3Qo@00J?m&m>{~CXT3Zs$ky9;+Ec!G7+AQ$gNR%_DY@wzofS7l^tOhxs^f#6x zy{<*g1@-io9N}f{I69Iz*?TO}vZ%K+(Xv>x-yYrjmxNOUZfp1~_0c1Vq99~z_H!z4 za{)&|QBU7rz}gd0VPd~D4c0`Q13P`iP3pdFP9kU3Ruej6^M95U0V)d=l?&OHsS^8L zqNilaLmtn?OS(TVR?`RbA;(*!p>v=h(|`5q&l5q2nmt~2NmKVrm_ z^}7|ohjs`0rN2R|1ARk{DZn%0712T+Xn?X``T}OVEgvUp1rbBXZ#fgWB+RPE8uJ-Q zJ#hu2YG~1mL6$3LAVPA*jCB=b$9jW7m=^c=r1`I65CW4z3JG>5V%BGMF1>=7gISX? zM*_w@r(^%Y(E6;dH4*FnCqwIVy4D0N6;ZkldG*XVQ+?bS272BXl(hZQJygt(7T{(0 z5q`l!JR3jGZ&-*I0CZ>}o`MhXrx)TI@FVU&EyVM1T+7c{j5h+YV=-PD2c0lW)>;Y9 zsR$*YIF481sX&}tiO+9ag6BtKm=NI_;n;Z1(5~wJCi=hamrM` zG-mzJv6>pk%VQAqVD((l@?TdFMYz_zVl7dm(u9U;LdWUq(QZG6LAo#o=wCfS#1-}6o>5(=-8}n$W$P00dE7c zBQ#hbx_QlJA|*1GDZJM>#I+1LX#SDS#2iB`qkp+!h_ep0J80(Rw}&`x$QkFIz8!Q% zhO%TyBR(u-#b6;jrR87WOk`4|NgMEawOvLTo zkU-DeL6#|Z5I7Zmd`Ttor20&{fL$2me^N=L;J@HID~UDuPxO&Ff$zbt9lM*x|KL?3VNDt{JcStf?+(O3QqpvP8XBjt z=wUcoLi>M2xi~gVpF+{-{p$h&)MiS=4O7?T%oa)rhjj1A1Zv}d`zo;(M||==A{ACi z;XdMJ-LVNpBGRSqsE_*wGpmXXt!PZZ9dnpw%-4%W%W#B8`CH<{xe=Fq|uvU$~RpoaP@;+Z*wiMx@{AEFo@|*7& zC_f$5Mfy)+QIn0N-#pT#@=H;D^QF%?wVzY@&A;h;Qwr*oMQ)|?LaLtZ~}prU9*fz<#5cmW3JL<&4W;f(L5@@uy15IOYj}C{u=I8z+kHbQw}+LRL}L@#yP3aW zC6=WW6cnJ$g2h$OXCmY559NNh^yzh_6}kL9E0L{!YPD%&b(IY#e%{tdoLS)r^UEYe z6Y$z;EK2!SfnZCuSqYJz6i0NSykie!lCZuJs! z`g;cGR1(Y-_J5QV9*)VRPr46GX=Cs=-zsDk=UBq()FBMdHj$YS4i7hx`P2tvXn;T8 zM5f{&@Pkcc5mdTn^3Kxf>xK~wOY)cd`~4&S#bb|-EgM@gwrULG!q~2{bz@JBZ5n%K zZ0pzyV=Uly-Exl~nK;(gLQ-zxIQbAi@{lLp4|$4+NSZi#>-ep<2`0b!sh% zu*5kCec`JCVaB~ZtQ!E=nQx?rF9|slOOJUfxVgE8#jw!vd$} zNH|u3@=!rI)OvXyI`*_1&!U2OTRTO^0<9or0Px8`go7NNrxv6?IWhA^5-$IUO{gin zO|;kC{+9r?f!}$aD%*B!LK(FQI(mS$&?2d(b7%gRxHB}%ou9C}C%9`9)}aY-9Oi*s zGu$UVNS-=BA${(X@MHwZ6XHfDtk);Dn&51ND;4lW`lP>3U7MI1;o~k)uJs=UlnvdDV16UtMG=s;OROSrz)U8dNUALDqyW2jI|zDTQkTSb_Bl zYc&M7U8G_n0O=kNA>DsYC8qHsR6hl;3SPCF>JR&BE&jwgy(WksPSzYw4nLe6aX2}$ JEjjAN{|CpKdH?_b delta 5906 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 U$1C9thBpM>&`y7R82-xt07F=_Qvd(} diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index 500125e6fea048850e04551aec6333553fa3292f..8b32927dc322be2c54b9307e26939e5a0c679b68 100644 GIT binary patch delta 14930 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 YLrLR)LW$RC>Us3p9sm@XEKAw+e>0_hpa1{> delta 14961 zcmZ`=c|e=Tv7b-kgHQS}2%TK!FxUnR;xM*}<4Xu(%N8Ib*}-m{L}M=fLrXG--}D^hoNubqi^e=4hL~G)dDYZPWH8ZQ{1C>G_iMz24WG+5IFW(&s;n zv^%>yJ3Gg3W>?3KH61(FbTN>Tajvr2G8N3I$T(YB=bSo{aSyf>Tc&JsMaKEcGUuhW z@|9WArYXs=`YyA2X)gPMWR>C7ETDfC@H6)yO>pT*&fg{Dt(BRV4qINxvOH=@bnoar zS6PVj=U3F6t1Pl)!}8D;Um)NPaRU7BuTM%j@cV)Uea>!N{nGvU2FY?jhH&W`2d;5` zXbLB}^w|QJ!Saq1E|j&Hur+Vbnab?kORp8xRK-ed<{+bp$( z+@Y|iI}9#W@_W4QP^-Jm6ZV{Sw}!OU%_qT{&6{`nx?9gsTO;Hx;w@dl@Li(8lB190 zgBl?>SL*K^?u*_ox~&$ezqM>&s55dXnwTO_3J)BLc8$mMDRQiH^*5>!>EZU(?9ixM zx2IK_-W$DMb2ozQm8QYgCQT3aO=uM%cQEAc_jT?B)hA6K7#r2xEg-ieiF0!rNwC}3 z?(YG0%RH4IsTOaQ+>PvVP|7zr0xWM#wfj3IcN6P9G@{|m;mF>>s5|Iyt81)13Tl_m z#Y#|u(sW-Go3>-qP*ig_fw>z$jz+W^kV80gQJ4*lsRi+(9mGe3&*o_j_}u*+(L*$y z2F{(5yO|xprM9`-N25{faC^YfBe`1`4XN5448}$qt7|7f-KDS74CdXE`wBK18w2G7 zQq42V>cD!nRHOB1<3opr`-b-oMEgM5BYN!D3`yRuZl8N|G!_iCPWan!fud`L4CXsR zu}Exu47=3paGBmQ&3y$FM*cnD6X4v7<2lnfEAosyx;^gDU^F^%Vrt~3C0l!7dMp;v zDjOS`P-@F|0T)0$Ur&%78Hn|3-Qm#spjY#EZ?8io*_|A;5(mj2fN7|@dMZD@T-r0W z3ID%lsvrNqcIu9}Bl9}!^hBl}jc;=712^Dor4xfMDrfc4t7XaLK*+MeWm7t^wpIes}DfihRc&-!E}-h|_H1r`eBl zlRBfW4j`fV0O{Po5T5fv{hU`q-k>x+Fw`rSYg~bbb||Hx2^-`gT4Y#quUx1uwvqWY z%#>JcPHB_~5Xij(9{kg~>(MkYzE zLB4?|{-8A7JJ<{68@Zw`B2E2}(8tP~rjET*VTeoYj^-@Ka>ubGn;pK6j?LX997U6+ zxpp5HW2#O}U4Er>JE*<7-k$`ePjoq>DcYS>V#hvl3|!xWA@A_`Pz+Q&1upU{Kt}09 z(ZJN@8w=wH^wt(oQ1X3I6bFi(TQu$v1rD|$T9(YQVw>CN?hFM%8Ai6Fy`Z3!iBlOR z3+7Rh1nrvy%Qp}cT$YXtF5AWrjra~nhhmeu>+g^^S(3gJ&Z{eOg6jLp!X~rZ&EM z<>KQ>LCGg@Uge}T9g7@=qDhkV!{2L~Gh|Btlnk(WR*_z~eo@X30mF+&Yg~OQ6k@ZV zk*jBJkeX$;r>_rYFGzorW-m&v9;*WHWW({&8aqX&{S-Y}wPHA9srQ4UqCO8>U#U4? zX|>Nirx+y3a%BPhxy+D*&Cl(=tJ0avUNaeL`@73s;6ov5<0ypv}FPD7NqLhwtJ_ z@o~NTg6LKsr*2}6aF?%dOuhAk(ZsFaNw$X8>FV-NacjKcn*ftZ_O`tUf~-nA3~CNi~(1`I3gD?c_An9y&J^iP1R zm%Y1La(4FN*Fik3C~%)tv=63xM=-vVV8XsYr!S27!X5B+q9Nm&6mijT`f)|e00`FI zfv&FL9Uvco>A4L*F?gh9=3}5oO7n3@80QHP#(7dW{FSHJr{6R*RZsq#J-SY(ipGs_ zsH3ZG_ASGOEE4v`w++E!_E4MR8X$I7g8VsTNBKPMBm&k;BA!)^v_)bOZpmK|dsDwC z;vovdI=hfaox>%`zoL_VoFx1uK!}hyh%YnCNuxdfgka0v4Dypmll>JG7RKX>kPp1I7vDex5Ok-im8{#PD4@v#8zCt6oe!`@;WM}=GIFaowGzjt@ zv`G$TLA|U~wt)IGT?QT~_&K}wJ}JNbzx0+?Kf-GH7c|A&DRS_4dBXvae~InpUnN!Z z*Sc!{MliYfx9oF&%_xrlPS=;Pzr)wHBkb<*^nmrh7j9U2M<4yJ7;S$Ku8QbJh`{=0 z@=MY{n!87AKL7J#lSY0jIK=jTq?0rld(iHP*aIyWP41;1}TG`H5scUnblbg zCG7hqqqQVc!t4QkOm~NHzVvAcC|M#Z&X|pcIYYJ)LtC9Rn`68*XtP)9Of;O@9n`9t zR;{j{d-ew7T6K2Pn9+=B-`~&QZ_K#cnE8+Mg$9{rK51-^H=d)`a2VmV!3{hRifKjtvk50B6@L$0);gx>cr7~U|=jpaX+sXdk7hbIM)EKx~cL< z9Q*9`yqz={GaG@5vKtagd;;V~)JA6$S9E`;SCILKD9e#oVwb5IFyv311m~&+N^=4e zB#>7lO~D$r{Y`^wy`_b?OM+#PufR_GT3!1@(&p*j90Kc=`dl1TlbbA9$ES#Aug59K zu@IEmfWvJYQ-=p>P3xwGqn#dol;>11GKyGB`9kVVDTv2=4 z1D?&H6>C6^P}@xH7jG%X5 zbN-z~Ch~8d%~PU+8K!cVNPlco$s8n+Y|H0xocV5%lN|-edCX@cHFHeEYY#p=5-kZUQPvKo7?ENaw&cJ@wRgopIbeZ$)^9+Xm%6iR*#&e*LsCZ0roXTN}al(ew$? z_U#Xd%0y~8M0pS=KtLrwgtHYqOqU84kS26j??lb!S09`Yi*?9Uly68@&x_GQq_|vB9TEV zPl@?WPxJXtqZ<$>9t;Jdk;BoO^#m0yeRpuh?qI9G(;f2f_F=N>d{$!C=QHdFze-Ge zEx|-$QOnm8G80TG&*@BjLucYYl1#|Y;|$6-^_{*Tc4~c5Fv813w~X|Ufc%m)^FoFp zj2?Y8Ixjs4_IDLp~WMR-yrHA3x&=5Nh*= zpI%TJ;=e*s3lF9InkL6M{u}JK{gw_5D?j=+f?lxvE`2fO9n9`=zqWVNnDU}uvAnl{ z^nZ|a45$8I+RPusI?5mM?{ZvF`IFx8XE9;LU#M&_F&RQ7)5=>XVo|Mk=H-l*xIyL~3V0F#@i z-6vpiy@C62uCQAVjhrSE8i|w5;O>+LoC~8?PNP_ZQ-RVXT9uXbcLbDX16M@Hs(-iQ zYO$iSMkM+LErxJt8`ieaUtz7l+ZjG3>fp*1f?&y7LmPWHQ!bURWR@(s+_}!cOD9;R z>DWK&-ZDUiwbJ!$bCz6Ewn2<>Z4|pmIHA*GN|%QXWy#LCSM;JJI&fb%i_QX{Xblha z9t=jY$kVGcQqZ2((by2vJDi*6JCOWlP(H&m0?54p(~-Vja>5w9Ap5f-8L8YC1@$6K zdw5M?4P;|NOcl(^efvPhyco=v2(@r$^aUNMU=EAV}>GQ{tL?$qI>aIsC)GKEn7Q+w{nbtyph~d43L9)F~z_tR zY?m}^mPgbobH3oE23!SDa}U{!n8-7JG~jiw2DuQK$}eKKIb>H)G3|9CjiMPfM_!CH zr6mGE;UcHFiZ@}cITjt$upYG=>xQKQ6J?hr$o7F!eoI5+#>aY2V&d?Z^Da4y8H(h; z%;d|HaUO=2*DVJXt07#ZE5VM{4{E2n2nS(QE2lDueE_fwOl9}^WLCja2!&4NAf?F@ zpbXOAqmX?F=c7o_gcxv07xJ)>qIHC_4JvH4B`aIk>m;LsBzKHR<||t&l8`VX=azY+KvU6;OYsZCbZ!;B92!JN z^D4r5o~^d-S%tQC3Ubzel3?7It_E%TZ}PjPWr9!VolbY}hvov5ZINfhh~1a8)8g2RJ@14H{Y@+Q@6&vfSW%)Ob} zW@ul}$wRT(nan>*GoQ>fm^ZsuuWD&rjmJCt>C8VGXD(zaK@;%cj+cjK3O%%Y)DTK| zA=ggVko-H9RqZ9ouX=42!)8^ojdTu*n%K3onT66ib_4#gw~Jm(r-K4Q6z-N-eXg8e z-j~38BB-cXNl)NatY*WCGwkwgW{u&z#P0M+w#sY-nu&zd@dX{H>9yiOm!}O}Pf4u& zD@I2q0hbl8iqUU~(T4hW*@JVL?nQsaMfe5U6;PDJUZ2Y>H01Mwa{kQYnfJ~~XN~`o z=KdARk}?kP!*dT|eF*IoENG-;*_FKwEe(hz7NN07GEPoqOxwmD%FQmUI*f$2BQ*LbsSoLu zyI}}&kLnYyS<`~9X6XcbU{_XU!42vc+V zc{ObtODQDz?zXGC{b3&`TOr6+)-raT(v(?;WDRci?dz2Kcs<+;`B*nW&pO#LJ{Hps z;>9OkEso-CgR2p@fu1!rel#|Ky-5VfkT0BEg4a}>&3eodp{B86lKeFlSl%}a*s#EY z{@teGEQ#&NYml+Z7IsHOsc6O;3;BN`hkPuy(6>}hnpQNyqIC(i@-{%-diHiisdZs_ zWnt7?35z$fn!QSKCe~P>#=`=8mFhUvQ5@bho>!hGmb0;xLd#L8SFnh}+u9RtQK;H1 z&Nr2v=Ho-dS}ZblP#eSh;NE`pFd$R4#pEaHk4!@KR`KCb4a6X#x4~ z_}%;uN*!t6>OXZy;sNDf0{^OD5IkUZDj810dV>LTZmbqevh|sAqg?~lXb|29OP8{N z>aOgiOt~PQsb3pqiTGkuL?r2sj*TCRo~3k1HX%s1oB8lSz;lYqHs!5e4DBkRXuQ!} zgo{(6j;Eh%KnILo4hccA=&&}AU@X#EbtVzb*lHk^285#$MgV*&hjidkeA z4#~?;#p;w<6fB@F)TxV*+EScG4VJ|Vh)Xc-#o5Bxc zG3R`j`J6DJ8Yn%_oQho1$OQ0`??J}Q(^RAH9Xt%my#k~w9}(TA`?$wF0j2k|b{rP? zD3uebHcNQj@gQyJsHSHdqNE`|gfrS6rmH8NV}#Q90?G0*U1)@&kz2>d*+oURuY3eK zBLzdKJcA>ZPmtLj1?wlpWuP#6gyo=oid+N6kx#QfDRO1rqez|e7`RvSN(Rn4`+245 z3}$0!aA;^1SttZyyQe~1x^@KGv`);Ty0tByV9?iDUS1Bef>St5NJsFVr*^zvg#{Ng z_PA84XVV6GS7PFVY_SmpgXvFvvKQf2R`aYGA3NlTqydAHoQsn!w(x6F@)5~_iPt>f z%wuJTREOP~kS;I!*l<{(oxQ%nR3JInA2yh->~iYDLRa9zUK?f~^J?Lx^01{q7c&(k zP|QV`f6%2W-vXLdK#SeZSCTh+l3zs=0Uj4tI`0INw~X3yR!J8GZMIiG*a0r zr8z?bH$?qIt%Jk82ge})D>TBEk13b!srQX4e45q0CKu#CgW|9}%lDV$s_?6bD?Dn3 zGoJmm6u!QWq{?%ou(;oEU{INefc-yG^ILbPr^5%i&kLj0U;ilI6e6;}AV}+ZDlACz zUQ8vWO zBdjc^GW&t^Z(->~kC%$#SW!AougsEC()NuHVJ0>_1dbMQ zSxx9VS)Z!C0w-=fFA6575~8i|_JwwI__VReKp&<`>nZQqNOxuKRSfH5lVemq>-NH0 z1atGg1Fyu`rMJvAd3bY{^aJQVmTh2`%jTuhMz;F0dASSmT$&Bacx47lTUqR~xw6)q zt{Pjq0&S3o*iN{2R06l#4Ke~esA*?kzih5{A+X~@)lF9*xE4Rl_^EkK{?=6fy1gg% z4Zm5wBglu|8_M0+U5?vZPpavWwOxp3h-I z?pntl>`UC3>)R>IGVUAS?N}p#C6ld-A5DTja`lA$&QCPM~dk1m9&~+1wPCYL5Gd z)^@!=+J!FjcwKKn8M zpzC$cnSIaP@48f*J&u}d+m^02xH}mUJ>cD`4hDp~E9*?P@pgK9wL-^eycm#!;6BAU z262kz+tY2D=#Fn6$Mfd?ZDce)+#4MmgX->u)|)h58j@nTc>hY*K52%_Z(*%FQuUjM z?w#qj=e#Oqkzj~k`ML}6oo$cq?GRb)LY|lHro!lf^L=WW?*sVVbv0ewChwXOu*JSd zSYj&7$-YJyk-HJ!MP4i7^OEb>_CB?IG2YIC3-4ul5N}Q+8e{N!+_XL1=g7bP=ee8Lg3;~4CI5jgl$lOEQ(Pad{u*bNcS1| zENTczYKK`(R9z9r`UJSHPgyMaC=wr~VqftXk8BCB)0TDvIZhFQJe$6_f<+5@TbFwz z8Lshek=HCpCv+<3gxCZLE$&WK%t56ZhPWOveNacp_8ZB~lWXWgc!?M@fUl#ln8Ays zcvLqbhuLv4-L_V|KRt#Gsy0t>9KSC*fn3pZtR;<0Ks||_^g^x$7M+6WI?=HTJ18F^ zY=qOE#!=Rrg_@*138#?oJby)f=LIxBQKv~%l4~f z(mA$yzq%sxZe*+cJUfa_nG8R-+`~S)UtP0qTHkLY#{{F%{o{j?QEdckgdk(?0fm@& z&?%9<&}GAkh(>?3jgWsI%j;KN%kM|3ypPUX6?KF90M1JY0DC z*~w9GeN1=)uKQS>!VnOP9*4yrXSemM#Z`|W72a5tV*WvApH9W&P$B<;;jKaAnR^ijW@wM-719B;)*7X z0OMHU(}Xn^vP+9N5L?%$@k^~P1lM$jn!;~Gcnk3Ngw!ug+I~lv>CH$aYK9RLIe2c9*sMh1V!RSG? zRC=?$&bI#Dqal=$n5{GYInLDgk?Q_NQJ7CSVkF3Gz* z&(lwFdB@M#gM+F){_|wB;}8d{_nR5O)B@SRt%YzQs{;F&Ke9Wo&8><*n zt5^LUH{tw;=;qdvbmsa06p~wT(+ag9vG|Z$6PNU29fl(V0+bx14zBo>e}0B|0Fc;9 zqWY5~r`&aeoQVVTvuNOa8jv8ZRRm<@Y$fiNMJ7Nbd+;tT1yGpiF~mYZVJ5!RG`_N> zlmw?e@!TA87NzpFGM9A@t4)~}9Pi0vlf&w!pjAwhE~HXhqGE{#sNw7QsE7%*TJ-2Z z3<@2Dgo&?(Qe5q1_7QberVCeCp3k~Q)MfDk0V#6}rNm7z54}Z#Gd=XG#kity>8=v~ zTc<=|*B_by-g={Umr3YslI|>_`D!_iCgs75a0!x`D+s=Fd#%Ki!52$x+cINWIImjb z8zqc)E4c`zMt@YYLSWV0T7hyo`tm?wom6weKZHTjqphd+ftY`4`w*Fd;uZsz*0aF% zYNgb`uD@Pg8gE2Cco_roFfB<-o~)RB%x7SP?N!V~62C)Rja*yTq*1gX1?DCR3QS1A zx;Bl%ixgMRQ>>GEu)K>INy;+(=_I8i`ZUEn9YOe|Ct)Y30xs+lHhb`d=*Jwoown^j zXtVP~->`OMCZ^syXUNIMOBR3kj3qn&Ng;l?jUs^f7y*dH+x(An z0Tdt(;R3)~`zQ4MAd^t>N%mNE_7dBtaGZizgBPk1Zh-4CcDXv+ne!R^Y`#EYol5aD IHQ77=4@j1QK>z>% diff --git a/BIN/PS.S.txt b/BIN/PS.S.txt index d0f506fb..3ec87b2c 100644 --- a/BIN/PS.S.txt +++ b/BIN/PS.S.txt @@ -32,6 +32,7 @@ CS.START cld .DA CS.DOEVENT .DA CS.QUIT L.MSG0 .DA MSG0 +L.MSGK .DA MSGK L.MSG1 .DA MSG1 .DA 0 *-------------------------------------- @@ -44,11 +45,17 @@ CS.RUN >LDYA pData >LDYA L.MSG0 >SYSCALL PrintF.YA + >PUSHB.G PS.KCPU + + >LDYA L.MSGK + >SYSCALL PrintF.YA + >LDA.G PS.Count beq .8 -.1 >INC.G PS.Index + >INC.G PS.Index +.1 >INC.G PS.Index tay lda (pData),y PID @@ -72,8 +79,10 @@ CS.RUN >LDYA pData >PUSHEA.G PS.FLAGS - ldy #S.PS.STATS - lda (ZPPtr),y + >INC.G PS.Index + tay + lda (pData),y + >PUSHA CPU% ldy #S.PS.PID @@ -117,14 +126,16 @@ CS.QUIT clc *-------------------------------------- CS.END MSG0 .AZ "ID CPU\% Flags UID PID Command Line\r\n" +MSGK .AZ "000 %03d\% -------- *KERNEL*\r\n" MSG1 .AZ "%03d %03d\% %s %03d %03d %s\r\n" -MSG.FLAGS .AS "IRDQHSE2" +MSG.FLAGS .AS "IRQDHSed" *-------------------------------------- .DUMMY .OR 0 DS.START PS.COUNT .BS 1 -PS.DATA .BS K.PS.MAX +PS.KCPU .BS 1 +PS.DATA .BS K.PS.MAX*2 PS.Index .BS 1 PS.FLAGS .BS 9 DS.END diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 1d7c5e96..045ed5e9 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -363,8 +363,8 @@ S.DSTAT .EQ 25 S.PS.F .EQ 0 S.PS.F.INIT .EQ %10000000 S.PS.F.RUN .EQ %01000000 -S.PS.F.DOEVENT .EQ %00100000 -S.PS.F.QUIT .EQ %00010000 +S.PS.F.QUIT .EQ %00100000 +S.PS.F.DOEVENT .EQ %00010000 S.PS.F.HOLD .EQ %00001000 S.PS.F.SLEEP .EQ %00000100 S.PS.F.EVENT .EQ %00000010 @@ -423,7 +423,7 @@ S.EVT.F.T1SEC .EQ %01000000 S.EVT.F.hMEM2 .EQ %00100000 Indicates That S.EVT.B2 is a hMem S.EVT.F.hMEM1 .EQ %00010000 Indicates That S.EVT.B1 is a hMem -S.EVT.hDEV .EQ 1 +*S.EVT.hDEV .EQ 1 S.EVT.B1 .EQ 2 S.EVT.B2 .EQ 3 S.EVT.W1 .EQ 4 diff --git a/SBIN/GETTY.S.txt b/SBIN/GETTY.S.txt index bcf49b5e..605ccb64 100644 --- a/SBIN/GETTY.S.txt +++ b/SBIN/GETTY.S.txt @@ -21,7 +21,7 @@ CS.START cld .DA 0 .DA CS.END-CS.START CS .DA DS.END-DS.START DS - .DA #16 SS + .DA #64 SS .DA #0 ZP .DA 0 *-------------------------------------- @@ -50,9 +50,9 @@ CS.INIT ldy #S.PS.ARGC ldy #S.PS.hStdIn sta (pPs),y - ldy #S.PS.hStdOut + iny #S.PS.hStdOut sta (pPs),y - ldy #S.PS.hStdErr + iny #S.PS.hStdErr sta (pPs),y >STA.G hNode @@ -67,7 +67,7 @@ CS.INIT ldy #S.PS.ARGC txa >STA.G hBinName - + lda (pPs) ora #S.PS.F.EVENT Now accept events sta (pPs) @@ -82,12 +82,13 @@ CS.INIT ldy #S.PS.ARGC .9 rts *-------------------------------------- CS.RUN >SLEEP + >SYSCALL GetChar bcs CS.RUN + .11 >SLEEP >SYSCALL GetChar - bcc .11 jsr Init.Timeout @@ -102,8 +103,7 @@ CS.RUN >SLEEP cpy #MSG.TELNETOPT.LEN bne .1 -CS.RUN.LOOP - +CS.RUN.LOOP .1 >SLEEP >SYSCALL GetChar bcs .4 @@ -125,6 +125,7 @@ CS.RUN.LOOP lda (pData),y >SYSCALL GetMemPtr.A >SYSCALL ExecPS.YA + .9 rts .8 clc diff --git a/SBIN/INSDRV.S.txt b/SBIN/INSDRV.S.txt index ead8d773..3dd87652 100644 --- a/SBIN/INSDRV.S.txt +++ b/SBIN/INSDRV.S.txt @@ -24,7 +24,8 @@ CS.START cld .DA 0 .DA CS.END-CS.START Code Length To Relocate .DA 0 Data Segment to Allocate - .DA 16 SS + .DA #64 SS + .DA #6 ZP .DA 0 *-------------------------------------- * Relocation Table diff --git a/SBIN/LOGIN.S.txt b/SBIN/LOGIN.S.txt index 216c2242..a623be31 100644 --- a/SBIN/LOGIN.S.txt +++ b/SBIN/LOGIN.S.txt @@ -24,7 +24,7 @@ CS.START cld .DA 0 .DA CS.END-CS.START CS .DA DS.END-DS.START DS - .DA #16 SS + .DA #64 SS .DA #2 ZP SS .DA 0 *-------------------------------------- diff --git a/SBIN/SHELL.S.txt b/SBIN/SHELL.S.txt index 5a2f9bec..ed90f8f7 100644 --- a/SBIN/SHELL.S.txt +++ b/SBIN/SHELL.S.txt @@ -33,7 +33,7 @@ CS.START cld .DA CS.END-CS.START CS .DA DS.END-DS.START DS .DA #64 SS - .DA #0 ZP (256) + .DA #16 ZP .DA 0 *-------------------------------------- * Relocation Table diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index a08cc662..fc45e5f6 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -3,17 +3,14 @@ PREFIX /A2OSX.BUILD AUTO 4,1 *-------------------------------------- CORE.Run lda CORE.PSCount - sta CORE.Counter -* bne .1 SHOULD NEVER HAPPEN!!! + sta CORE.PSIndex -* jmp CORE.Events + beq CORE.Events SHOULD NEVER HAPPEN!!! -.1 ldx CORE.Counter - lda PS.Table.PID-1,x - bne .11 - jmp .8 +.1 ldx CORE.PSIndex + lda PS.Table.hMem-1,x + beq .8 -.11 lda PS.Table.hMem-1,x jsr K.GetMemPtr.A >STYA pPs @@ -30,37 +27,22 @@ CORE.Run lda CORE.PSCount eor #S.PS.F.HOLD unmark as HOLD sta (pPs) -.2 jsr CORE.PSSelect Restore at least ZP & Ptrs +.2 jsr CORE.PSSelect Restore ZP & Ptrs - lda (pPs) get S.PS.F again - bit #S.PS.F.SLEEP Is this PS sleeping? - beq .3 no, call INIT/RUN - - eor #S.PS.F.SLEEP unmark as SLEEP - sta (pPS) - - jsr CORE.Resume Restore PC....and JMP to - bra .41 - -.3 bit #S.PS.F.INIT - beq .4 - - eor #S.PS.F.INIT+S.PS.F.RUN unmark as INIT,mark as RUN - sta (pPS) - - ldx #TSKMGR.INIT - .HS 2C BIT abs -.4 ldx #TSKMGR.RUN - - jsr CORE.pCodeJmp Call INIT/RUN function + jsr CORE.PSExec INIT/RUN/QUIT/RESUME dec IRQ.InKernel -.41 bcc .7 INIT/RUN/RESUME said CS=QUIT? + + bcc .61 Error ? + +.5 tax Yes, From INIT or RUN,save RC -.5 tax save RC ldy #S.PS.PPID Notify Parent Process for exit code... lda (pPs),y + beq .6 no parent process + jsr CORE.GetPSByID.A X unmodified bcs .6 parent is dead.....skipping... + >STYA ZPPtr1 lda (ZPPtr1) Parent PS is HOLD? @@ -75,12 +57,24 @@ CORE.Run lda CORE.PSCount sta (ZPPtr1),y .6 lda (pPs) - eor #S.PS.F.RUN+S.PS.F.QUIT + and #$3F $ff^S.PS.F.INIT+S.PS.F.RUN + ora #S.PS.F.QUIT sta (pPs) + bra .7 - ldx #TSKMGR.QUIT Quit this process - jsr CORE.pCodeJmp Call QUIT function - dec IRQ.InKernel +.61 lda (pPs) + bit #S.PS.F.SLEEP + bne .7 + + bit #S.PS.F.INIT + beq .62 + + eor #S.PS.F.INIT+S.PS.F.RUN go from INIT to RUN + sta (pPs) + bra .7 + +.62 bit #S.PS.F.QUIT + beq .7 ldy #S.PS.PID lda (pPs),y @@ -89,9 +83,8 @@ CORE.Run lda CORE.PSCount .7 jsr CORE.PSLeave Save ZP & Ptrs -.8 dec CORE.Counter - beq CORE.Events - jmp .1 +.8 dec CORE.PSIndex + bne .1 *-------------------------------------- CORE.Events jsr CORE.GetEvents @@ -110,7 +103,7 @@ CORE.Events jsr CORE.GetEvents bmi .2 Ignore & Discard any timer event - jsr CORE.DumpEvent +* jsr CORE.DumpEvent .2 jsr CORE.DestroyEvent @@ -227,19 +220,18 @@ CORE.Dispatch lda CORE.EvtCount lda CORE.PSCount beq .9 - sta CORE.Counter + sta CORE.PSIndex -.1 ldx CORE.Counter - - lda PS.Table.PID-1,x - beq .5 +.1 ldx CORE.PSIndex lda PS.Table.hMem-1,x + beq .5 + jsr K.GetMemPtr.A >STYA pPS lda (pPs) get S.PS.F - bit #S.PS.F.INIT+S.PS.F.HOLD Init or Waiting for Another Task to Terminate? + bit #S.PS.F.INIT+S.PS.F.HOLD+S.PS.F.QUIT Init or Waiting for Another Task to Terminate? bne .5 bit #S.PS.F.EVENT Accept Events ? @@ -251,7 +243,7 @@ CORE.Dispatch lda CORE.EvtCount sta pEvent Select first event in list lda CORE.EvtCount - sta TSKMGR.EVENTCNT + sta CORE.EvtIndex .2 lda (pEvent) Empty event, select next beq .3 @@ -259,11 +251,10 @@ CORE.Dispatch lda CORE.EvtCount lda (pPs) ora #S.PS.F.DOEVENT sta (pPs) - - ldx #TSKMGR.DOEVENT - jsr CORE.pCodeJmp Call DOEVENT function + + jsr CORE.PSDoEvent dec IRQ.InKernel - + lda (pPs) eor #S.PS.F.DOEVENT sta (pPs) @@ -271,10 +262,11 @@ CORE.Dispatch lda CORE.EvtCount bcs .3 not for this PS, try next event in list jsr CORE.DestroyEvent this PS handled the EVT, destroy it... - lda CORE.EvtCount - beq .8 no more event, exit -.3 dec TSKMGR.EVENTCNT + lda CORE.EvtCount + beq .4 no more event, exit + +.3 dec CORE.EvtIndex beq .4 all EVT submitted to this PS, try other PS lda pEvent try next EVT to this PS @@ -285,7 +277,7 @@ CORE.Dispatch lda CORE.EvtCount .4 jsr CORE.PSLeave -.5 dec CORE.Counter +.5 dec CORE.PSIndex bne .1 .9 sec @@ -294,9 +286,6 @@ CORE.Dispatch lda CORE.EvtCount .8 clc rts *-------------------------------------- -CORE.Quit clc - rts -*-------------------------------------- * PS.Free.A * In : A = PID to free *-------------------------------------- @@ -338,7 +327,8 @@ CORE.PSFree.A sta .1+1 Save PS ID bra * .3 stz PS.Table.PID-1,x - lda PS.TABLE.hMem-1,x + lda PS.TABLE.hMem-1,x + stz PS.TABLE.hMem-1,x .4 jmp K.FreeMem.A .8 lda (ZPPtr1),y @@ -351,6 +341,7 @@ CORE.GetPSByID.A jsr CORE.GetPSStatus.A bcs .9 lda PS.TABLE.hMem-1,y + beq * jmp K.GetMemPtr.A .9 rts *-------------------------------------- @@ -370,16 +361,16 @@ CORE.GetPSStatus.A .8 clc rts *-------------------------------------- -CORE.DumpEvent ldy #S.EVT-1 +*CORE.DumpEvent ldy #S.EVT-1 -.1 >PUSHB (pEvent),y - dey - bpl .1 +*.1 >PUSHB (pEvent),y +* dey +* bpl .1 - >LDYAI .2 - jmp K.PrintF.YA +* >LDYAI .2 +* jmp K.PrintF.YA -.2 .AZ "!Evt:F=%b,Dev=$%h,LO=$%h,HI=$%h,W1=$%H,W2=$%H\n" +*.2 .AZ "!Evt:F=%b,Dev=$%h,LO=$%h,HI=$%h,W1=$%H,W2=$%H\n" *-------------------------------------- CORE.ScrSel and #$0F cmp A2osX.ASCREEN Same as active screen...nothing to do @@ -436,7 +427,7 @@ CORE.PSSelect0 >LDYAI CORE.S.PS0 Select PS0 *-------------------------------------- CORE.PSSelect ldy #S.PS.ZP+ZPBIN.SIZE-1 ldx #ZPBIN.SIZE-1 - + .1 lda (pPs),y sta pCode,x dey @@ -444,7 +435,7 @@ CORE.PSSelect ldy #S.PS.ZP+ZPBIN.SIZE-1 bpl .1 rts -*-------------------------------------- +*-------------------------------------- CORE.PSLeave ldy #S.PS.ZP+ZPBIN.SIZE-1 ldx #ZPBIN.SIZE-1 @@ -456,20 +447,85 @@ CORE.PSLeave ldy #S.PS.ZP+ZPBIN.SIZE-1 rts *-------------------------------------- -CORE.Sleep php +CORE.PSExec lda (pPS) + bit #S.PS.F.SLEEP + bne CORE.PSResume + + bit #S.PS.F.RUN + bne .2 + + bit #S.PS.F.INIT + bne .1 + + ldx #TSKMGR.QUIT + .HS 2C BIT ABS +.1 ldx #TSKMGR.INIT + .HS 2C BIT ABS +.2 ldx #TSKMGR.RUN + .HS 2C BIT ABS + +CORE.PSDoEvent ldx #TSKMGR.DOEVENT + + lda pCode+1 + pha + lda pCode + pha + php + sei + inc IRQ.InKernel + rti +*-------------------------------------- +CORE.PSResume sei + + eor #S.PS.F.SLEEP unmark as SLEEP + sta (pPS) + + >PULLA Get !BC + tax + + beq .2 + +.1 >PULLA + pha + + inx + bne .1 + +.2 ldy #S.PS.PC+1 + lda (pPs),y + pha + + dey #S.PS.PC + lda (pPs),y + pha + + dey #S.PS.P + lda (pPs),y + pha + + dey #S.PS.Y + lda (pPs),y + pha + + dey #S.PS.X + lda (pPs),y + tax + + dey #S.PS.A + lda (pPs),y + + ply + inc IRQ.InKernel + rti +*-------------------------------------- +CORE.PSSleep php sei - cld - + phy ldy #S.PS.A sta (pPs),y - lda #S.PS.F.SLEEP - - ora (pPs) - sta (pPs) - txa iny #S.PS.X sta (pPs),y @@ -498,92 +554,50 @@ CORE.Sleep php tsx + inx skip P + inx skip PC HI,LO inx - inx - inx + txa - tay Save !Byte count for later beq .8 + + tay Save !Byte count for later .2 pla >PUSHA inx bne .2 + + tya -.8 tya push CPU Stack BC to restore on top of Soft Stack - >PUSHA +.8 >PUSHA push CPU Stack BC to restore on top of Soft Stack - clc exit to kernel with CC - rts -*-------------------------------------- -CORE.Resume sei + lda (pPs) + ora #S.PS.F.SLEEP + sta (pPs) - >PULLA Get !BC - tay - - beq .2 - -.1 >PULLA + lda #0 cld,clc,cli pha - iny - bne .1 - -.2 ldy #S.PS.PC+1 - lda (pPs),y - pha - - dey #S.PS.PC - lda (pPs),y - pha - - dey #S.PS.P - lda (pPs),y - pha - - dey #S.PS.Y - lda (pPs),y - pha - - dey #S.PS.X - lda (pPs),y - tax - - dey #S.PS.A - lda (pPs),y - - ply - inc IRQ.InKernel - rti -*-------------------------------------- -CORE.pCodeJmp lda pCode+1 - pha - lda pCode - pha - php - sei - inc IRQ.InKernel - rti -*-------------------------------------- -TSKMGR.EVENTCNT .BS 1 + rti exit to kernel with CC *-------------------------------------- DevMgr.Stat .DA DevMgr.FreeMem DevMgr.Free .DA DevMgr.FreeMem .DA DevMgr.HiMem DevMgr.Count .DA #2 NUL,SYS *-------------------------------------- -CORE.EvtCount .BS 1 - CORE.VBLState .BS 1 - CORE.IRQMode .BS 1 - CORE.TickPerSec .BS 1 CORE.TickPer10t .BS 1 CORE.TickSec .BS 1 CORE.Tick10t .BS 1 +CORE.CPUStat .BS 1 +CORE.InKernelStat .BS 1 *-------------------------------------- -CORE.Counter .BS 1 +CORE.EvtIndex .BS 1 +CORE.EvtCount .BS 1 +CORE.PSIndex .BS 1 CORE.PSCount .DA #0 CORE.LastPSID .DA #0 CORE.S.PS0 .BS S.PS.hStdErr+1 diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index d0e81ccc..839d9ebf 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -42,7 +42,7 @@ AUTO 4,1 *-------------------------------------- * SLEEP *-------------------------------------- - jmp CORE.Sleep + jmp CORE.PSSleep *-------------------------------------- * *** MUST BE REINTRANT *** *-------------------------------------- diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index ebdc5583..152a1a6b 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -1074,10 +1074,10 @@ MSG.Init2.OK .AZ "A2osX[Stage2]:Complete.\n" *-------------------------------------- MSG.Init3 .AZ "A2osX[Stage3]:Init\r\n" MSG.DEV .AZ "-Device Manager...\r\n" -MSG.IRQ .AZ "-Interrupt Manager...\r\n" -MSG.IRQ.VBL .AZ " (Mouse VBL IRQ Activated)\r\n" -MSG.IRQ.CLOCK .AZ " (Clock Card IRQ Activated)\r\n" -MSG.IRQ.POLL .AZ " (Polling Mode)\r\n" +MSG.IRQ .AZ "-Interrupt Manager..." +MSG.IRQ.VBL .AZ "Mouse VBL IRQ Activated.\r\n" +MSG.IRQ.CLOCK .AZ "Clock Card IRQ Activated.\r\n" +MSG.IRQ.POLL .AZ "Polling Mode.\r\n" MSG.EVT .AZ "-Event Manager...\r\n" MSG.FLT .AZ "-Path Filter...\r\n" MSG.TSK .AZ "-Task Manager...\r\n" diff --git a/SYS/KERNEL.S.IRQ.txt b/SYS/KERNEL.S.IRQ.txt index e8841940..f254aa25 100644 --- a/SYS/KERNEL.S.IRQ.txt +++ b/SYS/KERNEL.S.IRQ.txt @@ -21,8 +21,7 @@ K.IrqHAuxLC cld pla pha and #$10 BRK? - bne * -* bne K.IrqHAuxLC.6 + bne K.IrqHAuxLC.6 stx K.IrqHAuxLC.5+1 sty K.IrqHAuxLC.4+1 @@ -68,11 +67,17 @@ K.IrqHAuxLC.3 pla sta $ff pla sta $fe - bvc K.IrqHAuxLC.4 no task switching + + bvc K.IrqHAuxLC.4 if V, skip task switching + + tsx + txa + eor #$FC Only LO,HI & P on stack + beq K.IrqHAuxLC.4 we are in kernel CORE.Run php php make room for 2 additional bytes - + tsx lda $104,x get RTI PC LO @@ -84,10 +89,14 @@ K.IrqHAuxLC.3 pla lda $103,x get IRQ pushed P sta $101,x down 2 bytes - lda #CORE.Sleep make a RTI like "jsr CORE.Sleep" + lda #CORE.PSSleep make a RTI like "jsr CORE.Sleep" sta $102,x - lda /CORE.Sleep with RTS=PC IRQ-1 + lda /CORE.PSSleep with RTS=PC IRQ-1 sta $103,x + + lda #$A0+'S + eor SYS.BASL0+37 + sta SYS.BASL0+37 K.IrqHAuxLC.4 ldy #$ff Self Modified K.IrqHAuxLC.5 ldx #$ff Self Modified @@ -127,32 +136,41 @@ K.IrqH.VBL jsr IRQ.VBL.MSM SERVEMOUSE *-------------------------------------- K.IrqH.Switch inc IRQ.Tick + dec CORE.CPUStat + bne .2 + + lda #100 + sta CORE.CPUStat + + stz CORE.InKernelStat + + ldx CORE.PSCount + +.1 stz PS.Table.Stat-1,x + dex + bne .1 + +.2 lda IRQ.InKernel keep V flag set + bpl .3 + + inc CORE.InKernelStat + +.9 clv + clc + rts + +.3 ldx CORE.PSIndex + inc PS.Table.Stat-1,x + bit A2osX.F A2osX.F.PMODE .EQ %01000000 bvc .8 - lda IRQ.InKernel keep V flag set - bmi .9 - lda (pPs) and #S.PS.F.DOEVENT bne .9 - lda #$A0+'S - eor SYS.BASL0+37 - sta SYS.BASL0+37 - -* ldy #S.PS.STATS -* lda (pPs),y -* inc -* sta (pPs),y - bvc * - .8 clc exit with V flag set rts - -.9 clv - clc - rts *-------------------------------------- K.IrqH.DEV >LDYAI Dev.Table >STYA $fe diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index 3caa214b..2d5b271d 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -303,6 +303,7 @@ PS.Init jsr BIN.Load.YA Y,A=filename full path .2 ldy #H.BIN.EXE.SS.SIZE lda (ZPPtr4),y Load SS.SIZE + ldy #S.PS.ZP.STACK sta (ZPPtr3),y save pStack LO... @@ -393,7 +394,11 @@ K.GetPSStatus.A jsr CORE.GetPSByID.A K.GetPSList.YA >STYA ZPPtr1 ldx #0 - ldy #0 + + ldy #1 + lda CORE.InKernelStat + sta (ZPPtr1),y + iny .1 lda PS.Table.PID,x beq .2 @@ -401,12 +406,18 @@ K.GetPSList.YA >STYA ZPPtr1 lda PS.Table.hMem,x iny sta (ZPPtr1),y + + lda PS.Table.Stat,x + iny + sta (ZPPtr1),y .2 inx cpx CORE.PSCount bne .1 .9 tya + lsr + dec sta (ZPPtr1) rts *--------------------------------------