From 585972348fe512d4186fbcc49e707f10f53a201e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Wed, 13 Feb 2019 16:20:44 +0000 Subject: [PATCH] Kernel 0.92+ --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/CSH.D.txt | 3 + BIN/CSH.I.txt | 6 +- BIN/CSH.S.CORE.txt | 345 ++++++++++++++++++++++++--------------- BIN/CSH.S.txt | 20 +-- SYS/KERNEL.S.INIT.txt | 39 +++-- 6 files changed, 254 insertions(+), 159 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index d28c3d822d59e77769cff81dc5c77df3086ad71f..5cf58cb69bf0d14966d40a2e669d18efb6440e2c 100644 GIT binary patch delta 24587 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�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 delta 23546 zcmZ`>31AdO)~=q(gia=t%w(o#Di;}YpF}Mxa3; zsHhZC)QEyc1;GP65#3!C)+4U2>ms_cDyyys-iinRS6w|v(0_M7GX3h+d#_%-x~q2W zFXv*`0tY?~GZYMYe-y~#wr1A7)2V)=a&)wbUCeIv5?k6vt z+d1*N zGQz$%oBKs{2(Nh%@7V*1#|PeiP|Dk9$m=m3-5MtMnB=VnxyLB?gdL@G_q}+e=Ui@2 zPbytp(DUMveJ>s9A$dI)ZcANEdR{uRd-xsa&Kmzvn#jM$YaW5clnTHv6Sxn+A+^EonOccl|ks-|Ll%08=gx_;b-@qJPK73(K# znAk`9t?SD-RFt@Ff9{K7vvy0##RL5OKZBfkTaMy?$X7KeajcfucRzbz zx0Dw3gwS2C`Tm{VQnMvjbNSbr8&9*bcS|`5v*7sx?)l&PB5!=_CGCIx$501-9c=C0 zk~3^)ruz|g>)ld(#Z=uR`^ZsiN{{vEvF!s1df{j3N&4r#{kdz?`-Qg0HJt`c=hf_o zyQLPJ89KRZ{jN@A7u_Sd%>{mPUoG2sk2GAG!4BUeg+3Yis@?}$|Ou2tb_K=>~yl1S>_BisMu|3Uam|J?rAyxV^~@~R=Tz*yIvLFbab3H`3R>6v}Y#GgmR zpK}KZ4C)Jh(Z$A|iJ747k$NU&?z89hWaYWfogPi`CXG9-6Javg-r(wv6ocDA7oAU+xwB2w9)%H$@;o>kO$w^io(J;RezZI6-S_j(n2uY2TzhFo2*f3hrTcx?l3OzyzQp1mi=suG(( zwyK&+y$M+d796{JAj*9@^T37fH#6^F z)9F5DLEoC5Rpb6NZIQbz>xS@Ssb?mw9sgjpd*5WYTTVY9Z|;k@@x+=bZuk6*1L>m`_m<3cmuDR~3&}sA=Rk(p$Fc@yxYNB^ z2O4>fdQPi7mOW6;g-kkj)j+A+m3f1Ue--sb96WKq+md=9tN&{Ek<0_b=I)lbI49VQ zAFuru_Mh2&Mm|39DX4TV*S4nJU3Vn2rq6Kj1akCA+Mh)rX&fl$hL8C_pNtdiF!g}z zn0vs^^+i8e;*(;HK63;#sE;}#^p1C349g%Th zI4@b|v9V|3;i6>D5YG!t;Ub>R0vAPq3OlYU(M(_e>4yLDJhR}T=7&G+i+ugWKm*TL zeQ2wxJ`eK**7&&Tv^L||IOYix5Dp9hWFP{F1k8uWJQ4Lmj`wIrKCyo%RZOe&R9#Tp zvUSOVmA=$MqI@s)Ue?v=t7vGd@=R{)F6+GX0uuj&)H`o}m(NqOp}oV`+IeZ7uWjYx zZeIb3{YmPb&^)`jqO7jYSJu)|N6cq+-cq9cg2cudb#--~$-ZeLiacc%6~y$b)JrVC zd8OVZ3tD}tY1P%lc8&{aDFfHMD##@!V(2Ay$otK8=ILX_e6 zUNBn>!V9Iu6wM8c;hOZaPn%k~xRc0M-7p){X)G(NaJsy9p(NI!DQT*z->zvXB8u`y zTATqbQ7$NGoY7n}yNsBr0S*&Y6!!<&O!3g@NC>g0sjaA3v_Kib%RW-nN3ke-^eC?kQV20Kr zR<_OeG&j$#Cvu7IsZx!*qM^Q}wthy{CPK&jKN-e~4CZlKhU$hULdS=)HdF zLN$A>!Wo}68UE|)ROhwL?^xQ_ zNxd`lDz5Nob`$eVu<-gVA*NZpZY~I^)aLHX8&`BKYV7VL=Gg&Jra9nqUC0}|-YoZYVw>-^ zWVT<&vu`H6xAtc@Zy_R1iimA%XbP9KjUY;S$Dbt($R;t@gPn)ws0~#e)g^^6yu2){A|o>T@Rj>x9?Hh_>BNqI#bhv} z$#LS)iI@ipX1P}xg+-&(w2JnE(c=pWd}DmgOItg;8#_8NcC9udOs_I(!<(>c!=-KA zJ}?u<8e?y3`vQ!53ssF)&`$ENHuBz&wc4z%lxw@tW&2vYe9g_xzKJC28tCH1DTZ^s zkUMHEtBW$ z5L=*`H$WAcLGXu1yihHW-_M#J?hebwxdXsbQ3 zwvxndF{0vIeY&Q+mBh3atcg9W&|*!PwGB#_E=GedAm;0hTC?<^R5yUde4`QM9oopg z-KYhua+5KnAeB`!E9zTFmGT4RSmBL}~rOl(&kw?_$%3SmVu&EltF< zoBR20_Bt}Nm}qN?A$~8j#8~4J@BLjq`99Ps<|*0ztUSh=6@9<(jHeJ$>wZ9!nayR| z9u!$cm>|)zFTjZ&c|SBJKg41X8LUCJhIjlO8sr zaq+55I~uldeRJEAg}!MW3l=Y2+_r$kJ_7eumibZ(HZ*s)cCY9n&PN4hkUV033{}Nv zdl-8UL1^k>Zskf}^O(VE%Ua5Ep}n@;(@ac{bMHK1#JCB6cb=iUi<*0g+@+^e$-i5aeyQOKSRtZNTA^AD(lA+Ph8+$tt z#;Iu|3P|Fg*;t!3A^a~q{jWinEwa22%Jrh~Uv;IYoI9|-Y+6nkG8zXi%Tt$DHsEdqjw<7IXVR?c~ad*RjpN08&SKvrFWkJtx5 z3z< z>%1jx#P*)xT~>7kCKOJUkQrJG>IYWn=Pr0}M$M)N;bn$1pWm7#>^$5M%IaS2^xiBqjSz}i= zTC@D6vA26=D{-7L=ImUuU=^QmHa2?}Ap?=WGGf?SMXX;B&SUxpI?Uhd&M6?N-?8Bi zYs&B+V2giI_D%IntE=@imNk`4YlcVSe=@SQ4lA8|Hdvsad4Yc6 zVppNWx&--GVTAd&fIi!~^SojsVS~LOOJQ26oQ5#=`l%R)*BGXC!~Rm6!or}+6gF6u zIh+&FcnXMph@L?oMByouj66z2m}jImy!s8~K8y_OUC_3Q*v-GoWR42s1EbmJ8A(hQ z2*`HWWNKU? zGC2d86nb8!y4rH$i2H*)@nKbdO-kZ3V=*qP;!W4w zg#2YqlN(xyEh9{u@U&def*uaxV#arN~l)QM#mh zggT|khf%7jWnEoI$1>s?Ba#XVHdNP@O&;U(RF-2CA#E&slUh?F$7#aXlf>~%inAt2 z6Ic@dL{8MmJ~CnwE041lNo8zBoHa`-XLrO|QzI&bMH4F7@i^;vsfx+*FszzY#9IrK zCWrA(dTIsMc$J=psT)0Ib9^ZcQ!i>yAx$;x#(3*=sg`{ZZyg>nMTp6n$`TR~vvsU0 z!CE6tW7`s}DN;Q<$cYW?odirP8kv-6^+?lML87%#YGU&et!Yv-+n8t_Cbh8sM5`N{ z5( zc%Gh&+*|Z?{NxPt^%O|)r{E`2@)xkJL#=sI8+&3X9I}voFcby5l*!2;E@H*W)?pEg zMZr=oW0&Alx}5ovFfI>)5HTTs%<3knL> zk;oPJ)FzFoSKM-+BPHcZUD!%4j0c8a*hmt&O5;`CR@H4gI}pg&gAeT z!MbtN^w`6jrrTHUH(?&?Tz$(|4yEcUp%FfhTqCp<5&3GNN4bXUsiZ;~eFC4USvADA;z*SJ)GR3EFgx*mnw}L!HwbAnDGzH9*jvb6e0Z;hbH50^Fnd z;&zdxAW)P$FjjHx+@YFxutZpMyCXiLPq*|gcIWMm1Zg*W>UKxm0{L!1ruT#mnn`ce zW7M^0FkPRqNA4Ad6q1B{g}y<#k-4RexbG85Y~bG!N)CoMXaD)aI9v4nLY6ikC-MVf z?9{{3ibHoeJ|AtjCy_ag*jcD-?QY$o)fw6QmcuZ@F;viJwk}!Gwpk=Nk_8P5g!z~2 zv}iY((~L2>a+_yIUhEA9n#GnMGr6L&iN2g5qjK0?cZL^Bx$JdcR2I$C6ADN1g~t5L zea(wkw~?%TW?LVXY4?cK0wNC=+X>DBHhp)vfV{AA`m=!}zU*j?{9?6YdI51~zaFoaLR zriX1R5!=n!dEqN}5>*$%F%2B{dZJC>#FP~?hYDhC;3RB*ENg7$)7$t)WqswJuBE9w(c!gQ z5KJ|mMS)g`vzBO$#3^vbHZe*$tb#At0x`_kG@3>N=O)3a*flCPI-6UsXw$RDDjE?d zEiGFGo6X57UViwpol}a5LNy-j*OoUl7Wy;Bi;PW^0~r(i6o0;?kbFgYK3B3v#Qg5^ z70Viyb#D|}Ww&sHeCH~b zUX=Yn$^$8*Q$zoIQ|j2%3sbL3U6;Bg)tkC8_4-t6sy#I$HJ7dU9<#BB*lpiCsxa$6 z^}Qobj!2<%?>W8azpUQm%rt$x=hR1^u-0wHbT;z`htsg#?;X6)0+6wRB#`k}lq9 zyPShk^zMsL7d!Kd!-dWTyZCWn5vzH=HKN3`Q)|qQhy?#=vg52HnHfeJPwlYaN5O3S z0B$YBrpSq6bfHOuG%V7U6W35}gvm#r6W9bnZ{bfixw-0LgH$_GSm8;hX1Fb-Y$VxtfYA0${!uq6Yw(B=XLaBK&GHCN1VyYpxlSIsa#8$=C znd_@?9@4SUH*ZM?CW;e@8S^3SV6c!B*Riv|IY!zr|MBO>EQk~~u!-j!1(O@$=hl@Z z9`hZ3#+Nn4!^<>v7N4o+t<3fjQxmvjn)&2H)0S3HNz9lEY2vZHjtLOSoyi&vN>Wlq zlaC+F@LLTykmRMgfIEv%B}UC=XU;i_$70Cg2iyu~K75~&E356QYwPZA!!acWA8nR` zBT>wLhy^2#C}CK8G=H>)aytWQmM*`!<1v%=F%{YA|aT~PR7`rP*v8SkFDi?`kN71%S*MY^f8UG|~ zLBtm9U|)qRj_GC`FY2y}?$I?>cq*Dm)HYoePOePXBb$s;xV%iCr@x8*w#r5UHd}|<&V^`1-ez!*5?oWpA z??7JXo$Qh@)MsCiZn?{^D;v6Y2X)=eb=@O$l|fh3o{&s?{h6*prh9{#?n5Sff6$WJ zF4SBB$-kd{8>Zw9c>u|&4+@!VtVyxN?h6Vv?MG_KLu`&o869yzG}(lM>{gQ!ANz0! z+aq8b^(cG6q!brC7F5OW0g$LeA&iH~Mj}71&&!`cuB<0nZn%=;qSiWA(C<8u4$TVD$TJwXBRXo+7>M z%*#fHA?ZVQOjZ)TAHjSa`p#+8S9*McU_Biom2dn0_xDVE3;JW-EuZM^=u@F9>VH~c z_(cp7`I+{+vVoXC*M9N)G|^vZKbvROwiHy}3i00xr_0~zn!gvChyFm=a}i2n&X1^5F<@DK@<)*mjpD3c*Jyb^qYmSL5mE2t zt@hVI9@B3~bDblsFj7%6h<>3C`Lt4v4TsN&0BRZM1-{-<*nuxcC@J>%A3jqcxDn zWJ8)OmK8)Q&Pw|qnWzMLo!mqhn1bW1woBd22ObmUM#pJJd*gMZ6EvfJL{1b&CniaJ zz~nPnF~j6v`ZCKl6q?WuH4^r|$^#`OU&8n_I?mqLrMqa`0Lz z{0W#Nm@AP%x3`MhTOAT)lLNv`HAr*Rvb&-cyK4%5M@{vo!GbyvMoeRWi&l!t>p5dX zuyg^3HTp9U%XGg1u*}>PG@u!IQ(M@?7$s%g4Dj%tcBU48#Cd@PC+rABMU|&=MkA4D zizt=n2rkow(k?i>`=SwgmBh|b#hJB6 zSC6^!)i5;j8hoSq=irJHJ~P)!eBI$MeY(Y`vzL~xC#GvT$GY>4UeCO7ieg!>bB-j+ z28rDjr`VmUq@Q6A_VV#KWvG24*!fsK8cT&ukQ;xU@U4e8y3I(`mn>V5X4&em$vo6# zkKZH`zbzQ}QP+da=MzN*gx)Ce*+{FT*weQML|Ja~OX1V9n*&mY-6Eu5MkZ$1*~Gb1 z>do=BH25kTaJ`J*0$tJFMohi1#dItFk#Ex@eU~1?w}VLU&|wSnRy*Z^VTu4&- zS(sHBW_UnEzU{$4Nlp8pFJ(WgL-O#4baD}~9~{)gwYmSpdMY+}A3>&sN7*i`67PL1 zAj@(HKe=BE3lRZ_!J|CRV_RE>>uaa#dZIiLlr09@YHS}r84zQ83XO{IN%*fT+Mf<) z5RIBdJ>zFrN=ej_fL>yH7HWqbWu-R7J>fY&6EQsxGW~N<4*IS76-#T|F#=%z807ma z_~KrG)rC8>ps0Q^nD!FVEXP74<2Vv|WR?)i-~4pm>Af7Fn_fXCJl zXVzH7k@5GSMf%1puKm3cU^Bgm+!_C1Q(~2L=`FS_RvFsxPmtudC2jA*^{>E%e65L# zjbh?B5fqC87U39zINu4<^iCViXV^*hZmg0##Plwt()YBeO#8P8u&DR_JuBMXDWpgK zNAeUizGve4fE}?b&YTZL_s4JZ@*YO0zm`OOq?cgC24XtRi|}9en_Wpy{20GYpWvUU z|A9jb6^wkJfiU`WHqoJsn)rp*sfZnv5ShgBWzhVJj-|Lxg?r;?f{ywMGMrx{yu+~m z{l-s+Dc>R=Wic?NRt3wW9sjb|^hf!Muzf~V{qNMUG@}Wv_1Q(fZz}Us_N5y3rSW=eas>%$=kl~c>RjtH~w-5d;s9Z>j!}AB& zqgL|`Y2W4gst;H9WxRplwJ^%VoI{mjFP=dBZmAW8#}H!U3F9{2K zi7JU4%kSm$kc-4)hmn|ftR(UTZV#>jPXuSoBwk5;p{R+L%XAaU&o`lBunF3`225p( z3AI)E%jY+t8iEriv(?E;g0}{?E?a^IDPA&Irf_|@>~+Ene`KK2 z%+vJx7)4C=5Gdn$1Ft6;ZyUImta#qQy(BF6kr=#g5cMFO)T}wFmTR`PoM)jK?;b>d zL`-<`Kq6=HR|h=$WITA#4k7WtL2IdVL`zM*kiFnmQoMN3plw9(z}NTgi5brs^s~@7 zJY(?RRvonVcFjeCKFWnG$sO}}6Z7A`>+Wp9?fBrM2JAa(;_B+E^)~3`1DM<<0#IHk zY&2bpBG?x3*5yCiM)wzY+5czC<$q|3X$hn_mY#19o{hBg;%WDel|>!8LHy|$_km{5 zGGUK-x&C$o>&s5zHfNXCMa*gI>;Na8acNf@&E0y>P)uwq^my%YN0Lp8cmx%25y^BSLN>sLBguj%L^CMZ9071 z6G0}Nu@c+0K_)LE2^-Supvt^nx3id-HsD)P&+p6-vi6N41Vt1VX_s3!anlja*THnr z4&*Jm)mw$tmL5Zn4^yr#{w_$~rWfUU6op-qsw70;z)O0g2+Q%?*``!woa-jgqHgxr z3l?p+fPgL2cT$z%xOHz%Q{3S@L2~u7!ZeKBw`zSVG2I55V;3*Ac4(nHy@klP^FDMX zaooX{rzv*jPSLisDCd`U@oHdbAL~t1k}lspD0j&DlYF;OqU`yDQO2|vn&o?Wmx^Ba zzJQ;gK^LKUt6x;O>3(kK18i8jVh?{1zYF%UG3m=jX^R^b*Hk2l-tKXyt{_vS`AyNyLi=acm{Oq<0U;47-T=IND~(4&KE%|AwEX zp^NW^hH2Ogg)Dyi;uSqQUloBk>^0t|*rZHsDh>pjhStZLUWZqdzyCpX+uqRPN#!>n zv>Ac@ALq9hVtxzNB{pqM|Kx(+MxK?zz4Q3M&u0?0e~Av4H>q-raM{Fs0@-*cfOYCS zysA!eRT%!?ZzcF|8NN(h{`s9sMFErKLXu$TGW$&P$Kew zd5FMA9}AVKpBV5i&+6d)gs;29r`-&bKh;Cwf9F*#v43`c#bWm~7z$sU$InCI%ky*a z5&jG>=vN`m^7_3ce=C4<@_>IutH$>{MSjm@a?7%TW2aXL*;W0T5BI3q# z|MB^yKRooRktcBWRYabsyLD2)t#X;M*RE}Qmg_F9fTV;<&82Zwx=X8dmrfQg9a_Vd z=POCxTH&x%ExyDh5fV4WFM9*OiWjZfBcoTj1PX= zkUmHE&xN{wE(&o5&u^#M~3DNGQL5AiT<(noj^KixLZU2Kx zFn0tEU4{afI{80cyeQqe&=o?c>q_ozZA$K+zjH4sD^XAU3Tl9e{hC-jUkxk-s$l|- z>5a|)dAI2*h*#EV`GSi9E-dnD|Fb>oHNhfGn^8w(uWrp+y{3JT;l7rAK3qxmuKS~c z;Z3T)2JjS>m^Si%@Ya;b*Xg1*3sH1ypkRYKIA@PuvLF>jvu^`+a8Kxsy*{+Km9;a) zi&ObVp}@L5q$~}U#ClWkySb*0SZ@yf#>wL?!S6Z}y(9QFnZ&T*S6vl}*@;hYjYo@x z$@uOKCRa@-F}DUk>+x3Yw%{l3{gaqo!Ec;+T5k`2R^i)rNASCj^IPu>A%H>Nt$A`X zwsl2G<$FYgn)euUe9in;Hj(%0L3^*3mmjsGrdu`<>-_=3R(_03A7BH8ip%?;)?pFz zKE3`*N$h_AbGbk>e26zc^xy}0b3=D^(5UUUxE>CSENI1=0a~klM6dBj_279750WDf z@mS+iNP1ZB1bEBOsPZ&7%&cmvuA7A$0D7;6C#Tx-`AJch!{EodfcFG&*`>3FLcnq7}>cZ#hLI|p*!LQjgGDJ7lm@?OGZ{O0{3^0 zaep~8%*TU9;Mu6=mX~$6yn?@c$MaPq^NmoH_}9RyAE*uRmhd{#u?a!{Ze(Bm;&3Lu z!HI9`2I0LYFSH3yJ_-G&ug#M<(%Rj&z}LKD zUe{3*)_^AkhwELfzOfP3(1=a2O-uN`2{zN-!}KEZ-@MD_15e!hnwQwHEX8g)rI!p> zz&?P5HpM>kLy+`E(MPZ=@-%O|+C~ZSK3z%3I}_CQ71#E4K-)LEwr_>DVc!{9eX){k_}<7mij~BfKZqBVJfbQVwaver z-!8(IbuylBa{D=*@8aYCKSQK=np&E1FXAU5PC4s0KFC4n&zMOTD^9~NLPtCva{Bi_ zLv_UeW@N)l@M`fKgzP9$9I-NEIx5WkFM#zRhj z0-kW{33b@a84^f{!Rt*up`{G{dqg0Gzux47ve~S^Y((rv3B_rau#l3om{P?xG8!2X zlRBMygScYEYsJt#Cq8$#3MnZzHm6h>R?pvciWQe^7b<1E@6=)zFFJ|hK}ab)my_^(jyvnHr|gP9oAYGTe|Zl({lAH~0_N8#=Y8mc*GE<_*-S{@M~-Uo;Df z^qBEyL9`G#TS$w`86<6!Rx6p8;3Ov(8O4%A##2pgqJ#&UnuG8#lf(@77d92wxrwGccO z9-1bWg|XGkhs4K~huumdEBq4WN>N<7D(rCK1jCckj!_ZuhvOGoPD|iEEA=C|#5h>s#NF5B@AG8*^nf)<)_ z)y~gw5AIaq|1`;r%XZp?tc*DKva;TAr4G03G{O2C9y_ku1!iXpaTN~P5* zovhLtmDZ|sib|)dv`(edR9dgn29-9dbh=8LRNAc47M0FW=}eW*Qt1UMovqS2D!ovp z7pe4OmHtVkm#B2EN?TPrPo?u!x?snRZ$cB^!SO0Q7ql`37S(p4&5t;p85bZd2*?D!oCaH>z~IN^er>%__Y`r8`v0RJv28y(+y` zrMIbcmr8F}=^ZM)Q>A?>y-TILReHBd?@{RFX-}yGq|s>6u99Rr;|?KT+wY zD*c~IKU3-FD*ZyGU#j$sO21O+*DC!+rQfRbJC%N~(jQd%qe_2L=~fM_5FumUz97O(>jKmnY93*hqOfOsGQ zNCc9Ap+GX=28IDCKq`<1qyrg1CXfYW135r0kO$-g9$+|702Bg6zzAR@Pz;O$Mgt{4 zDKG{Y3ycHC0~3IWz$BmyCT%Z-02h0Z+0ByiR;8I`_uo$=uxExplECt$u4qzFu z9OwkPfNo#~a0PHBuo74WtOl+E)&N%n*8pB%E#L#L1=a!UfenBPYy>s|*8!V>Ex=Zw z2iOK&58MFU2y6##0&WIw0d@ck*a`Fkw*t2TyMWt)JAgZZKHx53H*hy_53mQ=3)~Cb z2lNB?0}lWX0{ejdz(c?R;2`iY@CfiI@EC9iI1D@vJOMljJOw-rJOdm7o&}Bq&jHT^ ze+K>n{1tcscoBFBI0hUC{sz1ZyaK!myao&auLFMv-T>YN{sFuN{1bQ^_!n>jcn3HM zybHVs{2O>5I0gI%_yG72_y{-+{1^Bb_yqVA_#f~Y@Hy}W@Fj2t_zL(M_y+hE_zw6U a_yPD4_z5@*{0#g8{0jUg?WgCY)BguaR}3%! diff --git a/BIN/CSH.D.txt b/BIN/CSH.D.txt index d89b4348..f45a0cc0 100644 --- a/BIN/CSH.D.txt +++ b/BIN/CSH.D.txt @@ -10,6 +10,9 @@ CSH.BufPtrSave .BS 2 CSH.hSymbols .BS 1 CSH.SymbolsPtr .BS 1 +CSH.hConst .BS 1 +CSH.ConstPtr .BS 1 + CSH.hData .BS 1 CSH.DataPtr .BS 1 diff --git a/BIN/CSH.I.txt b/BIN/CSH.I.txt index ddfc8dc0..d0cd674a 100644 --- a/BIN/CSH.I.txt +++ b/BIN/CSH.I.txt @@ -84,15 +84,17 @@ CSH.TSIZE .HS 0001020401020405 00,CHAR,INT,LONG,UCHAR,UINT,ULONG,FLOAT.... * int printf ( const char * format, ... ); CSH.FN >PSTR "printf" .DA #CSH.T.INT returned value - .DA #CSH.Q.CONST+CSH.Q.POINTER1 + .DA #CSH.Q.CONST .DA #CSH.T.CHAR + .DA #CSH.Q.POINTER .DA #CSH.T.VARIADIC .DA #0 * int puts ( const char * str ); >PSTR "puts" .DA #CSH.T.INT returned value - .DA #CSH.Q.CONST+CSH.Q.POINTER1 + .DA #CSH.Q.CONST .DA #CSH.T.CHAR + .DA #CSH.Q.POINTER .DA #0 * float cos ( float x ); >PSTR "cos" diff --git a/BIN/CSH.S.CORE.txt b/BIN/CSH.S.CORE.txt index 0c0f4897..d17db349 100644 --- a/BIN/CSH.S.CORE.txt +++ b/BIN/CSH.S.CORE.txt @@ -3,11 +3,8 @@ PREFIX AUTO 4,1 .LIST OFF *-------------------------------------- -CSH.Q.CONST .EQ %11000000 -CSH.Q.ARRAY .EQ %10001100 max 3 bounds -CSH.Q.POINTER1 .EQ %10000001 max 3 depth -CSH.Q.POINTER2 .EQ %10000010 -CSH.Q.POINTER3 .EQ %10000011 +CSH.Q.CONST .EQ %10000000 +CSH.Q.POINTER .EQ %10000001 CSH.T.CHAR .EQ 1 CSH.T.INT .EQ 2 CSH.T.LONG .EQ 3 @@ -17,34 +14,44 @@ CSH.T.ULONG .EQ 6 CSH.T.FLOAT .EQ 7 CSH.T.VARIADIC .EQ $F *-------------------------------------- -CSH.Init lda #$0 +CSH.Init >LDYAI 256 + >SYSCALL GetMem0 + bcs .9 + >STYA ZPCSHSymbols + txa + >STA.G CSH.hSymbols + + >LDYAI 256 + >SYSCALL GetMem + bcs .9 + >STYA ZPCSHConst + txa + >STA.G CSH.hConst + + >LDYAI 256 + >SYSCALL GetMem + bcs .9 + >STYA ZPCSHData + txa + >STA.G CSH.hData + + >LDYAI 256 + >SYSCALL GetMem + bcs .9 + >STYA ZPCSHStack + txa + >STA.G CSH.hStack + + lda #$0 >STA.G CSH.SymbolsPtr + >STA.G CSH.ConstPtr >STA.G CSH.DataPtr >STA.G CSH.StackPtr - >LDYAI 256 - >SYSCALL GetMem0 - bcs .9 - txa - >STA.G CSH.hSymbols - >SYSCALL GetMemPtr - >STYA ZPCSHSymbols - - >LDYAI 256 - >SYSCALL GetMem - bcs .9 - txa - >STA.G CSH.hData - >SYSCALL GetMemPtr - >STYA ZPCSHData - - >LDYAI 256 - >SYSCALL GetMem - bcs .9 - txa - >STA.G CSH.hStack - >SYSCALL GetMemPtr - >STYA ZPCSHStack + sta (ZPCSHSymbols) + sta (ZPCSHConst) + sta (ZPCSHData) + sta (ZPCSHStack) * clc .9 rts @@ -62,13 +69,13 @@ CSH.Quit >LDA.G hFileBuf >SYSCALL FreeMem .3 >LDA.G CSH.hSymbols - beq .8 + beq CSH.Quit.RTS >SYSCALL FreeMem -.8 rts +CSH.Quit.RTS rts *-------------------------------------- CSH.Run jsr CSH.GetCharNB - bcs .9 + bcs CSH.Quit.RTS cmp #'}' End of block ? bne .1 @@ -107,9 +114,8 @@ CSH.Run jsr CSH.GetCharNB jmp (J.CSH.KW,x) .4 jsr CSH.GetVar - bcs .9 - - + bcs .5 + jsr CSH.GetCharNB bcs .9 cmp #'=' @@ -130,6 +136,16 @@ CSH.Run jsr CSH.GetCharNB jmp CSH.GetNextCharNB Skip ; +.5 >LDYA L.CSH.FN + jsr CSH.LookupFn + bcs .99 + + >STZ.G CSH.ACCT no retrun value type check required + + jsr CSH.FnEval + bcs .9 + jmp CSH.GetNextCharNB Skip ; + .99 lda #CSH.E.SYNTAX sec .9 rts @@ -349,23 +365,165 @@ CSH.TYPE >STA.G CSH.ACCT sec .99 rts *-------------------------------------- -CSH.FnEval >STYA ZPFnDefPtr +CSH.ExpEval jsr CSH.ZeroACC + +.10 lda #$ff + >STA.G CSH.EXPBOP1 Reset BOP1 + jsr CSH.GetCharNB + bcs .9 + + jsr CSH.IsLetter Fnc or Var ? + bcs .2 + + jsr CSH.GetVar + bcs .1 + + jsr CSH.LoadACCFromVar + bcs .9 + bra .11 + +.1 >LDYA L.CSH.FN + jsr CSH.LookupFn + bcs .9 + + jsr CSH.FnEval + bcs .99 + bra .11 + +.2 jsr CSH.IsDigit10 number ? + bcs .3 + + jsr CSH.GetNumInACC + bcs .9 + +.11 jsr CSH.GetCharNB + bcs .9 + + cmp #')' + beq .8 + cmp #';' + beq .8 + + jsr CSH.IsOPChar + bcs .9 + + >LDYA L.CSH.BOPS + jsr CSH.LookupOP + bcs .9 + + >LDA.G CSH.EXPBOP1 previous OP... + bpl .5 go check precedence + + txa + >STA.G CSH.EXPBOP1 + jsr CSH.ACC2ARG + jsr CSH.GetCharNB + bcc .10 go check for an ARG + bra .9 + +.3 >DEBUG + + cmp #'"' String litteral + bne .9 + + + + jsr CSH.AddContCharP + bcs .99 + + jmp .11 + + +.9 lda #CSH.E.SYNTAX + sec +.99 rts + +.5 txa + >STA.G CSH.EXPBOP2 + >CMP.G CSH.EXPBOP1 + bcs .6 + +* new OP has precedence, stack ACC + + + + jmp .10 + +* Old OP has precedence, compute ACC=ARG ACC +.6 >LDA.G CSH.EXPBOP1 + jsr CSH.Compute + bcs .9 + + jsr CSH.GetCharNB + bcs .9 + jmp .10 + +.8 >LDA.G CSH.EXPBOP1 + bmi .80 + + jmp CSH.Compute + +.80 clc + rts +*-------------------------------------- +CSH.AddContCharP + ldy #0 + +.1 jsr CSH.GetNextChar + bcs .9 + cmp #C.CR + beq .9 + + cmp #'"' + beq .2 + sta (ZPCSHConst),y + iny + bra .1 + +.2 lda #0 + sta (ZPCSHConst),y + + lda ZPCSHConst + pha + lda ZPCSHConst+1 + pha + + tya + sec + adc ZPCSHConst + sta ZPCSHConst + bcc .3 + + inc ZPCSHConst+1 + +.3 pla + ply + clc + rts + +.9 lda #CSH.E.SYNTAX + sec + rts +*-------------------------------------- +CSH.FnEval jsr CSH.GetCharNB bcs .9 cmp #'(' bne .9 - lda (ZPFnDefPtr) Get Return value Type - >CMP.G CSH.ACCT Match with ACC ? + >LDA.G CSH.ACCT Match with ACC ? + beq .10 ACC is VOID + + cmp (ZPFnDefPtr) Get Return value Type bne .99 - jsr CSH.GetNextCharNB skip '(' +.10 jsr CSH.GetNextCharNB skip '(' bcs .9 jsr CSH.PushACCT Save Acc & T on stack -.1 inc ZPFnDefPtr advance to arg list type +.1 inc ZPFnDefPtr advance to arg list type bne .2 inc ZPFnDefPtr+1 @@ -384,10 +542,10 @@ CSH.FnEval >STYA ZPFnDefPtr .3 >CMP.G CSH.ACCT Match with ACC ? bne .99 - inc ZPFnDefPtr advance to next arg + inc ZPFnDefPtr advance to next arg bne .4 inc ZPFnDefPtr+1 -.4 lda (ZPFnDefPtr) no more arg in fn definition +.4 lda (ZPFnDefPtr) no more arg in fn definition beq .7 jsr CSH.GetNextCharNB @@ -419,94 +577,6 @@ CSH.FnEval >STYA ZPFnDefPtr sec rts *-------------------------------------- -CSH.ExpEval jsr CSH.ZeroACC - -.10 lda #$ff - >STA.G CSH.EXPBOP1 Reset BOP1 - - jsr CSH.GetCharNB - bcs .9 - - jsr CSH.IsLetter Fnc or Var ? - bcs .2 - - jsr CSH.GetVar - bcs .1 - - jsr CSH.LoadACCFromVar - bcs .9 - bra .11 - -.1 >LDYA L.CSH.FN - jsr CSH.LookupFn - bcs .9 - >LDYA ZPPtr1 - jsr CSH.FnEval - bcs .99 - bra .11 - -.2 jsr CSH.IsDigit10 number ? - bcs .9 - - jsr CSH.GetNumInACC - bcs .9 - -.11 jsr CSH.GetCharNB - bcs .9 - - cmp #')' - beq .8 - cmp #';' - beq .8 - - jsr CSH.IsOPChar - bcs .9 - - >LDYA L.CSH.BOPS - jsr CSH.LookupOP - bcs .9 - - >LDA.G CSH.EXPBOP1 previous OP... - bpl .5 go check precedence - - txa - >STA.G CSH.EXPBOP1 - jsr CSH.ACC2ARG - jsr CSH.GetCharNB - bcc .10 go check for an ARG - -.9 lda #CSH.E.SYNTAX - sec -.99 rts - -.5 txa - >STA.G CSH.EXPBOP2 - >CMP.G CSH.EXPBOP1 - bcs .3 - -* new OP has precedence, stack ACC - - - - bra .10 - -* Old OP has precedence, compute ACC=ARG ACC -.3 >LDA.G CSH.EXPBOP1 - jsr CSH.Compute - bcs .9 - - jsr CSH.GetCharNB - bcs .9 - jmp .10 - -.8 >LDA.G CSH.EXPBOP1 - bmi .80 - - jmp CSH.Compute - -.80 clc - rts -*-------------------------------------- CSH.SavePtr >LDYA ZPFileBufPtr >STYA.G CSH.BufPtrSave rts @@ -563,9 +633,10 @@ CSH.Lookup phy Y = len .31 lda ZPPtr1 sec adc (ZPPtr1) - sta ZPPtr1 - bcc .8 - inc ZPPtr1+1 + sta ZPFnDefPtr + lda ZPPtr1+1 + adc #0 + inc ZPFnDefPtr+1 clc .8 rts @@ -600,6 +671,14 @@ CSH.Lookup phy Y = len sec rts *-------------------------------------- +CSH.ZPPtr1AddAp1 + sec + adc ZPPtr1 + sta ZPPtr1 + bcc .1 + inc ZPPtr1+1 +.1 rts +*-------------------------------------- CSH.GetNumInACC >LDA.G CSH.ACCT cmp #CSH.T.FLOAT bcc .1 diff --git a/BIN/CSH.S.txt b/BIN/CSH.S.txt index 2846c0c5..ca936d1e 100644 --- a/BIN/CSH.S.txt +++ b/BIN/CSH.S.txt @@ -26,6 +26,7 @@ ZPFileBufPtr .BS 2 ZPFnDefPtr .BS 2 ZPCSHSymbols .BS 2 +ZPCSHConst .BS 2 ZPCSHData .BS 2 ZPCSHValue .BS 2 ZPCSHStack .BS 2 @@ -129,7 +130,8 @@ CS.QUIT jsr CSH.Quit PrintErrMsg >LDYA ZPFileBuf >STYA ZPPtr1 - stz ZPPtr3 + lda #1 + sta ZPPtr3 stz ZPPtr3+1 .1 >LDYA ZPPtr1 @@ -154,13 +156,14 @@ PrintErrMsg >LDYA ZPFileBuf sbc ZPFileBufPtr+1 bcc .1 not this line.... -.4 ldy #0 + ldy #$ff -.5 lda (ZPPtr2),y +.5 iny + lda (ZPPtr2),y beq .6 - iny cmp #C.CR beq .6 + phy >PUSHA ldy #S.PS.hStdErr @@ -169,17 +172,14 @@ PrintErrMsg >LDYA ZPFileBuf ply bra .5 -.6 >PUSHBI 0 +.6 phy + >PUSHBI 0 >PUSHW L.MSG.ECHOCRLF ldy #S.PS.hStdErr lda (pPS),y >SYSCALL fprintf - - lda ZPFileBufPtr - sec - sbc ZPPtr2 + ply beq .8 - tay .7 phy >PUSHBI '-' diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 26bd428e..fb400b55 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -886,17 +886,27 @@ DevMgrInit >LDYAI MSG.DEV ldy #7 lda (ZPPtr1),y - bne .6 $Cn07=00 : SmartPort + beq .51 $Cn07=00 : SmartPort + bne .6 - lda ZPPtr1 get $Cn + ldx #AWSmartPort.SIG-AWSmartPort.OFS-1 + +.50 ldy AWSmartPort.OFS,x Check if there is a AWsmartport firmware + lda (ZPPtr1),y + cmp AWSmartPort.SIG,x + bne .6 not on AW + dex + bpl .50 + +.51 lda ZPPtr1+1 get $Cn and #$f get $0n - cmp FD.BDEV+S.FD.DEV.DEVID same as SSS ? - beq .51 + cmp FD.BDEV+S.FD.DEV.BUSID same as SSS ? + beq .52 inc FD.BDEV+S.FD.DEV.DEVID Remapped SP devices.... inc FD.BDEV+S.FD.DEV.DEVID Add 2 to DEVID (2 & 3) -.51 jsr DevMgrInit.SP +.52 jsr DevMgrInit.SP lda #A2osX.S.SP bra .7 @@ -941,14 +951,14 @@ DevMgrInit.SP ldy #$ff sta .1+2 lda FD.BDEV+S.FD.DEV.DEVID - sta SP.DEV.STATUS.DEVID + sta SP.IOCTL.STATUS+S.IOCTL.UNITNUM .1 jsr $ffff Self Modified .DA #0 Status - .DA SP.DEV.STATUS + .DA SP.IOCTL.STATUS bcs .9 - ldx SP.DEV.STATUS.DATA+S.DIB.S + ldx SP.IOCTL.STATUS.DIB+S.DIB.S >LDYAI DRV.SmartPort jsr DevMgrInit.AddBDev @@ -1184,13 +1194,14 @@ FD.BDEV.NAME .AZ "S1D1" *-------------------------------------- SmartPort.OFS .HS 010305 SmartPort.SIG .HS 200003 +AWSmartPort.OFS .HS 12131415161718191A1B +AWSmartPort.SIG .HS A9008DF2C0A9708DF3C0 *-------------------------------------- -SP.DEV.STATUS .DA #3 -SP.DEV.STATUS.DEVID - .BS 1 - .DA SP.DEV.STATUS.DATA - .DA S.IOCTL.STATCODE.GETDIB -SP.DEV.STATUS.DATA +SP.IOCTL.STATUS .DA #3 + .BS 1 UNITNUM + .DA SP.IOCTL.STATUS.DIB + .DA #S.IOCTL.STATCODE.GETDIB +SP.IOCTL.STATUS.DIB .BS S.DIB *-------------------------------------- MAN