From 94d9a4393e7fdca4bf1316a0f48737eda442b390 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Fri, 27 Oct 2017 16:56:46 +0200 Subject: [PATCH] Kernel 0.9.1 : Math API --- .Floppies/A2OSX.BOOT.po | Bin 143360 -> 143360 bytes .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes A2osX.S.txt | 4 +- BIN/ASM.S.FIO.txt | 2 +- BIN/CAT.S.txt | 2 +- BIN/EDIT.S.txt | 4 +- DRV/LANCEGS.DRV.S.txt | 2 +- INC/A2osX.I.txt | 54 +++++++++----- INC/KERNEL.I.txt | 6 +- INC/NET.I.txt | 2 +- INC/PRODOS.I.txt | 64 ++++++++-------- LIB/LIBMATH.S.txt | 60 --------------- SBIN/KCONFIG.S.txt | 4 +- SBIN/TCPIPD.S.CFG.txt | 2 +- SYS/KERNEL.S.BIN.txt | 114 ++++++++++++++-------------- SYS/KERNEL.S.CORE.txt | 12 ++- SYS/KERNEL.S.ENV.txt | 155 +++++++++++++++++++-------------------- SYS/KERNEL.S.FIO.txt | 73 +++++++++--------- SYS/KERNEL.S.GP.txt | 36 +++++---- SYS/KERNEL.S.INIT.txt | 32 ++++---- SYS/KERNEL.S.IRQ.txt | 46 ++++++------ SYS/KERNEL.S.JMP.txt | 75 +++++++++++++++---- SYS/KERNEL.S.MATH.txt | 58 +++++++++------ SYS/KERNEL.S.MEM.txt | 8 +- SYS/KERNEL.S.PS.txt | 42 +++++------ SYS/KERNEL.S.STAT.txt | 28 +++---- SYS/KERNEL.S.STDIO.txt | 12 ++- SYS/KERNEL.S.STDLIB.txt | 4 +- SYS/KERNEL.S.STRING.txt | 6 +- SYS/KERNEL.S.TIME.txt | 6 +- TEST.S.txt | 27 ++++--- 32 files changed, 477 insertions(+), 463 deletions(-) delete mode 100644 LIB/LIBMATH.S.txt diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index 0e87dae3eae36048235a56a9ae59c949733dc6f2..64fe8789374afe190e8a0a39e52ce1475b1391f4 100644 GIT binary patch delta 11562 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 X*qS?%Z%&vsI#3$^rGW+;=FDI>-h zPIc_2+|zv0*BC=*up%vtOXdgMvayGkFL9*gARys%Ei)_TTl);iBfG!*`~PQPKh|Dr z@3q%jd+oIs7&_&KPB|Ybm9B}74Pvk~+MhI{sY?_kLh_~RJBJ}FNrR?7&swpX8ubZW zM&hk>B|iyj~WWH?-XXtd!5Z#khwkzhGp?A|#QDy?beD-pUacWOvi{(C-RKB0vhKko(6|bQKc5Ur-LB1<_ zUlVq_`9P02@m%d0KjwpbGN)V@tn*(sG#%b0J$%F4I^Pr^n3RIm*CZ|rIAI%}Mig^+ z!xXfDY21)1`PACW3~ZP#R|u`x6+fV0lJ7kvf1?Yui!5!7<6bRFIrhW7TfBU}=~Ske zvKkw|>12vGrA!L#F|BT_Sk+jR>vkWwztL1F!6zFr^#KKqR_2{ec-?~D(%uL9e(j69 za##QKZ%qU2fZ}T3)$gv(a#gzk_vwYkMV#cg+x>DDwO{!orW|W=YolIgqa3CijYV=* zvOIH_NqO=>z{v`~lSMao_c&0?fsm6Gq0EfJnL#Nh(|p02P8^_69YTM_Wz18BZ?ltU zAtjUdz$6sP6hDv+W&HywP|aF>p$ulj<~vauQ?)rY@RAd&&sqLHG=84>bn^_l>+56khmIq;4^}jC5{r^) zefY~@NjL9ndO=dbNXj{hnbHFXeDUAVc_x3$qv#UTyd@45F@0O60FORf6a7=V`M3jg zJ14VJIG$OsRXri=a#5xpUviSe1Z#3~apaM$OT9BLnhM)tzEfMTf-c|MmViJO&POJO zg!brc542;T)Z2>MYaeXK@yC1~orh)w0B06IC{+5)N)_(?I;Ojw?&5U9DgwhW?YMVRs_;?5BZn4v@SiIvLufe4q{3JV_5V)ne z!_?eSDGYqr;piMV)!{fl@KJ~3oL;53NE(|vbZyF?aBT;#CdC8`#Yv0yGW3Yvr#ezU>Hx~>=8iVyP4N^nVLL)#dx<-;wYm$2(EX0d<*o>< zyU^B11+-3e+<<1eOVVaI1qL3FJB?v>tSEimiIr#hy(X&@r#Sgio84KO7U*Q}Le4Dpq*SXMA!+sM8eY#L?nx zVJcgwb4#7m6y&spIk&v&GzB{kx!qi;+v>KsRbcrlCsBsZ28`T13+g;{)OqL)=b>8X zA)C`PtMw>Z*Gh}44=rT*jL#oE3gl!MFZ`U(wADKOZB9q3?G0z`QK!l7tl*uVSw|?6 zU_xrtgt?Z_tRD}#MB*6nc_$7!M@+!f$^`6Oz68$Dl#3OUFBTQmpd%CsOG}EuU`~`w zji1)TPqu~q6KjSTSKum2JdFT63VR?bg5fMCXiww{FCp{Wpmx)QcAHH2Hn`ms)@}=F z7eW5*w$OG03TU@^392pr?WVx?*8y!yK)XrV&IdK!>~-_LHsWy|a_eBG-s;ZOgXb;X z6DyYqX8P!Un-^o-Ge_ek7%A1GN+aC@)J6m?37*|finde<`-)2= zj-s3IAa`~7&BNFaXPxJ07&S|+(&R_~*A-JG!qaX{APx)(dDsQ_|> z@ib=5zGsLTbnbHy$7U~6GwDX1SHZ=ii~q&!HHJ@QE^NI}@BC8yUOYdmBdX)0^Rf<# zI?dD>@5tagcb@<6^Az<)M@Pp!fGO$Dx*Xc0=}GC1@4lmFS`Rq^FbkDzq4C?7DwB?K2&lZf_z=$-f{7G4qB;7T zDT@qn;O+{;CrU3FB>1zgGr)rZ|L_g3#cM8APQh<)@H1UCp{mVt zW2ntXaP-(ZPqxyIpt@k8F+?!M%G;E*MRFimAdyyx4I-_8R(qvS>)X5xA}(Cil^gI4 zneLE}knATYeQf@MOLxX!FofGCmNp$->MJN`m7Acv(-tGoF+lV)(0|e)8Tj_3l{%vo z9P&C6<_L=UXM#v4P&g1IC=5qkUR9w3J_2y$qT!y=+eA^iRt(88dyE|Qj%m-zUFje^ z!U@orXaTktSZa}iEZ}B%ri)CZIztOC#n4_27l$NMmkIYvv5HdZO;;`vp=OCLK!)iq z&WjXMQUpO!PbElQKAfEN6;N2+bt>TkXw|FDalw(jhXY;P454;96H`7Xh!R@tVTBV-NB~z#-QBm0*-@Td zx?3pHB`6(92X+Y+j|nw{x*E667Sg0M(M`BaC{jvHlBOb~yT~}m!F6MG^V0dY-9qvA zLT;-75#@11Qv!BnLUnw9(}2G)tV=keHv}Hn{U|i<@=lPu!s>n{==f)03=$VcS%Z!4 zvcWnC&87Ci1lr~O6&@6r{O9JObf)sTsYuQ=JvU?G2i^P~HU3BZFfbFK!4I4c{8e93W-tAEQLlLM9VBYv zE?6%!b4^PMH9fEaxei#^tvAZ85}7>F^J7#Tk%L}MIXxA+9#e5o#lt2{+7ket4Ja#OW$~E1vHqBNe^iXb$#*(~k%?mG`#TgH6x%g87Y#;PseeM{xT?&GBdrpFO|FgGB`VbTeGWa_X!c-v40iQbrA zmPVHKwx_+kPqJTmLtlQEDZKA!Yk=a*JAA?_4pWhYkuU0_N6VWWl*tTOWhF2h7dH?pp!mXhot3!(ZLq7cw ziBiXX`&}~p^%c;d6_dIt-*Fu~t}u%#=awq^>wNkZ1_0yvR}AV_ABPuSbHxzU>JN?l zD+alOkigjPn<~9c(cikv;RRD0dAw8k0z#`GT2%plD>O{OX{UUX|zzRSvSaR4@_nWRwcS6++PTf(vZN}J;* zEM!F{SfX`)rL6Tno=%u2U#}aQnz`S6m{HPi*F*F;l!K@rNx69P2>JEn5)kXC@cf)b zsiV>^GCgEY?m}bp2u$^F36ob9=(1PjWfu%l%L*ZL@wsFiVgGLlQ$)gy)CD;nO4-AZ zx!55cM>y-)Z&EJD#w9`4Q3*?zty-Bq!oI8oc#w|Eo~(oWKEM90!9dh<%>CgVa;Wb3 zxYHM^(Dr+z=+v=CJIWCBu3w0qJS4bZej~VF#tCjO6`z~4aLMAesms9n$Vavx)@~oS zHdFn}IHvbfi9lGeC_g8Eh*b7G9PF6LvHRaEW^U>SBj<`Nv3NGZ%Jsoxk=Xp%XdGYF zR9H?Pq=iP(Xfhip^lzS=8_A(zk|AQNZ$lZgB)gzsoo6@Vj*h{OW{=wu+kYF%SaCmD zw@76TloxfMY#g_<=AdypWj6w7Y-X#Pip$Dgd3V9G{NdSTr+|%D$FWgOlv*_?FRcsQ zN6iPv_!zFnPir2H`meOVr=3dsIPI&nuC%(T$EG$+eQ)ZuG%EdC)U>GqQ>D>OQ-6(l zGOjc3{rLL${unC0K6YRH;n+QK_ols?Sd(Z?v?bC>bkcz_-#tnDlETvC(&0H(9)wqPELiN80YazbmaD@lisq!bZi9k^$;Pmx|+CjeHc*SfrM1pDed6pBjN zcjlq&smn7UP*UDd>C1hNmZafMT)C{X6oTUjk)2kzYmVBiR&nS%wJZ3mqugur5zQtp zMCoW9d(T2NGv-2+3hq~InTjJ4@ki0%w*&0z{Xs)Ndh!afoMKNbM2k@~ix#0UsX03L z6*giKI)z%;P5`8n)SSQBE;^+XgxBr3zi^_(x}~Ujv{E5lb%(#FF~nN zqc)dik1RoDfR>;`_al}y>ChzTy`e+NDl!}kD|mrM$*OL6(vcQ>Rfn=m3CqT~vRLx2 zv$R2npI^@HG{ct3Ktfr(IM6}{;>x+lhX<0%5=RCC%DE?o2d0*#g2{5US&elm{Qa$a z9DZ1n!mr1HDMw3+FXm#o0p zlFY}DNv5>Uaj5W$6h34b=2a!fRqkEXk(dh14;kAw6-+khsT3nmcbbS>bLJ zMbAoMgLBbz7Tt|PN_VF4i@`n@66WT>cKA$Sx^gO>p3J8c&J$Yy;EDw9H3T8j!~F!{ z9s{92Y(N2UIOR{mDJR+ zleI|$bYzSrMcfcDA(=1`(VF0z06PgHJERSM_>~mi8y`>Ny@-n{Wf$k7(&>0sN+$Q% zqiTNfX2dV#cG=ZBuEefBnz?6H2A|G727N%;ZH{k&&69Fl3NB4yHA|5yO9Cfnq z+=KSR{^o5!nF&MyPS0DnMsL3qj(Y?DRrVVspa_g~%?2?&60~3{=Gr zp}7Ek;~{h!`JIlmrQoVasFE?erx@u7B*FtxWAC zBRbI8md6a;mbQGc)o|t!lov4+cUGWru`ruoF+S)#O$Fz}U*AT3WdDGm)AgI6^EQ;) z{G7ZcqbWawXz%*CX9U}S8_IBad#o&2P%um^`zNgVuW>IIc9!Y4K_`H2{pDGVQBPCR zOS6{_Pef|j*TBYu)w%EgIKG;jhHWZ`P!#HY<&3;HJ~t9Q9kXnSLLt!ll zC?l-#<|ut88En|~JUS-zNc3IJIElI*Y?V0f`?n&M+(x8)@>mipJr=3)XIMOIjbjao(Ml*q;{4jbRt_pRv_#oI= zjkZi4W*_E>7MF?|y)4^b4X=%6cJkj)Y(O(GAm(Wyv;i(`?I^Ng>)+6wK^ig%ekGQ- zjRd1@<(%9Mua_YPKIGBU|4tmsM@xcz-;PwoiQjVB4V`urO@rf?zJ+qejIb~g#%_BH z`J>K;J#V3fCyar`+?}M$e)cwsN)p58CrA);V3&48aAd<)rC5SX=e&tB*eUOz z3CUw|Mg+tK5FF6Sbl5nrvhC7ZnpyojC=xZlG>G!qPu@YvVL&{j?=cb$Y(RIUk1-4b zZ0L5VV|2cw0p)-q8XLyy{6@p?>im!IiaLMsU6e4|N?P7UDIP1CRSy5;G1^Lej*H5k zeO$DXkB^I15^@4<{|~HWBK!Ucqyi4VJb_|8|BwRVyZ9g!ZRT+tl0d@GA;V$8a3(h7 zzK1SJk+UJK2~Cp0eV%t3o$Vg@f zj9PRnp&`=Bex+oTQz2eIqtY_Bp$vk5bQ%4TdcnUaO&Ymd#VOc+pd6b?fvaheu3+7$ zWo16di^Aj5GN&Pv^3h8U^k+DXI~{1+@1BgmJ5biNvGzQ5Y&UaEcf^p`S!dBqqW58+ zv*#>YJgVRD$yt<1j{>lPU!aYn`@6qDOU53xPrg8RjD`4piMGNXp8OI5-e%VFB|1cA z7#~*?fj=`YVZH^KXOPDS$(@`YEQI}_Da>nxEjDKNqtJi z7qnkFx7Muoq>UhnJQ3HbJTV`C$LN?7&)0DGLF{`4bBX*!5|}!IMvV`^xS^NaKJYeL zd+Qm>ts80HGtyioHo=tBFQK1k5KU4y(u9ia++~a|ixOF~HDtgs(08K+L}=Y8I%14J zu%r>MGG9kl1H8^|Q~;6sw9Dua5+ik6V@B=!8I~6ILJz{Q#9$9P3YE1N872`QP3X9F zW}t-*Nh;Xh%cwn(VQFhv+=m_krWzXh(F@3j;MPPOQCrTis|HZDFF`lRY%_4}batB_ zO=t+Yik??^ocrW|>)dakjlXNc;$64#CzM1CclfS@5Zn{&kPsaH@~wujsw#@VIojv5 z@BIWXu+D~yKcO5NochRZ08ZK;{|m0sw@|q3Y!p8Yo(pS#L4CLN{HuN)>-m3<9 zf6xDO^k~mt@_SCdYViNb>0cido&J3HSf~G_d(^oad(k`H~T~-=KTSvRUhA?_09xEK<{?y@gM$lp%1f(8`ffVpRqS=9SD2^=)hsXUX twkurJMv{vDPlB|G?58SG8$Bv|RHU})mi!wsC(>QC_`qzyk#uLs{{ai%;-vrp diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 76cd5bba8a28dc2cfcdeab4e3368895674ce6577..cd0a0a959b1cde4ab8704c07eb4e117a0b5b6668 100644 GIT binary patch delta 19064 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 Nz18J&(B-@H{{TK&DGmSt delta 19505 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 diff --git a/A2osX.S.txt b/A2osX.S.txt index 753a1320..8ec27021 100644 --- a/A2osX.S.txt +++ b/A2osX.S.txt @@ -62,8 +62,8 @@ A2osX.Init1 ldx #$FF init 6502 stack to highest jsr PrintFAX lda MACHID - and #MACHID.RAM - cmp #MACHID.RAM.128 + and #MACHID.M + cmp #MACHID.M.128 beq .1 >LDAXI MSG.SYSMEM.KO diff --git a/BIN/ASM.S.FIO.txt b/BIN/ASM.S.FIO.txt index 02c3c25f..535c6f3e 100644 --- a/BIN/ASM.S.FIO.txt +++ b/BIN/ASM.S.FIO.txt @@ -261,7 +261,7 @@ FIO.LOAD.ASM.T ldy #ASM.T.hMem >SYSCALL PrintF.YA >PUSHWI 0 Aux type - >PUSHBI 6 S.FILEINFO.TYPE.BIN + >PUSHBI 6 S.FI.T.BIN >PUSHBI SYS.FOpen.R >PUSHW L.ASM.T.FILENAME >SYSCALL LoadFile diff --git a/BIN/CAT.S.txt b/BIN/CAT.S.txt index 5f7c866e..a11c8c0f 100644 --- a/BIN/CAT.S.txt +++ b/BIN/CAT.S.txt @@ -253,7 +253,7 @@ CS.RUN.OPEN >SYSCALL RealPath.YA pha >PUSHWI 0 Aux type - >PUSHBI 4 S.FILEINFO.TYPE.TXT + >PUSHBI 4 S.FI.T.TXT >PUSHBI SYS.FOpen.R+SYS.FOpen.T pla diff --git a/BIN/EDIT.S.txt b/BIN/EDIT.S.txt index 190da95b..b9a0c7fc 100644 --- a/BIN/EDIT.S.txt +++ b/BIN/EDIT.S.txt @@ -341,7 +341,7 @@ CharIn.Esc ldy #bEscMode rts *-------------------------------------- LoadFile >PUSHWI 0 Aux type - >PUSHBI 4 S.FILEINFO.TYPE.TXT + >PUSHBI 4 S.FI.T.TXT >PUSHBI SYS.FOpen.R ldy #hFileName lda (pData),y @@ -413,7 +413,7 @@ LoadFile >PUSHWI 0 Aux type .9 rts *-------------------------------------- SaveFile >PUSHWI 0 Aux type - >PUSHBI 4 S.FILEINFO.TYPE.TXT + >PUSHBI 4 S.FI.T.TXT >PUSHBI SYS.FOpen.X+SYS.FOpen.W >LDA.G hFileName >SYSCALL GetMemPtr.A diff --git a/DRV/LANCEGS.DRV.S.txt b/DRV/LANCEGS.DRV.S.txt index 607458fe..e9866841 100644 --- a/DRV/LANCEGS.DRV.S.txt +++ b/DRV/LANCEGS.DRV.S.txt @@ -16,7 +16,7 @@ AUTO 6 .INB /A2OSX.BUILD/INC/LIBTCPIP.I *-------------------------------------- ZPTmpPTR .EQ ZPDRV -Size .EQ ZPDRV+2 +Size .EQ ZPDRV+2 Counter .EQ ZPDRV+4 *-------------------------------------- * File Header (16 Bytes) diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 3c9b3d24..ba93fc0d 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -44,6 +44,8 @@ A2osX.CPUSPEED .EQ $BEE6 WORD, (->255.99 Mhz) A2osX.Z80SLOT .EQ $BEE8 A2osX.Z80SPEED .EQ $BEE9 WORD +A2OsX.InKernel .EQ $BEEB + A2osX.TIMER16 .EQ $BEEC WORD A2osX.RANDOM16 .EQ $BEEE WORD *-------------------------------------- @@ -182,27 +184,45 @@ SYS.SetEnv .EQ $BA SYS.GetEnv.YA .EQ $BC SYS.UnsetEnv.YA .EQ $BE *-------------------------------------- -SYS.GetMem .EQ $C0 -SYS.FreeMem.A .EQ $C2 -SYS.GetMemPtr.A .EQ $C4 -SYS.GetMemByID.A .EQ $C6 +SYS.FAdd .EQ $C0 +SYS.FSub .EQ $C2 +SYS.FMult .EQ $C4 +SYS.FDiv .EQ $C6 -SYS.GetMem.YA .EQ $C8 -SYS.GetMem0.YA .EQ $CA -SYS.SetLoMem .EQ $CC -SYS.NewStr.YA .EQ $CE +SYS.FPwr .EQ $C8 +* .EQ $CA +* .EQ $CC +* .EQ $CE -* .EQ $D0 -* .EQ $D2 -* .EQ $D4 -* .EQ $D6 +SYS.Log .EQ $D0 +SYS.Sqr .EQ $D2 +SYS.Exp .EQ $D4 +SYS.Cos .EQ $D6 -SYS.LoadStkObj.YA .EQ $D8 -SYS.GetStkObj.A .EQ $DA -SYS.FreeStkObj.A .EQ $DC -SYS.GetMemStat.YA .EQ $DE +SYS.Sin .EQ $D8 +SYS.Tan .EQ $DA +SYS.ATan .EQ $DC +* .EQ $DF +*-------------------------------------- +SYS.GetMem .EQ $E0 +SYS.FreeMem.A .EQ $E2 +SYS.GetMemPtr.A .EQ $E4 +SYS.GetMemByID.A .EQ $E6 -SYS.Sleep .EQ $E0 +SYS.GetMem.YA .EQ $E8 +SYS.GetMem0.YA .EQ $EA +SYS.NewStr.YA .EQ $EC +SYS.GetMemStat.YA .EQ $EE + +SYS.Sleep .EQ $F0 +* .EQ $F2 +* .EQ $F4 +* .EQ $F6 + +* .EQ $F8 +SYS.LoadStkObj.YA .EQ $FA +SYS.GetStkObj.A .EQ $FC +SYS.FreeStkObj.A .EQ $FE *-------------------------------------- * ProDOS ERROR CODES : $00->$5F * Lib ERROR CODES : $80->$BF diff --git a/INC/KERNEL.I.txt b/INC/KERNEL.I.txt index 1a1bf9f9..75fe2e6d 100644 --- a/INC/KERNEL.I.txt +++ b/INC/KERNEL.I.txt @@ -55,11 +55,11 @@ ROM.FADD .EQ 2 ROM.LTOF .EQ 4 ROM.LOG .EQ 6 ROM.FMULT .EQ 8 -ROM.SETARG.AY .EQ 10 +ROM.SETARG .EQ 10 ROM.FDIV .EQ 12 -ROM.SETFAC.AY .EQ 14 +ROM.SETFAC .EQ 14 -ROM.GETFAC .EQ 16 Get FAC at FORPNT +ROM.GETFAC .EQ 16 Copy FAC to (FORPNT) ROM.FCOMP .EQ 18 ROM.QINT .EQ 20 ROM.FIN .EQ 22 diff --git a/INC/NET.I.txt b/INC/NET.I.txt index b02c94b8..c8f0c075 100644 --- a/INC/NET.I.txt +++ b/INC/NET.I.txt @@ -17,7 +17,7 @@ S.DSTAT.NET.STATUS.10 .EQ $01 S.DSTAT.NET.STATUS.100 .EQ $02 S.DSTAT.NET.STATUS.1000 .EQ $03 S.DSTAT.NET.MAC .EQ S.DSTAT+2 -S.DSTAT.NET .EQ S.DSTAT+8 +S.DSTAT.NET .EQ S.DSTAT+8 *-------------------------------------- MAN SAVE /A2OSX.BUILD/INC/NET.I diff --git a/INC/PRODOS.I.txt b/INC/PRODOS.I.txt index be1dd61e..8de36e2f 100644 --- a/INC/PRODOS.I.txt +++ b/INC/PRODOS.I.txt @@ -39,29 +39,29 @@ MLIGETEOF .EQ $D1 MLISETBUF .EQ $D2 MLIGETBUF .EQ $D3 *-------------------------------------- -S.FILEINFO.ACCESS .EQ $03 -S.FILEINFO.ACCESS.R .EQ $01 -S.FILEINFO.ACCESS.W .EQ $02 -S.FILEINFO.ACCESS.B .EQ $20 -S.FILEINFO.ACCESS.RN .EQ $40 -S.FILEINFO.ACCESS.D .EQ $80 -S.FILEINFO.ACCESS.FULL .EQ $C3 -S.FILEINFO.TYPE .EQ $04 -S.FILEINFO.TYPE.TXT .EQ $04 -S.FILEINFO.TYPE.DIR .EQ $0F -S.FILEINFO.TYPE.SYS .EQ $FF -S.FILEINFO.AUXTYPE .EQ $05 -S.FILEINFO.TOTALBLOCKS .EQ $05 -S.FILEINFO.STORETYPE .EQ $07 -S.FILEINFO.STORETYPE.STD .EQ $01 -S.FILEINFO.STORETYPE.DIR .EQ $0D -S.FILEINFO.BLOCKSUSED .EQ $08 -S.FILEINFO.MODDATE .EQ $0A -S.FILEINFO.MODTIME .EQ $0C -S.FILEINFO.CREATEDATE .EQ $0E -S.FILEINFO.CREATETIME .EQ $10 +S.FI.A .EQ $03 +S.FI.A.R .EQ $01 +S.FI.A.W .EQ $02 +S.FI.A.B .EQ $20 +S.FI.A.RN .EQ $40 +S.FI.A.D .EQ $80 +S.FI.A.FULL .EQ $C3 +S.FI.T .EQ $04 +S.FI.T.TXT .EQ $04 +S.FI.T.DIR .EQ $0F +S.FI.T.SYS .EQ $FF +S.FI.AUXTYPE .EQ $05 +S.FI.TBLKS .EQ $05 +S.FI.ST .EQ $07 +S.FI.ST.STD .EQ $01 +S.FI.ST.DIR .EQ $0D +S.FI.UBLKS .EQ $08 +S.FI.MDATE .EQ $0A +S.FI.MTIME .EQ $0C +S.FI.CDATE .EQ $0E +S.FI.CTIME .EQ $10 * -S.FILEINFO .EQ $12 +S.FI .EQ $12 *-------------------------------------- MLI .EQ $BF00 *JSPARE .EQ $BF03 @@ -103,16 +103,16 @@ LEVEL .EQ $BF94 *BUBIT .EQ $BF95 *SPARE1 .EQ $BF96 MACHID .EQ $BF98 -MACHID.TYPE .EQ %11001000 -*MACHID.TYPE.II .EQ %00000000 -*MACHID.TYPE.IIp .EQ %01000000 -MACHID.TYPE.IIe .EQ %10000000 -MACHID.TYPE.IIc .EQ %10001000 -*MACHID.TYPE.III .EQ %11000000 -MACHID.RAM .EQ %00110000 -MACHID.RAM.128 .EQ %00110000 -*MACHID.RAM.64 .EQ %00100000 -*MACHID.RAM.48 .EQ %00010000 +MACHID.T .EQ %11001000 +*MACHID.T.II .EQ %00000000 +*MACHID.T.IIp .EQ %01000000 +MACHID.T.IIe .EQ %10000000 +MACHID.T.IIc .EQ %10001000 +*MACHID.T.III .EQ %11000000 +MACHID.M .EQ %00110000 +MACHID.M.128 .EQ %00110000 +*MACHID.M.64 .EQ %00100000 +*MACHID.M.48 .EQ %00010000 *MACHID.SPARE .EQ %00000100 MACHID.COL80 .EQ %00000010 MACHID.CLK .EQ %00000001 diff --git a/LIB/LIBMATH.S.txt b/LIB/LIBMATH.S.txt deleted file mode 100644 index b60f5773..00000000 --- a/LIB/LIBMATH.S.txt +++ /dev/null @@ -1,60 +0,0 @@ -PR#3 -PREFIX /A2OSX.BUILD -NEW -INC 1 -AUTO 6 - .LIST OFF - .OP 65C02 - .OR $2000 - .TF /A2OSX.BUILD/LIB/LIBMATH.O -*-------------------------------------- - .INB /A2OSX.BUILD/INC/MACROS.I - .INB /A2OSX.BUILD/INC/A2OSX.I - .INB /A2OSX.BUILD/INC/APPLESOFT.I -* .INB /A2OSX.BUILD/INC/LIBMATH.I -*-------------------------------------- -ZPPtr1 .EQ ZPLIB -*-------------------------------------- -* File Header (16 Bytes) -*-------------------------------------- -CS.START cld - jmp (.1,x) - .DA #$61 6502,Level 1 (65c02) - .DA #1 BIN Layout Version 1 - .DA 0 - .DA CS.END-CS.START - .DA 0 - .DA 0 - .DA 0 -*-------------------------------------- -* Relocation Table -*-------------------------------------- -.1 .DA LIB.LOAD - .DA LIB.UNLOAD - .DA COS - .DA SIN - .DA TAN - .DA 0 -*-------------------------------------- -COS -*-------------------------------------- -SIN -*-------------------------------------- -TAN -*-------------------------------------- -ACOS -*-------------------------------------- -ASIN -*-------------------------------------- -ATAN -*-------------------------------------- -LIB.LOAD -LIB.UNLOAD clc - rts - -*-------------------------------------- - -*-------------------------------------- -MAN -SAVE /A2OSX.SRC/LIB/LIBMATH.S -ASM diff --git a/SBIN/KCONFIG.S.txt b/SBIN/KCONFIG.S.txt index 50c20a10..72340f00 100644 --- a/SBIN/KCONFIG.S.txt +++ b/SBIN/KCONFIG.S.txt @@ -178,7 +178,7 @@ CS.RUN.Load >PUSHEA.G StatBuf bne .99 >PUSHWI 0 Aux type - >PUSHBI 6 S.FILEINFO.TYPE.BIN + >PUSHBI 6 S.FI.T.BIN >PUSHBI SYS.FOpen.R >LDA.G hFileName @@ -210,7 +210,7 @@ CS.RUN.Load >PUSHEA.G StatBuf rts *-------------------------------------- CS.RUN.Save >PUSHWI 0 AUXTYPE - >PUSHBI 6 S.FILEINFO.TYPE.BIN + >PUSHBI 6 S.FI.T.BIN >PUSHBI SYS.FOpen.W+SYS.FOpen.X >LDA.G hFileName diff --git a/SBIN/TCPIPD.S.CFG.txt b/SBIN/TCPIPD.S.CFG.txt index 5897bd15..f1b79c2e 100644 --- a/SBIN/TCPIPD.S.CFG.txt +++ b/SBIN/TCPIPD.S.CFG.txt @@ -150,7 +150,7 @@ CFG.Read.LoadFile pha >PUSHWI 0 Aux type - >PUSHBI 4 S.FILEINFO.TYPE.TXT + >PUSHBI 4 S.FI.T.TXT >PUSHBI SYS.FOpen.R pla >PUSHYA diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index 26c68bda..c7018825 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -99,7 +99,7 @@ K.LoadDrv.YA jsr BIN.FindDRV jsr .88 call Dev.Detect bcs .96 - jsr BIN.InstallDRV + jsr BIN.InsDrv bcs .96 jsr .96 Cleanup... @@ -254,10 +254,10 @@ BIN.Load.YA.1 >PUSHWI K.S.STAT bcs .9 >LDYA K.S.STAT+S.STAT.P.AUXTYPE - >STYA BIN.Relocate.Start + >STYA BIN.R.Start >PUSHYA Push AUXTYPE - >PUSHBI 6 S.FILEINFO.TYPE.BIN + >PUSHBI 6 S.FI.T.BIN >PUSHBI SYS.FOpen.R >PUSHW BIN.CmdLine @@ -270,11 +270,11 @@ BIN.Load.YA.1 >PUSHWI K.S.STAT tya * clc CC from bcs .99 - adc BIN.Relocate.Start Get AUXTYPE for actual Base Address - sta BIN.Relocate.End compute Range End=AUXTYPE+FILELEN + adc BIN.R.Start Get AUXTYPE for actual Base Address + sta BIN.R.End compute Range End=AUXTYPE+FILELEN pla - adc BIN.Relocate.Start+1 - sta BIN.Relocate.End+1 + adc BIN.R.Start+1 + sta BIN.R.End+1 txa jsr K.GetMemPtr.A @@ -283,11 +283,11 @@ BIN.Load.YA.1 >PUSHWI K.S.STAT pha YA = actual load address tya sec - sbc BIN.Relocate.Start - sta BIN.Relocate.Offset Offset=ZPPtr1-AUXTYPE + sbc BIN.R.Start + sta BIN.R.Offset Offset=ZPPtr1-AUXTYPE pla - sbc BIN.Relocate.Start+1 - sta BIN.Relocate.Offset+1 + sbc BIN.R.Start+1 + sta BIN.R.Offset+1 ldy #H.BIN.CODE.LEN get Code Len lda (ZPPtr1),y @@ -299,7 +299,7 @@ BIN.Load.YA.1 >PUSHWI K.S.STAT adc ZPPtr1+1 sta ZPPtr2+1 - jsr BIN.RelocateEXE + jsr BIN.RelExe >LDYA BIN.CmdLine get back bin path jsr K.NewStr.YA make a copy of this string @@ -334,51 +334,51 @@ BIN.Load.YA.1 >PUSHWI K.S.STAT BIN.CmdLine .BS 2 BIN.hMem .BS 1 *-------------------------------------- -* BIN.InstallDRV +* BIN.InsDrv * In: * pDrv = .DRV File Loaded Address * Note: * BIN.Load.YA called from K.LoadDrvYA * Already setup correctly pDrv, -* BIN.Relocate.Start,End +* BIN.R.Start,End *-------------------------------------- -BIN.InstallDRV ldy #H.BIN.DRV.CODE.O +BIN.InsDrv ldy #H.BIN.DRV.CODE.O lda (pDrv),y clc - adc BIN.Relocate.Start Advance start From AUXTYPE to AUXTYPE+DRV code offset - sta BIN.Relocate.Start + adc BIN.R.Start Advance start From AUXTYPE to AUXTYPE+DRV code offset + sta BIN.R.Start iny lda (pDrv),y - adc BIN.Relocate.Start+1 - sta BIN.Relocate.Start+1 + adc BIN.R.Start+1 + sta BIN.R.Start+1 lda DevMgr.Free Offset = Target DRV address-(AUXTYPE+DRV OFFSET) sec - sbc BIN.Relocate.Start - sta BIN.Relocate.Offset + sbc BIN.R.Start + sta BIN.R.Offset lda DevMgr.Free+1 - sbc BIN.Relocate.Start+1 - sta BIN.Relocate.Offset+1 + sbc BIN.R.Start+1 + sta BIN.R.Offset+1 - lda BIN.Relocate.End Compute DRVLen=End-start + lda BIN.R.End Compute DRVLen=End-start sec - sbc BIN.Relocate.Start - sta BIN.InstallDRV.DRVLen + sbc BIN.R.Start + sta BIN.InsDrv.Len - lda BIN.Relocate.End+1 - sbc BIN.Relocate.Start+1 - sta BIN.InstallDRV.DRVLen+1 + lda BIN.R.End+1 + sbc BIN.R.Start+1 + sta BIN.InsDrv.Len+1 lda DevMgr.Free clc - adc BIN.InstallDRV.DRVLen - sta BIN.InstallDRV.DRVEnd + adc BIN.InsDrv.Len + sta BIN.InsDrv.End tay Save DRVEnd LO lda DevMgr.Free+1 - adc BIN.InstallDRV.DRVLen+1 A = DRVEnd HI - sta BIN.InstallDRV.DRVEnd+1 + adc BIN.InsDrv.Len+1 A = DRVEnd HI + sta BIN.InsDrv.End+1 bcs .9 we crossed $FFFF, out of mem @@ -442,10 +442,10 @@ BIN.InstallDRV ldy #H.BIN.DRV.CODE.O adc pDrv+1 sta ZPPtr1+1 set Ptr1 to Src CODE - lda BIN.InstallDRV.DrvLen+1 + lda BIN.InsDrv.Len+1 eor #$ff pha - lda BIN.InstallDRV.DrvLen + lda BIN.InsDrv.Len eor #$ff tax @@ -479,27 +479,27 @@ BIN.InstallDRV ldy #H.BIN.DRV.CODE.O adc (pDrv),y sta ZPPtr2+1 Make ZPPtr2 = ZPPtr1 + CodeLen - jsr BIN.RelocateDRV + jsr BIN.RelDrv - >LDYA BIN.InstallDRV.DrvEnd + >LDYA BIN.InsDrv.End >STYA DevMgr.Free clc rts *-------------------------------------- -BIN.InstallDRV.DrvLen .BS 2 -BIN.InstallDRV.DrvEnd .BS 2 +BIN.InsDrv.Len .BS 2 +BIN.InsDrv.End .BS 2 *-------------------------------------- -* BIN.Relocate___ : +* BIN.Rel___ : * In : * ZPPtr1 = Ptr to Code * ZPPtr2 = End Of Code *-------------------------------------- -BIN.Relocate.Start .BS 2 -BIN.Relocate.End .BS 2 -BIN.Relocate.Offset .BS 2 +BIN.R.Start .BS 2 +BIN.R.End .BS 2 +BIN.R.Offset .BS 2 *-------------------------------------- -BIN.RelocateEXE ldy #H.BIN.T+1 +BIN.RelExe ldy #H.BIN.T+1 lda (ZPPtr1),y cmp /H.BIN.T.BIN65 beq .1 @@ -513,19 +513,19 @@ BIN.RelocateEXE ldy #H.BIN.T+1 .1 ldy #H.BIN.JMP relocate Main JMP lda (ZPPtr1),y clc - adc BIN.Relocate.Offset + adc BIN.R.Offset sta (ZPPtr1),y iny lda (ZPPtr1),y - adc BIN.Relocate.Offset+1 + adc BIN.R.Offset+1 sta (ZPPtr1),y ldy #H.BIN.EXE.REL.TABLE skip Header, CS.SIZE & DS.SIZE... (16 bytes) .HS 2C bit abs *-------------------------------------- -BIN.RelocateDRV ldy #H.BIN.DRV.REL.TABLE +BIN.RelDrv ldy #H.BIN.DRV.REL.TABLE .1 lda (ZPPtr1),y Start Relocate JMP table tax LO in X @@ -536,12 +536,12 @@ BIN.RelocateDRV ldy #H.BIN.DRV.REL.TABLE dey txa get back LO clc - adc BIN.Relocate.Offset + adc BIN.R.Offset sta (ZPPtr1),y iny lda (ZPPtr1),y - adc BIN.Relocate.Offset+1 + adc BIN.R.Offset+1 sta (ZPPtr1),y iny @@ -580,25 +580,25 @@ BIN.RelocateDRV ldy #H.BIN.DRV.REL.TABLE iny make Y point to HI - cpx BIN.Relocate.Start + cpx BIN.R.Start lda (ZPPtr1),y Get HI - sbc BIN.Relocate.Start+1 - bcc .5 addr < BIN.Relocate.Start, out of range + sbc BIN.R.Start+1 + bcc .5 addr < BIN.R.Start, out of range txa Get back LO - cpx BIN.Relocate.End + cpx BIN.R.End lda (ZPPtr1),y Get HI - sbc BIN.Relocate.End+1 - bcs .5 addr > BIN.Relocate.End, out of range + sbc BIN.R.End+1 + bcs .5 addr > BIN.R.End, out of range txa Get back LO * clc CC from bcs .6 - adc BIN.Relocate.Offset add Offset to abs address + adc BIN.R.Offset add Offset to abs address dey sta (ZPPtr1),y store relocated addr LO iny lda (ZPPtr1),y Get HI - adc BIN.Relocate.Offset+1 + adc BIN.R.Offset+1 sta (ZPPtr1),y store relocated addr HI .5 pla get back Opcode length... diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index 65d8a383..1804e496 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -93,7 +93,7 @@ CORE.Events jsr CORE.GetEvents bcs .4 CS=no event - jsr CORE.DispatchEvents + jsr CORE.Dispatch bcc .4 CC=All Events Dispatched jsr CORE.PSSelect0 @@ -144,7 +144,7 @@ CORE.Events jsr CORE.GetEvents bcs .8 sta KBDSTROBE - jsr CORE.ScreenSelect + jsr CORE.ScrSel .8 jmp CORE.Run *-------------------------------------- * CORE.GetEvents : @@ -224,14 +224,13 @@ CORE.GetEvents lda #Evt.Table .9 sec rts *-------------------------------------- -* CORE.DispatchEvents +* CORE.Dispatch * IN: * OUT: * CS: Not Dispatched * CC: Event Cleared *-------------------------------------- -CORE.DispatchEvents - lda CORE.PSCount +CORE.Dispatch lda CORE.PSCount sta CORE.Counter beq .9 @@ -378,8 +377,7 @@ CORE.DumpEvent ldy #S.EVT-1 .2 >CSTR "!Evt:F=%b,Dev=$%h,LO=$%h,HI=$%h,W1=$%H,W2=$%H\n" *-------------------------------------- -CORE.ScreenSelect - and #$0F +CORE.ScrSel and #$0F cmp A2osX.ASCREEN Same as active screen...nothing to do beq .8 diff --git a/SYS/KERNEL.S.ENV.txt b/SYS/KERNEL.S.ENV.txt index 4bd3ecd4..514fb301 100644 --- a/SYS/KERNEL.S.ENV.txt +++ b/SYS/KERNEL.S.ENV.txt @@ -11,18 +11,18 @@ AUTO 6 * X = hMem to Expanded String (C-String) * Y,A = PTR to Expanded String *\-------------------------------------- -K.ExpandStr.YA stz K.ExpandStr.hPStr Reset Intermediate string... +K.ExpandStr.YA stz ENV.hStr Reset Intermediate string... .1 >STYA ZPPtr2 - stz K.ExpandStr.BufLen init Expanded String len=0 - stz K.ExpandStr.bFound No var found yet + stz ENV.BufLen init Expanded String len=0 + stz ENV.bFound No var found yet - stz K.ExpandStr.bNoExp Reset no expand flag + stz ENV.bNoExp Reset no expand flag ldy #0 -.10 stz K.ExpandStr.VarLen - stz K.ExpandStr.bInVar +.10 stz ENV.VarLen + stz ENV.bInVar .11 lda (ZPPtr2),y End of CSTR? beq .8 @@ -32,34 +32,34 @@ K.ExpandStr.YA stz K.ExpandStr.hPStr Reset Intermediate string... cmp #''' bne .21 - lda K.ExpandStr.bNoExp + lda ENV.bNoExp eor #$ff - sta K.ExpandStr.bNoExp toggle flag + sta ENV.bNoExp toggle flag bra .11 -.21 bit K.ExpandStr.bNoExp +.21 bit ENV.bNoExp bpl .23 -.22 ldx K.ExpandStr.BufLen +.22 ldx ENV.BufLen sta K.Buf256,x inx - stx K.ExpandStr.BufLen + stx ENV.BufLen bra .11 -.23 ldx K.ExpandStr.bInVar already in a var? +.23 ldx ENV.bInVar already in a var? bne .3 yes... cmp #'$' no, found one ? bne .22 no, store... - sta K.ExpandStr.bFound Toggle flag - sta K.ExpandStr.bInVar + sta ENV.bFound Toggle flag + sta ENV.bInVar bra .11 skip this char .3 cmp #'{' we are in var, "{" after "$"? bne .31 - ldx K.ExpandStr.VarLen No char in var yet ? + ldx ENV.VarLen No char in var yet ? beq .11 normal, "${" syntax is ok,skip bne .5 not allowed char in varname, end of var @@ -67,65 +67,64 @@ K.ExpandStr.YA stz K.ExpandStr.hPStr Reset Intermediate string... .31 cmp #'}' end of var? beq .50 - jsr K.ExpandStrValidChar + jsr ENV.IsVarChar bcc .32 yes, add to varname - ldx K.ExpandStr.VarLen + ldx ENV.VarLen bne .5 varname has already chars...end of var inx must be a $? or ?x.....go expand - stx K.ExpandStr.VarLen - sta K.ExpandStr.VarName + stx ENV.VarLen + sta ENV.VarName bra .51 go Expand.... -.32 ldx K.ExpandStr.VarLen +.32 ldx ENV.VarLen cpx #16 beq .11 varname longer than 15....ignore - sta K.ExpandStr.VarName,x + sta ENV.VarName,x inx - stx K.ExpandStr.VarLen + stx ENV.VarLen bra .11 .5 dey last char was invalid...move back -.50 ldx K.ExpandStr.VarLen +.50 ldx ENV.VarLen beq .52 var name is empty...start over -.51 stz K.ExpandStr.VarName,x +.51 stz ENV.VarName,x phy save current index - jsr K.ExpandStrGetValue + jsr ENV.GetValue ply restore index in string... .52 jmp .10 reset start flag and continue -.8 ldx K.ExpandStr.VarLen end of STR,are we in a var? +.8 ldx ENV.VarLen end of STR,are we in a var? beq .80 no...exit... - stz K.ExpandStr.VarName,x - jsr K.ExpandStrGetValue yes, expand and add to STR + stz ENV.VarName,x + jsr ENV.GetValue yes, expand and add to STR -.80 lda K.ExpandStr.hPStr working from our temp string ? +.80 lda ENV.hStr working from our temp string ? beq .81 no... jsr K.FreeMem.A yes, discard.... -.81 ldx K.ExpandStr.BufLen +.81 ldx ENV.BufLen stz K.Buf256,x >LDYAI K.Buf256 jsr K.NewStr.YA bcs .9 - stx K.ExpandStr.hPStr save this as temp string, in case of recurse - ldx K.ExpandStr.bFound Did we expand something ? + stx ENV.hStr save this as temp string, in case of recurse + ldx ENV.bFound Did we expand something ? beq .82 jmp .1 Yes, start over with hPStr -.82 ldx K.ExpandStr.hPStr +.82 ldx ENV.hStr * or exit with Y,A from K.NewStrYA .9 rts *-------------------------------------- -K.ExpandStrValidChar - cmp #'_' +ENV.IsVarChar cmp #'_' beq .8 cmp #'0' @@ -146,27 +145,26 @@ K.ExpandStrValidChar .9 sec rts *-------------------------------------- -K.ExpandStrGetValue - jsr ENV.ExpandSysVar +ENV.GetValue jsr ENV.ExpandSysVar bcc .9 - >LDYAI K.ExpandStr.VarName + >LDYAI ENV.VarName jsr K.GetEnv.YA bcs .9 >STYA ZPPtr3 - jsr ENV.AppendPtr3ToBuf + jsr ENV.AddP3ToBuf .9 rts *-------------------------------------- -K.ExpandStr.BufLen .BS 1 -K.ExpandStr.bNoExp .BS 1 -K.ExpandStr.bInVar .BS 1 -K.ExpandStr.bFound .BS 1 -K.ExpandStr.hPStr .BS 1 -K.ExpandStr.VarLen .BS 1 -K.ExpandStr.VarName .BS 16 +ENV.BufLen .BS 1 +ENV.bNoExp .BS 1 +ENV.bInVar .BS 1 +ENV.bFound .BS 1 +ENV.hStr .BS 1 +ENV.VarLen .BS 1 +ENV.VarName .BS 16 */-------------------------------------- * # PutEnv.YA * ## In: @@ -198,7 +196,7 @@ K.PutEnv.YA >STYA ZPPtr1 NAME=VALUE >LDYAI K.Buf256 >STYA ZPPtr1 - bra K.SetEnvPtr1Ptr2 + bra K.SetEnv.I .9 sec rts @@ -209,11 +207,10 @@ K.PutEnv.YA >STYA ZPPtr1 NAME=VALUE * PUSHW = PTR To Name (PSTR) * ## Out: *\-------------------------------------- -K.SetEnv jsr PullPtr1Ptr2 Ptr1=NAME,Ptr2=VALUE -K.SetEnvPtr1Ptr2 - jsr S.UnsetEnvPtr1 +K.SetEnv jsr PullP1P2 Ptr1=NAME,Ptr2=VALUE +K.SetEnv.I jsr K.UnsetEnv.I - jsr ENV.InitEnvPtr3 ZPPtr3 -> Env + jsr ENV.InitEnvP3 ZPPtr3 -> Env ldy #0 ldx #0 @@ -316,10 +313,10 @@ K.SetEnvPtr1Ptr2 * CS : not found *\-------------------------------------- K.GetEnv.YA >STYA ZPPtr1 - jsr ENV.FindVarPtr1 + jsr ENV.FindVarP1 bcs .9 - jsr ENV.NextEnvPtr3 Skip NAME + jsr ENV.NextEnvP3 Skip NAME clc just in case ADC in NextEnvPtr1 disturb CC .9 >LDYA ZPPtr3 @@ -330,11 +327,11 @@ K.GetEnv.YA >STYA ZPPtr1 * Y,A = PTR To Name (PSTR) * ## Out: *\-------------------------------------- -K.UnsetEnv.YA >STYA ZPPtr1 Store VAR Name -S.UnsetEnvPtr1 jsr ENV.FindVarPtr1 +K.UnsetEnv.YA >STYA ZPPtr1 Store VAR Name +K.UnsetEnv.I jsr ENV.FindVarP1 bcs .8 not found, quit - jsr ENV.DiscardVarPtr3 Ptr3 -> ENVNAME + jsr ENV.DelVarP3 Ptr3 -> ENVNAME .8 clc rts @@ -343,18 +340,18 @@ S.UnsetEnvPtr1 jsr ENV.FindVarPtr1 *-------------------------------------- * ENV.ExpandSysVar * In: -* K.ExpandStr.VarName +* ENV.VarLen,ENV.VarName * Out: * CC: Found * Append VALUE to K.Buf256 * CS: Not Found *-------------------------------------- ENV.ExpandSysVar - ldx K.ExpandStr.VarLen + ldx ENV.VarLen cpx #1 is name 1 char? bne .9 - lda K.ExpandStr.VarName + lda ENV.VarName cmp #'0'-1 $0...$9 ?? bcc .1 cmp #'9'+1 @@ -365,7 +362,7 @@ ENV.ExpandSysVar bcs .8 Arg# is undefined, do not append anything >STYA ZPPtr3 - jmp ENV.AppendPtr3ToBuf + jmp ENV.AddP3ToBuf .8 clc rts @@ -401,9 +398,9 @@ ENV.SysVarsArgs lda #1 .1 lda (ZPPtr3) beq .8 - jsr ENV.AppendPtr3ToBuf + jsr ENV.AddP3ToBuf -.2 jsr ENV.NextEnvPtr3 +.2 jsr ENV.NextEnvP3 lda (ZPPtr3) beq .8 @@ -411,16 +408,15 @@ ENV.SysVarsArgs lda #1 beq .8 make sure not overlapping buf 256 lda #' ' sta K.Buf256,x - stx K.ExpandStr.BufLen + stx ENV.BufLen - jsr ENV.AppendPtr3ToBuf + jsr ENV.AddP3ToBuf bra .2 .8 clc rts *-------------------------------------- -ENV.AppendPtr3ToBuf - ldx K.ExpandStr.BufLen +ENV.AddP3ToBuf ldx ENV.BufLen ldy #$ff dex @@ -430,7 +426,7 @@ ENV.AppendPtr3ToBuf sta K.Buf256,x bne .1 - stx K.ExpandStr.BufLen + stx ENV.BufLen rts *-------------------------------------- ENV.SysVarsArgC ldy #S.PS.ARGC @@ -466,7 +462,7 @@ ENV.SysVarsCPID ldy #S.PS.CPID cld - ldx K.ExpandStr.BufLen + ldx ENV.BufLen lda .3+1 beq .4 sta K.Buf256,x @@ -489,11 +485,11 @@ ENV.SysVarsCPID ldy #S.PS.CPID sta K.Buf256,x inx - stx K.ExpandStr.BufLen + stx ENV.BufLen clc rts *-------------------------------------- -* ENV.FindVarPtr1 +* ENV.FindVarP1 * In: * ZPPtr1 -> NAME * Out: @@ -504,7 +500,7 @@ ENV.SysVarsCPID ldy #S.PS.CPID * ZPPtr1 -> NAME * ZPPtr3 -> PTR to Ending 0 *-------------------------------------- -ENV.FindVarPtr1 jsr ENV.InitEnvPtr3 Store ENV +ENV.FindVarP1 jsr ENV.InitEnvP3 Store ENV .1 lda (ZPPtr3) beq .9 end of ENV @@ -524,22 +520,21 @@ ENV.FindVarPtr1 jsr ENV.InitEnvPtr3 Store ENV .8 clc rts -.3 jsr ENV.NextEnvPtr3 Skip NAME - jsr ENV.NextEnvPtr3 Skip VALUE +.3 jsr ENV.NextEnvP3 Skip NAME + jsr ENV.NextEnvP3 Skip VALUE bra .1 .9 sec rts *-------------------------------------- -* ENV.DiscardVarPtr3 +* ENV.DelVarP3 * In: * ZPPtr3 -> ENV.NAME to Discard *-------------------------------------- -ENV.DiscardVarPtr3 - >LDYA ZPPtr3 save actual Ptr +ENV.DelVarP3 >LDYA ZPPtr3 save actual Ptr >STYA ZPPtr4 - jsr ENV.NextEnvPtr3 Skip current NAME.... - jsr ENV.NextEnvPtr3 Skip current VALUE.... + jsr ENV.NextEnvP3 Skip current NAME.... + jsr ENV.NextEnvP3 Skip current VALUE.... ldy #0 @@ -565,13 +560,13 @@ ENV.DiscardVarPtr3 .8 rts *-------------------------------------- -ENV.InitEnvPtr3 ldy #S.PS.hENV +ENV.InitEnvP3 ldy #S.PS.hENV lda (pPs),y jsr K.GetMemPtr.A >STYA ZPPtr3 Store ENV rts *-------------------------------------- -ENV.NextEnvPtr3 ldy #0 +ENV.NextEnvP3 ldy #0 .1 lda (ZPPtr3),y beq .2 diff --git a/SYS/KERNEL.S.FIO.txt b/SYS/KERNEL.S.FIO.txt index cf8eaa02..b6e2ed9c 100644 --- a/SYS/KERNEL.S.FIO.txt +++ b/SYS/KERNEL.S.FIO.txt @@ -15,7 +15,7 @@ AUTO 6 K.LoadTxtFile.YA pha >PUSHWI 0 Aux type - >PUSHBI 4 S.FILEINFO.TYPE.TXT + >PUSHBI 4 S.FI.T.TXT >PUSHBI SYS.FOpen.R pla >PUSHYA @@ -34,18 +34,18 @@ K.LoadTxtFile.YA * X = hMem of Loaded File *\-------------------------------------- K.LoadFile clc - ror K.LoadFile.bTXT + ror FIO.bTXT jsr K.FOpen bcs .9 - sta K.LoadFile.hFile + sta FIO.hFile - jsr K.LoadFile.GetSize + jsr FIO.GetSize bcs .99 - >LDYA K.LoadFile.FSize + >LDYA FIO.FSize - bit K.LoadFile.bTXT Add 1 to buffer size for ending 0 + bit FIO.bTXT Add 1 to buffer size for ending 0 bpl .1 iny bne .1 @@ -56,12 +56,12 @@ K.LoadFile clc .1 jsr K.GetMem.YA bcs .99 - >STYA K.LoadFile.Mem + >STYA FIO.Mem stx .8+1 - >PUSHW K.LoadFile.Mem - >PUSHW K.LoadFile.FSize - >PUSHB K.LoadFile.hFile + >PUSHW FIO.Mem + >PUSHW FIO.FSize + >PUSHB FIO.hFile jsr K.FRead bcs .98 @@ -70,15 +70,15 @@ K.LoadFile clc jsr .99 close file - bit K.LoadFile.bTXT + bit FIO.bTXT bpl .6 clc set ending 0 lda .6+1 - adc K.LoadFile.Mem + adc FIO.Mem sta .5+1 lda .7+1 - adc K.LoadFile.Mem+1 + adc FIO.Mem+1 sta .5+2 .5 stz $ffff Self Modified @@ -95,52 +95,51 @@ K.LoadFile clc pla .99 pha - lda K.LoadFile.hFile + lda FIO.hFile jsr K.FClose.A pla sec rts *-------------------------------------- -K.LoadFile.GetSize - stz K.LoadFile.FPos - stz K.LoadFile.FPos+1 - stz K.LoadFile.FPos+2 - stz K.LoadFile.FPos+3 +FIO.GetSize stz FIO.FPos + stz FIO.FPos+1 + stz FIO.FPos+2 + stz FIO.FPos+3 - >PUSHWI K.LoadFile.FPos + >PUSHWI FIO.FPos >PUSHBI SYS.FSeek.END - >PUSHB K.LoadFile.hFile + >PUSHB FIO.hFile jsr K.FSeek bcs .99 - >PUSHWI K.LoadFile.FPos - >PUSHB K.LoadFile.hFile + >PUSHWI FIO.FPos + >PUSHB FIO.hFile jsr K.FTell bcs .99 - lda K.LoadFile.FPos+2 - ora K.LoadFile.FPos+3 + lda FIO.FPos+2 + ora FIO.FPos+3 bne .98 too big! - >LDYA K.LoadFile.FPos - >STYA K.LoadFile.FSize + >LDYA FIO.FPos + >STYA FIO.FSize - stz K.LoadFile.FPos - stz K.LoadFile.FPos+1 + stz FIO.FPos + stz FIO.FPos+1 - >PUSHWI K.LoadFile.FPos + >PUSHWI FIO.FPos >PUSHBI SYS.FSeek.SET - >PUSHB K.LoadFile.hFile + >PUSHB FIO.hFile jmp K.FSeek .98 lda #K.E.FTB .99 rts *-------------------------------------- -K.LoadFile.bTXT .BS 1 -K.LoadFile.hFile .BS 1 -K.LoadFile.FPos .BS 4 -K.LoadFile.Mem .BS 2 -K.LoadFile.FSize .BS 2 +FIO.bTXT .BS 1 +FIO.hFile .BS 1 +FIO.FPos .BS 4 +FIO.Mem .BS 2 +FIO.FSize .BS 2 */-------------------------------------- * # ChTyp * ## In: @@ -154,7 +153,7 @@ K.ChTyp jsr PFT.CheckPathSTK bcs .9 .1 lda #$ff - sta K.MLI.PARAMS+S.FILEINFO.TYPE + sta K.MLI.PARAMS+S.FI.T >MLICALL MLISETFILEINFO .9 rts */-------------------------------------- diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index 7d03f08f..6281f68b 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -10,7 +10,7 @@ AUTO 6 * X = SYSfnc.Index * Y,A = free for Inline param *-------------------------------------- - jmp A2osX.SYSCALL1 + jmp GP.SysCall *-------------------------------------- * LIBCALL (AUXLC to AUXLC) * Used by user @@ -19,7 +19,7 @@ AUTO 6 * X = LIBfnc.Index * A = free for Inline param *-------------------------------------- - jmp A2osX.LIBCALL1 + jmp GP.LibCall *-------------------------------------- * MLICALL (AUXLC to MAINLC) * Used by Kernel @@ -27,7 +27,7 @@ AUTO 6 * X = MLI Function * A = Param Count *-------------------------------------- - jmp A2osX.MLICALL1 + jmp GP.MLICall *-------------------------------------- * MLICALL (AUXLC to MAINLC) * Used by Kernel @@ -35,7 +35,7 @@ AUTO 6 * X = MLI Function * A = Param Count *-------------------------------------- - jmp A2osX.ROMCALL1 + jmp GP.ROMCall *-------------------------------------- * BADCALL *-------------------------------------- @@ -47,7 +47,7 @@ AUTO 6 *-------------------------------------- * *** MUST BE REINTRANT *** *-------------------------------------- -A2osX.SYSCALL1 bit K.SYSCALL.BANK,x +GP.SysCall bit K.SYSCALL.BANK,x bpl .8 in $E000, no BNK change sta .7+1 save A (Func Arg) @@ -78,14 +78,14 @@ A2osX.SYSCALL1 bit K.SYSCALL.BANK,x .7 lda #$FF Self Modified .8 jmp (K.SYSCALL.JMP,x) *-------------------------------------- -A2osX.LIBCALL1 pha No need to save X, K.GetMemPtr.A will leave it unmodified +GP.LibCall pha No need to save X, K.GetMemPtr.A will leave it unmodified tya Get LIB hMem in A jsr K.GetMemPtr.A Get LIB Code Segment (MemMgr in $E000, no BNK change) >STYA .1+1 pla .1 jmp $ffff *-------------------------------------- -A2osX.MLICALL1 stx .1 +GP.MLICall stx .1 sta K.MLI.PARAMS jsr GO.ProDOS jsr MLI @@ -94,7 +94,7 @@ A2osX.MLICALL1 stx .1 jsr GO.A2osX rts *-------------------------------------- -A2osX.ROMCALL1 phx +GP.ROMCall phx ldx $D000 stx .8+1 @@ -117,15 +117,15 @@ A2osX.ROMCALL1 phx .DA $E82E NORMALIZE.FAC.2 (L->F) .DA $E941 LOG .DA $E97F FMULT - .DA $E9E3 LOAD.ARG.FROM.YA + .DA $E9E7 LOAD.ARG.FROM.INDEX .DA $EA66 FDIV - .DA $EAF9 LOAD.FAC.FROM.YA + .DA $EAFD LOAD.FAC.FROM.INDEX - .DA $EB27 SETFOR + .DA $EB27 SETFOR GETFAC) .DA $EBB2 FCOMP .DA $EBF2 QINT (F->L) - .DA $EC4A FIN - .DA $ED36 FOUT.1 + .DA $EC4A FIN StrToF + .DA $ED36 FOUT.1 PrintF .DA $EE8D SQR .DA $EE97 FPWRT .DA $EF09 EXP @@ -216,7 +216,7 @@ GO.EXIT.JMP jmp $FFFF Self Modified * must exit with RTS * - CC if IRQ cleared, CS if NOT *-------------------------------------- -IrqHandler cld +GP.IrqH cld lda RDALTZP sta .2+1 @@ -228,7 +228,7 @@ IrqHandler cld ldx A2osX.SaveSX txs -.1 jsr K.IrqHandler +.1 jsr K.IrqH .2 lda #$ff get back ZP status when called bmi .3 we were coming from AuxZP/LC @@ -247,6 +247,12 @@ IrqHandler cld *BrkHandler bra * *-------------------------------------- .BS $BEE0-* +*-------------------------------------- +* $BEE0->$BEEF : Public Variables +*-------------------------------------- + .BS 16 +*-------------------------------------- +* $BEF0->$BEFF : Kernel Config Block *-------------------------------------- .DA #6 60hz .BS 7 diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 77bc2ed3..66a1212c 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -214,8 +214,8 @@ CPU.Init >LDAXI MSG.CPU jsr PrintFAX lda MACHID - and #MACHID.TYPE - cmp #MACHID.TYPE.IIc + and #MACHID.T + cmp #MACHID.T.IIc beq CPU.Init.Z80 >LDAXI MSG.CPU.SPEED @@ -485,10 +485,10 @@ IrqMgrInit >LDYAI MSG.IRQ sei >LDYA $FFFE >STYA IRQ.OldFFFE - >LDYAI K.IrqHandlerAuxLC + >LDYAI K.IrqHAuxLC >STYA $FFFE - >LDYAI IrqHandler + >LDYAI GP.IrqH >STYA K.MLI.PARAMS+2 >MLICALL MLIALLOCIRQ bcs .9 @@ -504,8 +504,8 @@ IrqMgrInit >LDYAI MSG.IRQ lda #'v' sta SYS.BASL0+37 - >LDYAI K.IrqHandler.VBL - >STYA K.IrqHandler+1 + >LDYAI K.IrqH.VBL + >STYA K.IrqH+1 >LDYAI MSG.IRQ.VBL >SYSCALL PrintF.YA @@ -518,8 +518,8 @@ IrqMgrInit >LDYAI MSG.IRQ lda #'c' sta SYS.BASL0+37 - >LDYAI K.IrqHandler.TClock - >STYA K.IrqHandler+1 + >LDYAI K.IrqH.TClock + >STYA K.IrqH+1 >LDYAI MSG.IRQ.CLOCK >SYSCALL PrintF.YA @@ -581,25 +581,25 @@ IrqMgrInit.Mouse .4 lda ZPPtr1+1 - sta K.IrqMgrVBL.MSM+2 - sta K.IrqMgrVBL.MRM+2 + sta IRQ.VBL.MSM+2 + sta IRQ.VBL.MRM+2 and #$0f - sta K.IrqMgrVBL.0n + sta IRQ.VBL.0n asl asl asl asl - sta K.IrqMgrVBL.n0 + sta IRQ.VBL.n0 ldy #$13 SERVEMOUSE lda (ZPPtr1),y - sta K.IrqMgrVBL.MSM+1 + sta IRQ.VBL.MSM+1 ldy #$14 READMOUSE lda (ZPPtr1),y - sta K.IrqMgrVBL.MRM+1 + sta IRQ.VBL.MRM+1 ldy #$12 SETMOUSE @@ -610,7 +610,7 @@ IrqMgrInit.Mouse ldx ZPPtr1+1 DEVSLOTCn stx .7+2 - ldy K.IrqMgrVBL.n0 + ldy IRQ.VBL.n0 php sei @@ -665,7 +665,7 @@ IrqMgrInit.TClock asl asl tay get $n0 - sty K.IrqMgrVBL.n0 + sty IRQ.VBL.n0 lda #$40 Enable interrupt sta $c080,y diff --git a/SYS/KERNEL.S.IRQ.txt b/SYS/KERNEL.S.IRQ.txt index aed37f9a..889ff629 100644 --- a/SYS/KERNEL.S.IRQ.txt +++ b/SYS/KERNEL.S.IRQ.txt @@ -13,8 +13,7 @@ AUTO 6 * if A2osX Drivers cannot clear IRQ, * must call regular System Handler *-------------------------------------- -K.IrqHandlerAuxLC - sta .12+1 +K.IrqHAuxLC sta .12+1 pla pha and #$10 BRK? @@ -30,7 +29,7 @@ K.IrqHandlerAuxLC pha sta CLRREADAUX Make sure we can access Dev.Table - jsr K.IrqHandler + jsr K.IrqH pla Must keep Carry bpl .1 @@ -56,17 +55,16 @@ K.IrqHandlerAuxLC .8 jmp (IRQ.OldFFFE) *-------------------------------------- * Called by : -* Kernel IrqHandlerAuxLC -* ProDOS IRQ Manager (GP) +* - Kernel K.IrqHAuxLC +* - ProDOS IRQ Manager (GP) *-------------------------------------- -K.IrqHandler jmp K.IrqHandler.DEV Modified by INIT +K.IrqH jmp K.IrqH.DEV Modified by INIT *-------------------------------------- -K.IrqHandler.TCLOCK - ldy K.IrqMgrVBL.n0 +K.IrqH.TCLOCK ldy IRQ.VBL.n0 lda $c080,y and #$20 - beq K.IrqHandler.DEV + beq K.IrqH.DEV lda $c080,y lda $c088,y @@ -80,18 +78,17 @@ K.IrqHandler.TCLOCK clc rts *-------------------------------------- -K.IrqHandler.VBL - jsr K.IrqMgrVBL.MSM SERVEMOUSE - bcs K.IrqHandler.DEV Not From Mouse +K.IrqH.VBL jsr IRQ.VBL.MSM SERVEMOUSE + bcs K.IrqH.DEV Not From Mouse - ldx K.IrqMgrVBL.0n + ldx IRQ.VBL.0n lda $778,x and #$08 IRQ was caused by VBL ? - beq K.IrqHandler.DEV + beq K.IrqH.DEV - ldx K.IrqMgrVBL.MRM+2 $Cn - ldy K.IrqMgrVBL.n0 - jsr K.IrqMgrVBL.MRM READMOUSE + ldx IRQ.VBL.MRM+2 $Cn + ldy IRQ.VBL.n0 + jsr IRQ.VBL.MRM READMOUSE inc CORE.IRQTick @@ -102,8 +99,7 @@ K.IrqHandler.VBL clc rts *-------------------------------------- -K.IrqHandler.DEV - >LDYAI Dev.Table +K.IrqH.DEV >LDYAI Dev.Table >STYA $fe ldx DevMgr.Count @@ -114,7 +110,7 @@ K.IrqHandler.DEV beq .6 phx - jsr K.IrqHandlerJMP + jsr K.IrqHJMP plx bcc .8 CC, IRQ cleared by device @@ -136,12 +132,12 @@ IRQ.IntNum .BS 1 *-------------------------------------- IRQ.OldFFFE .BS 2 *-------------------------------------- -K.IrqMgrVBL.n0 .BS 1 -K.IrqMgrVBL.0n .BS 1 -K.IrqMgrVBL.MSM jmp $0000 -K.IrqMgrVBL.MRM jmp $0000 +IRQ.VBL.n0 .BS 1 +IRQ.VBL.0n .BS 1 +IRQ.VBL.MSM jmp $0000 +IRQ.VBL.MRM jmp $0000 *-------------------------------------- -K.IrqHandlerJMP ldx #DEVMGR.IRQ +K.IrqHJMP ldx #DEVMGR.IRQ jmp ($fe) *-------------------------------------- MAN diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index cd0fb2b1..50a2f1ee 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -109,7 +109,7 @@ K.SYSCALL.JMP .DA 0 $00 .DA K.GetPSStatus.A .DA K.GetPSList.YA - .DA * $B0 + .DA 0 $B0 .DA K.GetArg.A .DA K.ExpandStr.YA .DA 0 @@ -117,28 +117,44 @@ K.SYSCALL.JMP .DA 0 $00 .DA K.SetEnv .DA K.GetEnv.YA .DA K.UnsetEnv.YA + + .DA K.FAdd $C0 + .DA K.FSub + .DA K.FMult + .DA K.FDiv + .DA K.FPwr + .DA 0 + .DA 0 + .DA 0 + + .DA K.Log $D0 + .DA K.Sqr + .DA K.Exp + .DA K.Cos + .DA K.Sin + .DA K.Tan + .DA K.ATan + .DA 0 *-------------------------------------- * $E000 *-------------------------------------- - .DA K.GetMem $C0 + .DA K.GetMem $E0 .DA K.FreeMem.A .DA K.GetMemPtr.A .DA K.GetMemByID.A .DA K.GetMem.YA .DA K.GetMem0.YA - .DA K.SetLoMem .DA K.NewStr.YA + .DA K.GetMemStat.YA *-------------------------------------- - .DA 0 $D0 + .DA K.Sleep $F0 + .DA 0 .DA 0 .DA 0 .DA 0 .DA K.LoadStkObj.YA .DA K.GetStkObj.A .DA K.FreeStkObj.A - .DA K.GetMemStat.YA -*-------------------------------------- - .DA K.Sleep $E0 *-------------------------------------- * LO Byte : * #RRAMWRAMBNK1,#RRAMWRAMBNK2 @@ -348,8 +364,42 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00 .DA #$80 .DA #RRAMWRAMBNK2 .DA #$80 + + .DA #RRAMWRAMBNK2 $C0 + .DA #$80 + .DA #RRAMWRAMBNK2 + .DA #$80 + .DA #RRAMWRAMBNK2 + .DA #$80 + .DA #RRAMWRAMBNK2 + .DA #$80 + .DA #RRAMWRAMBNK2 + .DA #$80 + .DA #RRAMWRAMBNK2 + .DA #$80 + .DA #RRAMWRAMBNK2 + .DA #$80 + .DA #RRAMWRAMBNK2 + .DA #$80 + + .DA #RRAMWRAMBNK2 $D0 + .DA #$80 + .DA #RRAMWRAMBNK2 + .DA #$80 + .DA #RRAMWRAMBNK2 + .DA #$80 + .DA #RRAMWRAMBNK2 + .DA #$80 + .DA #RRAMWRAMBNK2 + .DA #$80 + .DA #RRAMWRAMBNK2 + .DA #$80 + .DA #RRAMWRAMBNK2 + .DA #$80 + .DA #RRAMWRAMBNK2 + .DA #$80 *-------------------------------------- - .DA 0 $C0 : MemMgr at $E000 + .DA 0 $E0 : MemMgr at $E000 .DA 0 .DA 0 .DA 0 @@ -367,7 +417,7 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00 .DA 0 .DA 0 *-------------------------------------- - .DA 0 $D0 + .DA 0 $F0 .DA 0 .DA 0 .DA 0 @@ -385,12 +435,9 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00 .DA 0 .DA 0 *-------------------------------------- - .DA 0 $E0 -*-------------------------------------- -PullPtr1Ptr2Ptr3 - sec +PullP1P2P3 sec .HS 90 bcc -PullPtr1Ptr2 clc +PullP1P2 clc >PULLW ZPPtr1 >PULLW ZPPtr2 bcc .9 diff --git a/SYS/KERNEL.S.MATH.txt b/SYS/KERNEL.S.MATH.txt index 623f3648..88307c2a 100644 --- a/SYS/KERNEL.S.MATH.txt +++ b/SYS/KERNEL.S.MATH.txt @@ -4,8 +4,8 @@ LOMEM $A00 INC 1 AUTO 6 */-------------------------------------- -* # FAdd,FSub,FMult,FDiv -* Return X+Y,X-Y,X*Y,X/Y +* # FAdd,FSub,FMult,FDiv,FPwr +* Return X+Y, X-Y, X*Y, X/Y, X^Y * ## In: * PUSHW = X (*Float) * PUSHW = Y (*Float) @@ -18,38 +18,52 @@ K.FSub ldx #ROM.FSUB K.FMult ldx #ROM.FMULT .HS 2C BIT ABS K.FDiv ldx #ROM.FDIV - + .HS 2C BIT ABS +K.FPwr ldx #ROM.PWR + >STYA FORPNT phx jsr MATH.PullFAC jsr MATH.PullARG - >PULLW FORPNT - plx - jsr A2osX.ROMCALL - >ROMCALL GETFAC - clc - rts + bra MATH.Go */-------------------------------------- -* # Log,Cos,Sin,Tan,ATan -* Return +* # Log,Sqr,Exp,Cos,Sin,Tan,ATan +* Return Log(x), Sqr(x), E^X, Cos(x), Sin(X), Tan(x), ATan(x) * ## In: * PUSHW = X (*Float) * Y,A = Dest (*Float) *\-------------------------------------- -K.Cos jsr MATH.PullFAC -* >ROMCALL COS -*-------------------------------------- -MATH.PullFAC >PULLA - tay - >PULLA - >ROMCALL SETFAC.AY +K.Log ldx #ROM.LOG + .HS 2C BIT ABS +K.Sqr ldx #ROM.SQR + .HS 2C BIT ABS +K.Exp ldx #ROM.EXP + .HS 2C BIT ABS +K.Cos ldx #ROM.COS + .HS 2C BIT ABS +K.Sin ldx #ROM.SIN + .HS 2C BIT ABS +K.Tan ldx #ROM.TAN + .HS 2C BIT ABS +K.ATan ldx #ROM.ATAN + >STYA FORPNT + phx + jsr MATH.PullFAC + +MATH.Go plx + jsr A2osX.ROMCALL + >ROMCALL GETFAC + clc rts *-------------------------------------- -MATH.PullARG >PULLA - tay - >PULLA - >ROMCALL SETARG.AY + +*-------------------------------------- +MATH.PullFAC >PULLW INDEX + >ROMCALL SETFAC rts *-------------------------------------- +MATH.PullARG >PULLW INDEX + >ROMCALL SETARG + rts *-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.MATH diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index bb10ae2d..1bf1a283 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -181,7 +181,7 @@ K.GetMem.I tya * Y,A = Requested size * Out: *-------------------------------------- -Mem.AddSlot >STYA ZPMemMgrTmp1 save req size +Mem.AddSlot >STYA ZPMemMgrTmp1 save req size ldx Mem.LastSlot inx beq .99 > 255 ERR:OUT OF SLOT @@ -238,7 +238,7 @@ Mem.NextSlot lda ZPMemMgrSPtr inc ZPMemMgrSPtr+1 .8 rts *-------------------------------------- -Mem.Init0 ldy #S.MEM.PTR +Mem.Init0 ldy #S.MEM.PTR lda (ZPMemMgrSPtr),y ZPMemMgrSPtr already set sta .2+1 iny @@ -434,10 +434,6 @@ K.GetMemByID.A sta ZPMemMgrSPtr * sty ZPMemMgrSPtr * sta ZPMemMgrSPtr+1 * rts -*-------------------------------------- -K.SetLoMem - clc - rts */-------------------------------------- * # NewStr.YA * Create a new copy of this C-String diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index 4687cbf7..5242025d 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -24,15 +24,15 @@ K.CreatePSNewEnv.YA .HS 2C bit abs K.CreatePS.YA ldx #0 - stx K.CreatePS.Flags - >STYA K.CreatePS.CmdLine + stx PS.Flags + >STYA PS.CL jsr PS.CreateChild Child S.PS at ZPPtr3 bcs .9 sta .8+1 - >LDYA K.CreatePS.CmdLine + >LDYA PS.CL jsr PS.CmdLine2Args Y,A = Args[0] bcs .9 @@ -49,8 +49,8 @@ K.CreatePS.YA .8 lda #$ff self modified .9 rts *-------------------------------------- -K.CreatePS.Flags .BS 1 -K.CreatePS.CmdLine .BS 2 +PS.Flags .BS 1 +PS.CL .BS 2 *-------------------------------------- * PS.CreateChild * in : @@ -103,14 +103,14 @@ PS.CreateChild ldx #0 plx sta PS.Table.hMem,x - jsr PS.SetMemOwnership Set Ownership + jsr PS.SetMemOwner Set Ownership ldy #S.PS.PID lda CORE.LastPSID sta (ZPPtr3),y lda #S.PS.F.DUPENV - bit K.CreatePS.Flags need to create ENV & Prefix ? + bit PS.Flags need to create ENV & Prefix ? beq .6 no... sta (ZPPtr3) Mark this PS with DUPENV flag @@ -121,7 +121,7 @@ PS.CreateChild ldx #0 jsr K.NewStr.YA bcs .9 - jsr PS.SetMemOwnership Set Ownership + jsr PS.SetMemOwner Set Ownership txa ldy #S.PS.hPREFIX @@ -159,7 +159,7 @@ PS.CreateChild ldx #0 sta (ZPPtr3),y lda #S.PS.F.HOLD - bit K.CreatePS.Flags + bit PS.Flags beq .82 ora (pPs) @@ -206,9 +206,9 @@ PS.CmdLine2Args >STYA ZPPtr1 ldy #S.PS.hARGS sta (ZPPtr3),y - jsr PS.SetMemOwnership Set Ownership + jsr PS.SetMemOwner Set Ownership - stz PS.CmdLine2Args.bInQuote + stz PS.bInQuote ldy #$ff ldx #0 Arg Count @@ -219,15 +219,15 @@ PS.CmdLine2Args >STYA ZPPtr1 cmp #'"' found a quote ? bne .5 - lda PS.CmdLine2Args.bInQuote + lda PS.bInQuote eor #$ff - sta PS.CmdLine2Args.bInQuote + sta PS.bInQuote bra .4 .5 cmp #' ' bne .6 - bit PS.CmdLine2Args.bInQuote + bit PS.bInQuote bmi .6 inx Found one arg !!! @@ -258,8 +258,7 @@ PS.CmdLine2Args >STYA ZPPtr1 clc .9 rts -PS.CmdLine2Args.bInQuote - .BS 1 +PS.bInQuote .BS 1 *-------------------------------------- PS.Init jsr BIN.Load.YA Y,A=filename full path bcs .9 @@ -277,7 +276,7 @@ PS.Init jsr BIN.Load.YA Y,A=filename full path sta (ZPPtr3),y save CS hMem in S.PS jsr K.GetMemByID.A - jsr PS.SetMemOwnership Set Ownership + jsr PS.SetMemOwner Set Ownership ldy #H.BIN.EXE.DS.SIZE+1 lda (ZPPtr4),y Load DS.SIZE HI @@ -304,7 +303,7 @@ PS.Init jsr BIN.Load.YA Y,A=filename full path ldy #S.PS.hDS sta (ZPPtr3),y save DS hMem in S.PS - jsr PS.SetMemOwnership Set Ownership + jsr PS.SetMemOwner Set Ownership .2 ldy #H.BIN.EXE.SS.SIZE lda (ZPPtr4),y Load SS.SIZE @@ -330,7 +329,7 @@ PS.Init jsr BIN.Load.YA Y,A=filename full path ldy #S.PS.hSS sta (ZPPtr3),y save SS hMem in S.PS - jsr PS.SetMemOwnership Set Ownership + jsr PS.SetMemOwner Set Ownership clc .9 rts @@ -350,7 +349,7 @@ PS.DupEnv.A jsr K.GetMemPtr.A >STYA ZPPtr2 - jsr PS.SetMemOwnership Set Ownership + jsr PS.SetMemOwner Set Ownership ldy #0 @@ -378,8 +377,7 @@ PS.DupEnv.A jsr K.GetMemPtr.A clc .9 rts *-------------------------------------- -PS.SetMemOwnership - lda CORE.LastPSID +PS.SetMemOwner lda CORE.LastPSID ldy #S.MEM.OWNERPID sta (ZPMEMMGR),y rts diff --git a/SYS/KERNEL.S.STAT.txt b/SYS/KERNEL.S.STAT.txt index 74e3f69f..7f694f21 100644 --- a/SYS/KERNEL.S.STAT.txt +++ b/SYS/KERNEL.S.STAT.txt @@ -27,14 +27,14 @@ K.Stat jsr PFT.CheckPathSTK >MLICALL MLIGETFILEINFO bcs .9 - ldx K.MLI.PARAMS+S.FILEINFO.ACCESS + ldx K.MLI.PARAMS+S.FI.A lda #S.STAT.MODE.XO+S.STAT.MODE.WO+S.STAT.MODE.RO - cpx #S.FILEINFO.ACCESS.FULL + cpx #S.FI.A.FULL beq .2 lda #S.STAT.MODE.XO+S.STAT.MODE.RO - cpx #S.FILEINFO.ACCESS.R + cpx #S.FI.A.R beq .2 lda #0 @@ -57,13 +57,13 @@ K.Stat jsr PFT.CheckPathSTK iny - lda K.MLI.PARAMS+S.FILEINFO.BLOCKSUSED + lda K.MLI.PARAMS+S.FI.UBLKS asl jsr K.Stat.StoreY iny - lda K.MLI.PARAMS+S.FILEINFO.BLOCKSUSED+1 + lda K.MLI.PARAMS+S.FI.UBLKS+1 rol jsr K.Stat.StoreY @@ -79,9 +79,9 @@ K.Stat jsr PFT.CheckPathSTK K.Stat.StoreY sta $ffff,y rts *-------------------------------------- -K.Stat.SRC .DA #S.FILEINFO.TYPE - .DA #S.FILEINFO.AUXTYPE,#S.FILEINFO.AUXTYPE+1 - .DA #S.FILEINFO.BLOCKSUSED,#S.FILEINFO.BLOCKSUSED+1 +K.Stat.SRC .DA #S.FI.T + .DA #S.FI.AUXTYPE,#S.FI.AUXTYPE+1 + .DA #S.FI.UBLKS,#S.FI.UBLKS+1 K.Stat.DST .DA #S.STAT.P.TYPE .DA #S.STAT.P.AUXTYPE,#S.STAT.P.AUXTYPE+1 .DA #S.STAT.BLOCKS,#S.STAT.BLOCKS+1 @@ -96,12 +96,12 @@ K.Stat.DST .DA #S.STAT.P.TYPE *\------------------------------------- K.MKDir.YA jsr PFT.CheckPathYA jsr STDIO.SetMLIPathYA - lda #S.FILEINFO.ACCESS.FULL - sta K.MLI.PARAMS+S.FILEINFO.ACCESS - lda #S.FILEINFO.TYPE.DIR - sta K.MLI.PARAMS+S.FILEINFO.TYPE - lda #S.FILEINFO.STORETYPE.DIR - sta K.MLI.PARAMS+S.FILEINFO.STORETYPE + lda #S.FI.A.FULL + sta K.MLI.PARAMS+S.FI.A + lda #S.FI.T.DIR + sta K.MLI.PARAMS+S.FI.T + lda #S.FI.ST.DIR + sta K.MLI.PARAMS+S.FI.ST * jsr DATETIME diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 5b059996..d6077e53 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -255,13 +255,13 @@ K.FOpen jsr PFT.CheckPathSTK bit K.FOpen.MODE Create if not exists ? bpl K.FOpen.9 No, return MLI error - lda #S.FILEINFO.ACCESS.FULL Yes, Create... + lda #S.FI.A.FULL Yes, Create... sta K.MLI.PARAMS+3 Access lda K.FOpen.TYPE sta K.MLI.PARAMS+4 File type >LDYA K.FOpen.AUXTYPE >STYA K.MLI.PARAMS+5 Aux type - lda #S.FILEINFO.STORETYPE.STD + lda #S.FI.ST.STD sta K.MLI.PARAMS+7 ldx #3 @@ -621,7 +621,7 @@ K.Rename jsr PFT.CheckPathSTK * PUSHW PSTR to scan (ex: "192.168.1.5") * ## Out: *\-------------------------------------- -K.SScanF jsr PullPtr1Ptr2Ptr3 +K.SScanF jsr PullP1P2P3 ldy #0 Y = PTR in pattern @@ -940,10 +940,8 @@ PrintF.U.1 bcc .8 unsigned, nothing to check PrintF.E sec Force "E+12" .HS 90 BCC PrintF.F clc - >PULLA - tay - >PULLA - >ROMCALL SETFAC.AY + >PULLW INDEX + >ROMCALL SETFAC ldy #3 In order not to trash A2osX.SaveSM,A2osX.SaveSX >ROMCALL FOUT diff --git a/SYS/KERNEL.S.STDLIB.txt b/SYS/KERNEL.S.STDLIB.txt index f48032e9..fd16320b 100644 --- a/SYS/KERNEL.S.STDLIB.txt +++ b/SYS/KERNEL.S.STDLIB.txt @@ -60,7 +60,7 @@ K.StrToL sec Signed * ## Out: *\-------------------------------------- K.StrToUL clc Unsigned - jsr PullPtr1Ptr2Ptr3 + jsr PullP1P2P3 >PULLA Base jsr K.AToL.I @@ -83,7 +83,7 @@ K.StrToUL.rts rts * PUSHW PTR to target buffer DWORD * ## Out: *\-------------------------------------- -K.AToL jsr PullPtr1Ptr2 C-String in Ptr2, Dst buffer in Ptr1 +K.AToL jsr PullP1P2 C-String in Ptr2, Dst buffer in Ptr1 lda #10 base 10 sec signed diff --git a/SYS/KERNEL.S.STRING.txt b/SYS/KERNEL.S.STRING.txt index e28f15dd..011c8315 100644 --- a/SYS/KERNEL.S.STRING.txt +++ b/SYS/KERNEL.S.STRING.txt @@ -35,7 +35,7 @@ K.StrLen.YA >STYA ZPPtr1 * ## Out: * DST = DST+SRC *\-------------------------------------- -K.StrCat jsr PullPtr1Ptr2 +K.StrCat jsr PullP1P2 .1 lda (ZPPtr1) beq K.StrCpy.I @@ -53,7 +53,7 @@ K.StrCat jsr PullPtr1Ptr2 * ## Out: * DST = SRC *\-------------------------------------- -K.StrCpy jsr PullPtr1Ptr2 +K.StrCpy jsr PullP1P2 K.StrCpy.I ldy #0 @@ -77,7 +77,7 @@ K.StrCpy.I ldy #0 * CC : match * CS : no match *\-------------------------------------- -K.StrMatch jsr PullPtr1Ptr2 +K.StrMatch jsr PullP1P2 lda (ZPPtr2) Get pattern 1st byte beq .8 Match always if empty diff --git a/SYS/KERNEL.S.TIME.txt b/SYS/KERNEL.S.TIME.txt index 36e191ca..eaa98fe7 100644 --- a/SYS/KERNEL.S.TIME.txt +++ b/SYS/KERNEL.S.TIME.txt @@ -30,7 +30,7 @@ K.Time.YA >STYA ZPPtr2 * PUSHW = Dst PTR To S.TIME * PUSHW = Src PTR to ProDOS DATE/TIME (DWORD) *\-------------------------------------- -K.PTime2Time jsr PullPtr1Ptr2 +K.PTime2Time jsr PullP1P2 TIME.PTime2TimeP1P2 ldy #1 lda (ZPPtr1),y Get Year @@ -167,7 +167,7 @@ K.ComputeWDAY lda #3 Thursday : 4 (-1 for mod 7) * PUSHW = Dst PTR To S.TIME * PUSHW = Src CTIME DWORD *\-------------------------------------- -K.CTime2Time jsr PullPtr1Ptr2 +K.CTime2Time jsr PullP1P2 ldy #3 @@ -402,7 +402,7 @@ K.CTime.Year .BS 1 * ## Out: * none. always succeed. *\-------------------------------------- -K.StrFTime jsr PullPtr1Ptr2Ptr3 +K.StrFTime jsr PullP1P2P3 ldy #0 diff --git a/TEST.S.txt b/TEST.S.txt index afcd7c1b..c4ff84c4 100644 --- a/TEST.S.txt +++ b/TEST.S.txt @@ -35,9 +35,10 @@ L.FLOAT2 .DA FLOAT2 L.FLOAT3 .DA FLOAT3 L.FLOAT4 .DA FLOAT4 L.FLOAT5 .DA FLOAT5 -L.MSG .DA MSG L.CONST1 .DA CONST1 L.CONST2 .DA CONST2 +L.MSG1 .DA MSG1 +L.MSG2 .DA MSG2 .DA 0 *-------------------------------------- CS.INIT clc @@ -46,32 +47,36 @@ CS.INIT clc CS.RUN >PUSHEA.G ENDPTR >PUSHW L.CONST2 >PUSHEA.G MYFLOAT2 - >SYSCALL StrToF - >PUSHEA.G MYFLOAT2 - >PUSHEA.G ENDPTR >PUSHW L.CONST1 >PUSHEA.G MYFLOAT1 - >SYSCALL StrToF + >PUSHEA.G MYFLOAT2 >PUSHEA.G MYFLOAT1 - >PUSHW L.FLOAT5 >PUSHW L.FLOAT4 >PUSHW L.FLOAT3 >PUSHW L.FLOAT2 >PUSHW L.FLOAT1 - >LDYA L.MSG + >LDYA L.MSG1 + >SYSCALL PrintF.YA + >PUSHEA.G MYFLOAT1 + >PUSHEA.G MYFLOAT2 + >LEA.G MYFLOAT3 + >SYSCALL FSub + + >PUSHEA.G MYFLOAT3 + >LDYA L.MSG2 >SYSCALL PrintF.YA lda #0 sec -.9 rts + rts *-------------------------------------- CS.DOEVENT sec rts @@ -80,20 +85,22 @@ CS.QUIT clc rts *-------------------------------------- CS.END -MSG >CSTR "PrintF:%e,%e,%e,%e,%e\r\nStrToF:%e,%e\r\n" +MSG1 >CSTR "PrintF:%e, %e, %e\r\n%e, %e\r\nStrToF:%e, %e\r\n" FLOAT1 .HS 9B3EBC1FFD 99,999,999.9 FLOAT2 .HS 9E6E6B27FD 999,999,999 FLOAT3 .HS 9E6E6B2800 1,000,000,000 FLOAT4 .HS 8100000000 1 FLOAT5 .HS 9080000000 -32768 CONST1 >CSTR "3.141592653" -CONST2 >CSTR "-12.345678E-17" +CONST2 >CSTR "2" +MSG2 >CSTR "PI/2=%e\r\n" *-------------------------------------- .DUMMY .OR 0 DS.START MYFLOAT1 .BS 5 MYFLOAT2 .BS 5 +MYFLOAT3 .BS 5 ENDPTR .BS 2 DS.END .ED