From a3c4b4f1fc071d4570e4dc45045a19d79bb59399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Sun, 19 Mar 2017 22:47:54 +0100 Subject: [PATCH] Kernel version 0.9 : TCP, ACK problem solved! some additional fixes including corrected TCP payload length computation --- A2OSX.BOOT.po | Bin 143360 -> 143360 bytes A2OSX.DEV.po | Bin 143360 -> 143360 bytes A2OSX.SRC.po | Bin 819200 -> 819200 bytes A2osX.STARTUP.txt | 4 +- DRV/UTHERNET.DRV.S.txt | 47 +++++++++------- LIB/LIBTCPIP.S.DNS.txt | 4 +- LIB/LIBTCPIP.S.SKT.txt | 124 +++++++++++++++++++++++++---------------- LIB/LIBTCPIP.S.TCP.txt | 55 +++++++++--------- LIB/LIBTCPIP.S.txt | 2 +- SBIN/DHCPCLNT.S.txt | 11 +--- SBIN/SHELL.S.ERR.txt | 13 ++--- SBIN/TELNETD.S.txt | 53 ++++++++++-------- 12 files changed, 173 insertions(+), 140 deletions(-) diff --git a/A2OSX.BOOT.po b/A2OSX.BOOT.po index 8bbc7710848fe17015024bc6f4e310046b22df74..285c555243097b2956866cbb83a975c5883bcbdc 100644 GIT binary patch delta 7672 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 cW62$>oyv*Q$ag0HG?#O`CHviWC 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 diff --git a/A2OSX.DEV.po b/A2OSX.DEV.po index 0da46f811f30c6701829a09b7cfa938a06a58615..79894a33153dfcf6f51b238b9b10f056239e056b 100644 GIT binary patch delta 5370 zcmeHLd014}6~D*CFm8Yfv%Y~Dn1Qg3GXo6c8i$z&j1Duyyg@_|L__Nq&7w`xq*bzS zX7MDxW@$o9>y8Sjh>BvWS(?NoUD7m*nkH@2Y;Dpdd+d43FksUE+wZG>-<|i)?{}7a z?z!jQ$NICH^=CDE$B!Sko+bXJ_3Fl_j)F;;m%1S}jeTsAfn4@>+Wg+*sl_nvh$bNk z^nRB1K%=%Y7{15B*LB!RolKL%3J3E_m?IbWEh}-_lsCc73Oj7&e2LBP?TGOLADhPq zI(*S+h!-MN@f&N~maUrNTYF8%=H;Vs;>sdjo}xD~pDl<6V)G>PH`oHs-pZ9%RxHry z6_hiuP_Q!Yj|QU-fsZ?aQGZqStx_aqj58*&>JgZS>9{0TC&cULHOy~Z(A2!JrL`AE zeFFK>NGP;HGUH`NbCMdZ4+*^QP6=>1nK>IT*}{PZo40U{)+Eapi#mLP!0j^4!z?)? zA&SNC^Vje<$+(x9ZAm;3799Q%?~BQEaFY)^zDz#y@S`n8$j32Tv!MVBwpySN=g?S; zE4CV&N|FYIxp6WOp(t;W%$Jrii(@28?&H47kmA17!?-Em!hN^Nx?Yy;!n0emz>Vj& znxPEM+c+r4Y1>Q{o{>7S_O?rXO4_}Qs~8DJ*RJu)2Fsmz`L+z~+%^`b;?8Z{x@jYc z)$MBph3H|L>B<7@W-vY$b4b&QLt5b&EFZiu66=M<>Nww+FxhZ}d! zE^ZjotqJh+WS=gUIe$o6>+{PAb2DQjezViixL^nhMrFk1X1b;!VXaS?t61@{%;q6+ zb%SEX$#e^cgfvN)%ypMBT?<~mOAD=d>#hP=gx$OHXSA_GHhFP^EvL@q_A<>9W!k1o z38JNuw~adU8>N&xS#CRKbmhSJu%gQf-^a!-J1oU@T{``;;VMBTl^$kTj=Q_`ffeL0 zbLB9GGCeB0%T$l62&ACD%j0SVLSq+~a=H3Ev&#fmU~sn`uEf>54R96SzWWlxn&C#` z@sPY)lz_GP)^6>zA4ox5J&cmbvE~}JO0FePi1_DH^OAn#a-f#*Lv-!o;5rQNF~jw^ za*t8_?I**B2P26xk_ z$CmE#aF4{n_1$T3FKO$>Hu!>ZnOlxoM0u8gjWXqeODXl6PZiu^Ol9$=NAbp*pwWb!PXOuHMe*q5o_qhgWzxCF{| zMrFDeAKj;2*FB_IFYt<@m+5!9TX8L_ex+GWV052#|Fe{NwyPKV*>KAL3uK?S@&F~fdkhWbOeaKEnPFrj?B#t{(W)X-#$Zl*n= zN`;s|A*GXj03Y9PfTMVLe-<3W*Y;=U4oZ9SxI&g4xQjgWpYr&m;>G$4J(D*zGeRg;OukEwhPLU7oi{yhk zn(RXkxJc@EFDXu@zl_KGropf9t3C_-8qEiD;5Rt?V2*UJ`t-w18&>so#a`j6SEON1|KjH`dX8041J(LZ9#==A9+;=7Ce^C`saZg-I z+k1+0?tNT-$mIQiDAMUl;Y<5ot~J@Jo0&dTu@E1wj@QW5Awy-X_#+%RRFwZ$a+2{k zg{3Zz;^Sl0$0vlv{kZy&cE;c3$M1BM{SOtR!gf#vSMo7=)2hz0|A}pfv*2I2{%|&Y zik*i!_zVXQTi|m%eb@?LY&>FJ_oZqf5{(BVba9CZae2k;gQJ};r;}N}I*%YUhE>8v zL}1xppNCUJRq+(3i*etma6>R0h%_Wq;VNTU=a_(}K3WSTJCM6yyhTK!ZyMa$yYKHDHFZ zxMP5uIxeB)hz0JImf1c?0XqgYbQXGnR29P$A-zuA?0u`qmf$G|UxbfNp@sEIf70 zV9XwY*UncyMar4cf-q-_njz*Y?%*iIEO0NQaGHsOjE|!tT8iJva zy!G7WuA6ODl`JEjHAKR3Rpus{pG}&`0uj|}DM11504kn*u};cm6MDR7LlvyjiQ*A6+Mp0B#7o+s0KDR|HYkRv;-)sJfNA0>>213Br9_z_<}D`SOtED#l)$Xs bws+^i{|iiN;{Oc=M$7RS^mQ(VmZ$#>p(_PH delta 5252 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 diff --git a/A2OSX.SRC.po b/A2OSX.SRC.po index 5e76b2bc8ba3c439f7f046cae4066f15f3196de2..72cbbc9a6c6fa738178c37c279d31cb7f4722219 100644 GIT binary patch delta 27278 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 delta 27274 zcmb8Yd3;pW`9FT{%)QB-xf4ic&t%_N0t{K$l_eVz2uVl+h+B;i1jPiBV2N881l&c8 z;k*`{ei(?w)JY*{yk}6UvQ_jd@P%kUlBz2TLz8^tr<0ry|9>-d#7f;G2ii31^D?%(|E>O%9!;(yA>PtiTbm;K32y3pW;{Riq@K{hKAS?9leV? zPGO$U*x(5(doZ_|%s7BK_&%pbZ7Zr`M>V&dvc9>kg{6H#Y;B4~XMpLnFX=~rAN{Ii zX@nb48zDEDFZ{(ziKj!;ZR*$o3jb~{G*ovg3v+Su9K(ao&y zp<#zM z#cJ!8wKg=hZ7O44U5i%mwVf+taV89H@Py8eShSLPQ>bse3M8#mRCa90#q^nBf}+o* zMJxG`vk-6(yximOx8%5%N0FPtd})%Ly&A;gDB^0g7M(Jbhji6xD)VNH;K3_+5G?r6 zJ>b`(Q!~oVLxyeOSSvaZ<@|{(NKWt1!O-7j(EicVa7maZ)s#EIKhQ&+f=i-RxJC3S!ziJ@_P#l(+^9k zCn<3_u{WEVU?Fj;=M3!b_4m)UTS++~2&K)_68FSgC0nQ?igV+uk>e!YEMM(VG8iwd zE{RC`{2@e`aRiw0EzkxtXgwx3H%F^C_O!NbVUhZQ4Sha-$wH?Q@GVsHNmPdyp*raE zEVidHjTwy~mD4nE<;Lvk&Dvml=c)v~Xv?a;DQ%k?o0hY{5_!xL`x(UzXhGl1)`3qq zh8MKSzD4$6(Y8(1Ygg5ELozH?Clq3889JED<(64Ts&Wuof%5F5#Nldx$Q9~8TAjjU zFmF0o$Erhk9NL9`m2|42<>!hGfrM?x0U3G|Pf!D(a^;AdxC)h|86XTgi0Wz*CbXQ` zmwqWeNls;)D3?C2F3dIRTCP>pE1B=45!cc<88p4?NWdgXA!ePTI!$5T&Jiqi*(~)l zV?FV-frN|VDZ!GjJDDYM)7HQu{qa-h^KMR@I$0YY$k^m} z(-qo+G26}_IC@j7wv}&Q`)5bf8j6^6DnBbA|jG`)Wu0OP@J{n|E6-u za4J(+WGBkn=vbKO*xSB|nP^2SDzI~4-)a8vrRrj}Mwiw$M_XHJnwwhMSY%*e_vx7# zm&vB)Z_ss9JB#c>Y1lM4Rwe6ljhCO~@uiCPfx&_1)BPD&s3ERYLtG_>xO&JCwXJP( zh-<_U*Qz0|Q$y^gA!>7es}0irwJvIl)^x4!t8MRXukUQ@YTDSlmHBQ&e)i*QuO>`4U>YF#qQ!xG(K33PqX}=@J>TZ*a1#h<(^QdM?5<-x9?~sELy~d7T zgPe6Ij-3E1%(x4a&AFRe+;heoDgC2E47ZMeRkRYKF_bBhLqoK#r6sz!qo)VE+QUXi zBs@5(8JMP=Wo8|!6}o3+C$}RNodXnMUP@1uk3;&?aUVoCFj{7odu3N4kIcZMs7n9czd#Zasn)rKyF5 zqI~x^deAkQ3B_!d@s|g*$@iu^eyd%7?sHBSoXhjqcmlKMIUsAR9O8Id)eZ@a%9+20 zidHI&*xOxBJl3L`7{ij)p<84=-`S#N299uu)u?Zd)-0&2S=738F`Kl2m$zyYN7p-) zj+;N9MHV{vJD=;}yhU=fV8e)h7-Z67(UX7NqLrqI!?lE0z39GkPn&jO8C~J?qt&f3 z>|&bMw)T_`9L`H+fqRrz+ZwHFtYzkCZ7^Dgf75xvJI;R%q&q&}^RA}v)jrUE(bCz8 z9aupUG&kdvjlX4}d@D|DLePxAZD1oxZl{v)1RPUwGKKoU(V&wVxSMo{ty5b&)~#;E z?Y$>1-2%RQ6Vgpphwmeu>N4&}|EveJ!GUWxh8&rDp%g=o><0&awJodv_cYW)O7=qE zJdEGwBl4k&PBNLS2Xmi7Q~Tu|9Q6mSwq;qgMlOZ#2`!F4<~ zj?8hq`2u&yF@8Kx{aPE>56rf%r<<9;Z1k@HYOYCI>E*;_dK8MEY@F6;ee)z}+R0Km zL0vViUft8t%ZxIbez{t>GL{a=Mm;909+iM@0*To@CX}BY?>)P=y&ot|l8UYEjLq+E zKc#~Orb=>0HH+W%og{fo;61vlUZA|56IRCJM3{eu93ojx832GRq%dDH9UN6Zfj^r< zKg|M#K_EclGl>XFy>lcdiNQ=@LSg*@2HMu20)dG}RyD~)NDR7=bP|%-1yvJ(kZ2e{ zfumVyz7~ZAYdis&5qOes_{8ON2A*Pk_XBQU${!(9*7ou_*ISuE<7u>TKZ6n&L8Z)i z7C&>J;~VC?{rvVqj~NR5DIwo_yP*$Amt{TAfA~g=XfN>e0hd4JMRdylGcWsA%gcTV zf158$Yu0>43LN8A6oy`7{E|v{AoLe0AI-n2%D=IzS@!FUUwyPI5_;nhqeb3iyx?e8 zSo=GF=UdI+{||7haM(X-w71yc`Zev$gt<;D5P-R^&Q~j}h`P4uf+fs^$u6`ntoHTm z&=}VF+RjZZ^L=!JF2iArHwK0{l3B3V#V8fbfThkXSm<=ki^?pP@*#8(i@-qV*B$K& zX&;GY7zL}GnXt!6RR=%eOFZD!f*EehNm$=3?EndINl2LAbUsLT$hBoA%x{{63Co)# zp6e@CI+-rq=&xBRxP(52F<-?(->}jx_$!8vvEHs&PZ!BUmi8^RDyr{{&5E&%gKU23 zma5q7*qT;ZJ?cAA4M9ouf$u?M#YAeb-kv^l{lH3(p#ckjWcFwm@@uYi1^az4z)36H z#dN@6hBF^5ZyPKSb5U4^3|GYmBYb#!2bDV$C_v7enYx1O2I^sm$A_qg5!lWGFvQn+ zvHEHvZS5zl>tJD%Z~nj)%z#xMHw^{7J>P35nPp{Fg)I9Sjqkq63h=jo<1%JHD@9uQ zw$_a&^!BaqVBY6sNyWBh9o;=^yC4z%Bqd_{^VN?sUO*Cz{{?;QpXLqTmqYDG}#~Y`jh%>=6Cni7YrPCT6PL78J2a?z~<8;qhYzw@V0c>^H*oIUqbrUj$WY!AqZ-FdI7kN zd(bT#P{qE-!$3bX?$fSjJ|LE1z~2CVVeY;0xjZQ6GU4~)3d;?`!kwd*o{uwhe+a-P znK7YKN*>mD!CrUaG!I~o@W{<9XW76vHb+&fR?(em>%wIN-^}y4J^wN`X+OW!&?ol) zL7mDclr(t~%oRKZ=A;{_sBBwjS8Nri#Cp5iJ9}1lba$*`CXkMB89c3eJ%e7MXVI%% zIFE`JH`EL3qP~fl5E#_f^Cwi#+=ZjRmARhRq=?RLeL+()x}~FiRaI?mfJWBy>j{)z+}tP#%OD8eQS+$q}a+Ou$gC^>hfiVVjxY9>*b(b zy8s@2YRe*9_{nqhOzmv`d7WN3UK|Z(Z6%c=K#g}BMujF;11xG{`R6dYXP@7w`GaCS zHtJkCqxxp>%kt0X-_OzWQZ4{z;R|`*Ts`EuC{8bMF^^U0zFEN?C<3@qbX%I{&#!A? z)=srhz+;yVAJ`ZG#mvk2j=6fc;5Ya?xQod445MLiROMaHKf6&2^0(&dX6axud&U*) zG8VitzG5wPOD+~()=D5W?=V-&8c7ztr=Hp0bj-q zYUAVUexq1-fOCG`JUtM($zJ~Ym{@&`8*Qj-WTiKYm5<1k_uevON?7ikTg6Nwt?0l; z-8N(@w}Y$PJNRK$dQQrn_&a=;T<*Jxh}gcsJ+$2Z6YoVy(rQ=LEMnGuYOR6w??*Mv z#>6HY4}e@~FYPql^qMstD^Di2t5%-O{0|P{v4w~kzXx0_eu)2Ar5BBTcnFh^fRgV~ zd-gbd@|cu9M)S@K0tm_iYaj6gcXuVr+s{w0)^jKSLG`L)CLl9ua_dQqt@h+85VnAt zRVUa&&s6K#hXFOq01Yz%n??)&_jT0O@Hv@KLZoKo-u z0?>gBz-|FBK9udV{>!iXR*wL3zx;uoyEFrETX3Z8f9CyUI3a<+$y|V*{0s~0Lf~sv z$I2M=FY5cMF5}8(PFAOY7S%6$1_tyIzF8hO%!V@+Hg% z_(#5@?X-hk@kRe(cozdvFE#-fdrm`rbqzmQrx&ICj3WOpykNfWb1;qH^`bKv0jd_z z3s71x=#(nANZ0u4`Fg<$KxnmJMhY~UpRhAvfHGKVBbdt+G-50a=&WodAuF1i+v=Md zTba)-ahU1^RLz1O{`P!5upljNix24$7&W{Hj8X&M7Zym5t9x-2Kx{nA&)~-|)Pp5( zQnjsUu49(h*80rwp_ApOPB>~1d;y-`s0SQ{LD40fhJ|%c5yViU6XIMfGn4N>LJ#{R z)K}bZBMZfmY~ZzB^?Km&NRDJua87dZi2AD9T5O;nTU>4M8_+lrHUxT16(8U=BY`NUxR$V z2(rfGS+EV@C}EMw{HFy_n`K1bXSFVC5u^*srk)I+d`^aw5wSUXEsR2O$4vRO=*-jrL>8sEz-vqHmfy(qXw}mabjpA z04?AFXkEl|T6jT&p5-=LK{BU}Kz~((9vFYb@spz@)MT>P2YgS9aA9fx5#MsF(a70(IwzTN50R0u}bUa&8V4 zs4(HB^U%JEbWeAI0o!_qVP{uCpk6*qpbo0ZVXLn|C+kYJ{t&2FiG6kCU!4%B1h*_$ z_F_HIzszeAJA ztxE7Zif-d)HtU7QApWC9Fz-+@>rQo)?n0FkxObzk35!&yIT)pMd0~KJ^Y5qgC9o3g zPI0IA%Du{YP~!)Fac4u$i4)#dzqqbxX`686d0}r3g(>F4s`n$R_oKXViJm7MCPrH&maTiq4^L)b>S{6UcVWoK7 zFDQ3BD}Iq*+o~67f96lL>SMH*_($~XWj?A+ALDvOvN`EhKD$kyc;suEI8tPPMUSkn zJ%@%t!09ibwV*Y&PcPfrT36G`vj2(#`2Aa@xh5Q6(dw4k8pJYue^ZUkva@T1wuG~m z?{Cwy{BI;`T4hbnoBTidbtDI3WwQ^eJ*)>f~i|WzvU$VS%YFYVKU=mjHHs8EdFAl$>%BPo2DJw6lESpv~ zAJL?Ocljer^?cWRa`qG7=l@=+Ptg9&GnVOr{tslI#BBeAg8yr_AF9TQ*=GG$E+WB& z6=Is(#NwG{%=b~EwOWC!j}xsWxUk~Q$NrDswM-w=@CkYiS(Z;_L1I}xlXOQc%K=#) zUzXy}X;~ut@a4K|`WLFQqHGGw{xZP^)-MX?>zlX8?N9qkHJnBbzvgEw*TZ{`)OYo# zX%3OiQB*vAHA{0iq+lK!9m^~yqJ5;DAt`l4`_c@%vT7{zq@Yq5fruKV+7(BQg}CyV zRE2~yfvQxhX6g64`WaU7cy-84qS93d^NU47j*UXHd5fn2%wJ{1YhJ<4>_bX z38T=R=}^+d6%oZ-nVCfa#*h55rr5fU&e&=ZIx=p6=n34&n-A!I*B#?P|wls6@hz*JfSjMqYxU%iWwjuP7$PlI|6pLy|Gi|9OgP^1BZ6MA9q>KOxo2Sl~rbJ zHyFA7%H>hhP+!;B#tgXcnEzDDE0CSz5d=8xhUp+U?Eu)B7k)bdm1>$A8)b|NPCRk+ zr!ebu*^MsA86X`vlX3`>v|iRkq!S1yp4E?D6uQS{-i)T1F@Dw*cUapZof4t5`Obsx zK-dM>95ihVut~Wkwxe<3IlLg(DA3O3JOAehPB||z>iMYkU0{0};PO5ny|*y)LS;u^ zB<<*ei}^*lMt&GxxuMfEE&+jwJB8z+ziQ>mj`aw0S@6w?U75j5IOPQFyA18T@XCpG zQ|5FJ^TI_Zq(ppmgnQ0^IeC_bj%2}2r=*#A1+8r#Gp|$*oU6o&`be4>S7RU(E;_=D z6Rsu3##dVK&xyrDP##`7=DwcNQK*IYwM3LgL)%H{f4_)bA=@Gi5 zz(|>8DZgBF2215i+)vw+GvSaEnDALS zHScpYwc4h-Ww>#48Ud|Ti|1vF%oq5iA|u>@0QS(+WWXiI{4X8i?7%l?Yr{W{nmaLF0>`FC;L#A*8njR;?x zVx;?26|?mUr&}^8o$xOjW9;@~V^49)xPD|WI7+ujhdUy<)f-o{j2THKP-HA^rh}pn zBEG11S$?}>xHyvqh~t=T%1|94Qigb<~U@y zBRrRAw)T@x5d>o6TH9LcsuquDp?RP$ibSXdDHwvOv?{@aj7_s<*z;K+=0gl!NO!=CM5JycrJvB&v8i`)*D3^(7dq(N zHZ)L56{%&c6QzfQk)1TWT-;e?D~a+dW-JC2VmXa`!UOK?QB4Z&AbyzJ?BKJ%(XwXx zmneKf>xX6PIT^u}7IX@<60R8@k!+KRP_XUxG^YH6AK2gw^PJMu)a<`2ixx^q2mvS| zAq1wdz`yvs(o}!u+p>iPkZj|nccIC$-s7i~rbZm^Yr9HQbC9h^_VK?JHGpG*zkrEX zt_Q|~CIJK%N(DCkf6+Y?AeU4nfvTm=2r}12t5-zpYnkyeYJLAB4NJFG`h@E{k@}zw z?7z?FH34hIb^J`K-n;{R@`TjfjL#JsfRzcz%EDjr<0hnr`hiMq{rfeF&2LEA_A%pI z`f-rhT*<=UNlPvn;L%3;f3N|!c#aYx+GZRJzsv7@(HY7_HVGXq^L-^>{w?K8 z&IkN67^VGo?#K|U^uyu$!bC!eSg?;|Z~w<^dAkb1;Y6NGm+}9f!`plSRi}N!A7A2{s(s75G$c^C=Xs)mgN%|2 zAstA)&w+W^5-V)m)8aB`6VfK@Q>2b$zbc}?bmOWnNJ6}n8DhPb*k^z+76I;(Su}qm zj5X?Y<%)uF$s%v^{G(l&D{=G*_}GDL5ij=O9tc59Z&`2`kOm~rNG9-@fJyN{|AHkF zE#ZDBLqT2wv9EbV;(E~gl{9n8elpiCZNX!aKxKmGw%Wb&6u zVdKD8hzpaTA0jlrPAaT<;277_#bYM4E~sm0h+=C%spmRe@tez_C&Y6xpc` zO--%L1eB#|TbocVg5}KYQy1eje#d|-%NaSH@w*mU!Aj-_Y90Pw$vPA2k<3SI@maWk zqk&vyR4F=TLiwJ{TzVQa0bxaM^cFnUdf6MC6g*qqt2oninF9c^0#hs!w$$?0`lISt z;dWjy=*r}yW_VH^ML@QLuKX|yoGY77PHtL!Uc70F0jN`QKK(A90Ca16ybyY3k&A8c zQdQB_b7Yh*d`tN>NZjHbk^os^{Um__cZD3^slXi2IKVCo1Lg`iw7fo+%)ltXUQsSz zcLD#7SS=u6wOS^Zi(*_3irIj>L-h>5w!-7?4+8rN17XNQ89>4;3>bV!CIE?(m;g2& z!32e}<(8R%%Cs{AC+A#0f{C1;EGrtcQS%TcGHz7MN|tZ+Bw%p>XO?*rf9VQWxc_F` zv?<=FucoC$C|fKgFtd$|Z$*0(xS6h_`*vISx$aQebQyQr*>oarqKbL%LN1*6JDy5+ zcXBG-J*ZZhbfqHGZq&WWsdO%&X(9TG?-yBflIr=CHy4`nKzvDzyqXmTPFUy86`sgm{^U6eKEw0R}B94md3HpGcu@8VZp@ zP^LY-rwu72KQ$>a5E=xh47i$@A1)>uDBc!SLhv;WZ%xDra{1wP zqI400sxr-}p1D$OXle>*x`^Mj*Ojr-1(Yb7#3V{B(^{2s3{)&$`c@*AMR$$r$J<1tLYL)5svO2X7T!ws;l6mJnQ5hgv+iu~-0Z zD;cIs&|((cSW1P3LJr`_=~(9U8E|-1AXRB^`h%_mef@AQxJiFmK0W*!I5EXAK;d093Q< zC3ag#*v&s~k#xwK4RYZFi-#R)kqq9b4emMI?MM;Ot%;!9QO#sxxKH8Pj2j5RmH|0$#dqq$E;hCw4)hE4cnBp>^fF$DxV@;m3c3;S1r3O&z?ov;qs-?6UM zBJ+`@btG{TSdB&_5ao%ga5-g$3xC3zq!Kd2N3Bg}*maWPF#lx1p%Avb8M(Mc>y#$3 zE$jMDlKAwfQ7M?*E`IK7&K!L`cKLyM?zyIJe2iSjISbs6Y7Z=Q&zb8Ct`qj;=rjbT zr7I6xALtx-=XThbU2^i~dTC>3Z{Qc5=gu16tq$J|=Iu#1-GxEItX@>oHJHJI8~MxU zxdYXwVzd3fmgi~>%s+X7Du7%QboxfnIW0lwbU`Qo4A60(N#adh`m+>s{gS!d&HUK& z-8ouJ$cFOJ7A%5#d@tg-a%~KRteFq-YIQ%!)}0Tnm$^;6v8nWL$BCvlw{UGyRdh*< zjAWCCeJ1lFh@I3Ec6#RdqNB6u0^tBiLy>tQUAjJ&c@b5G9T$t5l6pLAX2uSTpLxj; zDpl|(E^UNxXPG+%u{7&awK6kV&H#Vu0(W-iWz_FCL;5YLrG9%Z#8nfWcZtqpb1qMA zwY9lxZD%h%VxSCmW?msJ!0an|{l)IA)T=-?>uQbfJkb?S6Cr9DhzefIFS*zq(5~a@ zm$)-0?v^vMt_NSrxlK`O>joT}@?G@R1oK9DVM_P#rk(B}Uw4VyH}NKEzgdXmh;Eoa zg4oRZ9ceEt5!~OmO3K-{@p(JkS;e=@p9bPOEaOh`V|yn&NwM`^h*IB$()_!5{|izf|&%XF|)$Y(3=Gm(jvJ!#$2l2OX?3Qm6i_*~@n;T=1 z--{_udPt7!d06p^9>ycuISdcNqLt-4#T*|~b9_88$IN|dj{EI?4DlNzMnAzXzr>x7 z$Thv)niYB~E`aG=EuplmXchC=!J8?Nw@;&+`3%U>ay~01=9uTWd#Af3|4(w1(DQ_mLZ-Ng1u05B!3;FK3p1>Rm`2`X3L!#+$ z+!#@~F*8fzM&bReK?1k!(k#s8Ki=mqsLe@&j2XE=heKZ1ROr9A(FzM%=KVSf@t zMY(Sh&@`NU1iwg1lA|VSJ2P4OWC?6-6z?vlz$v+^TopFru1s3F*2Kb%oq|;$iZLYp zw#4w=k5krmw)b}MzJ`?aNmG-SGcZko?IZ-Q&>`&i{G|^5@&&G(Z2z)^JGB~Q5k_Ig za;!?ukq%yUQ1^+rBCPlolII~9rQ|4{zt>&tKiZ~IzOB9~)`3qBe4Gdb zZ(q9_DasRLjq*63 zS9w8BbcmeNv^6y4milFIsxot}EX+HJn-98ki%-VdB%Q7pJk~1h)?6oBW}m_rKIqPJ zbUMWII7gRbV9Dve>h%s0rF3nO1_aCORx$Yz$f_r9O<28hwV+wEH#)>qJndBe`GanM z-mlR}sFrO@Hg;_6h^^kZZe2kEGd5w0kv=(e|7morgyoaiGV^pWLJqVuWb8d~rb+-v z;)9uI5x0Fv<^s9Vn)z<@pS(VcmTJOIW{aGG_gLufL~ z9B_zmX7ObX{@FKHScK>c;LY&;M$Q_St#)}=_bPI5>_S_F7>l`sZy0nH<;%51M>m;q9XgflrcT8Z zt{>WzWX5k%M1Uj79R-(6$qjKDsm`K34!-0ED-UDdq{h5?C?QsK3$-sy{T&Ts6`st{vxks~;pZHDe}yNg{fTGncSo~dkZo*l9NrbbDA%O$&klZ8r6&?yP={A+ z-j~3SaA)95;mTJq|0~0Kg1_QdWgp)4ggeza=`{zRbPj2xKd4r69qJ{Mq(ZgjdWA3*}$BU@eJ4(Re(^>Dz zD`dVWq$0E4S7Hrbk$c-%cM zhm*8s48A|-o+sU}`^1G#I^wKQ=NqoJvcv^(78_1+8N$I7^uyIpYDue*8gHwMX_*+Z z&?WjriiK2gxt-*V!GM-i#B!1-utE>@&vzE5$u9g?6`s^^aMXyFG}dTpn>QDK8tKl< zSRlh0cSgn&kxZ{sX!)?usWec+R|#Fjiu}Cn8>?_}0M#QDkho=LP*MnmoYZyr3rK$$ zqbks5%auLXShMKM8le*3iHQ^^^_3QD4Is9Pr>q5V&OM2ex3bf$lLQx2RTSeDph3u=o^Rj@GH$qnTa0 zjK!|k#U_r~!0X?!N@Pnr- z_@)p&T{%B7#06;MzL2Itz$J2#EtkDm)>rh#&Kl70oKK$5Nt?nPY?mVMSy4nU$VQzVAEB9OoSec{EfRmJaJkEKZ1b zNu>zlq=|gyL2KgFNnptzwc96Y!^zIX_j1fKrvUXvIa&uRoKhQBCbyX46dPwuMGI>h z(UaP6hSS!DGqE_dg;?xaXpDU^4|59Vt93Z42;@T>&PIQ8jv_V}KO*y-3YBB2B!AHO zP>sK0{wg_hR4Dxg)mTk5`=5$3(IeXQ^*VBC}Q{MxT1UO za+jIsItCPlqB|CU4Aoq$=s40PnVecWN`A$gf3S)}$B$@7Gi#5xOyzGs=GIeBz+goy z<$Tknid!WPC{$brf9D7Ayju2|`?%Y5mYk@Th7fT$xaLr*tz@n2aP8x6YwAg)+fF`| zZd)fcllK%`w+V5)w2ftT^4os2B6=4p_}%56{33I`Y@4}3XfbFiIz&mC&-k(fUC68+ zc?pJGNTU~13~!XT@>F>%H`$jZek=RbtvpR$vB!S0Tw_lkv5RL8>qkp^R=kI}l>UCc zyVB$9-;7ZMF}pqSt5U+!wj|%Vv(>HKisqqhBb#G{wC%|q&QbU3Ty(I`qYmkGGdsBY4zAxbWzt(*HUc@^n?*x-opGWc|>>=e%{5CS9p0wjasmIm3ARB{Ph>3{I zl`O6wzJ64&}Ir1e{s)~{sQZKUaHLZCE0oGVDxva^rb!*cFD~!|vyYW?6Dl;G3?FS>(a0jlNwtrF z$Vj!{F4g`CG}PRc(w7)mrD!Etv@Fu0i5Frdy8`gB3qUla!8xE2F7cf=5?7sXuK+VH z0L!@-3S4!hb&(>2g}+!XeDdLriEjZ?q`ySHMQy>Q!y#VuH$1J#Gbv>k z5%1$m9(IQ$ycORCwBTE}74;x^vEAv#SMt+~JVhy2X&12Et3}d&@EXZpGEc1JTK=~p zPjSk1=v%OxYX|iFEcn#PM^gZYy7aAYI}u+TqR>+No??&LY+b12DKyJPO0!(7G|LWD zk!C?Q;Uzfq=1z43F2#@FK$2#OD-e8m;j@XJaNsvekL*&!D_Mv;$(8Fb@DCnBbzGs^ zL3LayRmW8rqvYy@>VRA@M_JdXcDVi5D&2t!sXML{0_ihDh{VuG?(MeY=$0cf_SV^unD| zFWhxVk$rc(rP2%cfTN;&rLb3~&wXG_sG$2ts1{cAK(dn9J48u5IHEa;&ELnBgxgv8 zu;?H?SozHLh&_)-M=;9@ACny^3kq*P9#8a4jo=yXz7ahzSn>XNpVV~NnSa0%lG9@b zD}F-lAIPPq!?1o*Z4j!SN>sU*{t@fpewviBh|4`Ab+!4dR7}3-Y$Zkjnw-_l^(Pe7 zcg|v&&pQ!C72d)%^_}D$tZx*~K?F4JDEAa~`d>tYnpU_EDV;bb@`;0grm`B8Rm0ic z-6u=kFM%f1$Sf9o8TH9&%iT1l`HEyG{OTd}B-}{ZuQ{b7C-@hsX@=a}@L#2l{2S@W zNoD>wM%sqnzuOurt~mc86=&f;Ne$+WXWq9)oZq*Hb)p@4hng2@?+Rsk;(J)#!25Qy zWM%p9WZn0HQkMTg^U#MQn}cxLf0H|Wq(sHX=uq-MC(k=Gs51fC^rezbUn$x2HL4`)HNRD39YojS??^0(o7q_D zNlh*MUT{Uey71l&ms&eCd`5DEBl0%sl#F+zPBGtwkc788@*Zgk(|8~9Gwa_&zR~)D zctrFc5~lF!eyDWOf5lTTBv}jYrOg`uM(f97i2tb}K2bw_N<*X?pJ9l|0r~=CruI2s zHXS?i1=ZvlU!o@X)ew@(3@-j!6HXLIIrFIe8~(?!10U5FZ#ii9bwA-Ci#zl`!k}+?|ix)(q9&Fir=AB@r*ER@V91o zLJ_2L*@1BTWE!b(N(D_mdZs7P?}E1p(Uo*J{snpl1P~vN^jo$UO5z}jn;CdW$iiv1 z%S!kqBy__;NgpK%*x!*1;$>kn8Ug`2PU#?FW=OZEfxN83e#Mu(ZTT~g2W^U#wJU@F1nIyiUdhjT+bRmJIs{wc4(VZO zG**Mq=o8}}7IH=!YfzT4R{0*{9+s1+^kmz~L5>vot*sxFG^k|7KPo@pf!TPb`jeB- zp6w}g{OsiIvptz9zd#NI8Q(nHgAbcXmx$p2#X=`7awaFi;I(wM`T#cuDvMKO<)^bf zZY`BJ*LboxsHct#m{^YyR;Ww$hDXLty)9ijX3^c%@Ab%auoo5IsY;WZVwb?@K5AGS ztcHK|uvRFu(lHXD4)B?Qk^Ej=d|){7NnhwrUwkfpzdp#{o8!qy37~OS5MSByL{dWd zdqS8;=6XseWuh$wobWOD2#P&fa(YGOZ~|qcj)W@Sq2^HcT)tthClbh${v=Pn8fF>- zO9lM8xt?HCA({n>^ysv5yai711X{(aF{V{Q{gWzbPl0jOs4-@MYMM5;>9bN+r*zuEwI=;F8UI3Yg-jQDxT-& zxo>N^hg%wg=Hh#m7s^5W9&Jr4Jvf`+QinivrM$e}DY|l!D^<%1r@|jU=#uXHRAU-e zs(3oBR8erou(nv#;+cuoB4@tvFtMtIGLCn+6a(Jb_*b|@;-kz_{f?jINkMdSE)6qJ zZV370L;k8^U1+fCL?@TCuvRA@P*{l2TxQm(8Oq0Ie4O5@gFAHS- z3y1Zfp%&?bduly}{dg<&4b~Z7QouI|^1e;HxJSy%xlu%cODEYM8e(|CB>c#p?-Kiw z@%^yRRtJC3l0PeTuH2oBAF(?kl&rpPo&J+XnE>8XIxdzi+&`<&UE@VZmlm>-g#4xu zGqRynigO(N+C}cdlwADC$>XQ5@nlybj!gP!h~6p~smshlrM!y}N!+}~6ATBDy)vvP z7A9CiO3XjqMD7Y%(dJkgpY|YMMVh2YAws4K8znMRl=B#$LPAk!qJ!^fa0k4T&{kqH zBZ~6iWC#D;FnmY)%SH^z{N;yWwo(r6nW6^8*9QDksVpHpgw~h_>f!0gUs&u87R|65 zGi#<)+z2FkW}%csOGP;gAI?X$XrcZ&2osj?8aemSfKJB4@XuxjFS8|d+*N~xGJhjA zN@!PdEntdtjGA02oXc?}{e#JEa#W=B3Ms?He^Kx7!jt-UUk$x`T8;V1;#OyrFRyF?hEQ&nj^fy2n;%)Gx6} f_ey4i_a#@`E-&+b1uh=oFMp`b+N-Ve{Nnq6JkesA diff --git a/A2osX.STARTUP.txt b/A2osX.STARTUP.txt index ee3fda07..274c8afc 100644 --- a/A2osX.STARTUP.txt +++ b/A2osX.STARTUP.txt @@ -21,8 +21,8 @@ INSDRV UTHERNET.DRV 000E3A123456 #INSDRV UTHER2.AI.DRV 0008DC123456 #INSDRV LANCEGS.DRV STARTPROC TCPIP -#STARTPROC DHCPCLNT -#STARTPROC TELNETD +STARTPROC DHCPCLNT +STARTPROC TELNETD #STARTPROC HTTPD #NFSMOUNT 192.168.1.5:/A2OSX /MNT/A2OSX #CIFSMOUNT 192.168.1.5:/MSSHARE /MNT/MSSHARE diff --git a/DRV/UTHERNET.DRV.S.txt b/DRV/UTHERNET.DRV.S.txt index e22dcc3d..9b083978 100644 --- a/DRV/UTHERNET.DRV.S.txt +++ b/DRV/UTHERNET.DRV.S.txt @@ -218,25 +218,33 @@ READBLOCK php lda PacketPageDATA+1,x ldy PacketPageDATA,x and /PP.RxEvent.RxOK+PP.RxEvent.IA+PP.RxEvent.Brdcast+PP.RxEvent.Runt - beq .9 + bne .1 - lda RTDATA+1,x discard RxStatus + lda #ERR.DEV.NOFRAME + +.9 plp + sec + rts + +.1 lda RTDATA+1,x discard RxStatus lda RTDATA,x - ldy RTDATA+1,x get RxLength - sty Size+1 + lda RTDATA+1,x + sta Size+1 - lda RTDATA,x + lda RTDATA,x get RxLength sta Size clc adc #2 - >PUSHA Size+2 - tya + tay + + lda Size+1 adc #0 - >PUSHA + + >PUSHYA >PUSHBI 0 >SYSCALL GetMem - bcs .99 + bcs .9 >STYA ZPTmpPTR stx .8+1 @@ -287,12 +295,6 @@ READBLOCK php plp clc rts - -.9 lda #ERR.DEV.NOFRAME - -.99 plp - sec - rts *-------------------------------------- WRITEBLOCK php sei @@ -389,8 +391,11 @@ OPEN jsr CLOSE lda #PP.RxCTL.LID+PP.RxCTL.RxOKA+PP.RxCTL.IA+PP.RxCTL.BroadcastA+PP.RxCTL.RuntA sta PacketPageDATA,x - >LDYAI PP.MAC - >STYA PacketPagePTR,x + lda /PP.MAC + sta PacketPagePTR+1,x + lda #PP.MAC + sta PacketPagePTR,x + >LDYA MAC >STYA PacketPageDATA,x >LDYAI PP.MAC+2 @@ -428,14 +433,14 @@ CLOSE ldx DEVSLOTx0 lda #PP.SelfCTL.LID+PP.SelfCTL.RESET sta PacketPageDATA,x - ldy #0 - -.1 lda /PP.SelfST + lda /PP.SelfST sta PacketPagePTR+1,x lda #PP.SelfST sta PacketPagePTR,x - lda PacketPageDATA+1,x + ldy #0 + +.1 lda PacketPageDATA+1,x lda PacketPageDATA,x and #PP.SelfST.InitDone diff --git a/LIB/LIBTCPIP.S.DNS.txt b/LIB/LIBTCPIP.S.DNS.txt index 0bb1a8b7..7b3af498 100644 --- a/LIB/LIBTCPIP.S.DNS.txt +++ b/LIB/LIBTCPIP.S.DNS.txt @@ -1,6 +1,6 @@ PR#3 PREFIX /A2OSX.SRC -LOMEM $A00 +LOMEM $900 INC 1 AUTO 6 .LIST OFF @@ -361,6 +361,7 @@ DNS.EXPIRE >LDYA L.DNS.CACHE DNS.FREE ldy #S.DNSCACHE.hNAME lda (ZPCachePtr),y beq .1 + >SYSCALL FreeMemA .1 lda #0 sta (ZPCachePtr) @@ -368,6 +369,7 @@ DNS.FREE ldy #S.DNSCACHE.hNAME *-------------------------------------- DNS.POLL lda hDNSSocket1 beq .8 + jsr SKT.ReadA bcs .8 jsr DNS.DecodeMsg diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index dc9ccb78..bc5155af 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -1,6 +1,6 @@ PR#3 PREFIX /A2OSX.SRC -LOMEM $A00 +LOMEM $900 INC 1 AUTO 6 .LIST OFF @@ -110,7 +110,9 @@ SKT.New.Listen sec lda #S.SOCKET.TCP.STATUS.SYNSENT sta (ZPPtrSKT),y -.8 ldx TmpOffset +.8 lda TmpOffset + ora #$80 + tax >LDYA ZPTmpPtr3 clc rts @@ -120,7 +122,7 @@ SKT.New.Listen sec .99 rts *-------------------------------------- SKT.New.TCB >PUSHWI S.TCB - >PUSHBI S.MEM.F.INIT0 + >PUSHBI 0 >SYSCALL GetMem bcs .9 @@ -130,6 +132,12 @@ SKT.New.TCB >PUSHWI S.TCB ldy #S.SOCKET.SQ.hTCB sta (ZPTmpPtr3),y + ldx #S.TCB.OUTUSED+1 + +.1 stz SKT.TCBCache,x + dex + bpl .1 + lda #K.TCP.WSIZE sta SKT.TCBCache+S.TCB.INFREE sta SKT.TCBCache+S.TCB.OUTFREE @@ -178,7 +186,8 @@ SKT.New.TCB >PUSHWI S.TCB * A = hSocket * ##Out : *\-------------------------------------- -SKT.CloseA cmp #K.SKTTABLE.SIZE +SKT.CloseA and #$7f + cmp #K.SKTTABLE.SIZE bcs .9 jsr SKT.GetA.I @@ -249,42 +258,53 @@ SKT.CloseA cmp #K.SKTTABLE.SIZE * ##Out : * Y,A = pS.SOCKET *\-------------------------------------- -SKT.GetA cmp #K.SKTTABLE.SIZE - bcs SKT.GetA.9 +SKT.GetA jsr SKT.GetA.I - jsr SKT.GetA.I - - bcs SKT.GetA.9 + bcs .9 >LDYA ZPPtrSKT - rts -SKT.GetA.I pha +.9 rts + +SKT.GetA.I and #$7f + + cmp #K.SKTTABLE.SIZE + bcs .9 + + pha lda hSocketTable >SYSCALL GetMemPtrA >STYA ZPPtrSKT - plx + pla beq .8 -.1 lda ZPPtrSKT + stz .1+1 + lsr + ror .1+1 + lsr + ror .1+1 + lsr + ror .1+1 + + pha + + lda ZPPtrSKT clc - adc #S.SOCKET +.1 adc #$ff sta ZPPtrSKT - bcc .2 - - inc ZPPtrSKT+1 - -.2 dex - bne .1 + pla + adc ZPPtrSKT+1 + sta ZPPtrSKT+1 + .8 lda (ZPPtrSKT) - beq SKT.GetA.9 + beq .9 clc rts -SKT.GetA.9 lda #ERR.SKT.BAD +.9 lda #ERR.SKT.BAD sec rts */-------------------------------------- @@ -651,16 +671,16 @@ SKT.AddToQueueA sta .2+1 *-------------------------------------- SKT.AckDataToSktOut ldy #S.TCP.ACK.NUMBER+3 Get new ACK number from FrameIn... - ldx #3 Substract old SEQ from socket + ldx #3 Substract old ACK from socket sec .1 lda (ZPFrameInPtr),y pha - sbc SKT.TCBCache+S.TCB.SEQNUM,x + sbc SKT.TCBCache+S.TCB.ACKNUM,x sta TmpDWord,x pla - sta SKT.TCBCache+S.TCB.SEQNUM,x + sta SKT.TCBCache+S.TCB.ACKNUM,x dey dex bpl .1 @@ -701,8 +721,6 @@ SKT.AckDataToSktOut * Dst : hInMem/INHEAD *-------------------------------------- SKT.AddDataToSktIn - jsr SKT.GetTCB - ldx SKT.TCBCache+S.TCB.INFREE cpx ZPDataInLen lda SKT.TCBCache+S.TCB.INFREE+1 @@ -770,6 +788,7 @@ SKT.AddDataToSktIn sec sbc ZPDataInLen sta SKT.TCBCache+S.TCB.INFREE + lda SKT.TCBCache+S.TCB.INFREE+1 sbc ZPDataInLen+1 sta SKT.TCBCache+S.TCB.INFREE+1 @@ -778,6 +797,7 @@ SKT.AddDataToSktIn clc adc ZPDataInLen sta SKT.TCBCache+S.TCB.INUSED + lda SKT.TCBCache+S.TCB.INUSED+1 adc ZPDataInLen+1 sta SKT.TCBCache+S.TCB.INUSED+1 @@ -938,31 +958,34 @@ SKT.GetDataFromSktOut .5 lda SKT.TCBCache+S.TCB.OUTFREE clc - adc ZPDataInLen + adc ZPDataOutLen sta SKT.TCBCache+S.TCB.OUTFREE + lda SKT.TCBCache+S.TCB.OUTFREE+1 - adc ZPDataInLen+1 + adc ZPDataOutLen+1 sta SKT.TCBCache+S.TCB.OUTFREE+1 lda SKT.TCBCache+S.TCB.OUTUSED sec - sbc ZPDataInLen + sbc ZPDataOutLen sta SKT.TCBCache+S.TCB.OUTUSED + lda SKT.TCBCache+S.TCB.OUTUSED+1 - sbc ZPDataInLen+1 + sbc ZPDataOutLen+1 sta SKT.TCBCache+S.TCB.OUTUSED+1 - lda SKT.TCBCache+S.TCB.SEQNUM + lda SKT.TCBCache+S.TCB.SEQNUM+3 clc - adc ZPDataInLen - sta SKT.TCBCache+S.TCB.SEQNUM - lda SKT.TCBCache+S.TCB.SEQNUM+1 - adc ZPDataInLen+1 - sta SKT.TCBCache+S.TCB.SEQNUM+1 + adc ZPDataOutLen + sta SKT.TCBCache+S.TCB.SEQNUM+3 + + lda SKT.TCBCache+S.TCB.SEQNUM+2 + adc ZPDataOutLen+1 + sta SKT.TCBCache+S.TCB.SEQNUM+2 bcc .8 - inc SKT.TCBCache+S.TCB.SEQNUM+2 + inc SKT.TCBCache+S.TCB.SEQNUM+1 bne .8 - inc SKT.TCBCache+S.TCB.SEQNUM+3 + inc SKT.TCBCache+S.TCB.SEQNUM .8 clc rts @@ -971,13 +994,18 @@ SKT.GetDataFromSktOut * In: * Src : hInMem/INTAIL * Dst : ZPDataOutPtr/ZPDataOutLen -* CS : Text Mode -* CC : Binary Mode +* bTextMode * Out: * Y,A = bytes read *-------------------------------------- SKT.GetDataFromSktIn - ldy #S.SOCKET.SQ.hInMem + lda SKT.TCBCache+S.TCB.INUSED + ora SKT.TCBCache+S.TCB.INUSED+1 + bne .10 + sec + rts NO DATA + +.10 ldy #S.SOCKET.SQ.hInMem lda (ZPPtrSKT),y >SYSCALL GetMemPtrA >STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base @@ -1089,19 +1117,19 @@ SKT.GetDataFromSktIn sbc ZPTmpPtr3+1 sta SKT.TCBCache+S.TCB.INUSED+1 - lda SKT.TCBCache+S.TCB.ACKNUM + lda SKT.TCBCache+S.TCB.ACKNUM+3 clc adc ZPTmpPtr3 - sta SKT.TCBCache+S.TCB.ACKNUM + sta SKT.TCBCache+S.TCB.ACKNUM+3 - lda SKT.TCBCache+S.TCB.ACKNUM+1 + lda SKT.TCBCache+S.TCB.ACKNUM+2 adc ZPTmpPtr3+1 - sta SKT.TCBCache+S.TCB.ACKNUM+1 + sta SKT.TCBCache+S.TCB.ACKNUM+2 bcc .80 - inc SKT.TCBCache+S.TCB.ACKNUM+2 + inc SKT.TCBCache+S.TCB.ACKNUM+1 bne .80 - inc SKT.TCBCache+S.TCB.ACKNUM+3 + inc SKT.TCBCache+S.TCB.ACKNUM .80 jsr SKT.StoreTCB diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index 1baf083a..ab5df466 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -1,6 +1,6 @@ PR#3 PREFIX /A2OSX.SRC -LOMEM $A00 +LOMEM $900 INC 1 AUTO 6 .LIST OFF @@ -232,7 +232,7 @@ TCP.IN.JMP.ESTBLSH lda ZPDataInLen Incoming Data in this frame ? ora ZPDataInLen+1 beq .2 No data, ... - + jsr SKT.AddDataToSktIn yes, queue data if there is room for.... .2 ldy #S.TCP.OPTIONS @@ -292,45 +292,50 @@ TCP.IN.JMP.CLOSED rts *-------------------------------------- TCP.IN.SetDataInPtrAndLen + ldy #S.IP.TOTAL.LENGTH+1 + lda (ZPFrameInPtr),y + sec + sbc #S.IP-S.ETH + sta ZPDataInLen + + dey + lda (ZPFrameInPtr),y + sbc /S.IP-S.ETH + sta ZPDataInLen+1 + ldy #S.TCP.DATAOFFSET lda (ZPFrameInPtr),y and #$F0 Get TCP Header len in DWORD lsr lsr - -* clc - adc #S.IP-2 sta TmpOffset - - lda #0 - adc /S.IP-2 - sta TmpOffset+1 TmpOffset=Data Offset in Frame - lda ZPFrameInLen + lda ZPDataInLen sec sbc TmpOffset sta ZPDataInLen - lda ZPFrameInLen+1 - sbc TmpOffset+1 - sta ZPDataInLen+1 - - lda TmpOffset - clc - adc #2 - sta TmpOffset - bcc .1 - inc TmpOffset+1 - clc + bcs .1 + dec ZPDataInLen+1 .1 lda ZPFrameInPtr - adc TmpOffset + clc + adc #S.IP sta ZPDataInPtr lda ZPFrameInPtr+1 - adc #0 + adc /S.IP sta ZPDataInPtr+1 - rts + + lda ZPDataInPtr + clc + adc TmpOffset + sta ZPDataInPtr + bcc .2 + + inc ZPDataInPtr+1 + +.2 rts *-------------------------------------- TCP.OUT.SYN >LDYAI 0 jsr TCP.NewFrame @@ -406,7 +411,7 @@ TCP.OUT.I lda SKT.TCBCache+S.TCB.OUTUSED+1 ldy SKT.TCBCache+S.TCB.OUTUSED bne .1 - + tax bne .1 Y,A=0 : nothing to send diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index 4f2b95f7..fe8ccc69 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -167,7 +167,7 @@ POLL ldx #DEVMGR.READBLOCK cpx /S.ETH.ETHERTYPE.IP bne .9 - jsr DumpFrame +* jsr DumpFrame jmp IP.IN diff --git a/SBIN/DHCPCLNT.S.txt b/SBIN/DHCPCLNT.S.txt index 7d135750..fa9368cb 100644 --- a/SBIN/DHCPCLNT.S.txt +++ b/SBIN/DHCPCLNT.S.txt @@ -114,11 +114,6 @@ CS.RUN >PUSHW L.Socket ldy #hSocket sta (pData),y - ldy #bSocketClose - lda #$ff - sta (pData),y - - >LDYA L.MSG.CFG1 >SYSCALL CPrintFYA @@ -243,13 +238,10 @@ CS.DOEVENT lda (pEvent) .9 sec do not discard TIMER event rts *-------------------------------------- -CS.QUIT ldy #bSocketClose +CS.QUIT ldy #hSocket lda (pData),y beq .1 - ldy #hSocket - lda (pData),y - >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.CloseA .1 lda hLIBTCPIP @@ -504,7 +496,6 @@ DHCP.REQ.LEN .EQ *-DHCP.REQ *-------------------------------------- DS.START TimeOut .BS 1 -bSocketClose .BS 1 hSocket .BS 1 hFrame .BS 1 DS.END diff --git a/SBIN/SHELL.S.ERR.txt b/SBIN/SHELL.S.ERR.txt index 47c8546e..8ce0381e 100644 --- a/SBIN/SHELL.S.ERR.txt +++ b/SBIN/SHELL.S.ERR.txt @@ -20,25 +20,20 @@ ERR.Print >PUSHA Save EC for PrintF cpy #ERR.Count bne .1 -.2 sty .3+1 - - lda L.ERR.Messages +.2 lda L.ERR.Messages sta ZPPTR1 lda L.ERR.Messages+1 sta ZPPTR1+1 - ldy #0 +.3 dey + bmi .8 -.3 cpy #$ff Self Modified - beq .8 - lda (ZPPTR1) sec adc ZPPTR1 sta ZPPTR1 - bcc .4 + bcc .3 inc ZPPTR1+1 -.4 iny bra .3 .8 >PUSHW ZPPTR1 diff --git a/SBIN/TELNETD.S.txt b/SBIN/TELNETD.S.txt index 32a0963e..7b392901 100644 --- a/SBIN/TELNETD.S.txt +++ b/SBIN/TELNETD.S.txt @@ -106,24 +106,7 @@ CS.RUN.INIT ldx #3 jsr CS.RUN.SERVER bcs CS.RUN.ERR - ldy #SktIndex - lda (pData),y - tay - lda (pData),y hSockets - - beq .3 - jsr CS.RUN.CLIENT - -.3 ldy #SktIndex - lda (pData),y - inc - cmp #CONN.MAX - bne .4 - lda #0 - -.4 sta (pData),y - bra .2 .9 >LDYA L.MSG.SKTERR @@ -161,6 +144,7 @@ CS.RUN.SERVER ldy #hSrvSocket .2 pla sta (pData),y + sta .4+1 >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.GetA >STYA ZPSktPtr @@ -173,16 +157,29 @@ CS.RUN.SERVER ldy #hSrvSocket dex bpl .3 +.4 lda #$ff + >PUSHA + >LDYA L.MSG.INCOMING >SYSCALL CPrintFYA .8 clc .9 rts *-------------------------------------- -CS.RUN.CLIENT sta .1+1 hSocket +CS.RUN.CLIENT ldy #SktIndex + lda (pData),y + tay + lda (pData),y hSockets + beq .8 + + sta .1+1 hSocket >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.GetCA - bcs .8 - sta .2+1 + bcc .10 + + tax + beq .8 NO DATA + +.10 sta .2+1 >PUSHA >LDYA L.MSG.BYTE @@ -196,7 +193,16 @@ CS.RUN.CLIENT sta .1+1 hSocket * >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.PutC -.8 clc +.8 ldy #SktIndex + lda (pData),y + inc + cmp #CONN.MAX + bne .81 + lda #0 + +.81 sta (pData),y + + clc rts *-------------------------------------- CS.DOEVENT sec @@ -220,9 +226,10 @@ CS.QUIT ldx #CONN.MAX ldy #hSrvSocket lda (pData),y + beq .3 >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.CLOSEA - lda hLIBTCPIP +.3 lda hLIBTCPIP >SYSCALL UnloadLibA clc rts @@ -247,7 +254,7 @@ MSG.INITOK >CSTR "TELNETD:Init Ok, Listening.\r\n" MSG.TCPIPERR >CSTR "TELNETD:TCP/IP Not initialized properly\r\n" MSG.SKTERR >CSTR "TELNETD:Listen Error\r\n" MSG.ABORT >CSTR "TELNETD:User Aborted\r\n" -MSG.INCOMING >CSTR "TELNETD:Incoming Connection From : %d.%d.%d.%d\r\n" +MSG.INCOMING >CSTR "TELNETD:Incoming Connection [SKT=%h] From : %d.%d.%d.%d\r\n" MSG.BYTE >CSTR "[%h]" hLIBTCPIP .BS 1 *--------------------------------------