From 0c91cddf37c988c65a124ed46c0e4ce001dfa465 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 22 Sep 2016 17:46:01 +0200 Subject: [PATCH] Kernel version 0.8 : More API cleanup/reorg, fixed bug in READDIRYA crashing reading second block --- A2OSX.BOOT.po | Bin 143360 -> 143360 bytes A2OSX.SRC.po | Bin 819200 -> 819200 bytes BIN/ASM.S.EXP.txt | 20 ++-- BIN/ASM.S.FIO.txt | 4 +- BIN/ASM.S.txt | 45 ++++---- BIN/LS.S.txt | 239 ++++++------------------------------------ INC/A2osX.I.txt | 36 ++----- SYS/KERNEL.S.DIR.txt | 62 ++++++----- SYS/KERNEL.S.FILE.txt | 57 +++++----- SYS/KERNEL.S.FIO.txt | 62 +---------- SYS/KERNEL.S.PFT.txt | 10 +- SYS/KERNEL.S.txt | 2 +- 12 files changed, 151 insertions(+), 386 deletions(-) diff --git a/A2OSX.BOOT.po b/A2OSX.BOOT.po index 13ed511ffff69cb3c3fccf3e7628432003a181dd..78fb8e0304047178f1d55fc490d195963e127b90 100644 GIT binary patch delta 7140 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 |^G5DC}(s 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 delta 16977 zcmaKTd0e}H2-vSMd*qHRbM}qXRdlEK`JznI zvFEamr{>zgR;j|@uBXEuyUFnHl+@f}Dd*T`OO244Ra|B|c87JVked$o8KJMxkc&e! zURYZ^BYR{)-krI6I9v+(#kB?m2U=>2i!zUWmzUQi+%h6)PL8DRFc9&Jw0G~?d9yCl z?`UZZxR$tGOIw_QCC85J4NOV*hI+4Y)cd2AF!NP%#b)gc;Wct}v(`HAb-~~2ax{8_ zYeGGa<-wkz&@iQ|0n3R*OhW%RD1847WlP@_${(CI2ju?>2OJG;O-=2fdkeq%TB8+^ z@wU+5clZO&*1&$qdPi8}5BOTH;}Yb&E39!jn_X`22nU$oAL+ZnWcYv$=<>BS2ljGA z*@q)zH$p$T#5VYV>&B&CVwGwVcrSDF?T@8=Kpj_9(#5IIzC0 zvC-YC0L`c43#(jQv4A=Dd=QV7(X zR0dv=NKD0>EJl;p(;5i{JE8Q0Gj&3Cyi-e{6=r;>kklvg?P?9JnWvw^h3goMI_A#<@nf8f?GsMom|wTU73t|43`OZ0KA7qN@l(YA=rbJ3 z+c0^7TSMWYfnG+etf#}_0LN(<>*<`lHi!%Mc5b7q5)Jo7UBRB7&;UrE!&pa82T1>e zv4QX)7{o7dNcl@Z@kaZ*f?)Xy#*Rxu+NB3arwFJ8zBs;9cuT4>?uYnxU%jZoUEj7C zvPaa(Hu_rJ%^+W=P8F=9Bz=!y$tTF&d;^!T)ZgxRH2U4{r4Dy<16an0bB|!oJ)m}) z58}^|+d3wosfQ0oYHzTxdr*>+yZ0$U0Xo96+e5nK*2A_V|#@B z#$O^IBc53G4EEDA*c0l7%wMbf=)qf>b5I?EA4y36O~MerCA0SmmfGK)@$7+k8=cyr zNmKK?17JDKrZ)RXoSS$%lH2Z3Mo&7O^xWExlKb}xR^d)!+b`sK?^5MzY;`*uApKYZ zqq~t&`aPV$F&`K0I0CHWXFfDwxtA=&)wKMc@4N0k+-X90Ui+`#vAU#BvI0(|8aXmtKg8sr!kn~qzYB2v{^2$EJUh;@KMY_P! z-(W1fB?$7P3e*Yq$Ji7XK8^!y=*Nq~P6S9#a5lMrhw_9g*6sw|KcIYDcW-n76g&y# z+uLV5qYH`CCKx0CMAE*YFk;M4shGs;0r^iOcx7}U(+$zSwNa|DLY<5Tq-XeuMb9Q2 z?RMvtvFq#W5B1{s>HngO-w}0G;(Y$iCoMjQix-*kJRop%FdR&f*g=&7*G#HXnD@fu zBUC@65VZ{Sb@mNLvAs4lz!c=#flz1zo(bcN>K>pj!2{~{HKH^xsYju%5yY42*1y8; zz)o*)U>$M@cLjT+b8FV01JZx^rO0~~yM#941a?qGgW8}kx~6;GgQ>+}ehtRR#(jc5 zlKwgp4Fpk5p+-J|Y^T40lOsKy$#bJ;wd!kCu11s;ASj^Gd~G+gSnK^&_y z+Jh?&(l`9ez6D%Mo#Bo|&H7FAV zMdhmEY{xZi@cE-2pR%kVX#{q7#S{SrNEPU5XNOo6m>QI-wA`2*rU>QRTH3tc6?kg= z105~l0We6(FtjF6oFl*RF5&+#<*znK`mwz^Se^jsw3&|8B6wh45 ziHpt=6w>|lt|ULV@WR;7CBb&trZGFogQK!B#a@qw{$Bn2QhP)pOBy*F-Dl8=@j>)DJt5+Z!H){;Jl^`|o ztxRiXjE3=DIDK5WLHMD~)eDwFes)Un3g8pO-P_sSyAJhJb`f7YJV*ZSOG1!aOxu^x zV?*1sDnTs41uHHki$4;Iv}M9|Fn221@R3lva2igAUaEOJ=&_3q_Vk6(gsKAHb-0!+1yebB?IXdMKTBY?*f3id3wCy(RN;ZG$^*(Uhvb|R z^cfDiWT<=QRf6e9r1F$tbX6ckkeNMoX)x zrt48I0X>-PAk@z#SDg}^!aQ>Mkj_lrK&BaW>hYq6@c75VNo#HfyljSI^cC>MJ@x$B z;%V9A-=%3%vYkT%{`#K2j`hle+VT~9CU(0f!oOy4Z*VZ2L|^*N$REZ^gzrXP9Wz_M zkM&)g$kX}*$+T%KHqg))XgB4-@mKSwZK*)cwP{MGq%eFJiQ;LSMI~rS@7&-N$h7$l~Y zLpQg6YdExzOPHIhp%3a7r{AwYOnL@sa=Kc54qx*wPG>TZoAWeA!AS1O(@cw)7)=8u zP<#NrnKN3F0J1QU*AoXBtSZRmYgXRx2Ac|78G~i#ac(Z=deng4uCyI3OK?Cf^?c0v z@1!`FyrI>20`O2{iD`|KK9sE85J9r84=F{>c6Sc85KKJP{x?go%b zH02LYp9A(%4Z29aC`ZjvJ)=csjg4R|(;RTOw)$EZH27811Zh*TL!+k|q-i8OUvu&C z0?pL3(aSVuj?Y}BIopt{*P-p_nx`w&v3_Oys_~&-%~eABy!i{xYF%~X9N(eCPoN4o zJ-ShoPPDh`J{P3X0gcI!tgZZkrC_&{TV53`(2Ln6+$&`y%fXOxi zMh65u&B>Gqt)d5^%j>BRxLQ0d%Eivf*F?ISL*a(drv3b|8VfW`47S;dNMI_|P|3Pn zYu8b;bEQIB#Gn*{Ds49fR)MjY0hflhZtffCWWY)=lrW$_Jb+r4-R~MOmNM89vix5u znT9gf@U*ZFwIEH!Q+52+6iJuz?RVdk=!j@TN9E`E!k_2`8T*Mz&GYtS?^w**l%60ooW%FxSJWSPfgS*zfp zGpZT=;7rh?=S@8n^~O<=&;eIOlF$wB3~dEHy5O8D!tONH6f*V5X$TBm=X(`0biyYx zyDvt?9P<48V=|p#ef~JP{{!*Bu zc{Y{5PNsS|MkS(m4>ok_m38Ao&~;-&h>xOP0Lx>Xh1b#2>O()w(HL+9Rt6voU4E*) z*zQ$?}>y6kpDqRw?s=TKztHMF#c2ZO%wJ7V*q0v5xlbTQ9TW_w}AXK z-UIqluZFB=_>hVO(zE=q%IM+K2Y6`>WTAtfAft?aK2!5mkn=o@b@z5C(xXti7pTeT z?%e_wbksZgx6pwj%6wTA7vz_eON(lky6XB@`1lD@QzyM=5Ce0sDxa?@pXiS>IQrt@ z;11~DSJCm7W zAeJsbB2(mvX6`+lfZ=^=&DfDyq3&buN#%G@$P{MMNAT&Cm!TaV@Fi_OgYG> zAu@^V^B7si|0olD2b5LedVMjO zLi5 zJ3va~{&%5HNO;5SW}|f_JPu@qTkLU=o~}5;RTYq*Nxk-VKQplYcH+29mdI01AvF+% zoGgl?c>_gzi!`ob!MKLH4Z~EAtnQ%R73eX(F>!MGnA8%6JUT-p_?*r-OE$&8q8T|_ zElNAV7P5GAsg>NCqANMehD7E(!BJH)%4e7G%CJwGUA{WIO2{uH#h1xOHlYYk2xA9H z6S82a;EZ!AojjMan9$NxIv2Dd7*LovV+6EeGGyML#01-<7h^fPn)xK)-tv=1ZuJGFFnxV=0C?7($?Lof-WtgUobc7=gVt z=0grfjuJb;jJYKHz0~RH7)N4Cbv{(iCwCl6sVH2KOi4}PSusB5g{1gosveh3zi1Mj z;T%3bzHzIEUEzVAIWCaTRr*#!Mm_IQO5MdA3?i{bR#Iq?+rUFO@i)5c#;(f4rxBON zv{=AMCVR}019zvSN0un8@nM8vCdm4+%91AOAa|)Mp!(>~@Csug3>z^4axuG| z*nz}_odT)I7meiAsiIUHLP+jfN=RKQyh$|Wihk3?u5y<$el^&-+0a(;V%m4TfCh!0 zFzS7xLk;#Gvh3qj+e~o-qNQFQB9r=*73}9nTDOrdAk88b43LNJNwKHY3<~6t&r+&1 zVS#-8SxT*DNFbG`Q*4?|0%5 ze|G*-;E(bpZf{HF9_r3hkBPM)-xm5i3P$6a#5dHCafeo`owafogD2GrwOab z^R#sy(ez{Md@{2iDK8*PXzN1K*DsbtR>O}SIB&Nr;92hW@1lZZ)8TYM);?8)p!3kNRgr*O&*2bC%bvyW&lZFJ*NnG`)~@ zaYC~RveqXwn<1+wq1ggi8xoq!AgedtZ1g}@A9`Hs6qoqP?>36R)Oean^8os-Uc~=2 zPTqvGxGdg86_OQ6XtqMuN<+VZ`AXbIujhKT6Gja&LcK)LcW7$!g7t>U@CMKFDCovG0&|K7@C}SXQrph}b(*Ky6Byy?e=lwu zQ;B&u!hytR)z4Bi>E7(0!vSiCRJ|$Q1P8!yGaO*57{i=?N0+m8u^+N;p)hK&xOGpz z6%KIIjk)7rU?=-8N%l{)w$!{|!2z;yX_`6J{A>L7)K5i2-$hRR+R^$NUAxdzV6R_AYBRCQ#xSbN*!3n5BVI0Jx2+h1RK~yl^1?1x) z(Xi;4Dg;gd(C0qDZ0&J4!1CDR*wJ<`O<=2zNrJkC(%+L?uS_X6neW3jr0%%-ETsCk zYJAZq@lHu7A|GESnxx?wtc+*oxHcm0PCY&>zHmF_QloIFkaK8{kxD#BT>gM z)?zB+`t4#}hWj=lW*hdB7q^SkXZV|<)sBj2eQ+?;IrIG967V02(NyhS6Zb7xVhG=FnzkBDQ~X zIB{;)>V@aX?VGe#>+^}U7iuH~5)^2TxPe`wAnZT!)3t))6r{2=Bsd7vIOMHJ6^n=25V z;afAJ&a0uy192G2HZE+H?)FCX zFF~ToMzapm%iNk_s4EdgtvQCen4#0ZnuMZuTY61Fy`F@krdv9ppx#JAQR{7z-c)e^ zO~jGek4X8M)89>kwLT&}mO1^aBv{$sq!TmsnM~EFPZMgir7S#DXp!~ViKy|iN2S|@ z@zlqqE+N(K5Dt)Aek~X^?M|}e3F#*SjQ{Y2B#d5w1v2UL(b-|vunsKf7W2|Yr2@d| zpl%YF&^K122Wo)>=0VOzr^mVwllxVp)W9}`I#^WzOF2W?A`)DaR;opJ8BFJreMejJ`4LwN$M(a60It#q36Ybr|fRp;vXRYLL)3riRq8_zdL-=pyqlXq-MB zePv#YFdxk5GP7W4cAVj?$|zX8WKKt#*@iwcdt%H(ce9!Lanwbw7=>9aPRa{%|pkS9Jx+5<1>f)&{V{PDu_9L>VK$FWVd(r)~Fw|Frnz0V8?nabm|_A4r20v z1_t{F4tA!^hP;+~8gr#oDnov|a(Gqg9CCt`<%^Pq|(Fp@G$$ zYz`WU7+Jk{DQXLL*XuZClxmL{&zWdIV#JX~54*9I6~px6#K)&QUV>&NM%n1%gjI<_ zuX$)^ViaA}lfIhHrm|+3T7RtRz&r-6prsm#{=+0Ama#w`+9KZV0$eTHFW_!%W}2q5 zb{LH-()FIHqxesu9IR-iVuSiUtK8SHG3SExG*_)<&mchn1Fz)0_qFy2nkm+Dw7Z>H zR7~X?uAp^@b~IHS)8uOoEMfDj8m@FWD$y*Xx#GA6XFKauO);2`%zIA7Eb+B*el^I? zQB@83XwMXep60dymMY_5ky?taoe%jhs93)n9U3%eY~v9*w-Rh<>v-1{>VWg;fLMb2 z63#jMWd)5@3d^E(Aict;n(-fIZfF%$6eIE+XnYNcDab+VyV98S6<~jzq+gqsHy^9S z<4DH}9}}ajqN1V->{uzDfNPE8YQX*`xd^)p|0S1FE^j4ME>^i%!Vx3pjp(&i>Np*Zt-dBGz$6m8|J6HK*ezc8ORHl= z%qM{vGf5M0uC`W?F}K7*kCkAdHKVlrkG_#<1*ALB;T#WZ)sjL7^QzO`!yF;_}!U9qxqAlSPuRLnC3`9T;x8FYZ($`YFVLpjs8n)T z-;P1~RCm&1j+*Tty~Dd@zROB>8+nzs?maBmWz~aO@8dTt){U}XD}a0wn?9UEWC0jH z;Ptw*X>l%}9Y`N?c10i2@ffpfsWpo~JlJCdiciJxj>@aK8|roVu{gfJWguLM!GVwe z9|s5XMs!6*$9%~9l&pSNFsI^@e@0rC%a-!f>PlgWJX;OS5V4v_R(7lV0vmi*Umms(nk+`zgQ zd`iCGm6k7jM(n%O?80d>A3s)pu6C&R`dmx>Obb-ks9pXS$1aU2@#;D*Pu>?QmX@6I z`&=^*7c z3O|r#d(sRuu|^M_VXxaknd8f2F*hJ!6_OAQo`Wyx$|J1|i_5M_!lIdF2)sI2)0e={ zwS@P;OOu*}@HX=vwP3?Czl0usTpp(I=7LR|glY6Nl8hI0X%R^UD_Kr__)}+LTNUJE zF(Buqpx9HNIt$w{1*+4OgGElJU>i{r1u-3w`5Bt>Xm4MX^O(InIM5wjgT{K07MDty zShs}NY=$OFL&yudX_eU=V9r67^rf=|-@;yZD`SbjPRLcjjch~ER_e(|FX(LZ3<^9h zJ$;{`^mb!1h6zs}0w}!IM9z6pXPIkGCULjav&T&>CeD&EjV|{3mRz&gMfc{(Bh!$hB*%x3S-FJBPU4E=CmcHi~ zt?&nWq3Jc7P*2S7yBYYa7F#6k9&Nf`A20Z3TEc+^0+<+8Y=SvOeON0@9ZVCNF*VBH z;cO%ZM71trniR}h(!WAB*)T1tFcC2=N>idtOo~wi6xdf6seC?fi71~9_jRIEwsrXB+Ab8Fy2NZ zzkb;!e5BAPev@yx8_TUFGl!R2u$KyDdNHm!>01&>^Q`LHa9cqhSShEkz=UX`oo#TV zo9$}{DNo6{*g5~qd}UnvyED)gV2de4Q(;0`yRWB{RV;z2h!nTW#`0p`xwwQ0$9}Sw ztkf0J?4`75JWnX2AC>^FALd09#cE~0cf*2EMXKqXarz7<6)#+$smi1;Pbk3W=BH#9 zD`Kyn&HEM1L4jzm-O1wcGbdx+HAV~Rua3+=5{Ph*)}S$0DCO*xteibdriItcK!Y6< zrpH&wxf+slTKCzwc!8XnniF4ryxLAME+x0#uhoyw3Cg58?c6LS??qm`PM#N;hPiO+ zZ~cFrACNFvPE*A)Cdb$G_t1(KQI7}JXb`YkjTXoxIEyADx_4NV!ayyd0an@!Mof{% zye#Hb((;;g%$d_;jrBD%tz_hSd4>lMMT}vrw}?jq%yt3G)aYG`kLIZd8)nLB>3kem z#eT4Ma8x$vG46*>$RPb88q;)OX(Ks3g4v4MPBtT&qzAxOtyEC3lGV&gl-Z%A{)p} zhvc;Bn9pQs=c*m+`l7+k&S;6Fgf9n(>#?iYgZ~OQkS7nx1v!}5RNkW^<~CtYKlu*X z)@@XHU?^Y!!MZ_uOu}1(kROf-yMxxvQ6I3EmImSnn1)F3uxvDK;+{NK3$yzmZblYG zTgbJC5=ykMugCXoMA^2uS@o`0FT1Xz9*L6-96 zd`C(v!5*axV9Uzbrhuk9rh|Pu1?CkEBdu)*MX)-X+Tn0tIM~Cz>_M>Xq!A3g5eo&R zEBIDQSJJS;RwTGAs14#1T5H>y#;=9lc(e)o9|Z2m@;DH?Y|m$FPrhfd2a# z{dXh&v;Umf?vV2`Zc;b50!+8isThS@$#0Iz`Dwr46UCGZT{egOD`j=CK zy$Y}2b6(1iXCV7Nz6)ww{)57FKIGod<3|dLR@41awSLkAoWJ=`$@E&Xy=D@C_&RnkJVA?8Na1SPoH`7aHyD@5n+g|NuBeKj{(=w0x3FK< z+q^CXlbm#d`gbOgN$)CZ{yjyhy|1jnNnC@brP!<8c}=o`SD!+{2ju8V*{Uh}knFx& zF4TO)XF^WZ%jx8wcgs@>Pbrt5KjuBnjXv(;P+6vb94D8jP|pWSJ|TJc$iE!hPhtL=168YiMKwP_hHp5WS$+09iz+aEn*j6FD;|H|cLK?~POut&5U>cHChfQY S^FRU(sk|w*{orx=@&5z%Pc;w# diff --git a/BIN/ASM.S.EXP.txt b/BIN/ASM.S.EXP.txt index eda55638..77f8a864 100644 --- a/BIN/ASM.S.EXP.txt +++ b/BIN/ASM.S.EXP.txt @@ -215,21 +215,21 @@ EXP.Compute dec .8 clc rts *--------------------------------------- -EXP.Compute.EOR +EXP.OP.EOR *--------------------------------------- -EXP.Compute.ORA +EXP.OP.ORA *--------------------------------------- -EXP.Compute.AND +EXP.OP.AND *--------------------------------------- -EXP.Compute.LOW +EXP.OP.LOW *--------------------------------------- -EXP.Compute.EQU +EXP.OP.EQU *--------------------------------------- -EXP.Compute.GRT +EXP.OP.GRT clc rts *--------------------------------------- -EXP.Compute.ADD ldx #0 ARG-ACC->ACC +EXP.OP.ADD ldx #0 ARG-ACC->ACC ldy #4 clc @@ -246,7 +246,7 @@ EXP.Compute.ADD ldx #0 ARG-ACC->ACC lda #ERR.VAL.TOO.BIG .8 rts *--------------------------------------- -EXP.Compute.SUB ldx #0 ARG-ACC->ACC +EXP.OP.SUB ldx #0 ARG-ACC->ACC ldy #4 sec @@ -267,9 +267,9 @@ EXP.Compute.SUB ldx #0 ARG-ACC->ACC .8 clc rts *--------------------------------------- -EXP.Compute.MUL +EXP.OP.MUL *--------------------------------------- -EXP.Compute.DIV +EXP.OP.DIV clc rts *--------------------------------------- diff --git a/BIN/ASM.S.FIO.txt b/BIN/ASM.S.FIO.txt index d0331f3c..9223326b 100644 --- a/BIN/ASM.S.FIO.txt +++ b/BIN/ASM.S.FIO.txt @@ -5,7 +5,7 @@ INC 1 AUTO 6 .LIST OFF *--------------------------------------- -FIO.Init ldy #S.PS.hCMD +FIO.Init ldy #S.PS.hCMDLINE lda (pPS),y >SYSCALL SYS.GetMemPtrA bcs .99 @@ -299,7 +299,7 @@ FIO.LOAD.ASM.T ldy #ASM.T.hMem >PUSHBI 6 S.FILEINFO.TYPE.BIN >PUSHBI SYS.FOPEN.R >PUSHW L.ASM.T.FILENAME - >SYSCALL SYS.LoadFileYA + >SYSCALL SYS.LoadFile bcs .9 txa diff --git a/BIN/ASM.S.txt b/BIN/ASM.S.txt index f008c956..87dec8e1 100644 --- a/BIN/ASM.S.txt +++ b/BIN/ASM.S.txt @@ -72,8 +72,7 @@ CS.START cld .DA CS.DOEVENT .DA CS.QUIT L.LIBSTR .DA LIBSTR -L.MSG.HELP1 .DA MSG.HELP1 -L.MSG.HELP2 .DA MSG.HELP2 +L.MSG.HELP .DA MSG.HELP L.MSG.SRCLINE .DA MSG.SRCLINE L.MSG.ERROR .DA MSG.ERROR L.MSG.SYMBOLS .DA MSG.SYMBOLS @@ -139,29 +138,30 @@ J.LI .DA DIR.LI.CON .DA DIR.LI.XOFF .DA DIR.LI.ON .DA DIR.LI.OFF -J.EXP.OP .DA EXP.Compute.EOR ^!|&<=>+-*/ - .DA EXP.Compute.ORA - .DA EXP.Compute.ORA - .DA EXP.Compute.AND - .DA EXP.Compute.LOW - .DA EXP.Compute.EQU - .DA EXP.Compute.GRT - .DA EXP.Compute.ADD - .DA EXP.Compute.SUB - .DA EXP.Compute.MUL - .DA EXP.Compute.DIV +J.EXP.OP .DA EXP.OP.EOR ^!|&<=>+-*/ + .DA EXP.OP.ORA + .DA EXP.OP.ORA + .DA EXP.OP.AND + .DA EXP.OP.LOW + .DA EXP.OP.EQU + .DA EXP.OP.GRT + .DA EXP.OP.ADD + .DA EXP.OP.SUB + .DA EXP.OP.MUL + .DA EXP.OP.DIV .DA 0 *--------------------------------------- CS.INIT >LDYA L.LIBSTR >SYSCALL SYS.LoadLibYA sta hLIBSTR - ldy #S.PS.hARGS - lda (pPs),y - beq .99 + >SYSCALL SYS.GetArgC + cmp #1 + beq .99 No arg, new file.... - >SYSCALL SYS.GetMemPtrA - >SYSCALL SYS.NewPStrYA + lda #1 + >SYSCALL SYS.GetArgA + >SYSCALL SYS.GetFullPathYA txa ldy #SRC.hFILENAME @@ -183,9 +183,7 @@ CS.INIT >LDYA L.LIBSTR clc rts -.99 >PUSHW L.MSG.HELP1 - >LIBCALL hLIBSTR,LIBSTR.PRINTF - >PUSHW L.MSG.HELP2 +.99 >PUSHW L.MSG.HELP >LIBCALL hLIBSTR,LIBSTR.PRINTF lda #ERR.INV.ARGS sec @@ -327,7 +325,7 @@ CS.QUIT jsr FIO.FileClose .INB BIN/ASM.S.SYM *--------------------------------------- CS.END -SRC.DIR.MAXLEN .EQ 5 (DUMMY) +SRC.DIR.MAXLEN .EQ 5 T.DIRECTIVES .HS 02 .AS "AC" .HS 02 @@ -425,8 +423,7 @@ T.LI .HS 03 .HS 00 *--------------------------------------- LIBSTR >PSTRING "libstr.o" -MSG.HELP1 >CSTRING "A2osX-Macro Assembler (S-C MASM 3.0 Based)\n" -MSG.HELP2 >CSTRING "Usage : ASM [type TXT ($04) or S-C/BAS ($FA)]\n" +MSG.HELP >CSTRING "A2osX-Macro Assembler (S-C MASM 3.0 Based)\nUsage : ASM [type TXT ($04) or S-C/BAS ($FA)]\n" MSG.PASS >CSTRING "Pass:#%d\n" MSG.SRC.FILE >CSTRING "Reading SRC File:%S\n" MSG.OBJ.FILE >CSTRING "Writing OBJ File:%S, Type=%02x\n" diff --git a/BIN/LS.S.txt b/BIN/LS.S.txt index 9b5db0e2..7f5e5736 100644 --- a/BIN/LS.S.txt +++ b/BIN/LS.S.txt @@ -66,9 +66,9 @@ CS.INIT >LDYA L.LIBSTR >SYSCALL SYS.GetFullPathYA stx hFullPath -.2 >SYSCALL SYS.ListDirInitYA +.2 >SYSCALL SYS.OPENDIRYA bcs .99 - ldy #hS.LISTDIR + ldy #hDIR sta (pData),y jsr .99 @@ -99,206 +99,43 @@ CS.RUN ldy #bCANCEL clc rts -.2 ldy #hS.LISTDIR +.2 ldy #hDIR lda (pData),y - >SYSCALL SYS.ListDirNextA - bcc .3 + >SYSCALL SYS.READDIRA + bcs .9 - jmp Push.Footer - -.3 pha - >SYSCALL SYS.GetMemPtrA + phx Save hDIRENT >STYA ZPPtr1 - lda (ZPPtr1) - pha - and #$0F - sta (ZPPtr1) Adjust Filename len +.3 lda (ZPPtr1) + + beq .8 - pla - and #$F0 - cmp #$F0 Volume ($F) HEADER ? - bne .31 + >LDYA ZPPtr1 + >SYSCALL SYS.PStrOutYA - pla - ldy #hVOLHEADER - sta (pData),y - >PUSHW ZPPtr1 - >PUSHW L.MSG.VOL.HEADER - >LIBCALL hLIBSTR,LIBSTR.PRINTF + lda ZPPtr1 + sec + adc (ZPPtr1) + sta ZPPtr1 + bcc .4 + inc ZPPtr1+1 + +.4 lda #13 + >SYSCALL SYS.COutA + +.7 lda ZPPtr1 clc - rts + adc #S.STAT + sta ZPPtr1 + bcc .3 + inc ZPPtr1+1 + bcs .3 Always -.31 cmp #$E0 Dir ($E) HEADER ? - bne .4 - - pla - ldy #hDIRHEADER - sta (pData),y - - >PUSHW ZPPtr1 - >PUSHW L.MSG.DIR.HEADER - >LIBCALL hLIBSTR,LIBSTR.PRINTF - clc - rts - -.4 cmp #$D0 Directory ? - bne .5 - - jsr Push.Dates - jsr Push.Dir - >PUSHW L.MSG.DIR - bra .8 - -.5 cmp #$C0 Volume Name ? - bne .6 - - >PUSHW ZPPtr1 - >PUSHW L.MSG.VOL - bra .8 - -.6 jsr Push.Dates File - jsr Push.File - >PUSHW L.MSG.FILE - -.8 >LIBCALL hLIBSTR,LIBSTR.PRINTF - -.9 pla +.8 pla >SYSCALL SYS.FreeMemA clc - rts -*-------------------------------------- -Push.Dir ldy #$1E get access mask - lda (ZPPtr1),y - >PUSHA - >PUSHW ZPPtr1 - rts -*-------------------------------------- -Push.File >PUSHBI 0 4th byte of file len=0 - ldy #$17 get file len (3 bytes) - lda (ZPPtr1),y - >PUSHA - dey - lda (ZPPtr1),y - >PUSHA - dey - lda (ZPPtr1),y - >PUSHA - - ldy #$1E get access mask - lda (ZPPtr1),y - >PUSHA - - ldy #$20 get aux type - lda (ZPPtr1),y - >PUSHA - dey - lda (ZPPtr1),y - >PUSHA - - ldy #$10 get filetype - - lda L.PRODOS.FT.TXT - sta ZPPtr2 - lda L.PRODOS.FT.TXT+1 - sta ZPPtr2+1 - ldx #0 - -.1 lda (ZPPtr1),y - cmp PRODOS.FT.ID,x - beq .3 - lda ZPPtr2 - clc - adc #4 - sta ZPPtr2 - bcc .2 - inc ZPPtr2+1 -.2 inx - cpx PRODOS.FT.COUNT - bne .1 - - lda (ZPPtr1),y - lsr - lsr - lsr - lsr - tax - lda HEXDIGIT,x - sta PRODOS.FT.DFLT+2 - lda (ZPPtr1),y - and #$0F - tax - lda HEXDIGIT,x - sta PRODOS.FT.DFLT+3 - -.3 >PUSHW ZPPtr2 - >PUSHW ZPPtr1 - >LIBCALL hLIBSTR,LIBSTR.LCASEP - >PUSHW ZPPtr1 - rts -*-------------------------------------- -Push.Dates ldy #$24 get modification time - lda (ZPPtr1),y - >PUSHA - dey - lda (ZPPtr1),y - >PUSHA - ldy #$22 - lda (ZPPtr1),y - >PUSHA - dey - lda (ZPPtr1),y - >PUSHA - ldy #$1B get creation time - lda (ZPPtr1),y - >PUSHA - dey - lda (ZPPtr1),y - >PUSHA - ldy #$19 - lda (ZPPtr1),y - >PUSHA - dey - lda (ZPPtr1),y - >PUSHA - rts -*-------------------------------------- -Push.Footer ldy #hVOLHEADER - lda (pData),y - beq .20 - - >SYSCALL SYS.GetMemPtrA - >STYA ZPPtr1 - - ldy #$22 file_count - lda (ZPPtr1),y - >PUSHA - dey - lda (ZPPtr1),y - >PUSHA - - >PUSHW L.MSG.VOL.END - >LIBCALL hLIBSTR,LIBSTR.PRINTF - -.20 ldy #hDIRHEADER - lda (pData),y - beq .21 - - >SYSCALL SYS.GetMemPtrA - >STYA ZPPtr1 - - ldy #$22 file_count - lda (ZPPtr1),y - >PUSHA - dey - lda (ZPPtr1),y - >PUSHA - - >PUSHW L.MSG.DIR.END - >LIBCALL hLIBSTR,LIBSTR.PRINTF - -.21 sec - rts +.9 rts *-------------------------------------- CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device? lda (pEvent),y @@ -338,22 +175,10 @@ CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device? .9 sec rts *-------------------------------------- -CS.QUIT ldy #hVOLHEADER - lda (pData),y - beq .1 - - >SYSCALL SYS.FreeMemA - -.1 ldy #hDIRHEADER - lda (pData),y - beq .2 - - >SYSCALL SYS.FreeMemA - -.2 ldy #hS.LISTDIR +CS.QUIT ldy #hDIR lda (pData),y - >SYSCALL SYS.ListDirCloseA + >SYSCALL SYS.CLOSEDIRA ldy #hDIRPATH lda (pData),y @@ -395,7 +220,7 @@ hFullPath .BS 1 .OR 0 DS.START hDIRPATH .BS 1 -hS.LISTDIR .BS 1 +hDIR .BS 1 hVOLHEADER .BS 1 hDIRHEADER .BS 1 bSTOP .BS 1 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index eec47bed..845b573d 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -445,34 +445,16 @@ S.EVT.DATAW2 .EQ 6 * S.EVT .EQ 8 *-------------------------------------- -* S.LISTDIR STRUCT (Obsolete) -*-------------------------------------- -S.LISTDIR.hONLINE .EQ 0 -S.LISTDIR.ONLINEPTR .EQ 1 -S.LISTDIR.REFNUM .EQ 2 ref_num file -S.LISTDIR.hIOBUF .EQ 3 hMem to ProDOS IO buffer -S.LISTDIR.hREADBUF .EQ 4 hMem to 512 Read Buffer -S.LISTDIR.EL .EQ 5 entry_length -S.LISTDIR.EIB .EQ 6 ENTRY_INDEX in block -S.LISTDIR.EPB .EQ 7 entry_per_block -S.LISTDIR.BLKPTR .EQ 8 entry PTR in block -S.LISTDIR.FI .EQ 10 FILE_INDEX in DIR -S.LISTDIR.FC .EQ 12 file_count -S.LISTDIR.hPATH .EQ 14 Base path for file filtering -S.LISTDIR.hPATTERN .EQ 15 Pattern for file filtering +S.TIME.CENTURY .EQ 0 19,20,21.... +S.TIME.YEAR .EQ 1 0.99 +S.TIME.MONTH .EQ 2 1..12 +S.TIME.DAY .EQ 3 1..31 +S.TIME.HOUR .EQ 4 0..23 +S.TIME.MINUTE .EQ 5 0..59 +S.TIME.SECOND .EQ 6 0..61 +S.TIME.WDAY .EQ 7 1..7 * -S.LISTDIR.SIZE .EQ 16 -*-------------------------------------- -S.Time.CENTURY .EQ 0 19,20,21.... -S.Time.YEAR .EQ 1 0.99 -S.Time.MONTH .EQ 2 1..12 -S.Time.DAY .EQ 3 1..31 -S.Time.HOUR .EQ 4 0..23 -S.Time.MINUTE .EQ 5 0..59 -S.Time.SECOND .EQ 6 0..61 -S.Time.WDAY .EQ 7 1..7 -* -S.Time .EQ 8 +S.TIME .EQ 8 *-------------------------------------- * S.STAT *-------------------------------------- diff --git a/SYS/KERNEL.S.DIR.txt b/SYS/KERNEL.S.DIR.txt index 9882f6f6..ae7e4305 100644 --- a/SYS/KERNEL.S.DIR.txt +++ b/SYS/KERNEL.S.DIR.txt @@ -12,7 +12,7 @@ AUTO 6 * CC : Y,A = PTR to S.DIR * CS : A = EC *-------------------------------------- -K.OPENDIRYA jsr S.PFTCHECKPATHYA +K.OPENDIRYA jsr K.PFTCheckPathYA >STYA ZPQuickPtr2 >STYA MLICALL.PARAMS+1 For MLIOPEN @@ -71,7 +71,7 @@ hDIR .BS 1 * CC : X = hDIREND, Y,A = PTR to S.DIRENT * CS : A = EC, A = 0 : no more entry *-------------------------------------- -K.READDIRA jsr S.PFTCHECKDIRA +K.READDIRA jsr K.PFTCheckDirA jsr K.GetMemPtrA >STYA ZPQuickPtr1 @@ -267,10 +267,12 @@ K.READDIRA.DIR ldy #S.DIR.PRODOS.REF .99 rts .2 ldy #S.DIR.PRODOS.EL+3 + ldx #3 -.3 lda(ZPQuickPtr1),y get this session parameters from S.DIR - sta EntryLength-S.DIR.PRODOS.EL,y +.3 lda (ZPQuickPtr1),y get this session parameters from S.DIR + sta EntryLength,x dey + dex bpl .3 .4 ldx EntryCount @@ -336,10 +338,13 @@ K.READDIRA.DIR ldy #S.DIR.PRODOS.REF * lda #0 S.MEM.F.INIT0 already did this * sta (ZPQuickPtr4) Ending 0 + ldx #3 ldy #S.DIR.PRODOS.EL+3 -.8 lda EntryLength-S.DIR.PRODOS.EL,y Store back this session prameters to S.DIR + +.8 lda EntryLength,x Store back this session prameters to S.DIR sta (ZPQuickPtr1),y dey + dex bpl .8 jsr .98 Discard READBUFFER @@ -383,7 +388,7 @@ K.READDIRA.ADD and #$F0 lda #1 jsr K.READDIRA.AddToBuf - lda #'.' + lda #'.' filename="1." jsr K.READDIRA.AddToBuf ldy #$25 total_blocks @@ -398,35 +403,27 @@ K.READDIRA.ADD and #$F0 txa sta (ZPQuickPtr4),y + bra .80 + .10 cmp #$E0 directory header ? bne .20 lda #2 jsr K.READDIRA.AddToBuf - lda #'.' + lda #'.' filename="2.." jsr K.READDIRA.AddToBuf jsr K.READDIRA.AddToBuf - + bra .80 .20 cmp #$D0 directory ? bne .30 + jsr K.READDIRA.AddFNToBuf - lda (ZPQuickPtr3) - and #$0F get filename len - tax - jsr K.READDIRA.AddToBuf - ldy #1 + bra .80 -.21 lda (ZPQuickPtr3),y - jsr K.READDIRA.AddToBuf - iny - dex - bne .21 - - -.30 +.30 jsr K.READDIRA.AddFNToBuf .80 lda ZPQuickPtr4 clc @@ -444,6 +441,21 @@ K.READDIRA.AddBufSize inc BufSize+1 .9 rts *-------------------------------------- +K.READDIRA.AddFNToBuf + lda (ZPQuickPtr3) + and #$0F get filename len + tax + jsr K.READDIRA.AddToBuf + + ldy #1 + +.1 lda (ZPQuickPtr3),y + jsr K.READDIRA.AddToBuf + iny + dex + bne .1 + rts +*-------------------------------------- K.READDIRA.AddToBuf sta (ZPQuickPtr4) inc ZPQuickPtr4 @@ -467,8 +479,8 @@ K.READDIRA.hDIR .BS 1 * In : * A = hDIR *-------------------------------------- -K.CLOSEDIRA jsr S.PFTCHECKDIRA - sta hDIR +K.CLOSEDIRA jsr K.PFTCheckDirA + pha jsr K.GetMemPtrA >STYA ZPQuickPtr1 @@ -483,12 +495,12 @@ K.CLOSEDIRA.1 ldy #S.DIR.PRODOS.REF beq .2 jsr K.FreeMemA -.2 lda hDIR +.2 pla jsr K.FreeMemA clc rts *-------------------------------------- -K.MKDIRYA jsr S.PFTCHECKPATHYA +K.MKDIRYA jsr K.PFTCheckPathYA >STYA MLICALL.PARAMS+1 lda #S.FILEINFO.ACCESS.FULL sta MLICALL.PARAMS+S.FILEINFO.ACCESS diff --git a/SYS/KERNEL.S.FILE.txt b/SYS/KERNEL.S.FILE.txt index cc800cfa..1739ec3f 100644 --- a/SYS/KERNEL.S.FILE.txt +++ b/SYS/KERNEL.S.FILE.txt @@ -7,7 +7,7 @@ AUTO 6 *-------------------------------------- * For All SYS.xxxx calls, X = #SYSCall * Must be kept in X before calling -* S.PFTCheckXYZ +* K.PFTCheck* *-------------------------------------- * K.FOPEN * In : @@ -24,7 +24,7 @@ AUTO 6 * CC : A = hFILE * CS : A = EC *-------------------------------------- -K.FOPEN jsr S.PFTCHECKPATHSTK +K.FOPEN jsr K.PFTCheckPathSTK >PULLW MLICALL.PARAMS+1 >PULLB K.FOPEN.MODE >PULLB K.FOPEN.TYPE @@ -114,7 +114,7 @@ hFILE .BS 1 * In : * A = hFILE *-------------------------------------- -K.FCLOSEA jsr S.PFTCHECKFILEA +K.FCLOSEA jsr K.PFTCheckFileA sta hFILE jsr K.GetMemPtrA >STYA ZPQuickPtr1 @@ -142,7 +142,7 @@ K.FCLOSEA.1 ldy #S.FILE.PRODOS.REF * Out : * Y,A = Bytes Read *-------------------------------------- -K.FREAD jsr S.PFTCHECKFILESTK +K.FREAD jsr K.PFTCheckFileSTK >PULLA jsr FIL.SetupPrt1A >PULLW MLICALL.PARAMS+4 @@ -160,7 +160,7 @@ K.FREAD jsr S.PFTCHECKFILESTK * Out : * Y,A = Bytes Written *-------------------------------------- -K.FWRITE jsr S.PFTCHECKFILESTK +K.FWRITE jsr K.PFTCheckFileSTK >PULLA jsr FIL.SetupPrt1A >PULLW MLICALL.PARAMS+4 @@ -174,7 +174,7 @@ K.FWRITE jsr S.PFTCHECKFILESTK * In : * A = hFILE *-------------------------------------- -K.FFLUSHA jsr S.PFTCHECKFILEA +K.FFLUSHA jsr K.PFTCheckFileA jsr FIL.SetupPrt1A >MLICALL MLIFLUSH rts @@ -186,27 +186,35 @@ K.FFLUSHA jsr S.PFTCHECKFILEA * PULLW = OffsetLo * PULLW = OffsetHi *-------------------------------------- -K.FSEEK jsr S.PFTCHECKFILESTK +K.FSEEK jsr K.PFTCheckFileSTK >PULLA jsr FIL.SetupPrt1A >PULLB K.FSEEK.FROM >PULLW K.FSEEK.OFFSET >PULLW K.FSEEK.OFFSET+2 + lda K.FSEEK.FROM - beq .3 cmp #SYS.FSEEK.SET - cmp #SYS.FSEEK.CUR +* cmp #SYS.FSEEK.SET =0 + bne .1 - >MLICALL MLIGETMARK - bcs .9 - bcc .2 + stz MLICALL.PARAMS+2 + stz MLICALL.PARAMS+3 + stz MLICALL.PARAMS+4 + bra .8 -.1 cmp #SYS.FSEEK.END - bne .3 +.1 cmp #SYS.FSEEK.CUR + bne .2 + >MLICALL MLIGETMARK + bcc .8 + rts + +.2 cmp #SYS.FSEEK.END + bne .98 >MLICALL MLIGETEOF bcs .9 -.2 lda MLICALL.PARAMS+2 +.8 lda MLICALL.PARAMS+2 adc K.FSEEK.OFFSET sta MLICALL.PARAMS+2 lda MLICALL.PARAMS+3 @@ -215,13 +223,14 @@ K.FSEEK jsr S.PFTCHECKFILESTK lda MLICALL.PARAMS+4 adc K.FSEEK.OFFSET+2 sta MLICALL.PARAMS+4 - bcs .99 Offset out of range! + bcs .99 Offset out of range! - -.3 >MLICALL MLISETMARK + >MLICALL MLISETMARK .9 rts +.98 lda #SYSMGR.ERRSYN + .HS 2C bit abs .99 lda #SYSMGR.ERRFTB sec rts @@ -235,7 +244,7 @@ K.FSEEK.OFFSET .BS 4 * Out : * Y,A,X = Offset *-------------------------------------- -K.FTELLA jsr S.PFTCHECKFILEA +K.FTELLA jsr K.PFTCheckFileA K.FTELLA.1 jsr FIL.SetupPrt1A >MLICALL MLIGETMARK bcs .9 @@ -252,7 +261,7 @@ K.FTELLA.1 jsr FIL.SetupPrt1A * A !=0 NOT EOF * CS : *-------------------------------------- -K.FEOFA jsr S.PFTCHECKFILEA +K.FEOFA jsr K.PFTCheckFileA jsr FIL.SetupPrt1A jsr K.FTELLA.1 bcs .9 @@ -277,7 +286,7 @@ K.FEOFA.MARK .BS 3 *-------------------------------------- * K.REMOVEYA *-------------------------------------- -K.REMOVEYA jsr S.PFTCHECKPATHYA +K.REMOVEYA jsr K.PFTCheckPathYA >STYA MLICALL.PARAMS+1 >MLICALL MLIDESTROY rts @@ -287,7 +296,7 @@ K.REMOVEYA jsr S.PFTCHECKPATHYA * PULLW = Old Name * PULLW = New Name *-------------------------------------- -K.RENAME jsr S.PFTCHECKPATHYA +K.RENAME jsr K.PFTCheckPathSTK >PULLW MLICALL.PARAMS+1 >PULLW MLICALL.PARAMS+3 >MLICALL MLIRENAME @@ -298,7 +307,7 @@ K.RENAME jsr S.PFTCHECKPATHYA * PULLB = hFILE * PULLW = PTR to S.STAT buffer *-------------------------------------- -K.STAT jsr S.PFTCHECKFILEA +K.STAT jsr K.PFTCheckFileA >PULLA jsr FIL.SetupPrt1A >PULLW ZPQuickPtr2 @@ -316,7 +325,7 @@ K.STAT jsr S.PFTCHECKFILEA * PULLW = PTR to Filename * PULLW = PTR to S.STAT buffer *-------------------------------------- -K.FSTAT jsr S.PFTCHECKPATHYA +K.FSTAT jsr K.PFTCheckPathSTK >PULLW MLICALL.PARAMS+1 >PULLW ZPQuickPtr2 >MLICALL MLIGETFILEINFO diff --git a/SYS/KERNEL.S.FIO.txt b/SYS/KERNEL.S.FIO.txt index 7cf9120c..098933a8 100644 --- a/SYS/KERNEL.S.FIO.txt +++ b/SYS/KERNEL.S.FIO.txt @@ -143,8 +143,7 @@ K.GetFullPathYA >STYA ZPQuickPtr3 Ptr1 & 2 used by StrCpy * Y,A = File Length * X = hMem of Loaded File *-------------------------------------- -K.LoadFile >DEBUG - jsr K.FOPEN +K.LoadFile jsr K.FOPEN bcs .9 sta K.LoadFile.hFile @@ -201,65 +200,6 @@ K.LoadFile.Seek >PUSHWI 0 >PUSHB K.LoadFile.hFile jmp K.FSEEK *-------------------------------------- -* K.LoadFileYA -* in : -* Y,A = FilePath (PSTRING) -* out : -* Y,A = File Length -* X = hMem of Loaded File -*-------------------------------------- -K.LoadFileYA jsr K.MLIOpenYA - bcc .10 - rts - -.10 sta K.LoadFile.hRef save ref_num - stx K.LoadFile.hBuf save Prodos Buffer for freemem - jsr K.MLIGetEOFA - bcs .98 - - phx Larger than 64k? - plx - beq .1 File too big!!!! - lda #SYSMGR.ERRFTB - bra .98 - -.1 >STYA K.LoadFile.Len save Length - >PUSHYA Push Length for K.GetMem - >PUSHBI 0 - jsr K.GetMem - bcs .98 - - >STYA K.LoadFile.Mem - - stx K.LoadFile.hMem save Segment hMem - >PUSHW K.LoadFile.Len Push Length for K.MLIRead - >PUSHW K.LoadFile.Mem Push PTR - >PUSHB K.LoadFile.hRef Push ref_num - jsr K.MLIRead - bcs .97 - - jsr .98 Close File.... - - >LDYA K.LoadFile.Len Return File Length... - ldx K.LoadFile.hMem ...and hMem to Caller - clc - rts - -.97 pha - lda K.LoadFile.hMem - jsr K.FreeMemA freemem because of failed load - pla - -.98 pha - lda K.LoadFile.hRef - jsr K.MLICloseA - lda K.LoadFile.hBuf - jsr K.FreeMemA ProDOS IO Buffer - pla - -.99 sec - rts -*-------------------------------------- * PULLW = SrcPtr * PULLW = SrcLen * PULLW = PATH (Handled by.... diff --git a/SYS/KERNEL.S.PFT.txt b/SYS/KERNEL.S.PFT.txt index 2fa502c9..1ad10ab1 100644 --- a/SYS/KERNEL.S.PFT.txt +++ b/SYS/KERNEL.S.PFT.txt @@ -9,13 +9,13 @@ AUTO 6 * PULLW/Y,A = PATH (PSTR) * Out : *-------------------------------------- -S.PFTCHECKPATHSTK +K.PFTCheckPathSTK lda (pStack) read PTR.LO on top of stack pha ldy #1 lda (pStack),y read PTR.HI on top of stack ply -S.PFTCHECKPATHYA +K.PFTCheckPathYA stx S.PFT.SYSCALL save #SYSCALL >STYA ZPQuickPtr1 @@ -67,10 +67,10 @@ S.PFTCHECKPATHYA * PULLB/A = hFILE/hDIR * Out : *-------------------------------------- -S.PFTCHECKFILESTK +K.PFTCheckFileSTK lda (pStack) read hFILE on top of stack -S.PFTCHECKFILEA -S.PFTCHECKDIRA stx S.PFT.SYSCALL save #SYSCALL +K.PFTCheckFileA +K.PFTCheckDirA stx S.PFT.SYSCALL save #SYSCALL sta S.PFT.hFILE jsr K.GetMemPtrA X = unmidified >STYA ZPQuickPtr1 diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index bbec28b8..bc5aad59 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -79,7 +79,7 @@ A2osX.D001.END .EQ * A2osX.D002 .EQ * .PH $D000 .INB SYS/KERNEL.S.REL - .INB SYS/KERNEL.S.Time + .INB SYS/KERNEL.S.TIME .EP A2osX.D002.END .EQ * *--------------------------------------