From 949d7e3b22809081c378b2e7002cd2bec21b31a4 Mon Sep 17 00:00:00 2001 From: burniouf Date: Sun, 16 Jul 2023 11:09:23 +0200 Subject: [PATCH] Kernel 0.94.3c (kernel migration step c) ASM broken --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/ASM.S.EXP.txt | 9 --- BIN/ASM.S.OUT.txt | 17 ++--- BIN/ASM.S.SRC.txt | 75 ++++++++++++++++--- BIN/ASM.S.SYM.txt | 154 ++++++++++++++++++++++++++------------- BIN/ASM.S.txt | 42 ++++++++--- BIN/CC.S.SYM.txt | 2 + SYS/KERNEL.S.BLISTX.txt | 2 +- SYS/KERNEL.S.CTRL.txt | 19 ++--- SYS/KERNEL.S.FS.txt | 36 ++++----- SYS/KERNEL.S.SLISTX.txt | 76 +++++++++---------- SYS/KERNEL.S.UNISTD.txt | 4 +- SYS/KERNEL.S.txt | 3 - 13 files changed, 275 insertions(+), 164 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 6877c41acf55d89ce2fec2b867f2aab4d9ba5584..d9f2f1de31ef78052139a38340d8050e242c27f3 100644 GIT binary patch delta 39223 zcmaI93qaJx_BcNKS&$FxvMjJqo*&*X`N%^Q%-6C!b$JN*&H@z$Q$a*Cdn}lsnHpL- z(Q~u(iunM$SF*6|-X3DvrF-wUlFUrYteZv;uU@a||IA~TUF-MH;PaU?XU?2CbLPy< zIWr$xZrloJfuHV+US318zxenMUNP`8&iCVg1Z{%6i5+dh&=F1k7`r|8FR|~(e;0c*c1B!H+=94|hX2`zU*pcezs&fS_>TDZXE(N%K>?{iR9i-J+z`N?uVN*Qy;V>}3>Y+Ye?sls$tx zf0d9{vZr*vE4>!&$nQei1|2!%_si#YonQZT+c%E6h`{362nW^$yuK2yFCD+&5m@KSA1=4D`EDcD3|HX1BM^ zFT+$_Bt>P`Wsk0Q1oZr4=-vxAcHP*y1dzHHuD{uK>(I^q)S=j2x86Iw{j|zo6QB(Y z3fAcjMw2-tG%N@!27@l|FbhFA&?H>Dxy8C(; zf_Fk7x$W9cVE$sy*F%y0{zIY1-@P{Q^Cqb}A!P8M-qme>M!h9Cl7g_&|XXPJL+Zez6yjoJ|hI6{<$&E`d`TDo-0)) zOGgsAOZT6)`hRX6DBOR_T70YR+WtZE`0v82(rY>0Qol45)<1GU=EzYD*?-VFUf1A)3fQ1=GW zC4>nhqoG8SvnEGq&mgEdaJxXd%uyw>c zVtWR)&_4jlw7ozPw7xVs3X)yBq3@ylZaL+=Jsd&VYSNFFaBbNA1-twtcg1Sdb zGpR`ak0A7q7}D(7sXThhx^dfu6WXh$YKQlcPp#W7Y}EQ+qoYA-`(?bXcmlSB3wk>g zpC{GibkCyd(V-;0T$9tG?H@Vh)h`cNn1Ir%W1(Y4TxI`Sy!_xl+DF|nr2is8Afcq# z>%5pBfqE0j9^QvgkI&0r@A}4OPjRY6=)QeY#Qyz~^m;bvju1~o8vq2p25LS8>45|I zmvCYHh!=8(iX4;h$MHfW?zm6sJxe#oVcj;kv2NQS2qu|~?XFir)m(MFl1%G>^i|$1 zNjs4v1!S^q@c6~EUISN%)YF1#Z}>w$IrQ5GL4j~jgb=ED0iTQzvV|lI_K6g_?ZDM{ zQczB}W|PAR6~;JB+XkU|&z`bAJ7|6ObL+FGt%UP;L0Td)OaoCZe*NPHG}K7xC1p}~ zuzo7{J=G-AyDnc0iQg8r!{yyvM=&;_U7@*_M)+DW64N5jGsl#_K zQJx`TQ#EPrG3cW{Ntx5pD@EmWzq83<-Zn^;?zuBoP&z2Q0PAVDO{o-C} z(!`E%s(_tcS|HjbZ28REb!*Eh>y|+)tAGFJ))po71HifzkPA?yojtwi6i5y-ghCkqaapSQEvNQnEnhmkyz8XEo61_UhV6EEK`WhH8FuVN^SmN6uKugt1ZkA9z3IeBW6l`Dz{L z(CG`OJ5O1UAM+ac6-Ma)3wesmj>+!n@b$m8UD@O)09aZVVmQ9*huVJHaZ%L=0PS&;iP zNiC3Gz}k2r)&8)2=xYKa6ZV%DF2iU4+=gEo;_6)NFYH92d0 z4jI%zP$!v>hkW4$Cbyi9|Ji;X)%6!TEe;C-WFUQ#1_n7TL1<%YrV9~rB zDbNs@_x}s8)1eg`;T2@}ZAJ&I&ZOm7NERk4im@eG2+8<+rehA6|6B*uSmd|&XgD1Z zN5kmDQR&e|bwdGr9W(HjWWgN&nH7-Z7;-Fq?ElO<6tHI_w;E3kTmb<7Fj)v!6yoob zg(O8F)};uE;af7vs&JeHPmlpTy6)N;O-9BMXat^QgcabyOxxkiy+fM8u2hnX{NlKQINugLe zGNJp!7H?_SI9TiFz)%_kvuG^I&)iob?XRS3gG5rP`mAAIvYI@_&}9Z1i-ou zv47%#zwL8eH&U3Pcn!Zb5?axh)jh(7#&rEDyZYG+R+yt;A@cB;mJ%}ig}wa!u78vD zM)08LP-T{RTtI*|lv@hdI9ghelS zbx0esy46x&R)iT~UD?%8|H~J5eYgHb+iyG3#X~oSVozSM4(Rsu+&Fc? zid$2KYWq1W*t*MG&RdW7T<)&{wX4Y?tEw$uTaSNq-r92+(*9r5b>|EM7&uiupgM5Q zdik97=qYQ?&S;CeHW~q7p&FrI0A3qS~vFB3|!eMJT;_(G`xGkbaw^ts=E}D z_t=i0;dOKfRFS4PRRbjTb8G6LHDtgCKw20VKwco&0Sp_K+=JG%ASWup8?@RP;v7ec zX~p1{GgdGH@cfcL&+_M2)@-18=?qyBK%q-tlC=V?5-y#!Zu#5_5$1vCW+)qNdZODJ2`dT z#$~WBIc4qm^fK%j{&5*L8YeHGwhkO;6TWi^J7t(Otf9vf!a!FBy2*rY9HA>gPj*M` z^wONN%7a$SPNkph zPTS|iz~$SC7P*M_r^DQlHjptkNx|7o@0W+J0?SE+ z*a!B+Ud0mWs+OD%L;u}F0g&qtxqguA-G4t2qj`9Vpa{d&>4K!#i(Au$SoiI8Mfz;_1y?Z4or7|bAfCc z4otvrX9(kj?K!w*v=D=(Od;2YQ^56^LTXuuKQ#efWCd@VJDwOG$GD!scW(?Bj>F@( zfdGeh&xOuUts4ifN!wv>K1dj&%Y@(P?;GUz{t`C**zl*BLbMr{BPYjqd(+kWbz16r zH9$J*@ZaM(&&K>Yj)`n51_%ylH=*O0h$oL0%tpSvQxF(icTg&%cpOd|E&M42cB!yk z*y-hx>ekP!Y{QDb8ZGFANfYta(ZVR0_Y$&%*_p7cSUczV#}@`t9Kuf2bK$vD){DoF zjTpGH_W1Fh3#MgsK*8HG(1t;4hZ4puel<&w6$kOTEMZ&xlt~?r!n8f9JL2WDyS}1+ zpq<`_E<7TE9=|ZDTRiJMq_iEzonwSqcE#i_@0N)DIZPzk^s$Mwq~`+pEkXVW+ORz6 z`s*iP!E`utr+1yH-fK_GOVz*xC@1;t+$0i?O+6RbF5>vbO~qaVKhZ4+A#y_dO|@XL z3YJR2QYBdC2)VtDV}&;rhsOzCv2npAmQw0X1kh28=CgpH1CSQiinE1iqwk971Ju_R@7CjtZ1p&P_d)prHcI(uUEWV z@sEl#6_+Z0tx#6_R|Z!`S7ujEtSl?8tgCFN|2it4t=w1HSNT!pxyt`kidDuc3I2gQ zvMQsBVYFBN|KVV5r!uv-^K<25!Cx+KXq-{AbXDyvr0>DgR^|n#`@O1^b8u7hN+kYS znS3lh73u$?Om1yh)!aI+b@oV0>x9;-QPYrkm}Q3b;^Z^RP*{w7bw+9QJ)-PvtgAtW z*GV$C4vB9lJDY3nLt-CfEUiJ}QDrBk{U$4Jc*{lGGIAEsURl4k7Kz7LuIX)MB9S3V@U2aWcnMc{2f+#*t=Nqr7|@6Jzn+utZHMw zlh|yF8!ht(%1->TVA9)FA1XWN*RE)l(^2q8q=K5(n2ff@hWh2rwM|I%cLG||8k2^? zK2~ zsAYL=tDJ#MpR!u4R=H~SrC!BZIgD0I+Mkprq-gQp7Nh$W1n`*z`v;Rcz&^OAN zN>!9}xyJNp2b}Z6o?83?xclC4xuGQYif=r8`1u%I!9jguZv(_sYG3;t)=~ zq%2VU6E|N{_9}kBBQGn%6kp@w%gQ5)&$04HWjds?epKcwzV5yMM`eljMMePll_N!B!&`XpAGk=1RE{VL5s z9NyBpDVv7;&MG@bNI%A&7`P7m9G{-+{XX41w|DXtWtL#>FW+*ceAjndPLyYVCvADX zeAf?K-YDO7X-i-4)~m`zUW%&TEB{ljZ;v-m&&#hWlJhENFk>=eLzDsqDbU|#gU_+w zXiQ?9uV1f1>rU+;Bzz4zOvX~d)V-Rcp$zfr8~U0UGtfZ+4+w2eL2wyf*@vB)Py zq0sk+PVwGvrWv>|v&zfX$a1#|bwUH0m(soD7T zexC!_(eD$g8Tn0Mnq}uZU4BwwVD~4zt55jMQz)+Be|_LH-uLI%6W>_(#?iiwz2*;n z3e0h0pOoAu&F|Z9Ka%~8src5G)+75{j(lT=w{=H4?%QSBZI%l0`fq^5AU^kv&!{9; z;-lC1wfFTz6q#y6wnd22mwkyWT^qVB0#euOpwzevK4GEyqo$Ti()WEG7puWv{(Yb1 zEHBN+D=zpX+Vw|UF2ibXDR|jKyh8`V_wL!%UL@6?9}=jgdJ{Y$IsAKKAMmq(LmyCX0QFw?Mn?eyY~FBW%f=)7 zA37rGk2;Vvb>w+qt~>SkhYuYY_<2_wNl3fe$-@jnhX*)+$OEm%ACH(jPIZVS7<)>I9C1s7%j%b+|E#Oj?-wxgX#+Z8)eQQa4HM~4E7dUfCV zG%6Jz^tS!r^CzX3HUxA&ZOF&0Sb(Pt`GhGJ^)4Rr8Lw14)BEx-K5Kmyqk1EM^Z7FD zaEN%&OBhPP2P4E(A&X&A$r5_Tz8~g7c3X`T3cZkwh{DdURzF<_x zfHjhC;SVG+PV6r37Q1|HdA-*pafD)bv?yRXNBGB%Sh00-GW;jav{aNzQged@v&OwOO$()_+C{ZZwaXXO%6P^13CniJ zi`hbA_l~>7Hn6DecZq8hyQ@Wmu(tN_YVoFG_Zm?U5IVdT-VZ+@+9uO5Y;Sp=ctZiN zY7v*eDUz^lrZ2wtO_79aV*>CGZ;B*>8|J%V+*>02`1X!_%Wu<;Koc4)|4mmv7-ZM_BA8k8atpW0`O{j{km!e!k0qp{U==F26z0pe{L;-NCnFQ- z)hMq_F0stY%P+4gqWIZJ?~jU0J%OWbj| z@cC@hs)F^wL2fzAme$MlNFR(_>wI0hz zh^>BkEr1@y^1D;ac6}&-U?nlXVJQH&GQ7ZW09s1Qo13;XfHndE6_Dl#L6MLyYg`Es zPFg2XNM7wCfNf%>bkP7Ssaep}P}zKs6BgryL3NvCZ_3w>C29j!+&SX=9rutIwb%D{ zW2_U;(zF;*H!zaMI5)6$c{2s4qo4$oS6m_I-q&19`2k20h0JVdTF5yxB$E!5Z4C=* zmXAYpyku)tdW#Gr2Dhjbc5BsN~S*g{LE zkxZ{N6gn11E>nk0$!0h+XmuIwc{9r@@{o59N=BM-G>cX`28nkt{!HTu)Fv0_ZKwL$ zmM+T~Sy@P)fFE9_P6c0j&oZ@c)+9n;GDW2XMkCR}2n6LKOJ#{%C0j};w`nNQ${`h$ zWCjY%>fU^0lY)AnPU#>QX7NUHa$h@koOtzJk7Pb>sVlC;&T!g1BSDV0Vx@5UJ zBy|el6_?JCZI;}88*O2%1qR1d4u-CMl$FdvW*hE-lKCY(udLi!mY2VgWsgOsQVzG2 zK+UBbo{e;6E;wyXtR)AT%dw_GZ7P}uSrwMj!hG6_SW7MnsQ}RQ(!Bfv!hUX_erP}rT=(x?s{Jr6qDd>5b)w#rD`O063hb+Au&Lk8&tXdRPwZVob3_Wh+tgwRYNE7nQ3OI)aNUR0bfQ?hw zBAlM&8=AP7CAD?PS}9jnSt_bFFIc(|1=OR?CCeIH6Xo=gYm!j(5x^END6|1b{j4(w1~l@_F{9fmD^b`AZ25<1GL$2~ zCYAw~dnK#e(2S#e0`+yPSTbleg53!r3>+1g7FVHwdsz`kS4=NO!E0Q}yt4cm`K47z zd!Gw5Z90?)U5jjTNoAp2ly58FL})n^DD-~Zvr2CkLLa~#1CWUV*Lwg)qtG_I7Dy@D@u>x>NFjU! z-u6sUXiU^b&OX!d$_>sI@HC2g1pm5HEh#o(eKR~B#dAB2k;UfCyjXr|-lNVU@Q%W_ z@C>pF01M0IK~pGjD`Bdv6|4-*suRE{Jce7F)h25Pzzd2?QQ$U)0F^U@$nC@I0c4|- z9z#IBkMn{tPvDoD)zOM4@q6U41Aj*z7^_#QV--)~^i|OEPHbBRz^8EoJTjjF!bEQ^ zRx51)e@EtLof#E{!x~zRb2ym`$S(~it&n`#EeXiGT*(no1Cn;*dseH%C!v5pxiUboC}59U zaykm=@=Wd>PUhz!=@oo@wK}qLpBvPM0`|KlOHjZ8w`3^_IOvuvM*-b#$!SRHp)+tn zG5-5%wJGJ$aArX<3V3xmSp+Tovs-c&K7Oxyu^luZpl=vVl1Dw0Z+a%*@=P8ZPTHWt zw>^`89Zr^5P{7}YlV#A7cTlI@*?DCZDB#`U?D9es@Sa<;2nD?FmV~w(A5K>0qk#V5 zWEIqO!Yx^V0zPm{0+%1Ul6HA|B?>+X`d1~}is{%PFUar_sGP01!^xhlSS|zG^mkW5 z$OPkFfPx1+KvuxgeS8~;p#8%GRzlGJ37~AQyFjgklKYnj-YkOmf46~vT+Ao9^FDQS z*{3XvOamold2%+mc66WJ4$DNrr#xX9qfzjnCnz%mC47$k)~e&}r-yUO%H^^O3kv?? z_nNcn0#jz(6nqeG5|#tSkdAlG%^UHQN^~U4X>z5OV~6&t{~Mf0JyOdbTcE z*#xr^wqFYNwp%I+E0O94)H#2_%2qiC1zv_J6Y>j+VO_Aiz8R^09M1cR<$;Cdc|Q;5 z{mSxSMZxo~4Ch^Cd1Rr$XkK&XiD`!{2n#k5#080m?Rw{TKbCBq* zpgvRe2!Ih!VLEKHL|pxVTIcUOjHXlJ)(6zVb~S*A*D@!k%`(5Csri_f3~4wji*y=A z=K@$@#Kfj&uD3QfElsUN>HsHE*f#_M8@4=)T-Z9lyk^zPTI3(3=&S{oW=!m&MJOm( z(Ydm@rZurKuco<%@U7NE;l`!FQ3eu?KpZ-9qG(dkp45jZfYTkG1l6I=66r_`XC+h- z3Sf2zaRcimJnccXP7#e4J*Xb-ALHaL4H@Ea>s*b#Cf>y&S)rF(V4Wi-C^})Ah*XJ? zS3bS6$bvLU{57|@721`opjtwDw7d!2x5zxwMTSgwb!1&vYAMM_##9_=2-4g2GAlw9 ztE{nhc|rZsTBIHY{7}WqK|$#ZflP4~wJU3zks%XkR#wdc=@GSpZ69o{kYTh7N)!=x za|CJ}1F}gYvYBmZb!|(LZY)KfZ5hRZltPY+S2w!qali}d=8QCC8jsIDq&5~#Anbwa zfw`H)dm7f$CFNDKr{;sBc`}z~4$|f_<_SIU_#?HIXQgK$Q$C((hlOT=iFU)5ZR zM%~4RT1;A7{_=&b4U1aw=@xawqPwBSS};4+jJ|2ULe60HK_AL%npV~lUjb4raItTw zg+{~ZacL1n@LQ~qvoW<`b&QnX5>RJMq8{dZaCNKNXcw0%Sg>OmuXH)X6dM$DUl7r# z;3kCFx2-IaA(vOmkhCK03QuF9ZUUC*0Eca9GZ70YKj;hD$fJPO44Ef`?ge?+odN-G z!VIKZ!&{V%0@o60RZ$g$(y(}bfLBF}XCxv22e}?4q$VKML%iY)6x0GG$xxfgD$YRq zRwrc6ddt$K;Am*BMTT{x0z2=IirSi`B=8;ZA{`R0{@m%=pDz(9ae312RKLvG zBV~7cARGSV5-FhOO)EP{(&(6S6&W`a9mz~o2krqfiy+kp3{4)3j3+sQr)X6l0frq+ z89^D~D0!7tZqtzJV;2#_Ki!FN2PRVe%Y~r-#2tb8JYl`5kjKJMai6VKr+AaW;W3C` z+!v?|J?%1HUvNR60YSs+Eb>d7-mZ>NoFxzQh}t!cDDo@zzNo$dMV@2t%W4*&$n)$S zBEl&0Yxcgf3E)R%An^lF}o zMghM%6X3~$yerOR2_*jGOq4?6sxwgziEGZpv}mOHFHgW$95#lNoXmhE5}4e;N1h2u#c*;oB!%H*79^F!$uW@h8cy2BLfU&c zoejwm!^s@r(T68(#gHeu5|yNne0j2j$lH%6%7{2r&O`+y)I3pM2nl~@q6iXpjWb1L z6TlNx?pmIxBD4dYi2_IjITOH2LdV`B#J6q)4=}g1**t_27zoHJE)SC5h)va z0od3@BfG}LldwmG_L*HNlB)^fN!S@eW~eJgGsAciwu6uv?n;qNRRknCCy~Gjc>f|L zfh-pDS1z#D!TMsOYyq{$@+P%Ph!XH)-Z=&#E*e*EQpbA75KO%P9&KcJa4aK~Wz86y zk&#)Dk%h!K)-)*|zqScHg9-SvP3kyBBEGpv9Wfz^W$Ke@Z7^4Cmo0Nzqv0hQ8B^eZ zO^G}vD=lL)g_5^uB#vZdtf_eRqv~9RjGuiJ)_7aH%yw>8jV8kaAu@CGuq?oNKV*ze1H&`fKLDc@Z(?HqK*ik zMA2=(UB}q8v;ugYdb%pR+NeHhMLU^ss4dmbl3E{O4hw$!fx^sCn z3M_>FbNBQW7twmahqs;9LeQ+uYjELX>P&kvAXE3>6jlo68s`3sno3Kt^d?#mqB6yK z6XJ?kJ-#+xR4iegX)L9E?etpHkk6Pb6kINl*$A9{a>1h{3gn@ISk^w3p^23V;Ryjc&M>hj2I$*6clffYn(cI*WV1YA3oCVCmSWwL-?VAq9 z7x~SB*Rl#&L8#{ndE6h4w08<@3ra&%u!Wl^%(vCAY=)&J4|3`563D8CEox|hEgc!F zX|;6)rF=ifLu7^;2IsRUZ=ilYgR&`;R}{RE0`qDco9lQZBWm$i9iVQD@U0H;$JgPg zZE9UoJ;k$>6z6e<4EIohI~M}H65}#_*EY2wWjVABW_XBkQ6;4k);Ca~W%{hD+2#2> z2xnM@=`NM zT*hxVaRJdCANZU}oe5pI#YYn#2wr8nXnlo)_v2mw+re>6!Qe5bN8P%a15DTBYJjsx zkqJD-d^t`U=YofW%a}H2Y}@jN*2bpV)%6XlR<@RvgL4Oof8h;0%o^z3i#k!zYpj)( z6;XV&qo5G`xy1^O8E_Vps%}FxpJXmLV$+IOT1tp3rfGHULS+1i zwcs}VkO71rS_f+Y)5rLhpT_75?q0&B>0kH@UyafJ36UBc>dPb^Ti6>BMd9{x5$8;Irt%9}={oyzOuW9p2_i>>5h2y~{AKa#{hQJI$W(!yo z^L*kX)PnQW4Fd&%@6;^~`)Tny^el1s`hoY9C`QO{2;bVLHchz+sNjfMqjtW>9lZ6I@0^$D1VJE zUd4B|YPS8+Yh1_~qc>420lwA%hO6bcfgCs3g`1hda3OB5qqt^0$2IV6m65e1+JsB} zHBojmOM;7(unqqF{IUul!4xly_;g&2q-quv&KwVJsu;msX2TFMl6X8o6(tY|b;=?! zidP@a>x*IaCDH(btHQWHs1W?DU@P!$e>m9;VFVYh{0F$;7A021pwUbgqOf*_}3>-vaIT!Ram!Q2X2pk-nM6wYLLW&wF@KRDMw4RZSY@_`HF|X}d8>rFS!7)kQKXCSE zBO{{Q^arhf6!PYKv>sfOZZ;7#Ox(g-zm>Nh9F#25gSHf9R8x(OZy?RPJnWhFHna0gk* z{BqC}l8IE^T$5lL>7nL68GN5qWnSfV|C!Yt2)<5_&0pAId{U$3f?xLpS*=L_1_$N3%d-!c>orEpQD+_mztWNJO-MR@#@sQh zeoK-3)Wp2}-06j|z++7Nz75Qh&8PTR+;~It-eH4gqAti6{Se?>it82*$-Z!^G+ARD zTbu2KK63|wR(mCpWg+a}W|y#o_1DXMf{}lW6YZCB`mvwqlQm0X@Q8}!Yr9(m6o<<- zr&W=q{pkR$*W}<7(Y~+_nhFfFZ8swkEyM)9k z^vT#!;j6Q!kf;k37|Crw4iaT<31P(N(#;X|NE@<3e$s(M3TpN0I?B z9Kjt?2+c>nMW7Buf%V11EhcPipyHT9^dUqc^scy}c}#&jTC-O5dRJ?HNl{ed=QeA? z3RG2ahlQ9~ID2A3z;|LTzO`ACU|$3maiD!H zqDq3Ns>Osei0)(|T|ME9M9K(7$b{jpzeg!&VbGGcskQgr3+H9w%qS9lvU=ph44+S;8tG!W2}082d^F$@UH!tc^kbxg)eN?1S=lL*SBiI>`x5Ww}aP* zhwJO)^*zn&d)8IobG*Lid3`VN`e6MuT%Uto*CNd%>ndkEQTR@$1n`rOX>^L0@Wc*H zNW8d@p$uM&4ZrqPGI!u4ez=VL$P!+b!AZ#}9p*!>T(u@IABfiPh= z5F{Fzg8~jY;d5xD@l|I|4)XttGYdkLs>99<6!4l8&VrM0zmDw2J{7vcFU>2{;t6yB-oDRg^ z0hg4ICBVx-wv1f&Iw;cOMFjq=y3=C zAKdz5#3iNdpN@PlE198<{Slwsu8Fb#1f{`#1^hzV0-Go}X_E#AhOh7jU3E4{yvB9w zzpP0i*LfH4KH9*flm@*0Z6rYKria02@3M!R+XD@IFsacyT#X0)(Xj* zUuW?8oyqq$dV%hkyg=S`ax*io^dYoX@Jp4}uA#oE(p+Q;^};>RsSVL#geL9PzzE)4 zr(-H467p(S;1^$32ZxJMkPH3k7eiW4>BlnqF>zj4`y}j{;wd^cx7-Ovj=CdFqKhu9 zeoRS!j1`n}TZ52pBw&I?CjI1es_Eq0u%PoJ(^&iP!6!AQg!DfqugUaaVl=+=q{f&% zhP6o?%lgrn-JS(Oc-6NToJgcs<5?0Q^F2#~)E3-c5=0rb5FdL=BiUkf9!^5i{xGyjLw@`V7(uTI$IF9N<~z6kQrJHh8(81hg-2rt5m7S>Z*_ z#GVPR`)KugozskTDJSTn^C38Z!{|kMmR$sf$Dokt&m8f-fkG zV(R?H5+6S`)7h;4s2u!fhek4v16*QNp)^?4!le!KYnCD~Y5#U;QY$7vCLQrPNI!|T z%6aG$0=ck(Fi&|AemDj!~ocu5L$pgd{GlpP(&%trpM!;9MB4yG8_w_b14e45nsEzgGE#7=Hf?&GF-k}qtlD! zBuoJNv1vRPR(KV-btkM;gR3}EsH5DP0WKS4oIVVKbOx7&Y9@#dPQSrqC(dGyeBB(< zn{*+P55e8?sc`62J(md*R-DK*kJsmUiwybP1?51LccWM$lhWFISsiR2T+O3qHLQcC z%*Tx{X^IUCxFpE|MCW3_u#gH+s6{yHjR1oXvIyUNNn?($`@Qg%+%CMaOYwx4HDe5L zzl!$IOx{DJ*Onuk{+dQFH#qZ(TVs!TEqb_S=~85DbOPtJEoy2YAAYE5YKE;L!W~N{ z7&YpqVP%0!S3kY1(dVwBQ8$+jBj@i`tGS$D+r9=UGBu}xHaGzaH?63r5yVp{&p@WN zc-t+mdkH}a%6C2Bl9{El;bW{;(*{cVbU z9?)~(;&#^Cy2r`&Ot`n&aL=knu6f2Mfc)x%iRX@W80^Tyya{!&T7u>tga|uA$m{P(@H;YBe04!iPi)(VffC?hWbUzL2jxGc<1X%RFY?NdVoAf{kD3f8u z3PDGz_PL5_A-e3+jns4$(v64yq%nv05L@7ilgS0(e-R;25)-En=ZKPav7UEliqUX;C*|* zk8=#4+@moIZ?oZISCfb`wXI~^Ic#~D1~7@MAfilhvXT0Il>8J`-wb3p4(~)vd{$=l zsrv!SwcYRmyt_+<#xK1;gjlQr;>bY9?i!T*Q~*SgJ)@z117si&cT3R6zY`w>ld1Ur z#l)xj1Qa@L2SN7xl-Nc((|pEMJN6V+ZKob>q&;DEDLZRw=pbn-=xcVHWoc7w4V*TG zTjt=tf&lkvw;mau4>P}DbIBPtmwf4(OT6bnxS20h$<-dJuzZpy)5+Jjx5fxpc3fRP zT!HReX9o@!HeRF_QWvO!TRhBsl6w~+5Ql!@j0z6GLl~O0U3ZBH?>3!-8#{E%^pi_M zKQjr%|Kc|IsXW^LfFBZ*W>vb+1Xr9uIGVg3r)m>@h5s-c5F|o~ns&rBR!z)*v3;*5 zT74bFLtI*(d06VMnintv|+O?C`79u zk~CF7?3wqWA(;4p>2(ugTlmEiKfMAZOyy~CxwCojS!YrZ%;}8_;cULsn3}Nym^bJ` z{-9x@ykX(IVG+Dxk;4s>JQ@b!W@p1*66L@)W;Zp_6 zK;GcLN8)4_^fSVN%S^no`L&V?8PaRg`}L`}lIWT9X~>Ultc8}y*NiP-podFYhU z$ghU<1euhAAUI77`EZYj5TYixXtWEtj`7uys+RMVjs8UrZ(EUfg2cA5^W}&m>wZuL!=%e%tUl#a67;7LGQm%q%9Ol zFg}LMdcY+L;baQlMoH=(XGs-=k?Ay=hN7P&IeL7cN2B(G;BoVPz~oa3JZ-lo*kpK` z_mbOpQ<9MJ8T=#ACKp_Y;2`AV+WsZM@jD(HeSs;W=|vc}>9Ey?uc^6x`2vYMdDp$f z@WOWi9@&ypJkJkDAd!TMNk2n~m<$qC7a)%u3sY?k(!r&coNQ-7`f&>+?&J6n@g?{n z2XXfyjoA#5TuP>gfyF~i#dBZ9=MHHsOaIJR*FYF|SfhguLm`hKnlId6q2V*}HBRRU zqoaGB8YH%Op6?lX9U>V z-84YUCVuQHtNo`N8?gBxH&3YTOG6=_DDY2z(irCjeab}QW;{P5q``>7ofD#Onn90= z;&VNMh9ms&auwWp7%ISg0x?I)J?9MFb)5fm9(Rv ziykG&*62HrGGs;lJ#a)8TA3*52SUJgU<2G-ewT@brYpN2SqJ<5q>x9$DiDr0{>*jc z7k3>Ie`TXtbw%Ol4Ag~Q#XtQ;6JovwbraQvJ0jG+UuU`!_dgtaSQ9(rhI1lj%l!;` zErhLmis3UxK{s!Um7^dekdaUBM9SHlD3@>>gpwB6QSdOOfS*6C37G&FKjts1r-p)} zgF_H5d$<{WexV+&e30p5m@JC+74VhA;IV^C9ZVZPFH zOtRtQ*PcQQIB=yQcu6kVf9c_-2bp?Y&47S1ihvs)ZWU%cTv@Zaww3s2h@~~c6^}ot z-2_)XD41V&bZ&Eu;R5vxq{3|vmd`x{a7-N;Bb`7`&wxZ&G)-1TG43D^sE-lYM$Flb zg*LcI9!K)YRu%ar2+qv|eBPa2&q@;T2d`XQWhoN`O zKaA)9rX7C=J$};i@AL0uUzSrfy-7Pv0}A;3SyaG=->|9oH*CJqL%)!=;kV)t_z8ud zF!%|Fp9uJggdYihqTnYQeqwrmD~?re?=3SV^(e^SxhiWv6We|!?(muTF^{m%M2=gW z@LrSs6{h=c7IB|I?UJ~kJi#&^5NJ$Gbx>eo+tEnX4dNrq1h7Ykco)Gzj;n%$k1<>0`?mA`$zKHw=R~gU&Mp;ppGhbvq(?uN zc|Ad^u^`QI{t8rb;JhHDT*^sKvMfUCMz7>e&cjJ7yq+MYEO8~4ViOb0&Ac$#e?dTi zYB(9{t8jH}qRzhB>j^ryy1q~VUU_H5;u^0f$W#<`-|vvt4kO*qkskOR(t|D}%|rYZ zngHiY?2uwj2)DJ;16GTW*uwbsZS{JB9jaRAg|~eu_8*Q<9O0)$=uyEq86F#=7mnOfemHa96t()i1F1joS z1oQ@%B?pg~ASS~HHsG5S#uWIf9(-)Cl70azIh7`IktP+vHIp6W!zu9TC=EEx$t!^5 zN@PmITc;-*%^3^`-%o(Ad&yO^s>-V>7B5FJqw(8S$zeV)n%AJ%Ed15<J@n-}yWVANq#6aM;Xbamqy2B5<)&J|81r>q<@~@43j|g7Vl0tDrgl;8v%fgh_|i z1m!`FoC_EJiq^&E!KdVqAs;K=OVJ521(a#;nr0MN$f{jf51(6vWD!fQS`JJtM6tyL zF$O*kNw^l98WuLJMA1_zj`zaa)hGrJk=8dXxCh0QP^8lO##$tTyPfnwa2a8tl73V! zIhAmO{HLM34EljB!fyrVH-qq71v#GlPDl9T4^x7L*cr4+aaqGE!sJZKzRx`k^OvCL zSu|@zP19l&JDYJ!>6u9;$58M zy9pC6j)5QK58pjYb8$SMah#tc8g7ck+(Q&iQlgk;v=!b>t5NiFRt;zx zifJJE;UhrVP;?_J`{i7yas_!0_r4dpv5D1AR0~BnQ=G(QwabuUHOi}9U9z}Iu7cw9 z9u;`2qVIJ=E1PSY@wPjYbwczS+;(Sj)Lr0!rwYbO71hHRp1}+6#4l*7tpy1EFkCVc z!7Wd<;6WlLr%Z{&z*ImMx%OFZnOc$`y}rs)hzu=jhXCAMO#tqeZBq?^LX zxxsq(97vw!3#G-wuO+{~F)n;+enn|M_-AEnRfP?q>%Zs~=!}Azm%f|lqnmz|eZ<}$ zCZ`nbvIqJgD^vm_kXaX`6_FJb8UW0Q1o$FrCQTF7M*)7wI+`Vkk_V`eHH#*x28n8L zy}>m=jXyAHE3T|+C0|+6X$Z?@yoQOfR?sZ}0E)4Ypp+t$7QRMFKMXjIumSfj8(Qbr zFGiX`cRId7kRk_Jb-|1v<#1wb22oXioeQ-T8TBrDfP0PBCRT_vV`6MNEn{{o zV+wJV$t|6lj+?(tNm69s=f6#fjm;S5NOBc{mia|N3OHJa#OU5_nv@2*ba-7~+gvvm zefEG~v=pt@I{)<=HWhuZX#XMQ@DC$j2-e1iIPLxE+4Qrm2XBq+J$Ng%FRr&SPA(RD z-%ODItibms$wl~`BsmUWPLeA|nD-OUJ&wwdb-i~d%dmgHks`+lAt!M_oNR(Wt0=2* z`AGQ!z9UsO50Uv%1wLH93i19PT;qY@ye0dgg0hP8(kkK!xkLc42)PW1 z>=2@92zRH-#?+s9QSf^G!jQ~Y2qP<-?}J4;_3shq9-NUx=KtWEq=N zuO2x=Z>41VSk)8O7Arr8D$)qAsck$R5W$f!Ixgy zCfbmJTcDYt;2h;D5s<|yVBLhG$KX5D{7AYSsu)LUCJ;v`qZtZ*P$tKX0nzfazGLap2fWnj7nK!Gt$fVVl+>mzgKagO%W-m%$GPxdz)6xz zdVaNJC{Q=xA}k5Aan53p7~ANX!GlTzG>p08mBo4R2O;VgBGnQmRoI-EmJ%N{Var1h zC}=tHlenv;v4NcGWH*Xf)+x2D?^6(g9O27c!)__&LU>Z&WC#|X|q8He;Ai%$zjCdN_88~ zuD5fo-$1oq4SrUdGaAKig0UjURDq|JFy^vRs?Dy#0dRMRw22Q4<6|Cea9X`U@V^pC zI~5C=x8v|JvQdb80^c!4juDJc;_5N7&I_4#I4y|^Lm6Uc;gf-#zc(6BLmP=d=^1V` zo@LtW{~S0a%PWd!SgP`g6PBuU)C>6YF|rivaO#IsO9R3C$~um%`%&b}IC88UVFyPm zQAMVIdw91wRhj5tmxul__1o(t?^HkHf29^}KjS0pfPzba1fIc4fz2hA5HlWmkk>*A z+C@hHUfQe>Tv`Ax#hn#0-hmt=o$_-E?E~zpdiTxq>+hr+vfo~kyW;RG{ql5g6b>hxcAt<1MK(_VEZNi>@u7T9 z2}>~V9b>%3UU5L4b|F|-%;q!qrCQ_RQO6WQ*fOj=GAcB3IV>OGVXRttP3 zRcv5WVnibq&CVMYR@Yc4lqO4*(%H zvANS3L%!k*7L+U%8es(udm|AJno#k!GG?RK;p*2%MH%6238$rk<0aJ6!55y}@V4xf zkl1#%41nW*nHj*nxPcv7P;G=l%)MdUgd5)*sW+(}9i{^(N}P1I;u}C`{$q%`Rh)DJ z;gAU(%-L-P@DXwt65BZ8?VK?9Rv%}QBcJVBPtVKwK0(eDkTXtjx`Z^vAG^-Mq~VVr z%?lG!pTW<)F=}Mwv!pByF9ttP7UaYh6!9`EQ_?reFL4*hob(0xKqPrq=4PgTz60_Fw#*9qkYK0xO=HWDfe0V6d={42M0C=`8tc zMg~2(roeq@;yH2+2&TF7G|NuzDex>6+*6>%!EJm|3DYsX5)PLXsNAxU{@+T7T+qpv zjZ$JFM7XLz8XA0w-C9Z<&I-N^mtJTm(=ko31BXZzq~93`*#qGk0|}71Ab~%7mV)g7 zzfSWja6%^W(eT{>a`%dwB=BNhC4Za=_7rf>!3ny~L$a8x`iL;oFoYdPVbv@_3`9d1BtbYUgQuiG#73!(2qWhV8@r4 z^Sk}&N$pQh-u<+t4sR23gY9p*Pf=w4hCeh#?n)9tY2NmjXdoy@WW**K@oy{)=MUjI zA{07x`oHT$fpwfn0(B(T`~Dxyr^oqxI*u*q*o4~uy9xCJKB0cdCRF`NC%3Q+#7`@8 zQ^ITw$oO|wE1zqfi;(yMwtRX(nX9%J6(ci5`w0J@Xk^Ls4_?bZSuMJMIcphS7n=SL z=2iH!R=hB*W*@G!!S_E@p8%W~>Ig&xsV-)tkk1uz3Hzg1o~7?b z{_thG3_O1|jmY^!Y><^FcZ|Mtl@I%htT)N1ecCXySURKf1zEHs~p)QPSi#ihZ zThtFx*P>2F{VnF5n0I5|i+Mlhcnm`8&$XT3r7@U!t@93u;^@Qh-g)`HgF}R) z+yN?J!5U(TMDv-VcPJ=Q1hI=Eh`oR{8WBaT*ihEqMX^OwB+V8{PfSc=OfwowVo6La zNlZ2GJ2SU{`TlqwkKNhbnZ4a}cIP)U`-0SVO)+!KZwJp8A8Ck*n~M)OjPQvxAGofc zDzrqk_bYG6>Fvr-3yX;W%Xf*-k-}o~!M(u|`y3HlH*yNa=8JDd7T=E4ThFybc>5hN zm0c>ou;H$M$-(VOY;M?G=I4qDb(!V$9BY;%+jK!w0&bqru4esYy03FsoaaTo>R!w- zwiwZZQKdwiWp}xK0LF~Mc14+}b`=a2ubZriW^sZ0C1KYph=U=g))Xe4rg^8bF@gab z&NR_d(@C@Ss%nc!S8Wl!RYL}b>BLA+IA#&6cIuT@?fzyyCNPAvlNLBoG$X_eQcac_ zvc)0u073L88{wws{| z%{CP~V)eWora&-C=IPm;?Ag_HwW}G%uEJ)jkDY4<1K=mN?ksVXklE@eF(KQaXTrR41uoYrS&4ZPQWyX%|tK?P~ZrYQ@Qn5siKdrK8 z4$}3_B|d>IR*Q8a)ITOhSyII3I{H*en(@N*}WpsfE5 z^h7_=;8cA`iYq88&68U6QRk1D9evbgMJ5aXy|Zc)gl3gGUI9@)eUVr^?sU+c{ZS=x z$D(_kXmJ#w=kmrSw#vPt@~VYg{F@|T?!p2M4?nxtYc-8pmAb;Ou0_< zO-jSmn&V~BWK2gP`a0y`q^D`N2{;R~={h{GmTs~;gPZXOJPkus%c`K-0@Ht>$GhjY zjZV?Rrqt4pPj@=aEvD*cueuucNaI6}7Jwe_tdn?xN9LrUVMSF4XUGa+@Jvt7ZH5|R zs)+O?{LI_X`CZg6+GybgGA9@Sn>h)bjqOOMT(t5pjiJ0&%B+Zo^j}fdA+`~jA&yw57q%G65 z8_`yuV-=AT-RHap$lpxyY-2^`pMhFlvQwYc8$AtCqClI4*8xXi%F4=hxiFTe=8vw* zyo37TNMeD#HW#ReF{aa;zVe}>KDsH_NXzOnx+#mtGP_LE+KRr&;%*I+#|#KYGyqz- zG7w^sfum#MpD0Y=glveRSP~0#{}XOUOD))`0t{4`1MW;**#RMzmEzT`D=9fPn*ZTy z!J+!ineHG*m=T*`tINOz@$T4JPv0`v?Fg)Ith9#9=muwmSQ8UztnqE2J|d(6-H96F zulu4htc_$uLsXQ$D&O5WyouVNMizscs<4TEWwYFtMvMbh--KpsW*p4cyeg0A-N!t( zG*((4RC$aRYa$*p)&#azoAHG4%fKmjwvpSnHBwn0wyYHO({{3qF~%C-_UfZ7V+Z_o ze;FTDW$dV*DReh>Jf=3NS;oiZIe)^~vF*vK@^q5<>1?dDx>R}GvOKZIn!v9Ar#x{Y zRb;%83bQrJ@^oivJavoc+RkM~?vCkVG6`Pf=!EPEbMZ}7A7v?%@Yj8%v?W^>dBST_ zRDn~guEMVR=6ts!6fM(fYELzb-%A!h-8iDHcUAHG$l~`kR$BY1;`bM8Vg?v%dCvV%fFK6aAw(hpNRYo1U1UfUJMrEjLzY>kCN;FC(8eKh6QKh@6GPbC)OIc;t%8H2Dapz5VVH7#f zv@j0DgKnTZNB})RB1i(sAO-XUsUQvX0_mVP=mYwKexN@X00x3VAOj2rLqH}N3bH^p z7zT2{a4-Ul1f#%cFb0eT}q@Ey1Uu7YdeI`|&^0B(RE!B5~OxCL&5JK$&V3-}e> z1;2sc!5`pH@E7m~v1~DufE9!l=4bJ*qwxPDN0WR0FCZ)re|LMNv(trc^VkIn{z{Nj*qKQx8$C zsMb^)sx9>})sBjx9--P(9jHgC|4|*O$Ee4tC#WZ>PE=>gMY*Y1steVXilgGGZd7+F zf$BjeQb|-Yl|uETQmHhm7nM%+rutBQseV*{Y5+Bm8boDKgQ+1@CN-4GqOz%BR1P(q z8bOVuMp2`wG1ORU95tSrK;=?-)I@3$HJO@1O{Jz$Pf^pU8PwC%Oe&w6MHNu9sX0_3 zHJ2))=27#h1=K=n5w(~qrj}4ksb$o1Y6Vq7t)x~_rIb#srq)nvsddzPY6G>A+C*)p zwoqHCZPa#Z2USMxq;^r|)NX1IwU^pQ?Wdlh4p0ZFXQ}6?=cyN{LsSLzBJ~pWGW81e zDs`ATLLH@!QOBv*s1sBr^*Z$i^(OTe^)~em^)B@u^*(iy`hfb7Iz@d%eN25qou)pe z&QPCGpHp8@Us7LDXQ{8LbJTh28|ngek-9`(roN@Vqpna_scY1A>U-)3>IU^A^%HfI lx<%cl?odBdzfiwYcd6f~->E;SKdHZ{zfDK+>u0)`_YZe0nLYpj delta 39575 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 J>u32l_y2}JTJ`_{ diff --git a/BIN/ASM.S.EXP.txt b/BIN/ASM.S.EXP.txt index 99e1f6cc..1da60e8b 100644 --- a/BIN/ASM.S.EXP.txt +++ b/BIN/ASM.S.EXP.txt @@ -149,10 +149,6 @@ EXP.Eval.Next stz SRC.ACC bcs EXP.EvalExitSYN jsr SYM.LookupGlobal - .DO ASMDBG=1 - lda #"?" - jsr EXP.DBG - .FIN bcc EXP.EvalOperator EXP.EvalExitRTS rts @@ -225,11 +221,6 @@ EXP.EvalOperator lda SRC.ACC.F sta SRC.ARG.F - .DO ASMDBG=1 - lda #'@' - jsr EXP.DBG - .FIN - jmp EXP.Eval.Next0 *--------------------------------------- EXP.GetLocal jsr SRC.GetNextChar diff --git a/BIN/ASM.S.OUT.txt b/BIN/ASM.S.OUT.txt index f723c680..3e03526b 100644 --- a/BIN/ASM.S.OUT.txt +++ b/BIN/ASM.S.OUT.txt @@ -287,17 +287,6 @@ OUT.PrintLineErr >PUSHBI 1 jsr OUT.Print - .DO ASMDBG=1 - >PUSHW L.MSG.EQU0+2 - >PUSHB (ZPSymbolBuf) flags - >PUSHBI 1 - >SYSCALL printf - - >LDYA L.MSG.CRLF - >STYA ZPTmpBuf - jsr SYM.Dump.GLP - .FIN - jmp OUT.PrintCR *--------------------------------------- OUT.PrintLineErrDashA @@ -316,6 +305,12 @@ OUT.PrintLineErrDashA .8 clc .9 rts *--------------------------------------- +OUT.PrintWarn1 jsr OUT.PrintLine.1 + + >LDYA L.MSG.WARN1 + >SYSCALL PutS + rts +*--------------------------------------- OUT.Print >SYSCALL PrintF bcs OUT.Print.RTS *--------------------------------------- diff --git a/BIN/ASM.S.SRC.txt b/BIN/ASM.S.SRC.txt index 0ffa8cc4..0b2df4ee 100644 --- a/BIN/ASM.S.SRC.txt +++ b/BIN/ASM.S.SRC.txt @@ -847,23 +847,31 @@ SRC.GetKeyword >STYA ZPPtr1 KeyWord table .3 lda (ZPLinePtr),y beq .6 + jsr SRC.IsKeywordLetterUC bcs .6 + iny cmp (ZPPtr1),y bne .7 + dex bne .3 + lda (ZPLinePtr),y All chars match... beq .4 End of Line ? + jsr SRC.IsKeywordLetterUC bcc .7 Additional letters... + .4 lda ZPLinePtr found! clc adc (ZPPtr1) skip KW in source line sta ZPLinePtr bcc .5 + inc ZPLinePtr+1 + .5 plx Keyword.ID clc rts @@ -874,43 +882,57 @@ SRC.GetKeyword >STYA ZPPtr1 KeyWord table adc ZPPtr1 sta ZPPtr1 bcc .8 + inc ZPPtr1+1 + .8 plx Keyword.ID inx inx bra .1 + .9 plx sec rts *--------------------------------------- SRC.IsAMReserved ldx SRC.AM.RESERVED + .1 cmp SRC.AM.RESERVED,x beq .8 + dex bne .1 + sec rts + .8 clc rts *--------------------------------------- SRC.IsMODReserved ldx SRC.MOD.RESERVED + .1 cmp SRC.MOD.RESERVED,x beq .8 + dex bne .1 + sec rts + .8 clc rts *--------------------------------------- SRC.IsEXPReserved ldx SRC.EXP.RESERVED + .1 cmp SRC.EXP.RESERVED,x beq SRC.IsEXPReserved.8 + dex bne .1 + sec rts SRC.IsEXPReserved.8 @@ -918,22 +940,22 @@ SRC.IsEXPReserved.8 rts *--------------------------------------- SRC.IsKeywordLetterUC - cmp #'.' - beq SRC.IsEXPReserved.8 - - cmp #'_' - beq SRC.IsEXPReserved.8 - cmp #'A' bcc .9 + cmp #'Z'+1 bcc .99 cmp #'a' bcc .9 + cmp #'z'+1 + bcs .99 + eor #$20 + rts CC if lowercase + .9 sec .99 rts *--------------------------------------- @@ -941,26 +963,41 @@ SRC.IsLetterOrDigit jsr SRC.IsDigit10 bcc SRC.IsLetterRTS *--------------------------------------- -SRC.IsLetter cmp #'A' +SRC.IsLetter cmp #'_' + beq .8 + + cmp #'A' bcc .9 + cmp #'Z'+1 bcc SRC.IsLetterRTS cmp #'a' bcc .9 + cmp #'z'+1 + rts CC if lowercase + +.8 clc + rts + .9 sec + SRC.IsLetterRTS rts *--------------------------------------- SRC.IsDigit16 jsr SRC.IsDigit10 bcc .8 + cmp #'A' bcc .9 + cmp #'F'+1 bcc .1 + cmp #'a' bcc .9 + cmp #'f'+1 bcs .9 @@ -968,23 +1005,33 @@ SRC.IsDigit16 jsr SRC.IsDigit10 .1 * clc sbc #'A'-11 cc so A->10 (11-CC) + clc + .8 and #$0F + rts + .9 sec rts *--------------------------------------- SRC.IsDigit10 cmp #'0' bcc .9 + cmp #'9'+1 + rts cc if ok, cs if not + .9 sec rts *--------------------------------------- SRC.IsDigit8 cmp #'0' bcc .9 + cmp #'7'+1 + rts cc if ok, cs if not + .9 sec rts *--------------------------------------- @@ -1003,15 +1050,18 @@ SRC.SkipXp1 sec SRC.GetNextCharNB jsr SRC.GetNextChar bcs .9 + cmp #C.SPACE beq SRC.GetNextCharNB + clc + .9 rts *--------------------------------------- SRC.GetNextChar lda (ZPLinePtr) beq SRC.GetChar.ERR - cmp #$0D + cmp #C.CR beq SRC.GetChar.ERR inc ZPLinePtr @@ -1022,7 +1072,7 @@ SRC.GetNextChar lda (ZPLinePtr) SRC.GetChar lda (ZPLinePtr) beq SRC.GetChar.ERR - cmp #$0D + cmp #C.CR beq SRC.GetChar.ERR clc @@ -1079,7 +1129,12 @@ SRC.GetACCSize lda SRC.ACC.F and #SYMG.F.FWREF beq .1 - ldx #2 + lda SRC.ACC+1 + bne .10 + + jsr OUT.PrintWarn1 + +.10 ldx #2 rts .1 ldx SRC.ACC.SIZE diff --git a/BIN/ASM.S.SYM.txt b/BIN/ASM.S.SYM.txt index cb8d0fa4..73b2f3b5 100644 --- a/BIN/ASM.S.SYM.txt +++ b/BIN/ASM.S.SYM.txt @@ -20,12 +20,21 @@ SYM.Init lda #SL..+SL._ bcs .9 >STA.G SYM.hList + + lda #SL..+SL._ + >SYSCALL SListNew + bcs .9 + + >STA.G FWR.hList + >LDYAI 256 >SYSCALL GetMem bcs .9 + >STYA ZPSymbolBuf txa >STA.G SYM.hBuf + .9 rts *--------------------------------------- SYM.Quit >LDA.G SYM.hBuf @@ -33,7 +42,12 @@ SYM.Quit >LDA.G SYM.hBuf >SYSCALL FreeMem -.1 >LDA.G SYM.hList +.1 >LDA.G FWR.hList + beq .2 + + >SYSCALL SListFree + +.2 >LDA.G SYM.hList beq .8 >SYSCALL SListFree @@ -59,9 +73,7 @@ SYM.NewGlobal >LDA.G ASM.PASS jsr SRC.SkipX -.1 stz SRC.ACC.F - jsr SYM.PC2Acc - jsr SYM.Acc2Global + stz SRC.ACC.F lda #SYMG >STA.G SYM.BufPtr @@ -69,13 +81,10 @@ SYM.NewGlobal >LDA.G ASM.PASS lda #0 sta (ZPSymbolBuf),y - .DO ASMDBG=1 - lda #'1' - >SYSCALL putchar - jsr SYM.Dump.G - jsr OUT.PrintCR - .FIN - clc + jsr SYM.PC2Acc + jsr SYM.Acc2Global + +.80 clc rts .9 cmp #E.DUPKEY @@ -122,14 +131,7 @@ SYM.GetGlobal >PUSHB.G SYM.hList Pass #2: should be already defined... sec rts -.8 .DO ASMDBG=1 - lda #'2' - >SYSCALL putchar - jsr SYM.Dump.G - jsr OUT.PrintCR - .FIN - - lda #SYMG +.8 lda #SYMG >STA.G SYM.BufPtr >STZ.G MAC.CtxID @@ -147,11 +149,18 @@ SYM.LookupGlobal >PUSHW ZPLinePtr >PUSHWI 0 ScopeID >SYSCALL SListLookup - bcs .4 + bcc .10 - >STYA ZPPtr1 KeyID + >LDA.G ASM.PASS pass#2? + beq .11 - jsr SRC.SkipX + lda #E.UNDEF.SYMBOL + sec + rts + +.11 jmp SYM.AddFWFef + +.10 >STYA ZPPtr1 KeyID .1 >LDA.G SYM.ID cmp ZPPtr1 @@ -169,47 +178,72 @@ SYM.LookupGlobal dey bne .2 Keep ACC.F unchanged - clc -.99 rts + jsr SRC.SkipX -.3 >PUSHB.G SYM.hList + clc + rts + +.3 phx + + >PUSHB.G SYM.hList >PUSHW ZPPtr1 KeyID >PUSHW L.SRC.ACC.SIZE >PUSHWI SYMG-1 Get only Global value >PUSHWI 1 Skip SYMG.F >SYSCALL SListGetData - rts + bcs .90 -.4 >LDA.G ASM.PASS pass#2? - bne .9 yes, undefined symbol + jsr SYM.LookupFWFef + bcs .8 +* lda #2 +* cmp SRC.ACC.SIZE +* beq .8 + +* sta SRC.ACC.SIZE + lda #SYMG.F.FWREF tsb SRC.ACC.F - lda #2 - sta SRC.ACC.SIZE +.8 plx + jsr SRC.SkipX - lda #$ff - sta SRC.ACC - sta SRC.ACC+1 - -.5 jsr SRC.GetNextChar - bcs .8 - - jsr SRC.IsLetterOrDigit - bcc .5 - - cmp #'.' - beq .5 - - cmp #'_' - beq .5 - -.8 clc + clc rts -.9 lda #E.UNDEF.SYMBOL - sec +.90 plx +.9 rts +*--------------------------------------- +SYM.AddFWFef jsr SYM.LookupFWFef + bcc .8 Already Defined + + >PUSHB.G FWR.hList + >PUSHW ZPLinePtr Pass #1: try to add global... + >PUSHWI 0 ScopeID + >SYSCALL SListNewKey + bcs .9 + + >STYA.G FWR.ID + + jsr SRC.SkipX + + >PUSHB.G FWR.hList + >PUSHW.G FWR.ID + >PUSHW ZPSymbolBuf + >PUSHWI 1 + >SYSCALL SListAddData + rts + +.8 jsr SRC.SkipX + + clc + +.9 rts +*--------------------------------------- +SYM.LookupFWFef >PUSHB.G FWR.hList + >PUSHW ZPLinePtr + >PUSHWI 0 ScopeID + >SYSCALL SListLookup rts *--------------------------------------- SYM.StoreGlobal >LDA.G ASM.PASS @@ -230,6 +264,7 @@ SYM.StoreGlobal >LDA.G ASM.PASS iny Add 1 for \0 after locals/privates bne .1 + inc .1 >PUSHYA @@ -274,8 +309,17 @@ SYM.PC2Acc ldy #ASM.PC+3 dex bpl .1 - lda #2 - sta SRC.ACC.SIZE + ldx #4 + +.2 lda SRC.ACC-1,x + bne .3 + + dex + bne .2 + + inx + +.3 stx SRC.ACC.SIZE rts *--------------------------------------- @@ -651,6 +695,14 @@ SYM.Dump.PushValueY bpl .1 rts +*--------------------------------------- + .DO SYMDBG=1 +SYM.Debug >PUSHW L.MSG.SYMDBG + >PUSHW.G SYM.ID + >PUSHBI 2 + >SYSCALL PrintF + rts + .FIN *--------------------------------------- MAN SAVE usr/src/bin/asm.s.sym diff --git a/BIN/ASM.S.txt b/BIN/ASM.S.txt index 14fb2c8a..e10c4179 100644 --- a/BIN/ASM.S.txt +++ b/BIN/ASM.S.txt @@ -6,6 +6,7 @@ NEW .TF bin/asm *--------------------------------------- ASMDBG .EQ 0 +SYMDBG .EQ 0 *--------------------------------------- PAGE.LEN .EQ 23 DO.MAXDEPTH .EQ 8 @@ -137,9 +138,13 @@ L.MSG.LSYMBOL .DA MSG.LSYMBOL L.MSG.PSYMBOL .DA MSG.PSYMBOL L.MSG.SUMMARY .DA MSG.SUMMARY L.MSG.END .DA MSG.END +L.MSG.WARN1 .DA MSG.WARN1 .DO ASMDBG=1 L.MSG.DBG .DA MSG.DBG .FIN + .DO SYMDBG=1 +L.MSG.SYMDBG .DA MSG.SYMDBG + .FIN L.MSG.SRC.FILE .DA MSG.SRC.FILE L.MSG.OBJ.FILE .DA MSG.OBJ.FILE L.MSG.CPU.FILE .DA MSG.CPU.FILE @@ -158,7 +163,7 @@ J.DIRECTIVES .DA DIR.AC .DA DIR.CS .DA DIR.CZ .DA DIR.DA -DIR.DO.ID .EQ *-J.DIRECTIVES +DIR.DO.ID .EQ *-J.DIRECTIVES .DA DIR.DO .DA DIR.DU .DA DIR.DU @@ -241,11 +246,11 @@ CS.RUN jsr CS.RUN.ARGS jsr OUT.Init bcs .9 - + .1 >SLEEP - jsr CS.RUN.LOOP + jsr CS.RUN.LOOP bcc .1 - + .9 rts *-------------------------------------- CS.RUN.LOOP ldy #S.PS.hStdIn @@ -356,9 +361,6 @@ CS.RUN.LOOP ldy #S.PS.hStdIn .9 pha jsr OUT.PrintLineErr - .DO ASMDBG=1 - jsr SYM.Dump.1 - .FIN pla sec rts @@ -387,9 +389,22 @@ CS.RUN.ARGS ldy #S.PS.ARGC >STA.G SRC.hFILENAME bra .1 -.2 ldy #1 +.2 ldy #2 lda (ZPPtr2),y - cmp #'L' + bne .90 + + dey + lda (ZPPtr2),y + + cmp #'a' + bcc .20 + + cmp #'z'+1 + bcs .20 + + eor #$20 + +.20 cmp #'L' bne .3 lda #$ff @@ -417,7 +432,7 @@ CS.RUN.ARGS ldy #S.PS.ARGC .90 >PUSHW L.MSG.HELP >PUSHBI 0 >SYSCALL PrintF - + lda #E.INV.ARGS sec .99 rts @@ -564,9 +579,13 @@ MSG.LSYMBOL .CZ " .%d=%h%h%h%h" MSG.PSYMBOL .CZ " :%d(%d)=%h%h%h%h" MSG.SUMMARY .CZ "\r\n**** Symbol Table Size : %5D Bytes.\r\n" MSG.END .CZ "**** End Of Assembly." +MSG.WARN1 .CZ "**** WARN : Unoptimized adressing mode due to forward reference.\r\n" .DO ASMDBG=1 MSG.DBG .CZ "\r\nCtxID=%d, ARG=%H%H ACC=%H%H -> ACC %b [%h]\r\n" .FIN + .DO SYMDBG=1 +MSG.SYMDBG .CZ "SymID=%H\r\n" + .FIN *--------------------------------------- ASM.CPU.FILE .BS 65 @@ -631,6 +650,9 @@ SYM.hBuf .BS 1 SYM.BufPtr .BS 1 SYM.ID .BS 2 +FWR.hList .BS 1 +FWR.ID .BS 2 + MAC.hList .BS 1 MAC.hBuf .BS 1 MAC.BufPtr .BS 1 diff --git a/BIN/CC.S.SYM.txt b/BIN/CC.S.SYM.txt index a34e52fe..74666a89 100644 --- a/BIN/CC.S.SYM.txt +++ b/BIN/CC.S.SYM.txt @@ -846,6 +846,8 @@ SYM.LookupLabelA .99 rts *-------------------------------------- SYM.LookupFree >LDA.G CC.LookupIdx + beq .9 Never set by CORE.Init + cmp #CC.LookupIdx beq .9 diff --git a/SYS/KERNEL.S.BLISTX.txt b/SYS/KERNEL.S.BLISTX.txt index 9b549176..e61f014b 100644 --- a/SYS/KERNEL.S.BLISTX.txt +++ b/SYS/KERNEL.S.BLISTX.txt @@ -27,7 +27,7 @@ BLISTX.New sta SLISTX.Opt lda #0 sta (DBlkPtr) - + lda SLISTX.Opt sta (IBlkPtr) diff --git a/SYS/KERNEL.S.CTRL.txt b/SYS/KERNEL.S.CTRL.txt index 105dc6ac..bca16087 100644 --- a/SYS/KERNEL.S.CTRL.txt +++ b/SYS/KERNEL.S.CTRL.txt @@ -4,24 +4,19 @@ NEW * CONTROL SECTION : .LIST ON *-------------------------------------- -C0 .EQ Mem.MLoMem -C1 .EQ Mem.MHiMem -C2 .EQ Mem.XLoMem -C3 .EQ Mem.XHiMem -*-------------------------------------- -C5 .EQ AUX.S -*-------------------------------------- -C6 .EQ D1.S -C7 .EQ D2.S -C8 .EQ E0.S +C1 .EQ MAIN.S +C2 .EQ AUX.S +C3 .EQ D1.S +C4 .EQ D2.S +C5 .EQ E0.S *-------------------------------------- .LIST OFF - .DO Mem.MLoMem>$2000 + .DO MAIN.S>$C00 .LIST ON * ERROR:MAIN too big .LIST OFF .FIN - .DO Mem.XLoMem>$2000 + .DO AUX.S>$2000 .LIST ON * ERROR:AUX too big .LIST OFF diff --git a/SYS/KERNEL.S.FS.txt b/SYS/KERNEL.S.FS.txt index c696445b..f32fee9a 100644 --- a/SYS/KERNEL.S.FS.txt +++ b/SYS/KERNEL.S.FS.txt @@ -70,7 +70,7 @@ FS.OPEN.REG >MLICALL MLIGETFILEINFO .9 rts *-------------------------------------- FS.OPEN.ERR pha Save Error Code - jsr FS.CLOSE.REGDIR + jsr FS.MLICLOSE ldx IO.hFILE Cleanup what MkFD did lda hFDs-1,x @@ -106,23 +106,6 @@ FS.OPEN.DIR lda #S.FD.T.DIR sec .9 rts *-------------------------------------- -FS.CLOSE.REGDIR ldy #S.FD.REG.REF - lda (pFD),y - beq .1 - - sta K.MLI.PARAMS+1 - >MLICALL MLICLOSE -* bcs FS.RTS - -.1 ldy #S.FD.REG.IOBUF - lda (pFD),y - beq .8 - - jmp K.FreeMem - -.8 clc - rts -*-------------------------------------- FS.READ.REG ldx #MLIREAD .HS 2C BIT ABS *-------------------------------------- @@ -206,6 +189,23 @@ FS.MLIOPEN >LDYAI 1024 get a ProDOS IOBUF .9 FS.RTS rts *-------------------------------------- +FS.MLICLOSE ldy #S.FD.REG.REF + lda (pFD),y + beq .1 + + sta K.MLI.PARAMS+1 + >MLICALL MLICLOSE +* bcs FS.RTS + +.1 ldy #S.FD.REG.IOBUF + lda (pFD),y + beq .8 + + jmp K.FreeMem + +.8 clc + rts +*-------------------------------------- FS.Stat bit A2osX.FSID bmi FS.Stat.FX diff --git a/SYS/KERNEL.S.SLISTX.txt b/SYS/KERNEL.S.SLISTX.txt index 0493c35d..2eb6f7fa 100644 --- a/SYS/KERNEL.S.SLISTX.txt +++ b/SYS/KERNEL.S.SLISTX.txt @@ -84,7 +84,7 @@ SLISTX.GetData jsr SLISTX.Select .3 bit SLISTX.bStr bmi .4 String mode : until CR - + inc SLISTX.nBufCnt bne .4 @@ -126,7 +126,7 @@ SLISTX.AddData jsr SLISTX.Select jsr SLISTX.SkipKey jsr SLISTX.CheckLen - + ldy iByte lda (DBlkPtr),y pha @@ -156,20 +156,20 @@ SLISTX.AddData jsr SLISTX.Select sta ZPSListDataLen+1 sec - + .1 inc ZPSListDataLen bne .2 inc ZPSListDataLen+1 beq .8 - + .2 jsr SHARED.FORPNTgn bcc .3 - + jsr BLISTX.SetBlkByte override ending 0, already allocated clc bra .1 - + .3 jsr BLISTX.AddByte bcc .1 rts @@ -198,13 +198,13 @@ SLISTX.SetData jsr SLISTX.Select txa eor #$ff sta SLISTX.nDataCnt+1 - + .1 inc SLISTX.nDataCnt bne .2 - + inc SLISTX.nDataCnt+1 beq .8 - + .2 jsr SHARED.FORPNTgn jsr BLISTX.SetBlkByte bra .1 @@ -222,27 +222,29 @@ SLISTX.CheckLen lda ZPSListDataLen tax ldx #0 tay ldy #0 - + lda FORPNT+1 pha - + .1 jsr SHARED.FORPNTgY beq .2 - + iny bne .1 + inc FORPNT+1 + inx bra .1 .2 iny add Ending \0 bne .3 - + inx - + .3 sty ZPSListDataLen stx ZPSListDataLen+1 - + pla sta FORPNT+1 @@ -253,23 +255,23 @@ SLISTX.GetByID jsr SLISTX.Select jsr BLISTX.GetNByte tax beq .9 - + ldy #0 - + .1 phy jsr BLISTX.GetNByte ply - + jsr SHARED.FORPNTpn iny dex bne .1 - + txa lda #0 jsr SHARED.FORPNTpn ending \0 - + jsr BLISTX.GetNByte ScopeID lo jsr SHARED.FORPNTpn @@ -290,7 +292,7 @@ SLISTX.NewKey jsr SLISTX.Lookup >LDYA KeyID >STYA SLISTX.KeyID End of list - + lda SLISTX.KeyLen jsr BLISTX.SetBlkByte override ending 0, already allocated @@ -323,9 +325,9 @@ SLISTX.NewKey jsr SLISTX.Lookup lda #0 Ending Len = 0 jsr BLISTX.AddByte bcc SLISTX.8 - + rts - + .99 lda #E.DUPKEY sec .9 rts @@ -338,9 +340,9 @@ SLISTX.8 >LDYA SLISTX.KeyID SLISTX.Lookup jsr K.GetMemPtr >STYA IBlkPtr - lda (IBlkPtr) + lda (IBlkPtr) sta SLISTX.Opt - + stz iByte ldy #1 @@ -358,19 +360,19 @@ SLISTX.Lookup jsr K.GetMemPtr jsr SLISTX.IsIDValid bcc .1 - + .2 sty SLISTX.KeyLen .3 >LDYA KeyID >STYA SLISTX.KeyID - + ldy iByte lda (DBlkPtr),y beq .9 cmp SLISTX.KeyLen bne .6 - + jsr BLISTX.GetNByte Skip Len ldy #0 @@ -379,9 +381,9 @@ SLISTX.Lookup jsr K.GetMemPtr jsr BLISTX.GetNByte sta .5+1 ply - + jsr SHARED.TXTPTRgY - + .5 cmp #$ff SELF MODIFIED bne .6 @@ -392,15 +394,15 @@ SLISTX.Lookup jsr K.GetMemPtr jsr SLISTX.GetDataLen Get Scope cmp FORPNT+1 bne .6 - + lda FORPNT cmp SLISTX.DataLen beq SLISTX.8 .6 >LDYA SLISTX.KeyID - + jsr SLISTX.Select.I move back... - jsr SLISTX.SkipKey + jsr SLISTX.SkipKey jsr SLISTX.SkipData bra .3 @@ -439,7 +441,7 @@ SLISTX.SkipKey ldy iByte .8 rts *-------------------------------------- SLISTX.SkipData jsr SLISTX.GetDataLen - + lda SLISTX.DataLen ldx SLISTX.DataLen+1 SLISTX.SkipDataAX @@ -464,20 +466,20 @@ SLISTX.GetDataLen rts *-------------------------------------- SLISTX.IsIDValid - bit SLISTX.Opt + bit SLISTX.Opt SL.. bpl .2 cmp #'.' beq .8 -.1 bit SLISTX.Opt +.1 bit SLISTX.Opt SL._ .2 bvc .3 cmp #'_' beq .8 .3 jmp SHARED.IsDigitOrL - + .8 clc rts *-------------------------------------- diff --git a/SYS/KERNEL.S.UNISTD.txt b/SYS/KERNEL.S.UNISTD.txt index 6206f35f..3e118853 100644 --- a/SYS/KERNEL.S.UNISTD.txt +++ b/SYS/KERNEL.S.UNISTD.txt @@ -70,8 +70,8 @@ UNISTD.Close lda (pFD) #S.FD.T tax jmp (.1,x) -.1 .DA FS.CLOSE.REGDIR - .DA FS.CLOSE.REGDIR +.1 .DA FS.MLICLOSE + .DA FS.MLICLOSE .DA DEV.CLOSE .DA DEV.CLOSE .DA STDIO.IOERR LNK diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index cfcc5a9a..bfff3d95 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -39,9 +39,6 @@ MAIN.B .PH $1000 .INB usr/src/sys/kernel.s.pft .INB usr/src/sys/kernel.s.fs .INB usr/src/sys/kernel.s.mathf - .LIST ON -MAIN.E .EQ * - .LIST OFF .EP MAIN.S .EQ *-MAIN.B