From 5c3d2a0ae27f8a077d5a2561a4492050e8cc29bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Mon, 3 Sep 2018 08:01:07 +0200 Subject: [PATCH] Kernel 0.9.2 --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes BIN/TELNET.S.txt | 37 ++++++++++++++++++++++--------------- INC/A2osX.I.txt | 5 +++++ INC/LIBTCPIP.I.txt | 5 ----- LIB/LIBTCPIP.S.ARP.txt | 1 + LIB/LIBTCPIP.S.FRM.txt | 15 ++++++++++----- LIB/LIBTCPIP.S.SKT.txt | 20 ++++++++++---------- LIB/LIBTCPIP.S.TCP.txt | 18 ++++++++++++++++-- LIB/LIBTCPIP.S.txt | 4 +--- 10 files changed, 65 insertions(+), 40 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 16c425f5747f2827c8061b8196b398b2237db1e9..c32ae85821fcc536ccc13a7783d77a1eda24568d 100644 GIT binary patch delta 8532 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 delta 8318 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 delta 14398 zcmZ`g33OA(wKLLtvh<#8Y)Mb6_Z{0jBty);*s_fkyvUZ!mIaJ0u)z!1CP13T5lfm7 zLK2)ZG1*Fg>uy;fi%HWqfh^<`?9|UQ>qSOEl8m(H1RU76kCn!Z2M?@)a5mT8r`5WZ!O+ zE$LqXKK(2r>1Sp4@I%)0v~OUm_JOE61Bu_lT*h~FD;qie6*l63lc#GWkI7%ZxH1q% z%J*~&>lEocQm2#l?sg<0tj-|)g9FHjamk^=Nl4M*us^5<8r91if~vN#SWi}diHnK^ zJi=f_4r@0g!q!)Y!j=AoNKGR9zr>UDMm+L}ZM817%8uy2JoL^}R~ZXtCJ%44&rNO4 zj14~Ano&?94?l0;nfi1Ynv`8`2gu3==>@LT;WkHPn!OQuv-M^e{HTCZRYq!kpbBsd z1l5pQ+tPr(eMOMbV^#ojC;(Q!;#_`F+N0k)#Fb>q6{a*@_KrucJ%xXIomX&W;1ROE zUTXLTYG1Oz7mqNaqM;E9Qe4dJE~S7F&9=i^Dw;7=4f6>t!xSU zEB$pfYB*ev9Qng19#Ha(1$bm2(vH#!;qS`!Xt-xx_2Rz%4rDCCBVE0lk)s&k?D-Qf zoG$etxdaYsZ)XRUQq;;QVEQBg9Bhm41As;qk90&}r^)n0XPWmy2qgMowNgGj|3Mp` zLVmSDU)ro(hSdso&1J#ZEs?PTk5Cq{O~WH?9qoxXLe}Yg(*$sNhKAoXq|6*X@}Mny z7Mvr^#_BZE5!r;~IWXTFiK;#%&V?Dh+~ni8k0W2Ku5L%$t*EBLr%8?w34I*1O_E8N~@1O^l zqwH34vIJ+9E&>GMNO*mUUai_vy%i~o`Cz`!>)qB|?Qd#r45Qp7#8--Q@KO>g#kr25T80Y? zEMMV~H3R)oy1X&6F%U%Z*YsVu`2P#&o^ckFk6N(D^=+I{V^nPMtHGw0FgY-0vRjP* z#v_Amn~?E)&X~$M;=96Rbve$**HJwXYVp%G$c@O6lh~Dpb&QRTI^D?NrZ(i(ljira zD@o9eAdjdcN3ujK*HIlFRSL=|kNZbhjGzS21a0M}+8C zl-7emB~)!5jO^y;T6*aK(-AxA$W&zQqa#hLRt-c3Z=plw$g&Q1YF2~+`H*$JHqx|# z1Hn)~UKx&T8f@t6&_`}j$L_&$fTZ*oh|cRF%@gzv^48x4Cpp|>aFUca1SJcJRv@w6 zri&>w`reBJjnz$yQN99i`L*mMEAEv|I=7v@ljPvAIL*$gs|{r!DC>oyEV{GE~ZwF4V^P-Ygn`y|eAWnX{=XjT8hP-_En=dhDa zx%^~z9y@A!J{;vN(2dNkuU=XiUB*o;kOH(fvK7L3D9pxzkT3)qsfgaRSVvwtYO?tz z>X?pBDS^MBqd}NKj%=my4K(etV0GJITcEc-(u>40dd?&r$$HDAOiNKY{A31ipL_{C zC}+{Dg9E9SJ|J*Y`3O1u3&XreQ*{UM=to#0chpLDY$6A~!tM%5Q<>ld$W&#TLAZO? zMJex8M+OG_`!*vnnQGY-tl4Yh1TbLpzQk@*ZJ=>+*oRaLGq%`D4%`m!k6EuefSCWmSyZFMd>X<4mVkyLKG=^#MgqYZZRL=^1&poiK%jAdIFVPd8lyg zYkWq35Pyr$dlpjFhq4E7T?jONsJ*SXc86NIESg);p~n8_q6vc-?0um6HZBp$2KqI| zCNXPr&B4lE@o_xr)U^}?FZwtyiskT%jw!m5yQra0cwcy??5X6FHM%V2GX9tedxBjg zIcs%R!*m@rkK_Q*NoSuyf@^h3=1kbpGAquq)Dvm(BXKqi=g-lRk%dyOVJ>{hm`8rI zR+nBrpY0L7VEf8Tk2F?kZ0^^QeQOL3!CtKcf2BdP;u?CeZOB-wsmcX9Z~`_VbDd7J zx?Us(;KY>66R<+!LKw2u)1eD)j*=U6Bay!TXkPxRRmj-LRkXe75#7~ zoIvab^4s9PQU_})65j#$)$%SHnHy{k)h!N0nU95(_hKW_dg^q657CU=?~~6m1lRnN zFc(@H@>kZ^M>qC&4MvdpgP1=I4)KSuqvs>;ROc;ZtAjO-)q%zZ%xlX(McS6?bCU`` zrYK%Z+9oEslEIy$lKcrQ&HI#`Zq>V%YHN_?GsMg<#iFvhS`8raG(F)A0&PcWoLAG* zl6VR-fp-rM;TB~60$^tB0rz4jCrw6zIz~8It7UcM79WHwH)q4 z4uthtLk=Bi2T)58l*F*3VTr8Q^uZKlgt&mZq(+hc1z*qrQ}j*CkugbAEf5XR&_Oi8 z{)&Vdmr$OJZHbJa0+~MwS}@Tc%?Bw*R#1anJICSW6gY%B%+rxFfjXpfQekUb8da4Y z5$1Yp^pPzZrl6Lsun+j>Mw=GNDBMrTvy=Ol>vOS#9A2)sd0o^8g4d+dkp{|9qc?Zu zt)L|n2Y^{dSLg>7-}d(IzJadZ)vBrnnxc{Zew49#>{b0KJo=hmRibmEn%{vY{1TT$ zOG?0CjS0djJZ2D%+5)Z(s9x2agIlPtqJ2inH82rq@`vkp(_!`rxi-RJwZBSj4EPze z_8Ap!BFP@1z_S@KPnFtSEtabfgu*qA$a5`e@Ca_Q#Uoe>LQ5N4{EMoQ=ekS4YeM0w z`cNHm|B&405nL75Ujh*e_}oL6Olj81eFOOf*49NY0r1y1g+L0Cd&?zL;Xp&p;xLl7 z@)<8OZsX$O+D;nN1?N>a0!!0KV>-&biOWK5HCPUa6-vP;uU6|S8>{PUAjG?w>XRMg zBI~cOsf6KM=x}US%+?q=@O*urblgxy&>}*kvNR* zL1}mLt^BnM)Ie|7Ad-I^Uu7jU((dYQkH*|kWE|ltQ`$?F1`DU}=J)g5gCMe1TN~?} zDyw%;9wygj2$JVse&6vqnl-o&uyx;0?gu3}?I!?0lL?@;_Q7z={F*d>sc+4vy03C4%`^&AhA+hIrN{)_Qxsi~|+?gI>+#gANqj`C=XoHMpJ_C=W^ zjKs&_)U?O>^T(WHB#*^aoOlobDxLtP=-mUdOjf)uD#V{9IDNn6i!`s1C1$8SdXn2C z^Y7p^s=It(QGXA6xc)$P!ZQ36Ik8CZuo$04Jf1m(SR~{+%*K<%X8<X;<*9x-K9cemz8?Gvy8IPbZaoq+MRB4ie}x6W9*Iv#?s!jdIqpUB|HiBm zGQP&2$@zDZoFh02{((w>X$Si^gW`%@6M?@F-$r|w_I#a#roTY~If5qw#$V$<>rpNX z^hPyHf`JxL-EZ+BDrwq~c#L9toL-a$vveldR9}y*;1f`K(CD_MCfu@g8#2DlkIH(7 zyp$tk7K3-7QPu%&0Trz3rHwQ~RjD?jcKdzUTRBNma|PQK;0jR71(rVs1;!saz$>8Y zJvOGTbby~g_NU=S`Vr^x|8pcm47 zRB2pvk_=7(2>y+J@EN~=-68F#+3rL@D-fnYJhZq#D1hkbhXq2ROU5)eL)B^1LLLeRtyw>L7_(>Aa+7ug^@(#BRpo@Ha(=3L}(#K$176d8#01N-M9yOYc-5|m}& z9B8QoiyKocJF7OV(&BQvhmZJItq!&gc52B5dwP7dwkw`;NX=lQfuI(?Lbj1~(oX7W%}izv5gF3Wa}x;K(@rv*2@iMY-PlMOesv<=CbWX_x{?f_3nz9sJU zh&%C}$apJH_{h7)$8Q6;%-hM`XM_yH9rzZMxjP=y4YQaoO}&#tQ$M1q6#}$9XN64s zW0G}N$S&QZ`E&%|jg-4+xY)i9oXUle>IkY0p%BT%CqWj3BXNAI~`vEz}Pw?pHf`J@AD=5}|bk#sK zhRO_-`Cofp)jLV{H-c#R8NL@~{ydKUC=W?JzaUqCBe*kv342+7b@6)f*DzfC8%$Fj zo|49zCE-v_GdRJ<2e>P$Jjh*99y5ZwMw0@?4`G5KscspE7aykk?C1NKW8>w>aez#& zFxz#H@D;A{8S|qW1*UsZ@ne|W@r(rbs4&ZEK4g9z=9quuMTKMIbJ7GP9)yFOPk@W- z-Ls}=^jkr2E`b~-D21|Y#!Pihp)kbS5Jm4fC!{aQ;jEICi(?)V=hN*M_(^uiX)}&y zqcjKyR|>fyc&EX(j{~zowGMOv@)VH6=LB0)6NE)5y^wv$Lt87x%VPs-btv3W>Aw+f5ItnBMb0Vl83^6k4BWK>l}sgnIxnRE zOq^SlM;%eh^9_|tkOj;Nb^43fQJJLij}byorhY%*>eu!mTHMw(sD`_GBETv)fuSVt zy)R5IG=8c%e4oV~zSDe(bOvcEGvo8&hhOk0)-O;em}%hfK#=ABe8~GH3Ct5GV+a+G ziB59IJkbr6pa^7V@!IFV}}k@eNLrVIHW0f8KOM3y0xKUDUu-2 zQ=3}AyEKE22Zm!tFEt51has7!DYO(LrmFFFen^@rmUq=spJ@`-Xr&EEGTn<=5QqWQ z8n7hE@UTRfBc2?s5=*RgH7#L?#c6P`mE`;)y?scTG5+#(ybuA^iJ9Yr@#=&!D?S(=hnzh=7>6{@(HL;9 zHW}0y&^a$Q5M#h>N{tHSoFAXKkpC))xksF6s7kz@|NpsNHCfvu7G7DyV6_5{3R2lp z84ffx(pn2rYRAtRzr%v@!T24Ny7(Z!tvUrMD`{Yz*A7}o>Yy<@i|!+uegaoym1dJx z)6Cn`csNxjj;<4hsgQ@6kip}(JYU6jFa;@@+Sl^!%YsPC;@=>+%jW!Q$=S1CxZ33? zgt(Tc-&w+*e?*=la^?*%cEx0$Ey<(HnMkrdhAdrH2}$1omAq0iYlE2XErYexbpR#R zv~U;IL-B7&niM}#-4u)`BS zpyR-2fc&*M7dFbBN4BRMvb${a0jr*_C|?Vr)wB?al>ner!BUp}=2s2`7d9b_KOuO6 zH2VNbtLBJC_)g9%N!upTQFvA2{rbCl2Uj8U)v!l@ z8=wpLE(d&_E69BSJH0ItmeRu3&SD*w*ol*)BSwx0Cx>%2`2<$uPKE>d@D@>?Bd&pM zEo&));N5T)2VR2QO-EQhP3!>(TW`#ZA2$;2KC)u7=$g4syGtc9uBUM(n2&xf|2Y8o zvv?DUgRo1=1`QO#^$O&;hMYeJ3T|WKW%$L#P3RWn+Ds-N7o6$WYRJ*j1a(PyF7F4h zpX)l3S*v&AACf}`or_HIOHLC6F;R-}7P7upZ^c{5`V&IY(6;zvh}&V-ej}Wjz+oU% zl*N9OhzVmc$iZAlQ%Jio7L#_wq=2Pdq@4(|inMBIy_Iefu2dJq(kaM(8*utX#{sWf zZol|A@eaVvx?2MdM5|hBSz6RKOww)@twWHE(aNFLAG1?fAqdP6l`Z2Q2;KpKRKlhh z0x*SS$jQvDuBmEWfW*D9fA-y)w5s(@O~GA^p{o+GwcP{oEJ+O+Ol@!5y>u*%`)r`!(7EKxlfFFo1*i}>pYLuzMeumk)LlnR*}`Yu#w4N-^13R#`yqmA1dBRKA@2V-0ep=HEcA|1DZ#} zhLRo`Aq}8l%;Pb)6tR2N4S_lqWQdE_fZt@Lc#hB|ulm@6gyohWrkj1W|9j_S6@9Y8nNU~ITGIl2<0dcD^_t?)gOuUM0$|;7R=a=QKq4|jvG$LapIjT+Fd8K zl*QW`Lho>dGTt4YUzwf+nH;)o^ajyc5FPA`wsmwwyW0i^qwQ_|{hM=ga!~Shu_9D$ zEzL;NUIgiSUJJ7i>B#!yCaZ4J4P^gaVp&Qw5q1lQ-Kyix`ZnF8Z67Sa2k~BU)m^FS zY3OWzt_)2>@2<=&n64b$SZ=u4rNA4qG#3;O*>ged5K5NyhEw>)M#GJbNjEkcM;lFM zg{AOkmXt(M>dUxfOC?S5*N!bSK}!Eh)7C;mri@CqEIqhmi>U<{__Bc=cqrNx+-OZZa*wR@*eBPG$6r_XCiwn@yc*mf3WtO|(G3cOu7c zHr-{JT*t{6AKrTKrX8j}tP`&q-Dxt2@I;=g$xbi;0-CiPk>%eA3Mtub%E8;n!ri9c z*|t?QSxsLez6DBNjYj&wyyoRYq-yNsxldac@BlLn%Ypz3nso~Ke7EV`=$$5kygXNO z989{)^r3$A9+O+EuN0kT9TA~OZ-)v=qp>kcqbE!SWy$hMiZxhKFLHfAX1{B4nm>&5 zx8ozS;$4&72`M;wVVV~lZ<;~wPspx!O)fXYR}^XRaR49$@dHmDBKK$HFw9#|^Ld^S zrK-_&hI|4Cc|Ye91wJkYlM;TJVItUa4y0^_6V(eL1B3w%8AwIeA_oi z2FjxSESEe09KcItXzm1Z?tRl7$lT37X(}?L0cK?u(sj~Qng&%m<`+Ue(uRM8iWKtm zlcqwQ9h2MMH7TY|QRIOfT}Nc>1Ji&Va@9i0!HwrkH&223G*lz?~jQVx8WRxTaG zqf;eADw9n}z9CZqW*rDKrPFwHwxml{8bEfbF|VR9p}swHrTYYN5gs{s?_8-7kIk0` z1%u}S$}8lvf60pevIjNc8K{vm)4={|4u=R<4`uAhGF zE~6%mCyaQ-!V30`=GDPtQx`y+6Z9R4PoX=J4CYL8Se=K+{gsm4YJ3JTgL#ujwF!puZ(={_P-yx5{AH%zVdii_gp8=_0R@Xpu6>a$i8L&gvh-%LZ zn@*gd@-(jx>RB}JSr&zwG4g*nJj+s*_K`*rFu0)iP}#@ByDX)KPvE2L)8VHrP7^CS zP;MH#T+&rpF4V-(t~Q?*v8~B+rB=oELbOQs-749#A(4QjYFZ&@1q4VOF#A@^vlrP5 zNY73w3)ivrCNV&D#pPPZY!ft-z;{PIP4iN9o7fJ3s58eF@bL z(D4XoErqk>W#jj}g55KCB@8Q9Va**$Y%;i7Ycg1VVUq#tF<22(dE-3>ZCnwJ?ve_X zKySDYtj9KFh1SGanQH7Y=@cdho|f_tP8gHk6i0tA>8z~{pefD!wALJ&;{7S{Jt2Aa z{7#Y%<~=37D2_fST^XX8aWMq_G*VaxMD6N@exBA?KMy2V7U`IKYFteHoOUEHfjLTJ zsQxacT{z2No^Ejkd~sa~Tln^n1NBg~zUn`;8(sY$+KpCl2g=;09a`>1ww3HK;8l>=emqNbI6WuHi^JyTMF-DJz1#H`dbB z$9k#etfNrtIVN(ywlm}t1};TJ9)xKc>jO?3U|I1sWZqq35#Gplnz{*w+?#dGhhe=f zRQzK-V#sza?`}$L!kY90>M<&#x$?CNgek^vI2z_}H8d*5?vXzRXYoGy{EWH_^*0jd z1CvRWF=3LbaIBo~=i+3qPVA14H9V*_ykW0aYuH=B8}{me(X{SqDs~x{YYlq~wT3;d zDMG1dopnPZ$QuIV1Z=}38N`iAa*!XbG$$Udtu?l2lcB^(mbZsYD@YyNsa4x)5eLp# z90LwT25AJs>gA*-*KEuLInWmkxgBLP&|Ux-mdOw zFLb^}`#1FFAkhUL!yGr6_?A4|0j)YzSB-l?+-V|x1$z5p5q=GTT$z}8*_XIVMrd-R z-0sQ-%7Amm-AnF%vWx@!X#jn*%a9B|4Tw3hdF0GnvNIp5C!AHGji7)&Rw3mS_DDsX zv^m9O(lPj{!9>z{Om^ZDk~4~(xnd~*Tg#vV84I#_Tbpr`_An~(oxmZRF`_k?t`b2b`@F=>9kl6>2!vOD$W47^qIWvT`T=$bH(Ke8|3z z3Pd||Ar@+l$y6t=2QWu}%ory&vmoODm*tefxRHaBzHtMu#fsO^l^aR(X~90Ui9_&~ zX5(gFAr`L%2;&cUt=4!Q-^}tu4mys#d_6^yWpBkHy5a^dFk%$G*tbyYn<(8h|7PDx zFT4pZ1Cf14bnu`d-~4ToP=gA#lUKf$(+|pJ=Hp4DQ_Z>|-Ub~S?CX!P#`)hecBAFE z8MiPgdXn>@?RW7B8eKN68>~dhzvpySsr5?!1IQ8$R%tVo^3*sZ!S5${FOl_WPHm05 z)EV2*gwn$?(y}H%@fmujXD>MlERo|m%JVio@;pyj7y9A3v?1)%RnjZ4M?2zfNX@~q>JLDhQA>dTK4vXz? zT(EQOX953YHSXBY0^Vd>Nk_TEmiyNDqyflqjFQ1wU_HS}PIWMSA^Mw@w>iOS2J0O- zEc4yC8hDSXfk~eCf!lgJsQ<`bB}fZeP@blJ=qF*Z<_3KLi!(mdg#IJVRBFA4$|8F`)ZT(plP=GZT;wcvktg9H=m?cnO*e96NZB+Rpz63wAx%~ YBsAIRzF8nA#$bWG#(W%)cAIVg2Sd@iL;wH) diff --git a/BIN/TELNET.S.txt b/BIN/TELNET.S.txt index 8de2547a..5bb557a3 100644 --- a/BIN/TELNET.S.txt +++ b/BIN/TELNET.S.txt @@ -16,6 +16,7 @@ BUFSIZE .EQ 256 *-------------------------------------- ZPIPCfgPtr .EQ ZPBIN ZPBufPtr .EQ ZPBIN+2 +ZPBufLen .EQ ZPBIN+4 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -27,7 +28,7 @@ CS.START cld .DA CS.END-CS.START Code Length To Relocate .DA DS.END-DS.START Data Segment to Allocate .DA #16 SS - .DA #2 ZP + .DA #6 ZP .DA 0 *-------------------------------------- .1 .DA CS.INIT @@ -42,6 +43,7 @@ L.MSG.UNKNOWN .DA MSG.UNKNOWN L.MSG.HOSTOK .DA MSG.HOSTOK L.MSG.SKTKO .DA MSG.SKTKO L.MSG.SKTOK .DA MSG.SKTOK +L.MSG.SKTERR .DA MSG.SKTERR .DA 0 *-------------------------------------- CS.INIT >LDYA L.LIBTCPIP @@ -82,7 +84,6 @@ CS.RUN.IPOK ldy #S.PS.ARGC >PUSHYA >LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME bcc CS.RUN.HOSTOK - >SLEEP jsr Wait.Timeout bcc .2 @@ -150,14 +151,14 @@ CS.RUN.OPENSKT ldx #3 txa >STA.G hBuf - >DEBUG - -CS.RUN.LOOP >PUSHB.G hSocket +CS.RUN.LOOP >SLEEP + + >PUSHB.G hSocket >PUSHW ZPBufPtr >PUSHWI BUFSIZE >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Read bcc .1 - + tay beq .2 no char rts @@ -177,16 +178,22 @@ CS.RUN.LOOP >PUSHB.G hSocket bcc .3 tay beq CS.RUN.LOOP + + >PUSHA + >PUSHBI 1 + >LDYA L.MSG.SKTERR + >SYSCALL printf rts -.3 phy - pha +.3 >STYA ZPBufLen + + lda (ZPBufPtr) + cmp #3 Ctrl-C + beq .9 + >PUSHB.G hSocket >PUSHW ZPBufPtr - pla - >PUSHA - pla - >PUSHA + >PUSHW ZPBufLen >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Write bcs CS.RUN.ERR @@ -209,11 +216,10 @@ CS.DOEVENT lda (pEvent) .9 sec do not discard TIMER event rts *-------------------------------------- -CS.QUIT ldy #hSocket - lda (pData),y +CS.QUIT >LDA.G hSocket beq .1 - >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Close +* >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Close .1 >LDA.G hBuf beq .2 @@ -247,6 +253,7 @@ 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." MSG.SKTOK .AZ "Connected." +MSG.SKTERR .AZ "Socket Error : $%h\r\n" *-------------------------------------- Socket .DA #S.SOCKET.SOCK.STREAM .BS 1 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 2699e5c6..e2735173 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -293,8 +293,13 @@ S.MSTAT .EQ 24 * IOCTL device API *-------------------------------------- C.EOF .EQ 4 +C.ENQ .EQ 5 +C.BS .EQ 8 C.LF .EQ 10 +C.FF .EQ 12 C.CR .EQ 13 +C.FS .EQ 21 +C.ESC .EQ 27 C.DEL .EQ 127 *-------------------------------------- DEVID.NULL .EQ 0 diff --git a/INC/LIBTCPIP.I.txt b/INC/LIBTCPIP.I.txt index 24128f43..20a14775 100644 --- a/INC/LIBTCPIP.I.txt +++ b/INC/LIBTCPIP.I.txt @@ -59,12 +59,7 @@ ERR.SKT.BAD .EQ $BD ERR.DNS.PENDING .EQ $B9 ERR.DNS.ERROR .EQ $B8 -ERR.ARP .EQ $B7 - ERR.ARP.PENDING .EQ $B5 -ERR.ARP.ERROR .EQ $B4 - -ERR.DEV .EQ $B3 *-------------------------------------- UDP.PORT.DNS .EQ 53 UDP.PORT.PMAP .EQ 111 diff --git a/LIB/LIBTCPIP.S.ARP.txt b/LIB/LIBTCPIP.S.ARP.txt index 12aed582..6dd467c8 100644 --- a/LIB/LIBTCPIP.S.ARP.txt +++ b/LIB/LIBTCPIP.S.ARP.txt @@ -215,6 +215,7 @@ ARP.QUERY.I jsr ARP.FIND.BY.IP iny cpy #S.ARPCACHE.MAC+6 bne .2 + clc rts diff --git a/LIB/LIBTCPIP.S.FRM.txt b/LIB/LIBTCPIP.S.FRM.txt index 423e2d3c..68d06bd5 100644 --- a/LIB/LIBTCPIP.S.FRM.txt +++ b/LIB/LIBTCPIP.S.FRM.txt @@ -228,7 +228,9 @@ FRM.Queue ldy hFrameOut no hFrame, cannot queue for retry inx cpx #K.FRMQUEUE.SIZE bne .1 + ldx #0 + .1 cpx FRM.QUEUE.Tail beq .9 ldy FRM.QUEUE.Head @@ -240,9 +242,9 @@ FRM.Queue ldy hFrameOut no hFrame, cannot queue for retry lda hFrameOut sta FRM.QUEUE.hMem,y lda ZPFrameOutLen - sta FRM.QUEUE.LenL,x + sta FRM.QUEUE.LenL,y lda ZPFrameOutLen+1 - sta FRM.QUEUE.LenH,x + sta FRM.QUEUE.LenH,y clc rts @@ -266,8 +268,9 @@ FRM.Retry ldx FRM.QUEUE.Tail sta ZPFrameOutLen+1 lda FRM.QUEUE.State,x - cmp #ERR.DEV+1 Device error ? - bcc .1 yes, retry sending... + cmp #ERR.ARP.PENDING + bne .1 + jsr IP.SetDestMAC Err is ARP or higher, retry getting MAC bcs .2 still error getting dest MAC @@ -283,11 +286,13 @@ FRM.Retry ldx FRM.QUEUE.Tail lda FRM.QUEUE.hMem,x >SYSCALL FreeMem -.4 ldx FRM.QUEUE.Tail + ldx FRM.QUEUE.Tail inx cpx #K.FRMQUEUE.SIZE bne .5 + ldx #0 + .5 stx FRM.QUEUE.Tail bra .10 diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index 860c5782..bf8de0a6 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -8,7 +8,7 @@ AUTO 4,1 * **In:** * PUSHW = PTR to S.SOCKET template * **Out:** -* YA = PTR to new S.SOCKET +* Y,A = PTR to new S.SOCKET * X = hSocket *\-------------------------------------- SKT.New >PULLW ZPTmpPtr1 @@ -29,7 +29,7 @@ SKT.New >PULLW ZPTmpPtr1 >STYA ZPTmpPtr2 lda #$ff - sta TmpOffset to keep track of any free slot + sta TmpByte to keep track of any free slot ldx #0 @@ -52,12 +52,12 @@ SKT.New >PULLW ZPTmpPtr1 sec rts -.4 lda TmpOffset +.4 lda TmpByte bpl .5 already found an empty slot.... >LDYA ZPTmpPtr2 found one... >STYA ZPPtrSKT save it! - stx TmpOffset + stx TmpByte .5 lda ZPTmpPtr2 clc @@ -69,7 +69,7 @@ SKT.New >PULLW ZPTmpPtr1 cpx #K.SKTTABLE.SIZE bne .2 - lda TmpOffset Did we found an empty slot ? + lda TmpByte Did we found an empty slot ? bmi .9 ldy #S.SOCKET.HDR-1 @@ -90,19 +90,19 @@ SKT.New >PULLW ZPTmpPtr1 jsr SKT.NewTCB bcs .99 - + lda #S.TCP.OPTIONS.SYN - jsr TCP.OUT.SendOptA Send SYN,Only for CLIENT conn!!!! + jsr TCP.OUT.SendOptA Send SYN,Only for CLIENT conn!!!! bcs .99 ldy #S.SOCKET.TCP.STATUS lda #S.SOCKET.TCP.STATUS.SYNSENT sta (ZPPtrSKT),y -.8 lda TmpOffset +.8 lda TmpByte ora #$80 tax - >LDYA ZPTmpPtr3 + >LDYA ZPPtrSKT clc rts @@ -339,7 +339,7 @@ SKT.MkNod sta .1+1 SKT.Read >PULLW ZPDataOutLen >PULLW ZPDataOutPtr >PULLA - + SKT.Read.I jsr SKT.Get.I bcs .99 cmp #S.SOCKET.SOCK.STREAM diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index f88dda2c..a2754d9c 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -169,13 +169,28 @@ TCP.IN.JMP.SYNSENT dex bpl .1 + ldx #3 + ldy #S.TCP.SEQNUM+3 + + sec ACK=SEC+1 + +.2 lda (ZPFrameInPtr),y + adc #0 + sta SKT.TCBCache+S.TCB.INLASTSEQNUM,x + sta SKT.TCBCache+S.TCB.OUTACKNUM,x + dey + dex + bpl .2 + lda #S.TCP.OPTIONS.ACK jsr TCP.OUT.SendOptA SYN.ACK recieved, Send, ACK bcs .9 ldy #S.SOCKET.TCP.STATUS lda #S.SOCKET.TCP.STATUS.ESTBLSH - sta (ZPPtrSKT),y + sta (ZPPtrSKT),y + + jsr SKT.StoreTCB .8 clc .9 rts @@ -450,7 +465,6 @@ TCP.OUT.SendOptA TCP.OUT.SendOptA.1 ldy #S.TCP.OPTIONS - ora #S.TCP.OPTIONS.ACK sta (ZPFrameOutPtr),y ldx #3 diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index 727ff2ea..05d1ad0b 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -114,7 +114,6 @@ L.ARP.CACHE .DA ARP.CACHE L.DNS.CACHE .DA DNS.CACHE L.SKT.Template .DA SKT.Template L.HST.SScanF .DA HST.SScanF -L.TmpByte .DA TmpByte L.IOCTL .DA IOCTL L.DCB.NIC .DA DCB.NIC L.TCP.IN.JMP .DA TCP.IN.JMP.CLOSED @@ -218,7 +217,7 @@ POLL >PUSHW L.IOCTL PULSE and #S.EVT.F.T1SEC beq .1 - jsr ARP.EXPIRE +* jsr ARP.EXPIRE jsr DNS.EXPIRE .1 jsr DNS.POLL @@ -367,7 +366,6 @@ TmpDWord .BS 4 TmpOffset .BS 2 hFrameIn .BS 1 hFrameOut .BS 1 -bTextMode .BS 1 HST.SScanF .AZ "%d.%d.%d.%d" IP.ID .BS 2 IP.CHECKSUM .BS 4