From db753146f6905eaad1c074d5a16457ff5b113fcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Fri, 19 Jan 2018 16:21:31 +0000 Subject: [PATCH] Kernel 0.9.1 : ASM rewrite....new SLIST API --- .Docs/KERNEL.md | 54 +++--- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes BIN/ASM.S.EXP.txt | 60 ++++--- BIN/ASM.S.SRC.txt | 113 ++----------- BIN/ASM.S.SYM.txt | 306 ++------------------------------- BIN/ASM.S.txt | 60 +------ INC/A2osX.I.txt | 13 +- SYS/KERNEL.S.CTRL.txt | 2 +- SYS/KERNEL.S.JMP.txt | 10 +- SYS/KERNEL.S.MEM.txt | 357 ++++++--------------------------------- SYS/KERNEL.S.SLIST.txt | 329 ++++++++++++++++++++++++++++++++++++ SYS/KERNEL.S.txt | 1 + 13 files changed, 497 insertions(+), 808 deletions(-) create mode 100644 SYS/KERNEL.S.SLIST.txt diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index f4a7b29d..791ca9b1 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -284,51 +284,55 @@ Create a new copy of this C-String + CS : error + A = SYS error code -# SListNew +# SListAdd ## In: ++ PUSHB = hSList ++ PUSHW = Key Ptr ++ PUSHW = Data Ptr ## Out: -+ A=hMem ++ A = Key Length + +# SListLookup + +## In: ++ PUSHB = hSList ++ PUSHW = Key Ptr ++ PUSHW = Data Ptr + +## Out: ++ A = Key Length ++ X,Y = KeyID # SListGetByID +## In: ++ PUSHB = hSList ++ PUSHW = KeyID ++ PUSHW = Data Ptr (KEY+DATA) + +## Out: ++ Y,A = Next ID + +# SListUpdateByID + ## In: + PUSHB = hSList + PUSHW = KeyID + PUSHW = Data Ptr ## Out: ++ A = Key Length ++ X,Y = KeyID -# SListAdd +# SListNew ## In: -+ PUSHB = hSList -+ PUSHW = Key -+ PUSHW = Data Ptr ## Out: + A=hSList -# SListLookup - -## In: -+ PUSHB = hSList -+ PUSHW = Key -+ PUSHW = Data Ptr - -## Out: -+ Data Ptr Updated - -# SListUpdate - -## In: -+ PUSHB = hSList -+ PUSHW = Key -+ PUSHW = Data Ptr - -## Out: - # SListFree ## In: diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index cd869466761526f00714bc90401c0e2e7f792c5c..1519a972a6773dd6ad7a0d9bb265d1b1699e9362 100644 GIT binary patch delta 23198 zcmb_^d3=;b@^?Qo^T3cv$Ye5;Ig-HSJ|M$P4hT0nCM1%}B%EFZ2ogDhNl8W-FIUGPHjChV&5)(CZ9{EkKA98z!F3Mo@brA8NZ~K*z zv$uCd4twNKEioLu0()H3h(n-3Huh*{AbiUO6^CQx~lO!tXwcp%6R})30MBT@GA3Hr} z$oP}vPo6zTr4n7jBgRv1qw%5~jF`(te4vaAS^HD1*=Ku?)X%MV)mJvRwHGZ~wAtmo z(4Xq{lK6ojyt1Wb>8h0*IjYP}5#{DNFrI{MdsGsOn(NebbGrc!j%975~|3pji z(l7M0XlaD+S5oh)@>aRZTt$@?)2nY}Sn(71g&eP#%dTl3-ukP{%>}Bvw*Dm0nQ!KsJ`h8Y!DZYX#y~ z*0qr6byD`h^c-TA8MwZosKHfL$u;OE<{?2?8HeQ(^UxryoWt^oRUd>^Hnz3%*n3(n5LnW(YDK%yXD*Rr!Q5n4vA1zG=M%j}XeK#M%BF9|NFzsD1t88Q zW&1Cvs`XFsXBJH^ZMv#?VN(`Kw9^=qlpr~%%Os^r@wDC~rF#-Y7i%K8mwIQpO6z91 z&~=ko%9s%fxPChWy!I?Pi1 z5EnE)Vho*VmJ&I0U%$MuwS8qvYrFrTF^5?5BrvO*Ugu)w zG_#)1!A%_b^e(exPbg5aTxZ3VH6=6F3bk6t(tfiPXCJ3hl+;u=)YVjSUnwMUh4h?R zviQcUXr>}AF)YwJL4}r7*3^ro@Z^)Yi7L3xTO_6jxvi5_XmH&;u*baT>kH0%IzoPg$_K#dLr@O6X4($tjgmdz>^<^3w6_QAX#+ zN%51XD@?${C06)mvHWa>N0bM#74wuitjqH+SkvCrM$#*2Z=957xgbE)z{SY*kO?#B zmvPc~sgkByrDUm!mRqGfshVDEMTD!NyR1@@R7($8rF7{+`i)g8k?LrkO-i@cOW8Zv z_^Ix~wRKHxO|4foEh3{D=t}sGG?U(ClhUMF^jVu^vCa;VmIO)D=FqQgQtD-MgEG0G z|B@Me$x_|kwI$117A_@8^Fj!!YD&FT3PIW0s+L7f%SpmTAq1rr^)o6exMEV7Q(R0} z+Tlu<&`oyC;8OaCT^c1_MvvJgd&T^ae$&h5i2cS>KrD>`M16x;%Ut4E5CU|0=QMEB zOfAG13u%!9V=SVV;Nfcu(9QDJ)mPM1i?EtUKX-9i=DD!4&NxplelYCZtaUI zR`8i&ajky|LTgsFi%r!-tk(v?-quzD&LyVn1h}q*hks8VnQXdVfNB*`J~4L)NKxJN z5}^|8KYoQDfc1PaJ>y9HT6zz50^d5UY4mzdz&$D-`|Sp?a*i9Zpp_NH{<2jo7PdFH ztngQ?Sk$x{?x?>>P*`r3fM?OJvZhEZ7-qFm1Vg_=tD9dM#)!R=WcS`YzkA>n~vupTh zsW{r^l7z?Uw;++8pixP9JV~?gNPH@+L)~<>1GdG41GJG*K25J_sqTD+e(pT<%mBI&=!6$&Ofp7#k>(^L`n^OiNXEJ9 zW!lUhhv-eo*m?Wtu4HK>eIQwirf(%nG17nNNuV9CsPlkLioIan?3%h#VtNjvU=>!!m0|_m2yra-&Ao$Fha3)=jN{CCh1*E zM!ZFzO@V-K(_`%M4*iWi-lg%Wc)Ul)r(#C$(^;v~$Vme#qgo_UHDZSX{%^6*wLR$!Bl(B4$+^hfENsW=6ENPk2t?-)!d=D5<2Tj5w7nm-ce68SN= zp=#I)(SIUflRl*vq)8KfC(wr>Tn#+bdq~{L0K`@2ov!R7H^3xUgcZ@Bp&ZAq8xzHgxz%Xc9(d`0u&OaD_Ce6J!guTTa*gu*Loif5K_ zE6*d=A44(TN-h!RaV890Tg)Vp{RJf9CmNX{#ZUN|iE=iCh>KDPQGOAkSbq&5k(~tg z^~B$3V+PIuzoWnTTnGv8k7EhZ@T}1&X;`S>s|o!Qy+**}wHgIl&(!NGub&~(+FTN^ z3rDfTDtFdAk|2kpO6ac{Qe@$fa40)(^A4Ei&~Ow#bSv3sqMlC6loC>hX|hRNL>L{{ z9zv!;2y2a`9hp*`6h&#KlsJC4O3RiWr)eBC+nN?B$+sgq47;SNX}PjQ4kP_KQ?ieZ z2_qqBm=(=Mm|lec94Ujqlp;&#jEz7yCi%aC1%UXme+0 zH*uzX(qr8mPc}KomKCumsz?kXZ@kUXeQv&Usd?+PPU5`%#G$QcH|>eN!}+>!x7Zk$o{^j0i0$+d=X2(VoUfd~ z;}9N)`+p3fy1)#^&zT1^7{wuc5)}9w4%nSQ_9PP9{KEN8-h~Zsvh+kBVx!~35I(qV z{${V)sXeiIl6liaa~C;q?%ZI)5NF<}r#gPvuBq}()cV4YA2g) zY>3UdmiYmyogT|xM*zDs*RscB*_>zDlWWlu z=EMDG8HxDR@nYfpdAoBhy|%%G)47)Z*z(gJ%WjXQ*WtWa9ev3)w)so05p>&ZjLHTg zb#$UD(i=?Ob8x{b%FIi*I?aI^`_Z!kRXcn^O6wUDchDoehsWIqx&C(?7H#D$j ztHz+&ca`SZT3!#_|KdxUtM4;EB}I_z7}B4d9-&nEtVUXUh1Oy+5xbLQr`lO9?z8&5 zR97^;`U-8YDS|v?1U#O>XD!T29cH8xmTD)BcaT|bz!Mn!p%PYd{I`@vf!k0&2X zKARkq68oqB3Q`JEmZcm>c_rmk$`>gysj;b+RBL6bJ@r#pc}i7EUCQi~i&Gj?deTDw z?M>@T`vm_8=`{AfGg#g&b?tSM16|kR&&Ez^+ko>#TF*4+NLSB9=L!13GVMHHeD8qc zr6ac;*`4X!ljZE11IkXRccAN2d~iOV-jn0JI%8{gUuD1B*__#_>mBG%>qMV^*|BW^ zMp@w6o$lO|Av$&w7{K~Wr#-7jW1C;@?9W_M&Uo*6&&?n2^2hEG&OIYVhb4s(%>SA* z`+sqcqE9c^=GwBh4RmI28|d!n%-l9G-=_R?-neUpHe%SmXAVC5-19HI`0{p1bLRF@ znqf5JnC8d*=hkQ?oiAsw)fu1Kvt-Y4choU=f8(B`?#*z(58durF!Y@c;_S&89MR_- zbo7nxpUy}p3(}|$-Tirt+Ce%;^$ysU+sL+oL%jpb?Rf67k$(LiI~k0A)lOaoKk!+b zx%CtT>+UX`-`!b=Po0Uq13pKez9)^bO<_%_r#bOKa0PdW6Ls8;NuBFVXIkst%{sAv z-N$+NjNSobLN`Y1%F=x=k_#3;l2adY$Cgia3 z3{a4Ok3SeSVcS6ekZz(3f-YDfbh6)n>VeO>4GdsK&+5xJc72T1U6RTBG78u3jm|x{ zIGwMJ?n$|Jle06cu*2G!W$Q3?W*2rub!OW-^qrZ79oo)J+XYw^HYDp-4%_G{!;0@c zIrzP=FMH6{H*qi<8Xm?}oz&;-Kf}mueXf2pgGBdv`wi^FkiM#ZSO_>c z0O(wm(=*h0^{Af4j?4Q}`-eLFNA=9=xVSG3AFmzVGo#}|Utc;tr;YBJ)=}1%(I3m^ zS>Uv!@h1RT9b;Zh?zgb!h+!QHBB3w2-`El7tj_5f=1flO(RM_L743egaQ>dR-Gj38 z!L**QS*OpS*H4@YIa@z;PRQx`V9VQXVFoAMOv1cWACvAyn7gpH{wH92ga39`x_Ta+ zzxk+p=ZEf{$J{%QyXSXK>>Xh4_`v7)fGJy~povaQC0-cHwcVyMg~@pF0`uV~*>z_6`ghxF2*{ndj{(aI#tN$)`WB)n@4f zt?YH$D~F8}xUo+9noAR>TeYXpO`l$;U7*1;dA)WL%8r+<*CxeOW%hiG=y`hcyY55y z`<|O_Td#EjyLY{I>zD+1xxOTTnim;BuLF?FE=-e}&2P5sZ(gdoz zNn1AZ3-_SCi<~;}g?peY8P;_6t1sOBgWXZQ(K(7X-=t0VeeT}*g`4@a8NOnKuk=Kn z{=)t67w)^iaCdwLrNQx|x>JI%H<{yIvFp^9_uacb-!kCd8R6M%@SKkDFeXN4MNW?a zjfW#VcSm?SzU(BupAP2E>pIu_>7i3cBRu^hzQUjHuIVHg;?Uy}KF=u(^k2aKx8)0W z<-Y7|?kK$S(+4{aKm5LX!zr-e@Hq=-Be~!9YY+GTbZX-;cR(6+fbRZLI6vU32v+4R z@RVdl!-JXD$6;c5@c*qY774N#(wP-q?mUpQq{r%8jy>$Cd+WQWv7xlPt@W5Z=(1Z z9j`!C_+l7SpWs^JygsLANhH7jXg)*%RgeK zfWFH=cB41CF8{=h&gi-PQ#bm~@A{DiWnJe)Z0O8WyM97@{%)spPZADiCN#vp8Th+@ z`c`ePv}==AqjxqmE?Cwy;o^Of@=ubry`{y!p!sq#>;-9utE{4$=wC$Yp0VG5Qu0aL zjhZVq+@{@in-1syc6P$=(%m5$uQu`*ex> zGw;{ECmDK;{n4F6dW|od`*%H|L(=e=4vEIOLBpZ`A5PCaaeB_a!@3@8V~heXwm`OCG} zUGMAg->~)&jY-h`K=q&Ke)185cZksmywfbsAC<{Of+^<^(+I+{i3V3u73bw9F(Va7 z9hWSZ#5ff|4F{kil_dJwlSzGDiL126RaG>n)LYviUJMr!dkRNXRC7c`05fj?tDov} zrQ5&KO^51++&*8U+dtzg-3!{p_=`xTiwQEez@2-mtF*|kHb}XLnzkqcZX|9DFpP;RT=%($>>P*Dkqo=f<(8F>47PhL+X`5G%P&&%J61uc(X0ENhg1&yUJGy zp4SG!ta)9qSp`L0A8gh@JYPt&jzo6^o3+zPv_GU-PNHuJHtW44dTp@T0M6^k4k%Ns zUPBq)_k^G!$A(~YW<80$5r)y=s;t<~y08z#dJ`<6vf^(lkID)cD*wcMbFd=^m6eg$ zjbX4kjO-SG#wx>uZcYv8Oq;^!Ko+|>90H<@Ei~nOUApg9f$`3%#fxKCO-7B%`aSJt*=jb1|{?gIn~!AW>!M+@cD9ZUOEW^aKU;`EjQS^+zV3p*O(CyqA$Q z%q{ZItF3Ha(Nw%@G2ZM5$!(8vT#;+KpT)u@Dn5E&_$d2>ql6CfSYVLY$6@s9C=JV3 z@@=dCSiZ(WvCLM*R< zSXj)uq6ICj?FV%(BEQP0U!&ii(Zycc4}uj4-8m z+lOk4>g$Q===r_$ACeu-D;5&NF)UB*%=+>oVmVF+f6|$ykGKwp${&N3^%HK~wolLR zFP{L`ev;Pwth4z(!)ME>prO~SY+6y)ysU{teh%5VvBSx}0F~`a;_|qu>Jf0NMa=4m z;VVYC(C@-~ldo0P=a;PYu2|%+S?p)brV_(xWu{>E4Vc9ZiXrLApLNkgz6B)xJNnDd zy0qB;oiA?A_cZUUZnW(O5Se~FUp=X3=+$R+DT{wnHA(b83-y@Jp1&^oUljBERWZNc zz%urCOzRFdE9T3ktCp`s;ZhQ=>aWB_y6K2vRaHfGbBR^D{TE%_5RJ5hjM37BUvw^? zPC^i(Fw`4}UY3MW4*}jbRC47Cu5i!V*5(!MTv>6$Bpy?k)7Cb&wlxVAMo4O4kqzh_ z5h=L}@8F&iC74D;W1u@$E@>ooV+aS@_lqv7I!3yY=uOg&mCG85J{C`q8O)f2Fb=Cl z`8b=$ipq*=Z}rS75*HUfOK)9WO&zgXF-J?O-lnj#OWY0h4k3p=Uc7BGB}gT>>m;rf z+{zqPpQuob5EO|c>2<&A5;C2b8XODM7tXA}YiPWo6&irHFI*ayKQ&q!#wguzYsbyHc|^A%xoFt)=+@tKHdDSr17|K^G-Cyga~v8Gg@J_{uS|ae zJJaWo%!%}y-*g$$B=$%if<2jJPNq|T2WSet^>q7qIqLO41UBXsVH0#kU4K^Fl^ah*r&@2lyiy86sK(n+6&2rK7fpuvO z+7&_c%w%G^Af#DUH5UXk0uXO$GKr}SHY@ABz*hwURcKZRo7HI61e>*J)~ZckviHJd zV!TjoCnGrmzAn%%XR_A^nha}f2x%5WmYJb#4*;`50l5Io4h7@^Fh>FS{K*y7#rc5D z4J9c6U|uL-EC3gU0>%MwaVVe=fJ;IF<01H^0YGI1@Rx-&>)Ddc_XQwTY*iWq%^Ier z1;J(=nhOKX+UaO63O38pYzj2_dMpk!8yM%ygUvEDmncolzX6irW}0eQGof(96-ZOd z>;1S`pmJ?KFb5WN^oMu%B%AO)VrWw;6wA;=Pp(;XuJG6vTpMkGj z?c~6cnwizOH_H{Bd@n84%SlofU96YWeD`C#2GeP3RoL{(qGE3)S57{0 zJi)-Xuhv?8PjUiW9xkfH-N#w@0!HatF=xE`W*X$_81835*|{X{X^FL$OkdWrpmAB7 zGUM21ICNIyvQ{=(`@FP+AC)GQ z*88O$i<;IDLkx}xJbA#?5S$7OID_${GmZ>6h7mgsVD$Bu<+vp{a`Cg0RU8&%oU%xS zJ#dByJ!By=3{McgU+ZEiGY(ihUJM_hLXkBS{YXiqR5)kxEGdamv6|u>X~>EGuW_}3 zUfQQ~MsAi5I;X{M)*RfdJ4n~}>Bfw~=iU*UwFl<|vTX$L^Sc(YTIa+qhLh{3uAAbt zpX|xnVm!INWL@zd!$~^6bx4vX;^h8|TZdFhC~4|jrFHxTbB=BpwV%^|h8m`EUx)mY z-j~rsSkyvVTfb)cf|g~Q_))Z&Wvd}8LM%vjIcBz!;vzy38%ulH$<@oxd7$TOMP#JD z#Ln|xC9mh-AQImcB8Gn}=?YGO`+Vd^VnXWMxM*PrV-vDomWzsPnhj+@^2<{f95<2k z5;GEBWL80nQ9!V4H{t+G68M4qX(e}fhTKIg2MJD=JXcinwHt`zSwe4kNVXc1k==5$ zK!$MSW<>bs!O8K0GP^%2eaX0BWu zu8}Vjvk!^#AGC{9nMAxxTzOo(!`|cC^^?Q_r2XS5D=?(M+gvlNOTA^xy^Cw$3CNV0 z8ySu$wSo0Se^gYAVn5`DSJJY4<*N3kTNkm!1Zi?(+cNmiag;S0R}=F`ymWyCKe%Y| zAJfQNWQXq)pm+j;uX-SHz5;cG%nR@}09H{Oy*i6ToFHmuc2XFE{xdQ1@Kbzb6yCf@ zqx7FE&@WUdE63@-RG?p}P*#4^f2}}IlMBU2xF!bR*2Ih zYv$JZy&}{Pf-3n(`r|EflJAU?Hs=!=i84=-8M%xUnV5fJw#_unc0^o$AHABGkRdbY z;gFIN20^aO);9>z|IU_kHPN3VA_^jFR->TAq9F2QzW#+|n5<=CP$$Bm#S$U2kjKN- z5E0aphf1_>lkA+UmqhIak|I?mdSu3Ism;iU{~#oCjx4MUIRt|sG9n7mqsYdUg9yTB_+K%@ z>{s}k7F00k?niJudX>KVh#Z&4if9XYeN;w(Aa=wA#e;(HN0=AM2n{6hE#|#+i9;Tv zO?Z#co^IJ5uSboH4~WVbAMgV)VEhq6uX|LsJ5UYdc+|i+{+Phqj)TFYa$MF&&=sq) zB8Jzn5Fdk5m|EUM8}s@EV`qFy=r@nzK!;Ko58pWa!JkWT<<}D36gSc)loY;s(FW3SHcRR(Wq# zIHn`j>&Fq9dA%N9k8i&a13X@h2Jn00km+^%WcyN99Mca~&Ma_twus!*BjM?4y)hC+ zFfK7K(qVYLW6IN|ZMfkeXh`O<*G0Iz2hP^tlCvRo$XYGN}|X}@e8hO^nqC98?m zM3eT*al=@7Y}slOXQtEk%NBMr<5J=qa*;Tk@%;v08M0a#wZ+E|XfkSGB-R1WZfr>E zwoyV%@uEZUwShi?MVp1hgjyIggCNE*LLG>o*qAa+II*$uf<*cxrF*i{-4}czfgG7c zq_RR5H-FU0xaL@q4Bz^6jpG4aHOx$*-bAh{2(XT zX@cSi(Jm&?YSr*#P&Nx#xd&zxiQ?G;_zvpBMD{==M=pKxG1;Dw2ST<{Q2JYrp2a)s+juW8!$4^Ei_D33SQhNWv%4n;(}Gq{(#G<8sE(DIl;< zmFTT~vNdKJMrUCMN53M#0$PCZ<5-GU*-? zF+Ff9FIRMp>KIA5fGq))u9M^9BT)?#<9bLGN@3i1GEy=~Too5!YW1HAfGXIZ3V?E$ zDgY{BB)yIfJ|U+`^)&8DIoXDC7crs6#by+6bz+-EYoC;@7L>Na5Lgq(9EP$uSztj~ zi^QRn6{2a8WfR*)v=adI0u(3X-c$BR8yz@xZ<&rC39H(JNOE9>lS#lL{(-t}EcH-IeSMixPs%=pUUj`lTpjc_wM z!gFIc2BSf{qODt45JBYMgu$587m%VY^e<1#(_(KGqXq5Lv6UO44@QWJ5f>$ZWQKVg z2A8+vkNK~VK)hUHM_}(&jmt>n?HGU`Cy;ee5E)ST;p>U71KkPwJf0r}PNeHeVC%Pfq)wIyOb^MA4;(323~#$e;og$=bphiZMRUUVNWm=J}g3^6W{Q| z$s5UXY16{y<&Dd33HWJA3AAMDVVYB7Bp~>XYi~FN6WfcS%#R3b3ONgq$VZ_Pyiu9S zUzYzHRB`))FOVwQN}DflZb#UT+#jOs$3PbKI9497@bDV7j2NF_0|rk2M1GRZ>?w(k z=#y=84~QXLD0e)~dOjoECndw5K@10j$Y)un=R!xvS_i&UZg`$au+Y!gyZ}o3iz2+o zz7&MN40zljmPWjR=+Vaz;<$O3jr*SviRJ$SqJM=2f<|I`H8?10n3%5qHRhvuP1Yaa zVSGcFx?)en_-6Q=4R0xOz;53LbJL~ogakakQigXyA__sK_rj66#PEI)IS`J_BZdzG zNcjku#~+pGt1rv;tPddsOEHcKyNdWIuq}P8SlTBbPyAG(zrQTUJ5DI%Ck0afnJ}@0 zQxZM>oa`9&Ih#|MDSZ(Rfhm0nhPJOHTC`5KWXfNoWj_5UhV>037O&LtHdmr6pO?)k z-vXw1tnq)0afr!$4@Qn3gvng+qtdw$N7Ybk`6&Q*{2W}fincIAIm<@jhGPFk*hti` z0Z`m;LKb}EEg*}04r3dLMnn&MZ&=b`7e`S*#Lp6(2PsMqkQ60oRYnlP0ZB0$TJO++?m5QZZ)YH=Y7L$Q5(9WRj{FgzjWeMWtv$ zqDd+nJj688K;cN&Aj9YH;p<9hPOX&@G5sK6eo80oalo%7BN(LSo2cL?XoGgGgV1X|P(-SmilRc@`?q@!}~@ z0I^}BVsLpRVv=HT#5h?oA|ETZFw2{w07RQv-qdgiEN@yk1eRA65KLdJSY8Q0%<>Rw zO7T%KEH5O9C<_?YbZ}yZRSwf7@fE_dE>NszhJvgFF0qPR)`DsUS0ixxT47luFVrZT zR&n!+#@02PLhTE4s0+6*%%MIU0*hXH`W+gc7R25qRIdub zIP3%|TL6&W%}D>Q_~1PX9M;_lc-Fmi(yMZ2ewQ*}{yKIms%5dC#Z#89+{cE$Kh$z6 zo7$1ekfaCb9k0sHrd=Q~|3ky`qR>|t`UfEticc}!h&ZSyslpM{L&Bm1=WG)BPc|NecKdwP`rsko+m(axegrH{; zCj@MG5^NQtd6&LXbYj2knDLylAo%Y1^UBh_ z01#VJ5ANkFCi;@#67jNX?86Rm$anWVf=c4@f#}RHx97b9=ws2*HJ(I& zqDH29tfXlB^v_vFom9yh(fu<)bP4N!N=5LJr0sJda7l^3d9i<4%hgS-3mb6@Q~m-g zZ1_@H;q^G7hKUBLH)3PM%6u(EPdTlj&%YrjP5nlZ6i3ZLbtE=}Z-X=VPKB4T85sVj zU_2z@dksDMrtBE{0|rn3QA11Llv90YKn~Y4{=}55=13U%XQ6!gEVIR50=D?80PBAf zf;oOy1Xoh8O+u+Gte*>tM6}9TXFL-rLDI5qdp(w_c`^O$P1#tl(P9v-RyBAXC%`2{ zt+-S&L@U-*9AuP*V`B`}ieLc6>(w#F@iB(cBX7#_&IrcX5MUgsFpd(8M-8Xz-;%Sv z(O|1rIF%K% z5o=IVn+oS9Vz4s|-t zuD4~w6(fQ|j8q3>LO6p$B&l#AL~>Awl>bwR)PN9aLWq=fYJ5jduFMFGCuc(8rYvoE zT*d(x6e1qUqd;LEeI5l1n>j#OUG(~Q6NtpJ-k(_g2sbyPnl+o)nTF%Q%(3Z zq0id$J2AN~4C}@qb>SVM#`^O+W-&cBg!cqwW_VBNZx(gFj~gnpX~Fxl(=vx?Yp!BN z2xs${83n$b=F%js6m(ZIy4E0FTNqu%zV~F8#uqb$WZ&S%4{PFl;LjYJMT|oM@BmP@ ztnu=;2_#WZvNtXmH`zTIH_jI|uef})XL4&(Tgx)``+}xn3^{gk-I&?_Ojo@(i`enY z7B}SP6o5fqF1|+B-sV@Xg&0USNsT1<4YrnrjmY5ng%j!+kR#}8_=6vV85ocq(s262 zfSl}%CfVx_4sns;_}Pmaa2UhDxJagt5w8)GO?2D`a#CI_*fHUkOkco%oX~CtfC*o- zcyU`(yT5sbUm)}r(J?)a-tvK*R%>Om9?dAL8W*;y%0qrk^9fU4RQ)KW|7g)a zHi!4eNmJ3=Eky59NXICo_=OUt42y@8iizf)|7cQyvGMn8< z^u-Esi9%c|h;7~wVudq*|5qmHhE3;m?6;WD;r7+XyFQk;IuiCCIeBD#BKwQmUH@P2 feKkoN+J|gtAG)DkzoC8DhW3aJ?S@_Lk&*uoOjLRr delta 25792 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�?+ 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 bJq~sUUwQuPGRNC`dwl25$XHOGlHdA&4lwY4 delta 9457 zcmaJ{349aRnSV2~tdV6KgDxKs@F8E|u`Fz38*n07lC7W%Nd}ydL)Zd4F}5Sg2~M*W zLkJ{KkanmM*wApUb1=4Q2-KNd9$>wM__k9o&`n@-AG?FpP?+48M z|KBy=``$6%Xy;Db&YiZ$TGctWsshuY4)tnH39}P%Xcs%qf%gcwU(8(CeK`}MCt3q(-Z9 zWyu$|Us!2aFsU!=U$_))TP?%WZB12+5A7|RXg!n@I>qEP0P#fR+3{su37Y0zL1ZdL zcH3xT6W<-&&j)*iDu>f*MO9^!!il9n{4HDA9Yow>D!PP*WXsmE8Eh{xwbmgU5>!{bL)EAXW{7)F)` z0@_2}$ikCLmwyAQZiGvV)=IrKO+I?U$k+&dzAuO@E6JrNv>sWS;c{8K%ZG|vkTZ6r zZ(E#q$73;HZ2KPGwO*)4T&rZou!_d)vhuEd5?9@Z4NdNSabmKFt$E^i=65ys-T%OY z4?X+{)WgSO(bEhkE`3DvDzMxvbA&m)d^YE8<`l#FHqL(g4)gNjMGMfkW$4jmi}Ii- z*iB7U`a&!sf^7lry>}*u4`u;WcN+IkWN+i9bqnD45q5KQk zdZDsX@QidI!)CUASFktS;}F&ggG34~yoh2O0b3WFK&Feu^{2GP)FqN$U_9A@OqYU? zGn$MF!DL+M9UF)yV*^MVW$QN|t!_Y;E$liz!|C435^*65;XO##&rWaYPY8TFDv7bv zSj6Y@@!hecV|cXxa>qn6hPbWlbTYaFnYOX1=>)i|y&y>JV&8R0J;+WY-4HuHJTM_t zT9NuPxG%e$<(tI$%?-2DLn9NYcsqNhwG|VH8)2shVmpv-6ha$`349Y$kAX@373}n8 z?7qtz3c2h~d+#QsjkDAJ!~MHaUV`P@#dtD-xFlPTAHRM)`|)|tbs6E1_=C}SbbA7+ zuLSGnt61^U*EI&cZU?xHU4b*Ao&dshH7g$2sL`v;-(kh|_i=`l@fsZX)g)0QOM$Hk zRPx=kWKWk;?CoUtB2JL9son*~3$Dd!k`uQZkkac|-jU_DDn3!8apr zuav{W>!lp>E0;G3NPPnsDA{+GK$hIdiqF2GDRb_pd2L4On?Qm49?kd76t^Mn07)z2 zZe^!&PSukj*L)kxH_MTUt#4{-H{MP)rxc4KNLJr5e+a_1SW+Mb>y3>dZki_IAgCrU}ZQ$(Vrm%`*Y-UpRLLJ|NA&2Qy}%_91z$JuDZSWPkp-_6S5Q%{ASl z%5-@Qg4aJTjblb>o1VZTb0?cVbx4v7yCU)=;C@OI`7^Loa#+cIICB=~&&uARuzwDc zx+iH2kicKSz44cLeCJHC;-}_Bk-~ExW~u(^GvZJmVedvI&z#NwQN=&^E2(_BU(+#u zj*cai@O`iXR2Xy_Y9Tmsg+hT) zhtKZu3(3(@Vaw1qq+JA_+_3kR=;6W{5TxB5qU6J!Rb8-Qn+<7AKov!!tZ2$qbT(nV zCcM)Zo70L8ziC~QqFOAgmWaoXtBNa1GX&S!(sFralH4xD&74p@pMsS>->Qs}x(U~a zO{vqBa9`Sd*43$ns;)%pR*)=NrPP6aU_jYT^4k<2T)R{Ux(;?awIv=EcpFl$25sXS zmR~uy7ENpC)FRn_^qprEB6lvG5a;1Q>}Lzap#-Atf~^hdoXU)F;V9hm&4})KqQDcP z=ZrYi9y}q=Kb!w`ihs@r{_&>B`RR-Z0Est0m=Qq;g_`vjus%pD;PR(=N>9=U$^-EERm=lG&o` zb3bI@aHN^pm-}2Qdqd`qQ@baq-GwhIYcD>cq5R(|D{tZNVUe}3rH7t^|IA!k|3H`4 z;y=nuD^}<2d+~JV+mQZG{|qTIy(DeoH4Fa2PIrbQeReoj zEQf{fuR!Wv#v{6eoL&A0?w9_J6^}S{i#v3Ghe5zcfi`4#MHL+Z zUl7B^3-(?E{Uxun;^|j4rTvCC&QvnInI4ODi28q|vGkh$mXt^C|D@B5>1~#t%Q8R*=KbA8>bv+~a^u>Kb z1Nc-5pyD&JaVn>r`CME-m19bMafU(Nmo!ScyUIQbb`-U=YNc}BVJ1x_8P(!M;8l$4-E&#O@(y^3kLj^f96$KTwqLM4)R})W~ zw1%2ffhVm@^PrXoB%W{Ws32d)F9EzDjjIbmDQ|&_Zxj3bhT)h|q#}o-yhSSc;Gvfg z&Y&V&iovKl^Du2vO^*#uAfs7D4$N3UIYbt##P$Esm`02xDk!b~>?5YGl*R(7DuYmY#5fSTF4d7MIFt>a-0h+$gRK%Akmjmwq=}xb+&+ZXy zEv?Adp%Rg=fil|4FCRWS=i*YR61O zlUMHXJA_8NEf9u1Kh)I-Z^DiCu#XS(PEQC`lrsm#@~>D!p@g|M1yMysHilozD=M=w zu!JhAD3+3R!+k!)S(y5xH4P}Qn&}GjF255M*DxTAo$)^VCa=qXBYq2RLFQT}f>C@b z+TaS`gwI)48!D({4)XS}P+{+?K)QOkq4;tc4+FkJ!5f%^DM=v$1g{W{vcd&`TNS*C z;tp)crr;|n?z98mtl%v&9ss;m!B@$6ZwiPuO0=M&_B7%1^#RqP=&Yuc%L(`ziZ`PL zYh~OUb^+6=Xq+oEKETgYaJ!8AD^N=3P>3#>2!euB!Cf-G9&k6sSE9mhio+=ph#p13 zLx~=or}Gtj9mR>f7vm`yIk4nQ6AsYuQw?~!fI>6@6I7V>3S$E%q%dKHSqV%;VR{v& z8JG=t{Bezdqm2sH0@Nl&sZU{Afw@3oE>xIRz-(5Sixj2}n2QzW5`}38=JHD^1?3y1 zl-C2q7Dc5$jfZia4k#Ki%J^{IZB_7X6c6Bm9F*~yEt={SDj1T<5RjM2Br3R^;=yjf zhZTIgjQ0ROqTr(xCuKLL;8##Qf`f`Hcmm@v-W3ry5J`m?mlg1HU#Z|%QM?yd(GH4R z5jP>N6AP|}Rlw`Hos1yV(08afyflIQHB=sk_FvM3+l}YjcPRxrDN1c3Iy)5|Ax*e( zw7Vz+qjW80h{kS;gQ@FeoG9#}1cbX+3O98<;|q5~y}7)>1D##rNC*}x+%RqMMf>BU zf<2LlZQn8+iwm{khAzPe3!|`-w+fDEA~sOBIlg(MHxbSk2u2f$ zj!MgbBxl`+{T>k`ue7&Nn?%4BkB`PXsw{&^+^U&LIt+&8W|7* zTjkN8;3bdclVsyb;5$>T=tAy^;N7TZH@87Avf-Wg?|< zMfmML7yNrI?+6P`sN{}0)QuQ#g-!Y(1G_&zh>OJ^-5%R7$(!$_@c8g>Fq$0P&!>nT z)7=b?H82*7N0X!RnhLZv?@sBrW0{8RI?9-IB55pAZJ#Nv;}=4**V{t_dxi zA-KJ(YZ41KBg1_%5b*_x-Db4#ehCY8Qz88W65sQ5{!1WIk+_htj7;Un_3*I9H0wHLo6W>j!_+K+HoE;jt=}{Tq8k1ygDL7Xa zKStngZ*)s+nD@u7qT;2GXX5VR=(YsSOz9Ju%!cUjc#JU3sQ6GO1MO03tL~?nI4+5O zI0xYrJbt&=?tqV1(kTy_e?}y|QZybXEuFH%nQ&n1)2{3$E)!frZ<601zre9 z72y{H?kMas&@a|K3mcCU)|oz(_ba#zgaj)p_%-7U^Y9rh6uA`@J;!VbM#mE|seX_- z^&8@NP@dZ~+xq7T+!g5cM`*EDyr4*iNulA=_4x6)IbFd>532sHA`$5ey251a=SrE6 zK|B#y8pvvr^0}x><8cWOx!m&XY(mBp66ol4yImn#-sTq-3)l}eVE8>1@M%QAH&Y1rHsr8SXTckX`De+zD$TgNm_}bJ0ps}Nh0vX!K^3# zyJT|?oiZ7qy z%lsA*agJ{v>lz&&Ny=68HiO>~2_&y+Xwf?a#2*0ni? z%+#VB^=$6_+{qg?l~rx<6M;>lke6$mUDm99g~@^TZskm?HfJ`cLkqu1fR7aRnKjy@ z1JH^q(SUk@sy(M$M=$(@RIHTgl zr?gzp(u^K-;j+y3w6>gfq$?`qjx@O4hd(OM{iKxE-8X8L`5ScjR-K+Z4?E3&k4gW~q2PV# zn*4Yn{{x1!{$Y>0aHZ3~k|OHLMFh zW1u;=1Df@?um3p%ZND!-Fr)4FC9%}>RoW7Fk|Etb^Ve8)ZmSfjPl1thzF}}Pzock4 z^rzuI?=&O*&_MLxsp~Wwb24fOPPq7|7|5i?pNb9Z^|{%k#|fVvGwMsr(Tb|p$`yrw lcroE|?xF4ctf{5WJA9XpVQ1C%=)Puh3fh_JnR|7w{1aT9(R%;@ diff --git a/BIN/ASM.S.EXP.txt b/BIN/ASM.S.EXP.txt index 3446feed..fa7c3616 100644 --- a/BIN/ASM.S.EXP.txt +++ b/BIN/ASM.S.EXP.txt @@ -173,31 +173,51 @@ EXP.SetAccA sta SRC.ACC stz SRC.ACC+3 rts *--------------------------------------- -EXP.GetSymbol >LDYA L.SRC.ELabel.Len - jsr SRC.GetLabel - bcs EXP.EvalExitSYN +EXP.GetSymbol >PUSHB.G SYM.hGlobals + >PUSHW ZPLinePtr + >PUSHEA.G SYM.Value - >LDYA L.SRC.ELabel.Flags - jsr SYM.SearchGlobal - bcc .1 + >SYSCALL SListLookup + bcs .2 - ldy #ASM.PASS - lda (pData),y pass#2? - bne EXP.EvalExitUND yes, undefined symbol + adc ZPLinePtr + sta ZPLinePtr + bcc .1 - lda #$C0 Valid+Pending - sta SRC.ELabel.Flags - >LDYA L.SRC.ELabel.Flags - jsr SYM.AddGToGBlockYA + inc ZPLinePtr+1 + +.1 clc rts + +.2 ldy #ASM.PASS + lda (pData),y pass#2? + bne .99 yes, undefined symbol + + >PUSHB.G SYM.hGlobals + >PUSHW ZPLinePtr + >PUSHEA.G SYM.Value + + lda #6 + >STA.G SYM.Value+SYM.LEN -.1 ldx #3 -.2 lda SRC.FLabel.Value,x - sta SRC.ACC,x - dex - bpl .2 - clc - rts + lda #0 + >STA.G SYM.Value+SYM.F + + >SYSCALL SListAdd + bcs .9 + + adc ZPLinePtr + sta ZPLinePtr + bcc .3 + + inc ZPLinePtr+1 + +.3 clc + rts + +.99 lda #ERR.UNDEF.SYMBOL + sec +.9 rts *--------------------------------------- EXP.Compute dec asl diff --git a/BIN/ASM.S.SRC.txt b/BIN/ASM.S.SRC.txt index bb19baf3..1b331693 100644 --- a/BIN/ASM.S.SRC.txt +++ b/BIN/ASM.S.SRC.txt @@ -116,12 +116,6 @@ SRC.ParseLine.Ok lda SRC.GLabel.New bne .8 yes, nothing to do * --- Pass #1 - - clc - rts - - - >LDYA L.SRC.GLabel.Flags jsr SYM.SearchGlobal bcs .1 if CS, not found, add @@ -172,34 +166,9 @@ SRC.ParseLine.SymL jsr SRC.GetNextChar bne SRC.ParseLine.SymE Max .255 lda SRC.ACC beq SRC.ParseLine.SymE .0 is not allowed - sta SRC.LLabel.ID - - ldy #ASM.PC - lda (pData),y - ldy #ASM.PC.GLABEL - sec - sbc (pData),y - sta SRC.LLabel.Offset - - ldy #ASM.PC+1 - lda (pData),y - ldy #ASM.PC.GLABEL+1 - sbc (pData),y - bne SRC.ParseLine.SymR - - ldy #ASM.PC+2 - lda (pData),y - ldy #ASM.PC.GLABEL+2 - sbc (pData),y - bne SRC.ParseLine.SymR - - ldy #ASM.PC+3 - lda (pData),y - ldy #ASM.PC.GLABEL+3 - sbc (pData),y - bne SRC.ParseLine.SymR - bcc SRC.ParseLine.SymR - jmp SYM.AddLToGBlock + + clc + rts *--------------------------------------- SRC.ParseLine.SymE lda #ERR.INV.LABEL sec @@ -209,31 +178,20 @@ SRC.ParseLine.SymR lda #ERR.RANGE sec rts *--------------------------------------- -SRC.ParseLine.SymG >LDYA L.SRC.GLabel.Len - jsr SRC.GetLabel +SRC.ParseLine.SymG >PUSHB.G SYM.hGlobals + >PUSHW ZPLinePtr + >PUSHEA.G SYM.Value + + >SYSCALL SListAdd bcs SRC.ParseLine.SymE + + adc ZPLinePtr + sta ZPLinePtr + bcc .1 - ldx #3 Makes Current Label = PC for now - ldy #ASM.PC+3 + inc ZPLinePtr+1 -.1 lda (pData),y - sta SRC.GLabel.Value,x - dey - dex - bpl .1 - - ldx #3 Makes Current Label = Ref for next local - ldy #ASM.PC.GLABEL+3 - -.2 lda SRC.GLabel.Value,x - sta (pData),y - dey - dex - bpl .2 - - lda #$80 Mark GLabel Flag... - sta SRC.GLabel.Flags - sta SRC.GLabel.New +.1 clc rts @@ -682,49 +640,6 @@ SRC.GetBinary stz SRC.ACC+1 sec rts *--------------------------------------- -SRC.GetLabel >STYA ZPPtr1 - - lda (ZPLinePtr) - beq .9 - - jsr SRC.IsLetter - bcs .9 - - ldy #1 - sta (ZPPtr1),y - -.1 jsr SRC.GetNextCharUC - beq .8 - - jsr SRC.IsLetterOrDigit - bcc .2 - cmp #'.' - beq .2 - - cmp #'_' - beq .2 - - cmp #' ' - beq .8 - jsr SRC.IsEXPReserved - bcc .8 - jsr SRC.IsAMReserved - bcc .8 - -.9 lda #ERR.SYNTAX.ERROR - sec - rts - -.2 iny - sta (ZPPtr1),y - cpy #SRC.GLABEL.MAXLEN - bcc .1 if equ Carry is set - -.8 tya - sta (ZPPtr1) - clc - rts -*--------------------------------------- SRC.GetKeyword >STYA ZPPtr1 KeyWord table stz SRC.Keyword.ID diff --git a/BIN/ASM.S.SYM.txt b/BIN/ASM.S.SYM.txt index f4a4d211..256e4f12 100644 --- a/BIN/ASM.S.SYM.txt +++ b/BIN/ASM.S.SYM.txt @@ -3,14 +3,12 @@ PREFIX /A2OSX.BUILD AUTO 4,1 *--------------------------------------- * Global Symbol Record: (8+ bytes) -* 0 : Flags: -* b7=Valid Entry -* b6=pending -* b0=R/W (.SE) -* 1-4 : 32 bits Value -* 5 : Len -* 6-... Name -* ...... +* 0 : Len (6) +* 1 : Flags: +* b7=0=pending,1=resolved +* b6=R/W (.SE) +* 2-5 : 32 bits Value +* * Local Symbol Record: (2 bytes) * 2 : Local ID (1->255) * 3 : offset from Global Symbol @@ -28,96 +26,23 @@ AUTO 4,1 *--------------------------------------- * Macro Record: ( bytes) *--------------------------------------- -SYM.Init jmp SYM.NewGBlock -*--------------------------------------- -SYM.Quit ldy #SYM.pLastGBlock - lda (pData),y - beq .8 - -.1 clc - adc #SYM.hGBlocks-1 - tay - lda (pData),y - >SYSCALL FreeMem.A - ldy #SYM.pLastGBlock - lda (pData),y - dec - sta (pData),y - bne .1 +SYM.Init >SYSCALL SListNew + bcs .9 -.8 clc + >STA.G SYM.hGlobals +.9 rts +*--------------------------------------- +SYM.Quit >LDA.G SYM.hGlobals + >SYSCALL SListFree.A rts *--------------------------------------- SYM.Dump >LDYA L.MSG.SYMBOLS >SYSCALL PrintF.YA - - ldy #SYM.DumpCount - lda #20 - sta (pData),y - - jsr SYM.ResetGBlockPtr -.1 jsr SYM.GetByteGBlock Get Flags - sta SRC.GLabel.Flags - bne .10 clc rts - -.10 ldx #0 -.2 jsr SYM.GetByteGBlock - sta SRC.GLabel.Value,x - inx - cpx #5 - bne .2 Get Value+Len - - ldx #0 -.3 jsr SYM.GetByteGBlock - sta SRC.GLabel.Name,x - inx - cpx SRC.GLabel.Len - bne .3 - - >PUSHW L.SRC.GLabel.Len - - lda SRC.GLabel.Value+1 - >PUSHA - lda SRC.GLabel.Value - >PUSHA - lda SRC.GLabel.Value+3 - >PUSHA - lda SRC.GLabel.Value+2 - >PUSHA - - >LDYA L.MSG.GSYMBOL - >SYSCALL PrintF.YA - - bcs .9 - -.4 jsr SYM.GetByteGBlock - beq .5 End Locals...proceed next Global - - pha - jsr SYM.GetByteGBlock - >PUSHA - pla - >PUSHA - >LDYA L.MSG.LSYMBOL - >SYSCALL PrintF.YA - bcc .4 - rts - -.5 lda #13 - >SYSCALL PutChar.A - - ldy #SYM.DumpCount - lda (pData),y - dec - bne .6 - - lda #20 -.6 sta (pData),y - jmp .1 -.9 rts +*--------------------------------------- +SYM.AddPending *--------------------------------------- SYM.AddPrivate clc @@ -143,206 +68,7 @@ SYM.SearchLocal clc rts *--------------------------------------- -SYM.SearchGlobal >STYA ZPSymbolPtr - - jsr SYM.ResetGBlockPtr - -.1 ldy #SYM.iCurGBlock - lda (pData),y - sta SYM.iCurGBlock.Save - ldy #SYM.pCurGBlock - lda (pData),y - sta SYM.pCurGBlock.Save - - jsr SYM.GetByteGBlock Get Flags - beq .9 - sta SRC.FLabel.Flags - - ldx #0 - -.2 jsr SYM.GetByteGBlock - sta SRC.FLabel.Value,x - inx - cpx #5 - bne .2 Get Value+Len - - ldx #0 -.3 jsr SYM.GetByteGBlock - sta SRC.FLabel.Name,x - inx - cpx SRC.FLabel.Len - bne .3 - - txa - ldy #5 - cmp (ZPSymbolPtr),y - bne .5 - - ldx #0 -.4 inx - iny - lda SRC.FLabel.Name-1,x - cmp (ZPSymbolPtr),y - bne .5 - cpx SRC.FLabel.Len - bne .4 - - lda SYM.pCurGBlock.Save - ldy #SYM.pCurGBlock - sta (pData),y - - lda SYM.iCurGBlock.Save - ldy #SYM.iCurGBlock - sta (pData),y - jmp SYM.GetGBlockA - -.5 jsr SYM.GetByteGBlock skip Locals - beq .1 - jsr SYM.GetByteGBlock - bra .5 - -.9 sec - rts -*--------------------------------------- -SYM.AddGToGBlockYA >STYA ZPSymbolPtr - - jsr SYM.SetGBlockPtr - - ldy #SYM.pLastGBlock 1st Gblock to add? - lda (pData),y - ldy #SYM.iLastGBlock - ora (pData),y - beq .10 yes, skip closing previous one - - lda #0 Close Pending Global/Local - jsr SYM.AddByteGBlock - bcs .9 - -.10 ldy #0 - -.1 lda (ZPSymbolPtr),y - jsr SYM.AddByteGBlock - bcs .9 - iny - cpy #5 - bne .1 moved Flags & Value to GBlock.... - - lda (ZPSymbolPtr),y Get Len - tax - jsr SYM.AddByteGBlock - bcs .9 - -.2 iny - lda (ZPSymbolPtr),y - jsr SYM.AddByteGBlock - bcs .9 - dex - bne .2 - - clc -.9 rts -*--------------------------------------- -SYM.AddLToGBlock jsr SYM.SetGBlockPtr - - lda SRC.LLabel.ID - jsr SYM.AddByteGBlock - bcs .9 - - lda SRC.LLabel.Offset - jmp SYM.AddByteGBlock -.9 rts -*--------------------------------------- -SYM.GetByteGBlock ldy #SYM.iCurGBlock - lda (pData),y - tay - lda (ZPBlockPtr),y - pha - - ldy #SYM.iCurGBlock - lda (pData),y - inc - sta (pData),y - bne .1 - - ldy #SYM.pCurGBlock - lda (pData),y - inc - sta (pData),y - jsr SYM.GetGBlockA - -.1 pla - clc - rts -*--------------------------------------- -SYM.ResetGBlockPtr lda #0 - ldy #SYM.pCurGBlock - sta (pData),y - ldy #SYM.iCurGBlock - sta (pData),y - bra SYM.GetGBlockA -*--------------------------------------- -SYM.SetGBlockPtr ldy #SYM.pLastGBlock - lda (pData),y - -SYM.GetGBlockA clc - adc #SYM.hGBlocks-1 - tay - lda (pData),y - phx - >SYSCALL GetMemPtr.A - >STYA ZPBlockPtr - plx - rts -*--------------------------------------- -SYM.AddByteGBlock phx - phy - pha - ldy #SYM.iLastGBlock - lda (pData),y - tay - - pla - sta (ZPBlockPtr),y - - tya - inc - beq SYM.NewGBlock2 - - ldy #SYM.iLastGBlock - sta (pData),y - ply - plx - clc - rts -*--------------------------------------- -SYM.NewGBlock phx - phy -SYM.NewGBlock2 >LDYAI 256 - >SYSCALL GetMem0.YA - - bcs .9 - >STYA ZPBlockPtr - - ldy #SYM.pLastGBlock - lda (pData),y - inc - sta (pData),y - - clc - adc #SYM.hGBlocks-1 - tay - - txa - sta (pData),y - - lda #0 - ldy #SYM.iLastGBlock - sta (pData),y - - clc - -.9 ply - plx +SYM.SearchGlobal clc rts *--------------------------------------- MAN diff --git a/BIN/ASM.S.txt b/BIN/ASM.S.txt index 962f8899..c9e6b591 100644 --- a/BIN/ASM.S.txt +++ b/BIN/ASM.S.txt @@ -21,18 +21,18 @@ ZPAMPtr .EQ ZPBIN+16 ZPRPtr .EQ ZPBIN+18 ZPOPtr .EQ ZPBIN+20 *--------------------------------------- +SYM.LEN .EQ 0 +SYM.F .EQ 1 +SYM.F.RESOLVED .EQ %1000000 +SYM.F.RW .EQ %0100000 +SYM.V .EQ 2 +*--------------------------------------- ASM.T.AM .EQ 0 ASM.T.R .EQ 2 ASM.T.O .EQ 4 *--------------------------------------- SRC.DO.MAXDEPTH .EQ 8 SRC.IN.MAXDEPTH .EQ 7 -SRC.GLABEL.MAXLEN .EQ 32 -*--------------------------------------- -SYM.GBLOCK.MAX .EQ 96 96*256=24k -SYM.SBLOCK.MAX .EQ 16 16*256=4k -SYM.PBLOCK.MAX .EQ 32 32*256=8k -SYM.MBLOCK.MAX .EQ 32 32*256=8k *--------------------------------------- ERR.INV.ARGS .EQ $80 ERR.SRC.INV.TYPE .EQ $90 @@ -88,10 +88,6 @@ L.MSG.SRC.FILE .DA MSG.SRC.FILE L.MSG.OBJ.FILE .DA MSG.OBJ.FILE L.MSG.T.FILE .DA MSG.T.FILE L.SRC.AM.StrBuf .DA SRC.AM.StrBuf -L.SRC.GLabel.Flags .DA SRC.GLabel.Flags -L.SRC.GLabel.Len .DA SRC.GLabel.Len -L.SRC.ELabel.Flags .DA SRC.ELabel.Flags -L.SRC.ELabel.Len .DA SRC.ELabel.Len L.ASM.6502 .DA ASM.6502 L.ASM.T.FILENAME .DA ASM.T.FILENAME L.FIO.Stat .DA FIO.Stat @@ -397,9 +393,6 @@ FIO.Stat .BS S.STAT EXP.Operator .BS 1 EXP.Modifier .BS 1 -SYM.iCurGBlock.Save .BS 1 -SYM.pCurGBlock.Save .BS 1 - SRC.LINENUM .BS 2 SRC.LinePtrSave .BS 2 SRC.Directive.ID .BS 1 @@ -410,21 +403,6 @@ SRC.ARG .BS 4 SRC.AM.ID .BS 1 SRC.AM.StrBuf .BS 32 SRC.AM.tmpBuf .BS 32 -SRC.GLabel.New .BS 1 -SRC.GLabel.Flags .BS 1 -SRC.GLabel.Value .BS 4 -SRC.GLabel.Len .BS 1 -SRC.GLabel.Name .BS SRC.GLABEL.MAXLEN -SRC.LLabel.ID .BS 1 -SRC.LLabel.Offset .BS 1 -SRC.ELabel.Flags .BS 1 -SRC.ELabel.Value .BS 4 -SRC.ELabel.Len .BS 1 -SRC.ELabel.Name .BS SRC.GLABEL.MAXLEN -SRC.FLabel.Flags .BS 1 -SRC.FLabel.Value .BS 4 -SRC.FLabel.Len .BS 1 -SRC.FLabel.Name .BS SRC.GLABEL.MAXLEN *-------------------------------------- .DUMMY .OR 0 @@ -446,29 +424,6 @@ DST.hFILETYPE .BS 1 ASM.T.hMem .BS 1 -SYM.hCurSBlock .BS 1 -SYM.iCurSBlock .BS 1 -SYM.LastSBlock .BS 1 -SYM.hSBlocks .BS SYM.SBLOCK.MAX - -SYM.pCurGBlock .BS 1 -SYM.iCurGBlock .BS 1 -SYM.pLastGBlock .BS 1 -SYM.iLastGBlock .BS 1 -SYM.hGBlocks .BS SYM.GBLOCK.MAX - -SYM.hCurPBlock .BS 1 -SYM.iCurPBlock .BS 1 -SYM.LastPBlock .BS 1 -SYM.hPBlocks .BS SYM.PBLOCK.MAX - -SYM.hCurMBlock .BS 1 -SYM.iCurMBlock .BS 1 -SYM.LastMBlock .BS 1 -SYM.hMBlocks .BS SYM.MBLOCK.MAX - -SYM.DumpCount .BS 1 - DIR.Counter .BS 2 DIR.Byte .BS 1 @@ -487,6 +442,9 @@ ASM.PC.GLABEL .BS 4 ASM.LOCAL.OFFSET .BS 1 ASM.LOCAL.INVALID .BS 1 ASM.SYM.ID .BS 2 + +SYM.hGlobals .BS 1 +SYM.Value .BS 6 DS.END .ED *--------------------------------------- .DO DS.END-DS.START>$FF diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index b01bae39..aa43d12d 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -213,14 +213,14 @@ SYS.GetMemByID.A .EQ $E6 SYS.GetMem.YA .EQ $E8 SYS.GetMem0.YA .EQ $EA SYS.NewStr.YA .EQ $EC -* .EQ $EE +SYS.SListAdd .EQ $EE -* .EQ $F0 -* .EQ $F2 -* .EQ $F4 -* .EQ $F6 +SYS.SListLookup .EQ $F0 +SYS.SListGetByID .EQ $F2 +SYS.SListUpdateByID .EQ $F4 +SYS.SListNew .EQ $F6 -* .EQ $F8 +SYS.SListFree.A .EQ $F8 SYS.LoadStkObj .EQ $FA SYS.NewStkObj.YA .EQ $FC SYS.FreeStkObj.A .EQ $FE @@ -245,7 +245,6 @@ K.E.FTB .EQ $CC File Too Big Error * MEM STRUCT *-------------------------------------- S.MEM.F .EQ 0 -S.MEM.F.AUX .EQ %10000000 Request Stock Object in AUX mem S.MEM.F.INUSE .EQ %10000000 (Internal Flag) S.MEM.F.INIT0 .EQ %01000000 Fill with "0" S.MEM.F.CODE .EQ %00100000 diff --git a/SYS/KERNEL.S.CTRL.txt b/SYS/KERNEL.S.CTRL.txt index a5b9d2a3..8bc8c301 100644 --- a/SYS/KERNEL.S.CTRL.txt +++ b/SYS/KERNEL.S.CTRL.txt @@ -6,7 +6,7 @@ AUTO 4,1 .LIST ON *-------------------------------------- A2osX.MAIN.S .EQ A2osX.AUX-A2osX.MAIN -A2osX.AUX.S .EQ A2osX.GP-A2osX.AUX +A2osX.AUX.S .EQ A2osX.GP-A2osX.AUX A2osX.GP.S .EQ A2osX.D1-A2osX.GP A2osX.D1.S .EQ A2osX.D2-A2osX.D1 A2osX.D2.S .EQ A2osX.E0-A2osX.D2 diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 356cee5d..64588c7f 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -143,12 +143,12 @@ K.SYSCALL.JMP .DA 0 $00 .DA K.GetMem.YA .DA K.GetMem0.YA .DA K.NewStr.YA - .DA K.SListNew -*-------------------------------------- - .DA K.SListGetByID $F0 .DA K.SListAdd - .DA K.SListLookup - .DA K.SListUpdate +*-------------------------------------- + .DA K.SListLookup $F0 + .DA K.SListGetByID + .DA K.SListUpdateByID + .DA K.SListNew .DA K.SListFree.A .DA K.LoadStkObj .DA K.NewStkObj.YA diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index 93e26180..509debc3 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -489,269 +489,71 @@ K.NewStr.YA >STYA .1+1 clc .9 rts */-------------------------------------- -* # SListNew -* ## In: -* ## Out: -* A=hMem -*\-------------------------------------- -K.SListNew >LDYAI 160 40k Max before out of memory!!! - jsr K.GetMem0.YA - bcs .9 - >STYA ZPSListIndex - stx .8+1 - - >LDYAI 256 - jsr K.GetMem0.YA - bcs .9 - txa - sta (ZPSListIndex) - -.8 lda #$ff SELF MODIFIED - -.9 rts -*/-------------------------------------- -* # SListGetByID +* # SListAdd * ## In: * PUSHB = hSList * PUSHW = Key Ptr * PUSHW = Data Ptr -* PUSHW = KeyID * ## Out: +* A = Key Length *\-------------------------------------- -K.SListGetByID >PULLW MEM.IndexOfs - - jsr MEM.GetSListParams - - ldy MEM.IndexOfs - lda (ZPSListIndex),y - beq .9 - - jsr K.GetMemPtr.A - >STYA ZPSListBlock - - clc - rts - -.9 sec - rts -*/-------------------------------------- -* # SListAdd -* ## In: -* PUSHB = hSList -* PUSHW = Key -* PUSHW = Data Ptr -* ## Out: -* A=hSList -*\-------------------------------------- -K.SListAdd jsr K.SListLookup.I - bcc .9 Lookup succeeded...DUP - - sta SETWRITEAUX - - ldy #0 - -.1 jsr MEM.GetKeyCharY - iny - bcc .1 - - tya - - jsr MEM.AddBlockByte - bcs .99 - - ldy #0 - -.2 jsr MEM.GetKeyCharY - bcs .3 - - jsr MEM.AddBlockByte - bcs .99 - iny - bra .2 - -.3 sta CLRREADAUX - lda (ZPSListData) - sta SETREADAUX - tax - - jsr MEM.AddBlockByte - bcs .99 - - ldy #1 - -.4 sta CLRREADAUX - lda (ZPSListData),y - sta SETREADAUX - - jsr MEM.AddBlockByte - bcs .99 - - iny - dex - bne .4 - - clc - .HS B0 BCS - -.9 sec - -.99 sta CLRWRITEAUX - sta CLRREADAUX - rts +K.SListAdd */-------------------------------------- * # SListLookup * ## In: * PUSHB = hSList -* PUSHW = Key +* PUSHW = Key Ptr * PUSHW = Data Ptr * ## Out: -* Data Ptr Updated +* A = Key Length +* X,Y = KeyID *\-------------------------------------- -K.SListLookup jsr K.SListLookup.I - bcs .9 - - jsr MEM.GetBlockByte - tax - sta (ZPSListData) - - ldy #0 - -.1 jsr MEM.GetBlockByte - iny - sta (ZPSListData),y - dex - bne .1 - - sta CLRREADAUX - clc -.9 rts -*-------------------------------------- -K.SListLookup.I jsr MEM.GetSListParams - - lda (ZPSListIndex) - beq .9 - - jsr K.GetMemPtr.A - >STYA ZPSListBlock - stz MEM.BlockOfs - - jsr MEM.GetBlockByte - beq .9 - - tax - -.1 ldy #0 - -.2 jsr MEM.GetKeyCharY - bcs .4 - iny - sta .3+1 - - jsr MEM.GetBlockByte -.3 cmp #$ff SELF MODIFIED - bne .4 - - dex - bne .2 - - clc - rts - -.4 jsr MEM.GetBlockByte skip remaining key chars - dex - bne .4 - - jsr MEM.GetBlockByte get Data Len - tax - -.5 jsr MEM.GetBlockByte skip data bytes - dex - bne .5 - - tax - bne .1 - -.9 sec - rts +K.SListLookup */-------------------------------------- -* # SListUpdate +* # SListGetByID * ## In: * PUSHB = hSList -* PUSHW = Key +* PUSHW = KeyID +* PUSHW = Data Ptr (KEY+DATA) +* ## Out: +* Y,A = Next ID +*\-------------------------------------- +K.SListGetByID +*/-------------------------------------- +* # SListUpdateByID +* ## In: +* PUSHB = hSList +* PUSHW = KeyID * PUSHW = Data Ptr * ## Out: +* A = Key Length +* X,Y = KeyID *\-------------------------------------- -K.SListUpdate jsr K.SListLookup.I - bcs .9 - - ldy #0 - - sta CLRREADAUX - lda (ZPSListData) - sta SETREADAUX - tax - - jsr MEM.SetBlockByte - bcs .99 - - ldy #1 - -.4 sta CLRREADAUX - lda (ZPSListData),y - sta SETREADAUX - - jsr MEM.SetBlockByte - bcs .99 - - iny - dex - bne .4 - - clc - .HS B0 BCS - -.9 sec - -.99 sta CLRWRITEAUX - sta CLRREADAUX - rts +K.SListUpdateByID +*-------------------------------------- + >PULLW ZPSListData + >PULLW ZPSListKey + >PULLA +*/-------------------------------------- +* # SListNew +* ## In: +* ## Out: +* A=hSList +*\-------------------------------------- +K.SListNew */-------------------------------------- * # SListFree * ## In: * A=hSList * ## Out: *\-------------------------------------- -K.SListFree.A sta .8 - - sta SETREADAUX - sta SETWRITEAUX - - jsr K.GetMemPtr.A - >STYA .1+1 - - ldx #0 - -.1 lda $ffff,x SELF MODIFIED - beq .8 - jsr K.FreeMem.A - inx - bra .1 - -.8 lda #$ff SELF MODIFIED - jsr K.FreeMem.A - sta CLRWRITEAUX - sta CLRREADAUX - rts +K.SListFree.A *-------------------------------------- -MEM.GetSListParams - >PULLW ZPSListData - >PULLW ZPSListKey - >PULLA - - sta SETREADAUX - - jsr K.GetMemPtr.A - >STYA ZPSListIndex +MEM.SLIST.JMP sta SETREADAUX + sta SETWRITEAUX + jsr X.SLIST + sta CLRREADAUX + sta CLRWRITEAUX rts *-------------------------------------- MEM.GetKeyCharY sta CLRREADAUX @@ -786,82 +588,17 @@ MEM.GetKeyCharY sta CLRREADAUX .9 sec rts *-------------------------------------- -MEM.GetBlockByte - phy - ldy MEM.BlockOfs - lda (ZPSListBlock),y - inc MEM.BlockOfs - bne .8 - - pha - ldy MEM.IndexOfs - lda (ZPSListIndex),y - beq .9 - - jsr K.GetMemPtr.A - >STYA ZPSListBlock -* stz MEM.BlockOfs - - pla - -.8 ply - clc - rts - -.9 pla - ply - sec +MEM.GetDataByteY + sta CLRREADAUX + lda (ZPSListData),y + sta SETREADAUX rts *-------------------------------------- -MEM.AddBlockByte - phy - ldy MEM.BlockOfs - sta (ZPSListBlock),y - inc MEM.BlockOfs - bne .8 - - inc MEM.IndexOfs - - >LDYAI 256 - jsr K.GetMem0.YA - bcs .9 - >STYA ZPSListBlock - txa - ldy MEM.IndexOfs - sta (ZPSListIndex),y - -* stz MEM.BlockOfs - -.8 ply - clc +MEM.SetDataByteY + sta CLRWRITEAUX + sta (ZPSListData),y + sta SETWRITEAUX rts - -.9 ply - sec - rts -*-------------------------------------- -MEM.SetBlockByte - phy - ldy MEM.BlockOfs - sta (ZPSListBlock),y - inc MEM.BlockOfs - bne .8 - - inc MEM.IndexOfs - - ldy MEM.IndexOfs - lda (ZPSListIndex),y - - jsr K.GetMemPtr.A - >STYA ZPSListBlock -* stz MEM.BlockOfs - -.8 ply - clc - rts -*-------------------------------------- -MEM.IndexOfs .BS 1 -MEM.BlockOfs .BS 1 */-------------------------------------- * # LoadStkObj * Load a file in AUX memory (Stock Objects) diff --git a/SYS/KERNEL.S.SLIST.txt b/SYS/KERNEL.S.SLIST.txt new file mode 100644 index 00000000..56dda4a6 --- /dev/null +++ b/SYS/KERNEL.S.SLIST.txt @@ -0,0 +1,329 @@ +NEW +PREFIX /A2OSX.BUILD +AUTO 4,1 +*-------------------------------------- +X.SLIST jmp (.1-SLIST.New,x) +.1 .DA SLIST.Add + .DA SLIST.Lookup + .DA SLIST.GetByID + .DA SLIST.UpdateByID + .DA SLIST.New + .DA SLIST.Free.A +*-------------------------------------- +SLIST.New >LDYAI 160 40k Max before out of memory!!! + jsr K.GetMem0.YA + bcs .9 + >STYA ZPSListIndex + stx .8+1 + + >LDYAI 256 + jsr K.GetMem0.YA + bcs .9 + txa + sta (ZPSListIndex) + +.8 lda #$ff SELF MODIFIED + +.9 rts +*-------------------------------------- +SLIST.Add jsr SLIST.Search + bcc .9 Lookup succeeded...DUP + + ldy #0 + +.1 jsr MEM.GetKeyCharY + iny + bcc .1 + + sty .8+1 + tya + + jsr SLIST.AddBlockByte + bcs .9 + + ldy #0 + +.2 jsr MEM.GetKeyCharY + bcs .3 + + jsr SLIST.AddBlockByte + bcs .9 + iny + bra .2 + +.3 jsr MEM.GetDataByteY + tax + + jsr SLIST.AddBlockByte + bcs .9 + + ldy #1 + +.4 jsr MEM.GetDataByteY + + jsr SLIST.AddBlockByte + bcs .9 + + iny + dex + bne .4 + +.8 lda #$ff SELF MODIFIED + ldx SLIST.ID + ldy SLIST.ID+1 + clc +.9 rts +*-------------------------------------- +SLIST.Lookup jsr SLIST.Search + bcs .9 + + sty .8+1 + + ldy #0 + + jsr SLIST.GetBlockByte + tax + jsr MEM.SetDataByteY + +.1 jsr SLIST.GetBlockByte + iny + jsr MEM.SetDataByteY + dex + bne .1 + +.8 lda #$ff SELF MODIFIED + ldx SLIST.ID + ldy SLIST.ID+1 + clc +.9 rts +*-------------------------------------- +SLIST.GetByID jsr SLIST.Select + + ldy #0 + + jsr SLIST.GetBlockByte + beq .9 + + tax + + jsr MEM.SetDataByteY + +.1 iny + jsr SLIST.GetBlockByte + jsr MEM.SetDataByteY + dex + bne .1 + + jsr MEM.SetDataByteY + tax + jsr MEM.SetDataByteY + +.2 iny + jsr SLIST.GetBlockByte + jsr MEM.SetDataByteY + dex + bne .2 + + >LDYA ZPSListKey + + clc + rts + +.9 sec + rts +*-------------------------------------- +SLIST.UpdateByID + jsr SLIST.Select + + ldy #0 + + jsr MEM.GetDataByteY + tax + + jsr SLIST.SetBlockByte + bcs .9 + +.4 iny + jsr MEM.GetDataByteY + + jsr SLIST.SetBlockByte + bcs .9 + + dex + bne .4 + +.8 lda #$ff SELF MODIFIED + + clc +.9 rts +*-------------------------------------- +SLIST.Free.A sta .8 + + jsr K.GetMemPtr.A + >STYA .1+1 + + ldx #0 + +.1 lda $ffff,x SELF MODIFIED + beq .8 + jsr K.FreeMem.A + inx + bra .1 + +.8 lda #$ff SELF MODIFIED + jmp K.FreeMem.A +*-------------------------------------- +SLIST.Select jsr K.GetMemPtr.A + >STYA ZPSListIndex + + ldy ZPSListKey + lda (ZPSListIndex),y + + sta SLIST.IndexOfs + + jsr K.GetMemPtr.A + >STYA ZPSListBlock + + lda ZPSListKey+1 + sta SLIST.BlockOfs + rts +*-------------------------------------- +SLIST.Search jsr K.GetMemPtr.A + >STYA ZPSListIndex + + stz SLIST.IndexOfs + + lda (ZPSListIndex) + + jsr K.GetMemPtr.A + >STYA ZPSListBlock + + stz SLIST.BlockOfs + +.1 lda SLIST.IndexOfs + sta SLIST.ID + + lda SLIST.BlockOfs + sta SLIST.ID+1 + + jsr SLIST.GetBlockByte + tax + beq .9 + + ldy #0 + +.2 jsr MEM.GetKeyCharY + bcs .4 + iny + sta .3+1 + + jsr SLIST.GetBlockByte +.3 cmp #$ff SELF MODIFIED + bne .4 + + dex + bne .2 + + clc Y = Key Length + rts + +.4 jsr SLIST.GetBlockByte skip remaining key chars + dex + bne .4 + + jsr SLIST.GetBlockByte get Data Len + tax + +.5 jsr SLIST.GetBlockByte skip data bytes + dex + bne .5 + + bra .1 + +.9 sec + rts +*-------------------------------------- +SLIST.GetBlockByte + phy + ldy SLIST.BlockOfs + lda (ZPSListBlock),y + beq .99 + + inc SLIST.BlockOfs + bne .8 + + pha + inc SLIST.IndexOfs + ldy SLIST.IndexOfs + lda (ZPSListIndex),y + + jsr K.GetMemPtr.A + >STYA ZPSListBlock +* stz SLIST.BlockOfs + + pla + +.8 ply + clc + rts + +.9 pla +.99 ply + sec + rts +*-------------------------------------- +SLIST.AddBlockByte + phy + ldy SLIST.BlockOfs + sta (ZPSListBlock),y + inc SLIST.BlockOfs + bne .8 + + inc SLIST.IndexOfs + + >LDYAI 256 + jsr K.GetMem0.YA + bcs .9 + >STYA ZPSListBlock + txa + ldy SLIST.IndexOfs + sta (ZPSListIndex),y + +* stz SLIST.BlockOfs + +.8 ply + clc + rts + +.9 ply + sec + rts +*-------------------------------------- +SLIST.SetBlockByte + phy + ldy SLIST.BlockOfs + sta (ZPSListBlock),y + inc SLIST.BlockOfs + bne .8 + + inc SLIST.IndexOfs + + ldy SLIST.IndexOfs + lda (ZPSListIndex),y + + jsr K.GetMemPtr.A + >STYA ZPSListBlock +* stz SLIST.BlockOfs + +.8 ply + clc + rts +*-------------------------------------- +SLIST.IndexOfs .BS 1 +SLIST.BlockOfs .BS 1 +SLIST.ID .BS 2 +*-------------------------------------- +MAN +SAVE /A2OSX.SRC/SYS/KERNEL.S.SLIST +LOAD /A2OSX.SRC/SYS/KERNEL.S +ASM diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index c3d1a2e0..bd9473e8 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -22,6 +22,7 @@ A2osX.MAIN .PH $1100 .EP A2osX.AUX .PH $0C00 .INB /A2OSX.SRC/SYS/KERNEL.S.OSD + .INB /A2OSX.SRC/SYS/KERNEL.S.SLIST .EP A2osX.GP .PH $BD00 .INB /A2OSX.SRC/SYS/KERNEL.S.GP