From 92922a9308799db08e3f2c9ec049389e4407fa5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Tue, 24 Jul 2018 18:00:24 +0200 Subject: [PATCH] Kernel 0.9.2 --- .Docs/KERNEL.md | 20 ++-- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes BIN/ARP.S.txt | 4 +- BIN/ASM.S.FIO.txt | 1 - BIN/ASM.S.MAC.txt | 4 +- BIN/ASM.S.SYM.txt | 2 +- BIN/ASM.S.txt | 2 +- BIN/CAT.S.txt | 1 - BIN/EDIT.S.txt | 2 +- BIN/IPCONFIG.S.txt | 42 ++++---- BIN/MD5.S.txt | 2 +- BIN/MEM.S.txt | 21 ++-- BIN/MEMDUMP.S.txt | 7 +- BIN/TELNET.S.txt | 211 +++++++++++++++++++++++++++++++++++++++ BIN/X.CPMVRM.S.txt | 6 +- BMP2PIX.S.txt | 2 - ETC/HOSTS | 2 +- FNT2FON.S.txt | 4 - INC/LIBTCPIP.I.txt | 6 +- SBIN/KCONFIG.S.txt | 1 - SBIN/TCPIPD.S.CFG.txt | 21 ++-- SBIN/TCPIPD.S.txt | 2 +- SBIN/TELNETD.S.txt | 11 +- SYS/KERNEL.S.FIO.txt | 2 +- SYS/KERNEL.S.IO.txt | 64 ++++++------ SYS/KERNEL.S.STDIO.txt | 27 ++--- 27 files changed, 339 insertions(+), 128 deletions(-) create mode 100644 BIN/TELNET.S.txt diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index c2e2b312..b596369e 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -694,7 +694,7 @@ TODO: mode="w+t=TYP,x=AUXTYPE" Close a file ## C -int fclose ( FILE * stream ); +int fclose ( hFILE streamm ); ## ASM **In:** @@ -702,12 +702,13 @@ int fclose ( FILE * stream ); **Out:** # FRead -int fread ( void * ptr, int count, FILE * stream ); +int fread (hFILE stream, void * ptr, int count ); Read bytes from file **In:** - PUSHW = Dest Ptr - PUSHW = Bytes To Read - PUSHB = hFILE +`>PUSHWI count` +`>PUSHW ptr` +`lda hFILE` +`>SYSCALL fread` **Out:** Y,A = Bytes Read @@ -715,13 +716,14 @@ Read bytes from file Write bytes to file ## C -`int fwrite ( const void * ptr, int count, hFILE stream );` +`int fwrite (hFILE stream, const void * ptr, int count );` ## ASM **In:** -`>PUSHB = hFILE` -`>PUSHWI ptr` -`>LDYA count` +`>PUSHWI count` +`>PUSHW ptr` +`lda hFILE` +`>SYSCALL fwrite` # Out: Y,A = Bytes Written diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 10231d44a191fe3c4ecd72d1c5b1830b2a0e1602..22f01159a4da721196f1791624624d4dbf8996c5 100644 GIT binary patch delta 24854 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%0D0a-?z^J{Q8qoK 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 aA(gi%ntq;_KF<$%o_BnncWU6B^ZyT;?T>K) delta 24857 zcmaic2|!d;7w~=W%^OCBeVbwRF$+5b3@9`1hzJ;)fV(B27^sLTmTezUVrF8X<(0ym zNJ#t`8?+$%(lnRA%BIC7T*3{J)W)SUEBViTZy3<}|KH^;=bU@)x#ymH&bjBkc@-7f ziVCgikcf`9+jK-UMfAH$=CR40B^R!)oAOyD^SjDt(<|(90C+m=`I~)(5`ClccG$Dl z?y$%{4_W_+HdXrjY;vJpY4)>CwGQ!{3=U3vIvgIy;a-SFY_KvRJ8OWJoW+S0gY*n~ zQ4!*zM3)c;-MMVa+Wr)CS2c3e;qBEfn`l(4@^l?U<~PdX?d_q3MrZ+q&e;eh|jUUr4^AY-073xGt`HS|z zIO#%ak7#EpE!v}E>^D8rGS1~M7QLq690z1^-E^d-&?R4tl9c{lR$z?do>4|I<@`zt z^b*GNgE9H+$=nqzrk>gK%!d*3nC4sD{y;-y^AlCnYGgpo-BrwL+R(V?e;+1=QjHtW zSBvH@pSyHV_4%dL?(QWlwRTgH%s%QJ;3`Qv}_ zUah?i6mWE|p3kf=U^XmZ>I<2)6Ya-iC~Y*=im3uh?sej7mGf$+-Di8wRw4dKRfKV^ zI0|r7YkNuo6*0m`o{Vxdsac7WlQlWH3Axj9UehE^t&B$66l}s&43&y6Vk(-Ng59@J zTIw-8c?%UqrQxTy05BcDzlEAmo?+vVGAU_#HEAD%JTq<3^n}FM2~dlCvTVRfDT!G* z+0(OE6O0adPPJiDvv}$lEs|y1fawW2j|rSdBF`KfIC;kF8VO+?jbyoaX&vPypJqc& z%E;03ZL~TRHXYa3Q9d)nV@6cYFUntDnU#~9jY4J&5@)6-q-OAgkJGJ=36Iwgp<`#F zFyuaKfOr!>MBpl!jlvEDMIzrh*y%0GhnkB+-=Y-M<2datDv){tFMW$rXUv0Uuow~( z5>t{ixw&b4A27JQq43nK^@Qn2_FIS_K)-ei zp$&`{N4-V)QBUGAZ$s}z_=&eEwQsS25_&JnNJvlOH6DW|EW+=+O^v4(Ra2v&=HSK!Ke%ExQvP$HolqU&WQvUwsgXGx>Gc;M* znYo!S2{QUu;%~Qt950cRhqERzEi)%+QYAq~BNaApr95%aJCrlEnkT?h-l1Hu>pPSe zUPhp61n3(8rCt%P_Y(M8;rbkbzsg^`XeOs-%*c)5S;r&QI)Nf+8&JO{Tu<3XcyA-T z33LOl*hcwNHTa!vl#i}^WtsCO089O|Zdu@Yf$Q9DgH3a$YKl^qrWcm*(-jks0t^o$Ggp=YmRD*FSoOPPIXBoyYKewowMg=w zVAEdP@v?U*&+-imzeUmV-3LA|i-wVR}{6LV2=^)aqtR&v3iGbnJ$o~ZX`g0KJB<_Qg?$l5^O;Tb? zW_Hq4-e>BN&*=eVV&biku+N3NE42*aO-e7oA@WdCaxU{5<LWmT3mcD60n}~$)e)G@JGl1<;?ESmBecnkHZ^ z^1D9()=bT=A-18G#vHJV)*O&Pu=x|eeiV%MFTDFGrJVVZHWXX&D1{Kn4r}5h)02i>EntYbWq-LZV%yM8hJeQ z>+Sv!CVi%mER8@u9{90N%G=NLA$&r{EWV|7#0cc=g)2HC50+ueBI?z)W7L)Dk`q@A z_N^x&L%zY$`|PUDR)|u#T-+K+dx`Kl?k)UfAYB43NUxxmfd%eV(BZDv&ovyYU^zH_ zNiuBi9KNWaBjRtK?dLmf$v{U?PI^Ln8119I5YG6N| zacb{Q=F_>SxZG36%(o0~%?PeKjJp|o{=A0?Bj;vBPV&6E{{B1>E0zq48!=K7#Y=)6 z)U?WB_<2)8b>pe^+fQxSkH@I#NW1N)YDFE!M!ZZ-dzAln${+^LlP;Outh*(rTGY|p zUyIhs^HPkzo#JL)F4E-zL$Zm2;Ta?Xc@iPtkbN3pZ%*DyB=PH&MHyX>gB$eFrK-|QwN z#XEhfi<#!A>O~9@t!@#+y?dtPnECEHICC@c)*yOPxc1EPg{Li!jWo2bqHEUnFcqso z8!ojd?cJ{G|1xA~T=FGT+J-#r5KNCOUvPTuF_+(=ceCu~lcy`(xc9qsc?P=%rWI`! zaK?qFQ~P%spM>L%UNh5SIcqFDT|NJFGXK1&`?XK#p2M}ZIKdDVIUFB6C;|d z$TyRIbD!jOS z7~+}TB0!q~eX6U1;hI8dm-0(pAfN6URlV>uhsSk<-dEW|3y)nWDAk-Xa*N^G=v$kub%-LuYuB zo{pt1;Z=Hi5*3B_>1p|sRcB33vklDNt%&em>+)Ms9x>@=dmRTT(e|y4@8rSsgma5} zOhMeGvsGIS{T*P{G6HZ*X%KNI&YB#KneP>`TdTHKT$bmNb#dveK&9lK=rIM%=03z@ zM$tiHAob@?;G$7+Tn z%ru}hZ~@f^&aeOM{I1LHot!1w-~vlE`BL?v^XorvPa8vwNUlEYNP5q6+$g?&gjiGY~j#8 zQ%LoE$-PJN4KE~5R0|DrVhqU_X}ueJDbMt`nhCJ;4;=ch6NhtT9*trAsfFW=fkMArGJYLcmd{X_lntK7X=*dOD_3oi zf%E9@bhOxY0PkbwJL_+&xJHFM4-UG#mJrSu%5l&ng8Niq%H>>?rr(Uy)n-LYzItzg zx>ISoT1~4P(BAp#t+d+G)!SjdTk!+mmYbk79c!7c-utC$rvdGKT)p)>Rd2_Eks|Y5 z;Lu5#cQsd3f2XQ=pYN_Ej5CJwJt4kzeYUzjN8Rut(dvW^Icn_mE~6}OSU~RGH)N}; zr>WQHs@FAK20+z?)!pDabJP~L;Ue4{vj?t<^6K+JIs?@A6lQjvS*FW_p}O{N%~yAh zH8bl*?dYChzNE|BVsWX?SFh9E$XC}DsNX42%ky-3#$2^o0(!DI9iOH?o~z#7UEb4e zrh6{r)lUbeT?Vx81J#fDYO}*v`D%+ChW^WaUEa;<>ig?-FMgof30O1u!Ta*O`nl>| z`D&n_5Blzmu5s=hWs)9XESiqG8S37O-cF5KxqgP)I9J^%vUqc^Doq~7IqI8p)h%PY48lf&qZC*^qtr&fseX?Ftg^eQ?XzqyX~!Mj$2-D`1W6&*;oMB+Y(icZ?r zF2Sk%YG4c+EU%*dQsQ?so+(xm@D_5AH+B_|{3mF{KS6O1gK%^e9fTXIXwKTJYfGfE z!39=Q4V%~e4H$1^`>$0{5vFEhyS4P(09|XBg&9=~Q(^?dx4=+fAiCy|+O9mEL5C~X z($n|?X#2^vbP(0Hj+Q9=FG*G*7YTx7;u|hgJym@-WLxN-&@VzShW;FS7pq(7Q1(*D zxl18<>IT|V{c}ijMQvBbCp!&ptzBmO?cI$RxL4IRJM#?B!2P%U{Ty7~Li0d z_DvuM$FYj$$H3=~QgZi$OjI7XIK(98KE;hjdIA;S-eaW4(Z0Y=4D1LGhwYaeucV<6 zgR~Wt!TpH8HPRkbJkB-II*-M{hNq!#+x!@w;o`BuM0+|xOBw0CL|G%|R^vk^I?!b( zArTqZ-J?V8Mkx)BaI-1;yazsakM?jScY_>(5I^2Z7X=LgHbjGPdG!S@g$+*p9e@1~#or&MY8>EUiL zkRd`4k?@Q6=`4D22>#|i?Jq4?8yq+|NVsxbwue?j5$&x#bQ6_<6F#I39yfv@KQpXs z?c#k5iE)dAp#Vq+W518+5V}1WCv2qy9AW0=#lAaWzNK6{e(EE7Gc^iJ+Q6bl;ixux zt>{pQ;b}bX0j+Pp+eVA1wvTBaaZG98roi^Va7Cs9A$eYlf-@?)hMh1dYjh!j!#Gu; zyOF8bVa!(C$ijc@rzcGI;f%h5cQ?)g3go zZ}-!(nS2-XflEGcS)jO4z!ULn6mAJe<9y*HV2t^~U7m27$DdjPIOA|ZqJhwZCwxYS z@e2zt`i$m;t97=kouAQDnhwyk1E*4_kmnCv!qfSiKc~mx%6__hj|&}7wH>CPq~kA% z;K4)Gz|$J?>_wF{DK%F}lKG>!l#-$jHz11@$Zo5Kx!`w>((24;yKJOLeCQDn58?_!MyPUC<*Ij7osXmqqUwt(nDxQg zY`Lg{)ynXZ4KlcHv(u0SBJDK=NgoK6 z2YQjts79d`W?zV|{2W^If*{TqEX-3y7KC^n6(XbzRutZFf*uLJ^T-KW=|qgfAZ-w} zb`#2`lQeC=_L%v%79D5QbDK}oYpILvub!suDY1G5nMAzlM|!j$xk6leL2+5siini_ zB@4MpE0--PT*Xsd{E=45c#4eDGA^-n>B8bCS1vDHKtSytUG!Jf=9ef*`BA4*2Z{oZYVK)7QIaUnC`D9AlqM=RDm`j-R7=#}sLrU9QSWFkN8OD2HR`{iJ)!qQ z-NPcn8iKY5-3@XKo*ya;jt(9loD;k;_>JH%g8PHrL&8ELLS~0lhrAim7;-%1a!7FK zsL&@u%R=7|Z4PY+;{W1T&eBg%^|V#M@guFhy}SgD)gNh#$OW7`Dt?-61hTx^u2G{5`EWE8)OI}wEjyrL_W!ft z(q&IAUs1O5>1S4Wd$sF7)^ZcohR0jGsy`+}1rQge=4Rt%7ijPDkF;E=`ar*#hA>Px6;mld zQ;c{fk&iF|^=-V|a~aaFE8J|pXP??Gvltq{8M4)vf=tg>@6)dTlrS|c=6lrLIAHDd z#zCz~ZYYLMu2C@N)~;))7E3PD&gGwKNvAjVX`dsyBjQJZ$c;Vnl25f&J&jjO_GzoG zT6@&p_!M+S#tQVHw5bpgh~yovU1Si@vGIUbZkTi@D`jnK*N!5> zJNl7P?Vi!Iv!@3JW$R*4KEfYr4P<0Rf-VhnAw3XM+?J2EFdsske5~r)>fUvRxggr( zFjHhs_u?BDX=SvR(&Ey3xt1j5Jy&|JRovu7<^b%ryBE~i3q4;0rQYbdQgJPh^THD@ z(GlgZsZCz94Mh;gO7?534``cF$!FT?gWBg{w2NB1cEV_?Ki6(Jq^;ktt^Z7GmS6}7dMY+D>R>5Ti6RNh-x82e?*v8*k|%KkG(I`0irf781?AOv|4sRYglZX z04JCbLkYRX&s?TQNj?rTpa#Sh;JugW;pHC(?e5kUc2{-Rn0qc%e8u@jK=PDU9U@Gm zVKJ;7m`9jsmvAfMe<~A5Ge}bM50Yk)Apu$pup(--3?msGR}pD#%fr}FwRpxANV_)S zC0A%~ZyR<{$v$SPm)nHjxkCGu+t9)cxOQ1WA;X}Kjp8<`O#xdBMc;OrXmAR|#)q1a ztsMumY7cZn1!;EV)+#iZJ@1b3%12bMfMQO)F1}wpl zFMq15hU!h}B9h4X9t?}1o3+-igce0wr1?j7)10 zF+T&D!q2qD2mnwyg$Z`yepH$yq%D)?8v%1|vwEQ?waJxenYf>x4ndalpj|TZa(_D?@*={y=8;*Dl6x_CIYdygAz@%n z1_#i|m>sNeXl4gHSu?m75YUEj<_&KUgM)kNQB)@`=%qs)E`$v#1LIy=?+OqJF-rzS z%7fyp2w&)>qsu?xo#y{w-9zXy1*ijpvSO0~! z9O765+CkVP8Rh}CVLrIeuiCUG1t$u!_=8*V?wXy#6$Eit!;4I8g975+bN5YhC}aMp z1DMHaXz%=N)ObaFp>+vqQE^7KkoB1Sp{qQAM!Q+FZIa@c?3(-Ss=t7!o>q;$`sgK* zHzG_fLz^)$2%>V@;?Q`8M94;dhid>g5BmF{kCqKP6+!Ms!RTE-~CC!y~yu(ZwAAt z#^Z`#VZZwcKKLs=j{2nSH`;Sp*{^~g`Tgp)zhJ*Q%DP{LS&9#wE_xCsgc>|B3Q+*SPX=5U5% zCo0ZORPZGcD&@`D%*ZjNo$h9P1Krw{+7E7X9=S5lGDzSU3{_j=OB;5R<(Evh{JXn5 zBQ3prvE)RcY2=$Zz;1nKhDmn!R*DGkE}e{4+$4Qy*yYnKaW zEXBhqX1LN6Xew@5rfj_k&NvI)M}mO?bh@xtB|Ww*!}%05QM62XycEArFNqb8QL4>kCZ7)j+~bw1p<{6f(Xf*m$rL~n5$Hin32<^Pvige(=Wls^#!Vp zVPYnj^%Lq9>NV;*wMqRyoF2lY1b8b3cGV!p5VyoD%e#F~2op&`A?HFU<7-RbU!^X! zuL)zGrkWxcS~MrR1hr|HzbMDHx9eLz{p`TO&kr3wat^z8N$0@(lUp`_NjYqGl-w1a zZG7kGW-Sw0ZaGdE)ouzE3d+nF-$i zhyEYJPiRjRop}0$`lRJV?#Y6a1nzcz`1x7qH=IYP;Cpiarg^z}HQxduuWPq@NA%6) z|Ne9)@odQ1gJ=5BAoTNDgebFjdyAIIqT1pZ9UUJTYZ}=ZX|`{k;NXWixC^QFLDjze zW#HF7$l|xlm)x%-*L@LwD2pCe!QH{7BN?vkiWbUqP2p#*F|#jaz4gMFf@T1cM($0~m+~%3W}2 z4}S=4k-^WEz)eab^>C2dmo)ph(_3g~PrxhzHIe>7*{*nrjtTStuy4ydoN*h+>9vqv znN-|p{H~5k*SW@8IPSy>|;I@WZBtJRvE)*1Y3yPB1T0DeHtbhSlae@kC~TVH=iUw>B*z3taCz5%!N{6o6P z*tFsxu3u}i<9eb^PgShyRDna8(EhugadT^D)0p3>whV@{PwkB{&8aBp3t8jm7O9JyoKn%_D#mfM~4EH{BT?7vX=zN4>TfN}LLJv?~j zc`(9B#GiIq^cMSFzv6&duwH)CKYmNU^%e+rH?M)&_nY4T;oGscTW&`%JZ?`r91Krd zL~@{nhGw>Rt@*AF-~*lI31q3%5W*LE9zc1ghHh@iBkgt2{%-(txAX*V5;ZpvV}f*P z$dnT4@ei{YrKD7E{=HeVwY0r|7L(xO5&)}F5oFK56#be?>VUHrF`jOoC?N=isl3T+ z(VwOB@Mjh=<6O2fKpiQ(SA99s1%OaeKDg9U!#h%|A-1r$Vu1a zz*~`-#El_zzmv8{+gzc6A7P$fK*(_ZVn!B!Ys>)DIev|5#9-r`S?SisH)$vIwH(O& zN#oc#gbaTGja^Q=0aQ((A^E&yCl@o?q&BZSc(($f@3^?Yvw`OWpN^lZdt6tnTdAwm zy{_A;`>$@V?hD;X-6h>UoxR>o@1^(CUx>dQ@1z@{d!T>bZlgc(F& zYjNE3BTO;8*|8A7VZE#38n2RY+1NvlEu%Q&XpTD;LE}5<$!zQ4;c{>5MX+%b z3wIT_-zmibtC(Qw7@oX}c?nLPtC%S2GX7%~GoQNL{`j+uE6Yd3_ND(}awy6be_qZc zi$_P8Lg8tOa|NS@HX|ySQg>JaZoHEwV*nrhtI>knE0{@cK~s9y%z8LP?}Hp?jC}VCe*+1)NpYb9LGi2JpiW21P1cKpTle+6fNQEP|qIZ*x9Rc)#L3=(gs)v=vd!?}Jx+ptru=uI@4Kb1=;>T;b|BK6;}%DoA}UUHE-@?M-aL#%M0lsR;xLD! zP41vw0uY13D|UmE;T4!r|A_JDuZUcmb>b8|?wqcAMn%wHDzNPN~C|ulzi#z1v4qV)Yi}LEb z`sav!Sf&ofMTmik@EjRLhDnSkmIGm_MneKrC<%}p)U&zd*dmjx1X7(_`kGTWA@BL_ zCL~K=-@L0gcL=VTk3+y=${=URFUDB;YJhJTR}PHTgfRz-HU&0_oNnngxAmGkdd*$E z$?=%^7e~H}imyRw;P3}{rVa9x#G1z0q!qXhG6keRnNRx$#$Gd&wcRoEO0 zhEXeu_2-K978cBvgsojO^yg*_xqV!J?s5F?8YW2AudQ+EOsJ7|&VdJ-`87=E^JK#N z@%c4Ov;%091wnq7=W&tP=M^Sw-Yva7NLYPe4-*^)^9z;?GaLpJ3?>Xy90n6y{kPr} z-#|a4+F%gRcuQY$pG+XME%{Rqt)XejUwUW^Eld8^SKn=a?-gbuCDX@&%)CpNL1t0o zM3OTH?oa&JTIQr25*UAYlLGPz3FH-`&Ut1Dl$JrjzE_#iF&2GoAIYzvJqyo?u5YzK zx@G>o^?IlspIhwQ-DegxZ@03KzGXHR(sPrW;)fho)L?wx`L&Jm2DfD`&82# zuvb~__FQY*X2yx~hZh2m_cpNCiy71CeZ|bVpL@-*;F=Ak@Cw~<9FCb}x9cZoT)lph z{GD-i##K;UD?Wl5<+O^cZvnjCiram4_tlhUQP0^?=0A(bSjjs>rmN(gq1LPX>q0K@ zx)5pIYtr(s9u_eCX})k;Ae`E^FcNWOKCMO^|AtTs_qbx7B44pdQK$GwaY%7e;h>CG zCM%y%u2drO5@44Pj(dm64B(%mkpSBRaZcFmy4aEJun**}v+%p`Ft@4A_>FDMVnrdd z+hOMmXRiJVqWkpHex>5qVLtuv*)N+gJVO zwR(_zOn-BK1OL|K+t>guFeOS0C9|uj#9g>Z_0LYv#E&N0NST`_lGizER`;3~t>bSo3v3&yTp)Hz`jVa8;($O>Yg*sHd!PBbMW9RbaLn-;a^oqV_2vi;KD-h$%`d`3!famNcdM3W}s?)8kGup zp{gpVQCX<23YIte6r&xD@H09h1g{k$TiacRqRai7CH#0m_2ev+8jE{0W>HU+C8se+ zcO?Y)1YZfQ3f>;k7)d4<9@GWx-1oL(BiF;hv%tWP!(rwdjgkBaBlu%De+(l>GNgX94$KUC7Xik#^ub)NlZvftIS$nytHhxW>!MG zDo15r+dmVD#!|HRbNGoDMKW6cJl-G0%5a2O#4Qq0jF)W3zmZ~#MD#(Ey@{%kE=TS1^A?Wt#(Z=p{S(uPwuz zM8|2_RlY&HqqC@s^^zr1|1unW-$PW_I#e z`o4Nh@GHSPgL{L;A!9;TVYNcUv9ZDDVuOX6ZG3y4LXYx8+y2)Q z5k*tM_`y<zIy3*b`wQk-+W2rj_KE#8{T0Df+LaJa0Gk( zWDWd&iT~+IG;-nE`!9*EQdBmO_cwhbVtq3BpQNeuG01-`O3KdGkRM7;gP-4JwOto2 zlG0vZ5-awUeKo{1vJ3NnV(rPH!2!p&#*MDKaYZVzcU zX!k4s5INF}w>O37y(sc(ulrNWX@0Zd3Kg{hy#!-v7|cT(Xu%*$-IFa#9xla>OyJHyJ0plQ2PK% z6N`(NK8w7DuBv5gSujSVG-Fw$>0P%O_MupVM6h>alFNI1weltzaIwWev(bCSug z>64Hw%Gy==Lopn&(a=U3BPbB`E75}Pz%blm2TT#HbKUZ?6-W{%{4mgM1i?(oOq!mQ zk-Lu2N=8z3JVm_qr-M2|F?CvM?naO!L6clr1k;P8dXT%&?x{+!U)d<)1U*^rF~mS` zF(Qv?(y;^$SRL{jKU6P?OG;N1Y7!7T0YtS=Aj6x#1bUrl?KM&8)qWD`H7R2fk|YTb z^<>@$y7Re@=S&T6ADUz|ESbl@guGL*{}@&dAI2CthE=(xPN9gtrsX6gC%rZ<5x#7I z7mZ=#Jw`sp!zZVvC22Ar+aO@}jA0dCx-=d`eo~&44Y*eX+%+DTJ{0#@rWH4QEUR!; zXYe>OGwX#WSz}qxuuMU2X%_aYF$ccX;XaLmAJ4-&2YtULfIO#DMevh(fK4u5Qn*0?y3L>prWYMPTf4DUODvPQpsaG7^SJ79qJzLl}ee6}oOg z;VLBUvFaFn@KtE!)r()B%6d9p8yuTYA8wt>dNV)Mfy>1&7djs0I-yAx$oWjDz zNcxLyN?8kGdkaX?l89#_#ekH;`~`)}k;Co5Ufk|juVs#I!Vv7?@{u91QqqY7!<($VBLh~>TZ9wCTeX`r^JoNcfnG_Ba1|*0-3Y}) z5x{1@5Y2%zZ|@KXJQ$qNW9Pwodok8P5F(XX(OTpsA1a(J5O{-lG9Mh3%X&HbT8Y6g z_zApJUI7e5?g5<>&qI_h9d4zJLo!aFRC+2HO`MI=Iy+LOl~9LdDuFP{K8P6zJHghW zh6qEo4<$q8U1gX6QHL`msTabI$6(lzL2!WLg9FptC+_XMUOqco=oiU*6Wk;!c$Q)HbSYY=ixWQv4I*k~1C5<@6b zmx6P!wsKG6K`FeP1Dq!Fu&m-$GX?@-G7lkn=!}6tn8JgI9Ri(I5niddb|&kYIfWk; z_+zjXq7M>FA7gAT+RDNsjTv-yJXsvF&mg+y=RXtlPeNrDgKsUO(#lh_#>VKinwXI~ zO^haHM6@IM^3_=QVu5Dhf3#!rj3G4I5pj<2iHew^AOg@10mL{?;y-USc77@N1Ng5g zTA*17dp0;Y4irxLb9>Zks*>6~mmNhbx%N?W*~3)R6D-}dP((LvhW`uLFb1}YZ5!CX zsm(QP5$$cyZ;aZ@YuIwCX(LO6BisB2JC~8gB7T*&KlKJXo}#>Q>zk}6>~7nSzRAYf zw;9+&J~H`hRM-}qBe7)z?WaCrgWT~7JGQ#*IJ<&kV1wRfh8}UZ6!w?j!Tz%82Ug?* z!9ZGV+cZfwAR!*Sj_Nj_X2&zKH?4cG+|#Uvk-a7CE!**FHkE4YBK3oT4egFIY&Ij~ zP}5o1Io81L4?CY{=g_hcVZU2`o;}9Mbo_Wc@w}f1x3Si{_kLod8QDZ(tho0lHUx(1 z+RYCY2X(XS{bf`CZPSN_=OA!i_@I>aY47P~#Z=QpR!oP-w)bCUA5cwwAW8T4Fxu-d zTD;;5yXv-^po%sNJKk=7uoi*;NX;P0G8FD0B&8>%YxwVYyqvSRcv)pmT4ruEa*uL`r?i`Q8w(xuQWmzjiQK$~P{sEP|G0tN5P-i{hgcwY4 zl2M5F@siO<@Za#-1^*GWvH0)bS)cN8LV-;KSr15IIZ&B9c7Cz~(6lsGKJwA$usu$%Xxk8*JkRkq1%( z#}rgoURb)kQmIzQp>5n?hHZjG@JWg^+bTP3s&mKybIDZj`x@I+p}=W4;SZK8pKetKe2L3r zrgeyEsToPaj3T#LL)Z)4XAfuwv2%dC>s+2Y?11^*8?bqN$TTk_#n**MHjfzGKZKCy z;q!m6vhsY=V#p@iwZPizz=l{lA39yOq*4R3u>d;tDufn-^^q@6S%qa60?Ow}q|xF< zE0$M+nUZQnR(5JeE({#8MMN3Jww5+!lp}T#pzIf;fta~OFfX=*fR`f3C-{A1sTI5o zz_O=cNYTPn3{}|jM-?VnA=s>Y8LG=)Fdy>I%*@=RY^W0=*Ok2Kl~*dWU<*ee4o|~C z=g$W#fs7KWRmgFbz)z`~JQ+DZOKu>AwHo1b|1gs0p@|eqM8qV(j69$!#5Wi!Ar!YC z&T9SGa%d*05ag6pT1WX30DWG@8~$Xy!&ZaVNaO&N<$OAqrM<~_{6qAuFaifDg;*iG%fue>`40o%22t5LMY<#m) z?C!LQi2Mc&1vc~nZ{mZ0K@ns#{s~UQFygaJc*_Z(zL@))g+dfT`Qiz1J@+lZL#oNX z4J;h$fjt=+d&zIlc`-T~l1zG*e*VcYnAS0jnR>WAQ~Zp06%8nEGSR$2a@ zFarYx9TF_ITl+~sl136No<;6W|D<}~Mg`w*18Z%z&R>p(SSwV6pxWcU^PlbhYilQI z0YAjEH~y1smyHZQ(gw@O^bq^(q{)dHxyZfspAAXzP^b^Gd!V8G!-pDX&d5m0&Pttx z+&|)*29WYAU&p(U%i)%?-MH@GP=oW3CTI(@kshV0)$OjJYqiu zBI!O@(Xi51KpAkqFtv`K@%>aPgCm2H!vX7>i3Ni{C?H5(gy#q4HTHAT(;=jZjov(H z_~rb5?l3Whd?Yy{Oo`;E5XT+A81OgIRfz3?_VA@QK?D3Q%qA`rUXKy(Ujp_~7b_)I ze5=yF1|r|%f^33r@Xrre$8v{ntR0a!V+JDmw}c3mxG>{`n*DBQ;}{~m_xHemz%n78 zX62A@x^e|__+h|_0MiphJo2b%aEZl0_@0hDPNBLtUlzN<*WO-19zXKIXebfvxyeE+ zKLcp@vkyr%F*O6ZpZkYE((}+S37YZ9@h5aZ3}0qU$W5q0?%fZy2E#z^7yi-O`J&*L zc*}wBdR;>NR(p*5<$sX6UKvVC3ZOkON{6e~Zd6cq?FGR2Yxo69JWkyQVv&FkK2`cN zT$dD+K;n4a8u!WPI0J9spC~am{HD;U^cU+$pv5iFOw8u8XY-NzHV&Z0s`5L)+xxC{ za!IWNMx=ciz7|=$^hxCKE2;zHHED%Qk@Pp41$h4c$P|!oz)J5yHzX&}A*cH!Z1FQ6 zGXlx~0&B&B$F;5{EpM-XgMCg0-ywYfElEIxM5iCb@gi0Gp);J4H1lO7C3Sm&zXMH? z34xibLEa3diO2X|cbHuVaE&(q2Sxgan2>pf>=4-7@kQDJW3#$JRzgrvnYV`GAwk9! z>hyf#H4xaOP@=bHUGT*=K6zuI3SW+#ohS&ee7qtd&J_ynkPDDfhY;jgD7wQwov(N! zFQ~3tu|qn8XaXcqXy>=|o0FA_&{gcS$EW7e~*I2xXTI*P?UVWC3rQYf7d6jh;s zZrvzH3>H;ABJor)%%Fy{B{Bosz9?!iMq77>&e0UFPwP%u7DHLnZ+_~P>g2t1)(fTZwHfjkG% zz_ubD>~Xjb>z9ZFCi4#wgx$s{0Q-)%R(;9SU*3juGcz@5nHkAQGDdimVLz6v2;LIM zfu`ZvGW^_a>k{$sa(JL%%k_n1Ji+!1f`!KmNRkN44$8J(lPDqAB+r+N$b*2K$QbgR z0mkwya+~}pAFrWr7)-X+tx|xcdnzF&0Vx}Hd;C5RxlMVLf#fj?avFFHlV*LCWhfw!-m5DtV^0<3-nHZjMZ{?pq zw_gP)B`5m{@`N!Hyeq_YUgO~Z54All?xmVmiD_nOVba1NM{k zoOqg-Z1lh4_C6<8=w%cB4Tl^OgfOIpof7Q1|BbcF^WrNk|3Iki1@WKknwP{)FWHT8 zA`Uz~fBy1PsMUljsy4Gxx2v%aD2kL87BS6=kah- zxxoAFrcq4??8JD*H&B{5YPW)t!Zr=LWum%8CCl16?3OZ&>~(9^;pH#wezLu&5(TLz zv8G{-kfa7ju0~uFf(5DJt^PHe8QT^Ce(x*0XuWLbzl{+&K&Ht%YoZ27H3ys9G%Wer zuDj{D9k=;&I~HGIB))Ao?Yb!jRz{n}?r)~)t{u(7{waiR`_1l8s_C8`%}Cyc7l#1H zi0V+=13OY}nI`5wlyox;Y?<0b5(4?fj%yQ3x+#|5zO+ds(AZvL@4;87pBW+wxQjLq z$#tepE|G}5qv;U-7kMhKn!6f!E$|h^2*uNi1&R_J=qCyBjaHnCR#@EN72YB5n2|3^ zeX7L^{3L2>BVOkxiGtH7ev(x98o0<`qIVt(ubFkVY*aLe;l&eE6i)M(aKdXaOZ+8a v!vI0P@>XHQ+x#Vd(DqY*$plP~V;<~rp=oLjCt1S{Tf^C};iOHRL*D-ZkOeH4 diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index e74148763a5d76ff65d5dfa6e58413165e421618..45faffc117543e85526b7158dd583091108a6435 100644 GIT binary patch delta 33570 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 diff --git a/BIN/ARP.S.txt b/BIN/ARP.S.txt index d47281a7..61ec06de 100644 --- a/BIN/ARP.S.txt +++ b/BIN/ARP.S.txt @@ -146,7 +146,7 @@ CS.RUN.DUMP >LIBCALL hLIBTCPIP,LIBTCPIP.ARP.GETCACHE >STYA ZPPTR1 >LDYA L.MSG0 - >SYSCALL printf + >SYSCALL puts ldx #K.ARPCACHE.SIZE @@ -222,7 +222,7 @@ CS.END LIBTCPIP .AZ "libtcpip.o" SSCANF.IP .AZ "%d.%d.%d.%d" SSCANF.MAC .AZ "%h:%h:%h:%h:%h:%h" -MSG0 .AZ "STS TTL MAC Address IP Address\r\n" +MSG0 .AZ "STS TTL MAC Address IP Address" MSG1 .AZ "$%h %5D %h:%h:%h:%h:%h:%h %d.%d.%d.%d\r\n" MSG2 .AZ "%d.%d.%d.%d is at %h:%h:%h:%h:%h:%h\r\n" hLIBTCPIP .BS 1 diff --git a/BIN/ASM.S.FIO.txt b/BIN/ASM.S.FIO.txt index 35d6130c..83a3986b 100644 --- a/BIN/ASM.S.FIO.txt +++ b/BIN/ASM.S.FIO.txt @@ -305,7 +305,6 @@ FIO.ReadFromFile adc #SRC.hFILES-1 tay lda (pData),y - >PUSHA >SYSCALL FRead bcs .9 diff --git a/BIN/ASM.S.MAC.txt b/BIN/ASM.S.MAC.txt index 14bf0cc1..6528825c 100644 --- a/BIN/ASM.S.MAC.txt +++ b/BIN/ASM.S.MAC.txt @@ -42,7 +42,7 @@ MAC.Quit >LDA.G MAC.hCtxBuf .1 >LDA.G MAC.hCtxList beq .2 - >SYSCALL SListFree.A + >SYSCALL SListFree .2 >LDA.G MAC.hMacroBuf beq .3 @@ -51,7 +51,7 @@ MAC.Quit >LDA.G MAC.hCtxBuf .3 >LDA.G MAC.hMacroList beq .8 - >SYSCALL SListFree.A + >SYSCALL SListFree .8 clc rts diff --git a/BIN/ASM.S.SYM.txt b/BIN/ASM.S.SYM.txt index 89fa16d8..1beea944 100644 --- a/BIN/ASM.S.SYM.txt +++ b/BIN/ASM.S.SYM.txt @@ -66,7 +66,7 @@ SYM.Quit >LDA.G SYM.hLookupBuf >SYSCALL FreeMem .3 >LDA.G SYM.hGlobalList beq .8 - >SYSCALL SListFree.A + >SYSCALL SListFree .8 clc rts diff --git a/BIN/ASM.S.txt b/BIN/ASM.S.txt index 915ae9ec..046c76d1 100644 --- a/BIN/ASM.S.txt +++ b/BIN/ASM.S.txt @@ -4,7 +4,7 @@ AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 - .TF /A2OSX.BUILD/BIN/DEV/ASM + .TF BIN/DEV/ASM *--------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I diff --git a/BIN/CAT.S.txt b/BIN/CAT.S.txt index ef6bb975..e793fd28 100644 --- a/BIN/CAT.S.txt +++ b/BIN/CAT.S.txt @@ -135,7 +135,6 @@ CS.RUN >SYSCALL GetChar >PUSHW ZPBufPtr >PUSHWI 256 pla - >PUSHA >SYSCALL FRead bcc CS.RUN.PRINT diff --git a/BIN/EDIT.S.txt b/BIN/EDIT.S.txt index bc0cc03b..76ff9af5 100644 --- a/BIN/EDIT.S.txt +++ b/BIN/EDIT.S.txt @@ -429,7 +429,7 @@ SaveFile >PUSHWI 0 Aux type pla pha - >PUSHA + >SYSCALL FWrite bcc .1 diff --git a/BIN/IPCONFIG.S.txt b/BIN/IPCONFIG.S.txt index a19389e3..fa7c737d 100644 --- a/BIN/IPCONFIG.S.txt +++ b/BIN/IPCONFIG.S.txt @@ -87,9 +87,9 @@ CS.RUN >LDYA L.MSG0 >SYSCALL GetDevStatus >LEA.G DCB.NIC - >STYA IOCTL+S.IOCTL.BUFPTR - lda S.IOCTL.STATCODE.GETDCB - sta S.IOCTL.STATCODE + >STYA.G IOCTL+S.IOCTL.BUFPTR + lda #S.IOCTL.STATCODE.GETDCB + >STA.G IOCTL+S.IOCTL.STATCODE >PUSHEA.G IOCTL >PUSHBI IOCTL.STATUS @@ -99,11 +99,14 @@ CS.RUN >LDYA L.MSG0 CS.RUN.DUMP >LDYA L.MSG0.L >SYSCALL printf - ldy #5 + ldy #DCB.NIC+S.DCB.NIC.MAC+5 + ldx #6 -.1 >PUSHB DCB.NIC+S.DCB.NIC.MAC,y +.1 lda (pData),y + >PUSHA dey - bpl .1 + dex + bne .1 >PUSHEA.G DIB+S.DIB.IDS @@ -142,18 +145,19 @@ CS.RUN.DUMP >LDYA L.MSG0.L >LDYA L.MSG1.DEV.IP >SYSCALL printf + >LDYA L.MSG1.LINK + >SYSCALL printf + lda DCB.NIC+S.DCB.NIC.LINK and #S.DCB.NIC.LINK.OK bne CS.RUN.LINK - >PUSHW L.MSG1.LINK.KO - >LDYA L.MSG1.LINK - >SYSCALL printf + >LDYA L.MSG1.LINK.KO + >SYSCALL puts bra CS.RUN.DUMPIP -CS.RUN.LINK >PUSHW L.MSG1.LINK.OK - >LDYA L.MSG1.LINK - >SYSCALL printf +CS.RUN.LINK >LDYA L.MSG1.LINK.OK + >SYSCALL puts >LDYA L.MSG1.LINKSPEED >SYSCALL printf @@ -177,7 +181,7 @@ CS.RUN.LINK >PUSHW L.MSG1.LINK.OK bra .6 .5 >LDYA L.MSG1.DPLX.FD -.6 >SYSCALL printf +.6 >SYSCALL puts CS.RUN.DUMPIP >LDYA L.MSG2 >SYSCALL printf @@ -190,7 +194,7 @@ CS.RUN.DUMPIP >LDYA L.MSG2 .11 >LDYA L.MSG2.U -.10 >SYSCALL printf +.10 >SYSCALL puts ldy #S.IPCFG.DHCPSRVR+3 ldx #4 @@ -275,16 +279,16 @@ MSG1.DEV .AS "\r\nDevice Configuration :\r\n" .AZ " HW Address : %02h:%02h:%02h:%02h:%02h:%02h\r\n" MSG1.DEV.ARP .AZ " ARP Offload : %d\r\n" MSG1.DEV.IP .AZ " IP Offload : %d\r\n" -MSG1.LINK .AZ " Link Status : %s\r\n" +MSG1.LINK .AZ " Link Status : " MSG1.LINK.OK .AZ "OK" MSG1.LINK.KO .AZ "Media Disconnected" MSG1.LINKSPEED .AZ " Link Speed : 1" -MSG1.DPLX.FD .AZ " Mbit/s,Full Duplex\r\n" -MSG1.DPLX.HD .AZ " Mbit/s,Half Duplex\r\n" +MSG1.DPLX.FD .AZ " Mbit/s,Full Duplex" +MSG1.DPLX.HD .AZ " Mbit/s,Half Duplex" *-------------------------------------- MSG2 .AZ "\r\nIP Configuration : " -MSG2.C .AZ "Configured\r\n" -MSG2.U .AZ "Not Configured\r\n" +MSG2.C .AZ "Configured" +MSG2.U .AZ "Not Configured" MSG2.DHCPSRVR .AZ " DHCP Server : %d.%d.%d.%d\r\n" MSG2.IP .AZ " IP/Mask : %d.%d.%d.%d/%d.%d.%d.%d\r\n" MSG2.GW .AZ " Gateway : %d.%d.%d.%d\r\n" diff --git a/BIN/MD5.S.txt b/BIN/MD5.S.txt index 8d7d13e4..e051904e 100644 --- a/BIN/MD5.S.txt +++ b/BIN/MD5.S.txt @@ -158,7 +158,7 @@ CS.RUN.FILE >LDA.G Arg .1 >PUSHW ZPDataBufPtr Dst Ptr >PUSHWI FILEBUF.SIZE Bytes To Read - >PUSHB.G hFile + >LDA.G hFile >SYSCALL FRead bcc .2 diff --git a/BIN/MEM.S.txt b/BIN/MEM.S.txt index c8e6139a..d536895d 100644 --- a/BIN/MEM.S.txt +++ b/BIN/MEM.S.txt @@ -49,7 +49,7 @@ CS.RUN >LDYA L.MemStat >SYSCALL GetMemStat >LDYA L.MSG.Main - >SYSCALL printf + >SYSCALL puts lda MemStat+S.MSTAT.MF sec @@ -67,7 +67,7 @@ CS.RUN >LDYA L.MemStat >SYSCALL printf *-------------------------------------- >LDYA L.MSG.Aux - >SYSCALL printf + >SYSCALL puts lda MemStat+S.MSTAT.XF sec @@ -85,7 +85,7 @@ CS.RUN >LDYA L.MemStat >SYSCALL printf *-------------------------------------- >LDYA L.MSG.Kernel - >SYSCALL printf + >SYSCALL puts lda MemStat+S.MSTAT.DH sec @@ -103,7 +103,7 @@ CS.RUN >LDYA L.MemStat >SYSCALL printf >LDYA L.MSG.End - >SYSCALL printf + >SYSCALL puts lda #0 sec rts @@ -115,11 +115,14 @@ CS.QUIT clc rts *-------------------------------------- CS.END -MSG.Main .AZ "--- Main Memory ---------------\r\n" -MSG.Aux .AZ "--- Aux Memory ----------------\r\n" -MSG.Kernel .AZ "--- Kernel (Drivers) Memory ---\r\n" -MSG.Stat .AZ " Low : $%H\r\n Free Ptr : $%H\r\n High : $%H\r\n Available Memory : %05D Bytes\r\n" -MSG.End .AZ "-------------------------------\r\n" +MSG.Main .AZ "--- Main Memory ---------------" +MSG.Aux .AZ "--- Aux Memory ----------------" +MSG.Kernel .AZ "--- Kernel (Drivers) Memory ---" +MSG.Stat .AS " Low : $%H\r\n" + .AS " Free Ptr : $%H\r\n" + .AS " High : $%H\r\n" + .AZ " Available Memory : %05D Bytes\r\n" +MSG.End .AZ "-------------------------------" MemStat .BS S.MSTAT *-------------------------------------- .DUMMY diff --git a/BIN/MEMDUMP.S.txt b/BIN/MEMDUMP.S.txt index b29a3429..07eec68c 100644 --- a/BIN/MEMDUMP.S.txt +++ b/BIN/MEMDUMP.S.txt @@ -47,7 +47,8 @@ L.MSG5 .DA MSG5 L.MSG.FREE .DA MSG.FREE .DA 0 *-------------------------------------- -CS.INIT >INC.G MEM.COUNT Skip SLOT0 +CS.INIT lda #1 + >STA.G MEM.COUNT Skip SLOT0 >LEA.G MemStat >SYSCALL GetMemStat @@ -90,7 +91,7 @@ CS.RUN >SYSCALL GetChar bne .1 >LDYA L.MSG0 - >SYSCALL printf + >SYSCALL puts .1 >LDA.G MEM.COUNT >SYSCALL GetMemByID @@ -282,7 +283,7 @@ CS.QUIT clc rts *-------------------------------------- CS.END -MSG0 .AZ " # Flags PID REF PTR LEN BINPATH/DATA\r\n" +MSG0 .AZ " # Flags PID REF PTR LEN BINPATH/DATA" MSG1.INV .AZ "\e[7m" MSG1 .AZ "%03d %s %03d %03d $%H %05D " MSG1.BIN .AZ "{%s}\e[0m\r\n" diff --git a/BIN/TELNET.S.txt b/BIN/TELNET.S.txt new file mode 100644 index 00000000..aa3b9b3b --- /dev/null +++ b/BIN/TELNET.S.txt @@ -0,0 +1,211 @@ +NEW +PREFIX /A2OSX.BUILD +AUTO 4,1 + .LIST OFF + .OP 65C02 + .OR $2000 + .TF BIN/TELNET +*-------------------------------------- + .INB INC/MACROS.I + .INB INC/A2OSX.I + .INB INC/ETH.I + .INB INC/LIBTCPIP.I +*-------------------------------------- +TIMEOUT.MAX .EQ 20 2 sec. +*-------------------------------------- +ZPFrameBase .EQ ZPBIN +ZPFrameLen .EQ ZPBIN+2 +ZPFramePtr1 .EQ ZPBIN+4 +ZPIPCfgPtr .EQ ZPBIN+6 +*-------------------------------------- +* 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 Code Length To Relocate + .DA DS.END-DS.START Data Segment to Allocate + .DA #16 SS + .DA #8 ZP + .DA 0 +*-------------------------------------- +.1 .DA CS.INIT + .DA CS.RUN + .DA CS.DOEVENT + .DA CS.QUIT +L.LIBTCPIP .DA LIBTCPIP +L.Socket .DA Socket +L.MSG.IPKO .DA MSG.IPKO +L.MSG.USAGE .DA MSG.USAGE +L.MSG.UNKNOWN .DA MSG.UNKNOWN +L.MSG.HOSTOK .DA MSG.HOSTOK +L.MSG.SKTKO .DA MSG.SKTKO + .DA 0 +*-------------------------------------- +CS.INIT >LDYA L.LIBTCPIP + >SYSCALL LoadLib + bcs .9 + sta hLIBTCPIP + + lda (pPs) + ora #S.PS.F.EVENT Now accept events + sta (pPs) + + clc + +.9 rts +*-------------------------------------- +CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ? + >STYA ZPIPCfgPtr + + lda (ZPIPCfgPtr) Configured ? + bmi CS.RUN.IPOK + + >LDYA L.MSG.IPKO + >SYSCALL printf + lda #K.E.SYN + sec + rts + +CS.RUN.IPOK ldy #S.PS.ARGC + lda (pPs),y + + beq .9 + + jsr Init.Timeout + +.2 >PUSHW pData DST.IP + lda #1 + >SYSCALL GetArg + >PUSHYA + >LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME + bcc CS.RUN.HOSTOK + >SLEEP + jsr Wait.Timeout + bcc .2 + + lda #1 + >SYSCALL GetArg + >PUSHYA + >LDYA L.MSG.UNKNOWN + bra .99 + +.9 >LDYA L.MSG.USAGE +.99 >SYSCALL printf + lda #K.E.SYN + sec + rts + +CS.RUN.HOSTOK lda #1 + >SYSCALL GetArg + >PUSHYA + + ldy #DST.IP+3 + ldx #3 + +.1 lda (pData),y + sta Socket.Dst.Addr,x + >PUSHA + dey + dex + bpl .1 + + >LDYA L.MSG.HOSTOK + >SYSCALL printf + +CS.RUN.OPENSKT ldx #3 + ldy #S.IPCFG.IP+3 + +.1 lda (ZPIPCfgPtr),y + sta Socket.Src.Addr,x + dey + dex + bpl .1 + + >PUSHW L.Socket + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.New + bcc .2 + + >LDYA L.MSG.SKTKO + >SYSCALL printf + lda #K.E.SYN + sec + rts + +.2 txa + ldy #hSocket + sta (pData),y + +.9 lda #0 + sec +CS.RUN.ERR rts +*-------------------------------------- +CS.DOEVENT lda (pEvent) + bpl .9 is it a TIMER event? + + ldy #TimeOut + lda (pData),y + beq .9 + + dec + sta (pData),y + +.9 sec do not discard TIMER event + rts +*-------------------------------------- +CS.QUIT ldy #hSocket + lda (pData),y + beq .1 + + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Close + +.1 lda hLIBTCPIP + >SYSCALL UnloadLib + clc + rts +*-------------------------------------- +Init.Timeout ldy #TimeOut + lda #TIMEOUT.MAX + sta (pData),y + rts +*-------------------------------------- +Wait.TimeOut sec + ldy #TimeOut + lda (pData),y + beq .9 + + clc +.9 rts +*-------------------------------------- +CS.END +LIBTCPIP .AZ "libtcpip.o" +MSG.IPKO .AZ "TCP/IP Not Loaded/Configured.\r\n" +MSG.USAGE .AZ "Usage : TELNET [port]\r\n" +MSG.UNKNOWN .AZ "%s: Unknown host\r\n" +MSG.HOSTOK .AZ "Connecting to %d.%d.%d.%d (%s) ...\r\n" +MSG.SKTKO .AZ "Failed to Open Socket.\r\n" +hLIBTCPIP .BS 1 +TimeOut.ms .BS 2 +Socket .DA #S.SOCKET.SOCK.STREAM + .BS 1 + .DA #S.IP.PROTOCOL.TCP + .BS 1 +Socket.Src.Addr .BS 4 +Socket.Src.Port .DA 0 Dynamic +Socket.Dst.Addr .BS 4 +Socket.Dst.Port .DA TCP.PORT.TELNET +*-------------------------------------- + .DUMMY + .OR 0 +DS.START +DST.IP .BS 4 +hSocket .BS 1 +TimeOut .BS 1 +DS.END + .ED +*-------------------------------------- +MAN +SAVE /A2OSX.SRC/BIN/TELNET.S +ASM diff --git a/BIN/X.CPMVRM.S.txt b/BIN/X.CPMVRM.S.txt index ce2b1885..2a3ad25e 100644 --- a/BIN/X.CPMVRM.S.txt +++ b/BIN/X.CPMVRM.S.txt @@ -622,8 +622,7 @@ CS.RUN.Copy stz .90+1 >PUSHW ZPPtr1 Dst Ptr >PUSHWI X.COPY.BUF.SIZE Bytes To Read - ldy #hSrcFile - >PUSHB (pData),y + >LDA.G hSrcFile >SYSCALL FRead bcc .1 cmp #MLI.E.EOF @@ -635,8 +634,7 @@ CS.RUN.Copy stz .90+1 >PUSHW ZPPtr1 Src Ptr >PUSHW ZPPtr2 Bytes To Write - ldy #hDstFile - >PUSHB (pData),y + >LDA.G hDstFile >SYSCALL FWrite bcs .9 diff --git a/BMP2PIX.S.txt b/BMP2PIX.S.txt index 8089ffb2..bb328efc 100644 --- a/BMP2PIX.S.txt +++ b/BMP2PIX.S.txt @@ -252,7 +252,6 @@ CS.RUN lda #S.BM.F.BBP1 >PUSHEA.G PIX.Header >PUSHWI S.BM >LDA.G hOutputFile - >PUSHA >SYSCALL FWrite bcs CS.RUN.RTS @@ -290,7 +289,6 @@ CS.RUN.LOOP inc ZPLineCount >PUSHW ZPBufPtr >PUSHW ZPPIXRowBytes >LDA.G hOutputFile - >PUSHA >SYSCALL FWrite bcs CS.RUN.RTS diff --git a/ETC/HOSTS b/ETC/HOSTS index 758371b1..21807a51 100644 --- a/ETC/HOSTS +++ b/ETC/HOSTS @@ -2,6 +2,6 @@ NEW PREFIX /A2OSX.BUILD AUTO 4,1 # put your IP address and your hostname and aliases below -# 1.2.3.4 myserver.mydomain myserver +1.2.3.4 myserver.mydomain myserver MAN TEXT ETC/HOSTS diff --git a/FNT2FON.S.txt b/FNT2FON.S.txt index 2c7013cc..d608baea 100644 --- a/FNT2FON.S.txt +++ b/FNT2FON.S.txt @@ -703,7 +703,6 @@ CS.RUN.WriteByte >PUSHW ZPOutPutBufPtr >PUSHWI 256 >LDA.G hOutputFile - >PUSHA >SYSCALL FWrite bcs .9 @@ -726,7 +725,6 @@ CS.RUN.FlushOutPutBuf lda #0 >PUSHYA >LDA.G hOutputFile - >PUSHA >SYSCALL FWrite .8 rts @@ -754,7 +752,6 @@ CS.RUN.WriteBMAndTbl >PUSHYA >PUSHWI S.FON >LDA.G hOutputFile - >PUSHA >SYSCALL FWrite bcs .9 @@ -774,7 +771,6 @@ CS.RUN.WriteBMAndTbl ply >PUSHYA >LDA.G hOutputFile - >PUSHA >SYSCALL FWrite clc diff --git a/INC/LIBTCPIP.I.txt b/INC/LIBTCPIP.I.txt index 047956ac..6b9eda36 100644 --- a/INC/LIBTCPIP.I.txt +++ b/INC/LIBTCPIP.I.txt @@ -68,6 +68,8 @@ ERR.DEV .EQ $B3 UDP.PORT.DNS .EQ 53 UDP.PORT.PMAP .EQ 111 *-------------------------------------- +TCP.PORT.TELNET .EQ 23 +*-------------------------------------- S.IPCFG.STATUS .EQ 0 S.IPCFG.STATUS.OFF .EQ %00000000 TCPIP Unconfigured S.IPCFG.STATUS.SDISC .EQ %00000001 DISCOVERY Sent @@ -83,8 +85,8 @@ S.IPCFG.MASK .EQ 16 S.IPCFG.GW .EQ 20 S.IPCFG.DNS1 .EQ 24 S.IPCFG.DNS2 .EQ 28 -S.IPCFG.HOSTNAME .EQ 32 1+15 char PSTR -S.IPCFG.DOMAIN .EQ 48 1+79 char PSTR +S.IPCFG.HOSTNAME .EQ 32 15+\0 C String +S.IPCFG.DOMAIN .EQ 48 79+\0 C String * S.IPCFG .EQ 128 *-------------------------------------- diff --git a/SBIN/KCONFIG.S.txt b/SBIN/KCONFIG.S.txt index 0b99685a..42a28092 100644 --- a/SBIN/KCONFIG.S.txt +++ b/SBIN/KCONFIG.S.txt @@ -231,7 +231,6 @@ CS.RUN.Save >PUSHWI 0 AUXTYPE pla pha - >PUSHA >SYSCALL FWrite bcc .1 diff --git a/SBIN/TCPIPD.S.CFG.txt b/SBIN/TCPIPD.S.CFG.txt index abbd3780..40eb555f 100644 --- a/SBIN/TCPIPD.S.CFG.txt +++ b/SBIN/TCPIPD.S.CFG.txt @@ -13,22 +13,22 @@ CFG.Read >PUSHW L.HOSTNAME lda IPCFG+S.IPCFG.HOSTNAME bne .4 - ldy DefaultHostName + ldy #$ff -.2 lda DefaultHostName,y +.2 iny + lda DefaultHostName,y sta IPCFG+S.IPCFG.HOSTNAME,y - dey - bpl .2 + bne .2 .3 lda A2osX.TIMER16 jsr CFG.A2CharAX - sta IPCFG+S.IPCFG.HOSTNAME+7 - stx IPCFG+S.IPCFG.HOSTNAME+8 + sta IPCFG+S.IPCFG.HOSTNAME+6 + stx IPCFG+S.IPCFG.HOSTNAME+7 lda A2osX.TIMER16+1 jsr CFG.A2CharAX - sta IPCFG+S.IPCFG.HOSTNAME+9 - stx IPCFG+S.IPCFG.HOSTNAME+10 + sta IPCFG+S.IPCFG.HOSTNAME+8 + stx IPCFG+S.IPCFG.HOSTNAME+9 .4 >PUSHW L.TCPIP.CONF >LDYA L.MSG.CFG @@ -71,12 +71,13 @@ CFG.Read.HOSTNAME cmp #13 beq .8 A CR, end of name - iny sta IPCFG+S.IPCFG.HOSTNAME,y + iny dex bne .2 -.8 sty IPCFG+S.IPCFG.HOSTNAME +.8 lda #0 + sta IPCFG+S.IPCFG.HOSTNAME,y jsr CFG.Read.CleanUp clc diff --git a/SBIN/TCPIPD.S.txt b/SBIN/TCPIPD.S.txt index 97b7baf5..d55d8796 100644 --- a/SBIN/TCPIPD.S.txt +++ b/SBIN/TCPIPD.S.txt @@ -138,7 +138,7 @@ MSG.CFG.OK .AZ "OK.\r\n" HOSTNAME .AZ "${A2OSX}ETC/HOSTNAME" TCPIP.CONF .AZ "${A2OSX}ETC/TCPIP.CONF" HOSTS .AZ "${A2OSX}ETC/HOSTS" -DefaultHostName >PSTR "a2osx-XXXX" +DefaultHostName .AZ "a2osx-XXXX" CFG.Keywords >PSTR "DOMAIN" >PSTR "IP" >PSTR "MASK" diff --git a/SBIN/TELNETD.S.txt b/SBIN/TELNETD.S.txt index 94627b00..1ae2a69c 100644 --- a/SBIN/TELNETD.S.txt +++ b/SBIN/TELNETD.S.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 @@ -10,6 +8,7 @@ AUTO 6 *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I + .INB INC/ETH.I .INB INC/LIBTCPIP.I *-------------------------------------- TIMEOUT.MAX .EQ 30 30 sec. @@ -175,7 +174,7 @@ CS.RUN.CLIENT ldy #SktIndex sta .1+1 hSocket sta .3+1 - >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.GetC.A + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.GetC bcc .10 tax @@ -283,7 +282,7 @@ Socket .DA #S.SOCKET.SOCK.STREAM .DA #S.SOCKET.TCP.STATUS.LISTEN .BS 1 Socket.Src.Addr .BS 4 -Socket.Src.Port .DA 23 +Socket.Src.Port .DA TCP.PORT.TELNET Socket.Dst.Addr .BS 4 Socket.Dst.Port .BS 2 *-------------------------------------- diff --git a/SYS/KERNEL.S.FIO.txt b/SYS/KERNEL.S.FIO.txt index 901e0966..6d24b764 100644 --- a/SYS/KERNEL.S.FIO.txt +++ b/SYS/KERNEL.S.FIO.txt @@ -58,7 +58,7 @@ K.LoadFile clc >PUSHW FIO.Mem >PUSHW FIO.FSize - >PUSHB FIO.hFile + lda FIO.hFile jsr K.FRead bcs .98 diff --git a/SYS/KERNEL.S.IO.txt b/SYS/KERNEL.S.IO.txt index cd67d2c5..e9a4dba9 100644 --- a/SYS/KERNEL.S.IO.txt +++ b/SYS/KERNEL.S.IO.txt @@ -115,29 +115,6 @@ IO.Read.I lda (pFD) #S.FD.T K.Read.9 >RET 4 *-------------------------------------- -IO.READ.REG - - clc - rts -*-------------------------------------- -IO.READ.CDEV ldy #S.FD.DEV.DRVPTR - lda (pFD),y - sta .1+1 - iny - lda (pFD),y - sta .1+2 - - >LDYAI K.S.IOCTL - ldx #IOCTL.READ -.1 jmp $ffff -*-------------------------------------- -IO.READ.SSOCK -*-------------------------------------- -IO.READ.FIFO - - clc - rts -*-------------------------------------- * int write(int fd, const void *buf, size_t count); *-------------------------------------- K.Write jsr IO.SELECT @@ -161,14 +138,25 @@ IO.Write.I lda (pFD) #S.FD.T K.Write.9 >RET 4 *-------------------------------------- -IO.WRITE.REG >PUSHW K.S.IOCTL+S.IOCTL.BUFPTR +IO.READ.REG clc + .HS B0 BCS +*-------------------------------------- +IO.WRITE.REG sec + >PUSHW K.S.IOCTL+S.IOCTL.BUFPTR >PUSHW K.S.IOCTL+S.IOCTL.BYTECNT ldy #S.FD.REG.REF - >PUSHB (pFD),y - - jmp K.FWrite + lda (pFD),y + bcs .1 + + jmp K.FRead +.1 jmp K.FWrite *-------------------------------------- -IO.WRITE.CDEV ldy #S.FD.DEV.DRVPTR +IO.READ.CDEV ldx #IOCTL.READ + .HS 2C BIT ABS +*-------------------------------------- +IO.WRITE.CDEV ldx #IOCTL.WRITE + + ldy #S.FD.DEV.DRVPTR lda (pFD),y sta .1+1 iny @@ -176,10 +164,18 @@ IO.WRITE.CDEV ldy #S.FD.DEV.DRVPTR sta .1+2 >LDYAI K.S.IOCTL - ldx #IOCTL.WRITE + .1 jmp $ffff *-------------------------------------- -IO.WRITE.SSOCK lda (pFD) #S.FD.HANDLER +IO.WRITE.SSOCK ldy #S.FD.SSOCK.WRITE + .HS 2C BIT ABS +*-------------------------------------- +IO.READ.SSOCK ldy #S.FD.SSOCK.READ + lda (pFD),y + tax Function Offset in LIB + + ldy #S.FD.HANDLER + lda (pFD),y jsr K.GetMemPtr >STYA .1 @@ -187,11 +183,13 @@ IO.WRITE.SSOCK lda (pFD) #S.FD.HANDLER >PUSHB (pFD),y >PUSHB K.IOBuf - ldy #S.FD.SSOCK.WRITE - lda (pFD),y - tax Function Offset for write .1 jmp $ffff *-------------------------------------- +IO.READ.FIFO + + clc + rts +*-------------------------------------- IO.WRITE.FIFO ldy #S.FD.FIFO.S lda (pFD),y beq .9 Remote PS did not opened yet the pipe diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 53d8f480..7408ab55 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -894,7 +894,7 @@ K.FOpen.AUXTYPE .BS 2 * # FClose * Close a file * ## C -* int fclose ( FILE * stream ); +* int fclose ( hFILE streamm ); * ## ASM * **In:** * A = hFILE @@ -923,35 +923,36 @@ K.FClose jsr PFT.CheckNodeA .9 rts */-------------------------------------- * # FRead -* int fread ( void * ptr, int count, FILE * stream ); +* int fread (hFILE stream, void * ptr, int count ); * Read bytes from file * **In:** -* PUSHW = Dest Ptr -* PUSHW = Bytes To Read -* PUSHB = hFILE +* `>PUSHWI count` +* `>PUSHW ptr` +* `lda hFILE` +* `>SYSCALL fread` * **Out:** * Y,A = Bytes Read *\-------------------------------------- -K.FRead jsr PFT.CheckNodeSTK +K.FRead jsr PFT.CheckNodeA ldx #MLIREAD bra K.FReadWrite.1 */-------------------------------------- * # FWrite * Write bytes to file * ## C -* `int fwrite ( const void * ptr, int count, hFILE stream );` +* `int fwrite (hFILE stream, const void * ptr, int count );` * ## ASM * **In:** -* `>PUSHB = hFILE` -* `>PUSHWI ptr` -* `>LDYA count` +* `>PUSHWI count` +* `>PUSHW ptr` +* `lda hFILE` +* `>SYSCALL fwrite` * # Out: * Y,A = Bytes Written *\-------------------------------------- -K.FWrite jsr PFT.CheckNodeSTK +K.FWrite jsr PFT.CheckNodeA ldx #MLIWRITE -K.FReadWrite.1 >PULLA - jsr STDIO.GetRefNum +K.FReadWrite.1 jsr STDIO.GetRefNum >PULLW K.MLI.PARAMS+4 >PULLW K.MLI.PARAMS+2