From 18a554a9d7f341d4727b5e29fd4bec3be92af4e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 9 Mar 2017 17:38:27 +0100 Subject: [PATCH] Kernel version 0.9 : TCP, added TCB explicit structure out of SKT --- A2OSX.BOOT.po | Bin 143360 -> 143360 bytes A2OSX.DEV.po | Bin 143360 -> 143360 bytes A2OSX.SRC.po | Bin 819200 -> 819200 bytes BIN/NETSTAT.S.txt | 2 - INC/DHCP.I.txt | 2 +- INC/LIBTCPIP.I.txt | 32 +++--- LIB/LIBTCPIP.S.SKT.txt | 244 ++++++++++++++++++++++------------------- LIB/LIBTCPIP.S.TCP.txt | 22 ++-- LIB/LIBTCPIP.S.txt | 4 +- SBIN/DHCPCLNT.S.txt | 23 ++-- 10 files changed, 182 insertions(+), 147 deletions(-) diff --git a/A2OSX.BOOT.po b/A2OSX.BOOT.po index 7f37738dee2399a74219f99f269300a6296eca7c..dbe129d827c06fc5ee3d1e6e686d5370737cb8b3 100644 GIT binary patch delta 5289 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 diff --git a/A2OSX.DEV.po b/A2OSX.DEV.po index 361e6b722374aecfa3bbd7c360cbffcc71eeabc4..32c9789ae6467ef26657d7cc6879ebe1a996c987 100644 GIT binary patch delta 1945 zcmZuyTWl0n7(S=8x>Cg=Wp~@XUkVA;adz7-Eu;z4*@4}(yEC1cRg1SL6JnxInwa=d z3XK|-i1{@d6BFZuCK4!6d+)YOy<$-itAZC=!MmcO;ssIs=bYJY*VrcK;s3t*{_nq> zv)dOO+ZP=BhgMYQyu|v8kTZJ*3oA}P9SB}ey3!q{tfe)<=rn~bifKw6T}r>8boVtS z24`MutFCc9PYl6O^6A+hIxWEQaGEshYqx)J$^hiDD1( zya(Bgu9boLa#S8@gN!x03opb`*sa-R#knhbFy5HJf1K3o+-2wu1SMS)QkM8**7wYH zqqs9Fieij}-UM?v*nYT3!$Ov@nvs@CV4ji(;y#)Fq(BEoN#bCf;H5N#sLl9u3nIaN}q=andH6U2Lm4rE)r!mS=t)tal+^OKV5E>8A??4*&MZUL; zp0(+~ts)C&^8+{P{So@cJ@hAdcHHAVheYg?Jsfr?m}oP(_Gg$IZw&u}a<#v5mOX2( zcHUO|4MGzh`a87a`3Lk&`01Z;AD$QBsfmF9FZ>c;OF`AF%`@2Zz!JooNa!NWO$6!R zaDF00{{h!zh+cxW$zTPcaPy?Uf>OAD(pOPI;hD+$TbEI;R2(0>)m$n;yp=YZ)3<1* zUaBL8Z)O$6j$FnGr4p>sT~67n>2|=%yvuzBQj%Fi*lc$V`-08&E{9Ed53Pn<@?m-< z^yVXhtBOQHl6G4iZYWfVF;Nr>4jkwTIF$F&tKk%WRRb6BTnWyp2)zb2OhxG`xE;@0 z=$~q!tKlU)op5Z*OI>glPd6-|_R>07JMG(8kG7p2p31guIl`56c)4$v&otESr+cLNG(3XAL@t32C-HX;IWx4g`t)P;D%udMqaO zTosK;{fek(9KfVTs~{%Ds21AgBm7tuRm9Yw)Su97yD+Ket7tgVw+KVTl{pWpX)&A- zcE)Z@T(@fv+i=iF+QPO>JqD0>hin}&k{V#<@w@+Ip?TLG@k zw5}_nLR5Q&sG=sqk^8iQ67z&HtE3~9*=}Mj!DATPN(2x#^ElbNz1e@-lxTS zL-<9P!@7&>1>nY=^hLM|$CqIHI8R@O+i-jZ9vu(TS7BzHqp!g{j<3V2tcM-}0mnB$ z$#&4AaBJ4%IffqQ8T1IJlbVN?uovrZdQ&&q_!dlOucXIeA?u`X1D|WB@4)6waIS$+WD>5jifzB8lW(Oy?)I4{8|p{M`(N2zLTzayEJr z&gNY7Ls*?}+w_qx#uA=qgB@M}F)Pn0jXu1T05+^?R?plz2Rrf>`U&jLbM!Rq&vV^p zm>e?^)NM&o5F@>ET1?%^qVWVit-y#J74O%Vj3vE(V*d>0^E~|=8VU~j1#}j8_m|B4 zDVb#v}4Twkzt&!eP2nq(c2l+)_oMP-24zA;!_l(wq9T6eIDdV}QhZ=qE1 zUiuxHto>eB8Ha-yJ$^7eenh55;HH9k(@)yZ|21;_Y%shf0$zkIVp@As3^T_su%l?F zzrs+_L4SjhB1eCRQqf8OfKx>m{qvy-*Wh2q3UX47$&w;ekd8jU4zHt(2@7SDk8l?(v9Q5RKEaOy;#m#naHS@2PkQKu(2HX;?3(PL z7XjdSG2|z?jcbhfuoRK|rAlwGwD4(MYd}eOl~^n8hM0{9zMXM^x&)wj?Q+~u?sRf hmysHe)K&f-*JsND-R#ZQT|*a^L-Vq_C$`h${{qGLI1T^+ diff --git a/A2OSX.SRC.po b/A2OSX.SRC.po index 6f252ffdd5bee2c7756d604cc245cb80856dea1f..bca4a080502ff61e9b0aa370b172f498b3df68ca 100644 GIT binary patch delta 17224 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

owSE%BfvCK_W0@~E;PlY1Q+N~5cAEi5mzgcb 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 N55oWRKY+M5{|_IfzKH+; diff --git a/BIN/NETSTAT.S.txt b/BIN/NETSTAT.S.txt index 0fce3c42..b704f4b1 100644 --- a/BIN/NETSTAT.S.txt +++ b/BIN/NETSTAT.S.txt @@ -68,8 +68,6 @@ CS.RUN >LDYA L.MSG0 lda #K.SKTTABLE.SIZE sta SocketCount - - >DEBUG .1 lda (ZPPTR1) beq .7 diff --git a/INC/DHCP.I.txt b/INC/DHCP.I.txt index 10acc61f..48dacee2 100644 --- a/INC/DHCP.I.txt +++ b/INC/DHCP.I.txt @@ -17,7 +17,7 @@ S.DHCP.HOPS .EQ S.UDP+3 0 S.DHCP.XID .EQ S.UDP+4 client : random number S.DHCP.SECS .EQ S.UDP+8 S.DHCP.FLAGS .EQ S.UDP+10 -S.DHCP.FLAGS.BRDCST .EQ %10000000 +S.DHCP.FLAGS.BRDCST .EQ %00000000.10000000 S.DHCP.CIADDR .EQ S.UDP+12 S.DHCP.YIADDR .EQ S.UDP+16 S.DHCP.SIADDR .EQ S.UDP+20 diff --git a/INC/LIBTCPIP.I.txt b/INC/LIBTCPIP.I.txt index 5135b988..fb5352c7 100644 --- a/INC/LIBTCPIP.I.txt +++ b/INC/LIBTCPIP.I.txt @@ -159,7 +159,7 @@ S.SOCKET.SRC.PORT .EQ 8 S.SOCKET.DST.ADDR .EQ 10 S.SOCKET.DST.PORT .EQ 14 * -S.SOCKET.TEMPLATE .EQ 16 +S.SOCKET.HDR .EQ 16 * Listen type Queue * Raw Type Queue * Datagram type Queue @@ -168,20 +168,24 @@ S.SOCKET.HQ.TAIL .EQ 17 S.SOCKET.HQ .EQ 18 S.SOCKET.HQ.MAX .EQ 14 14 hMem (frames) * Stream type Queue -S.SOCKET.SQ.INHEAD .EQ 16 -S.SOCKET.SQ.INTAIL .EQ 18 -S.SOCKET.SQ.OUTHEAD .EQ 20 -S.SOCKET.SQ.OUTTAIL .EQ 22 -S.SOCKET.SQ.INFREE .EQ 24 -S.SOCKET.SQ.OUTFREE .EQ 26 -S.SOCKET.SQ.INUSED .EQ 28 -S.SOCKET.SQ.OUTUSED .EQ 30 -S.SOCKET.SQ.SEQNUM .EQ 32 -S.SOCKET.SQ.ACKNUM .EQ 36 -S.SOCKET.STREAM.hInMem .EQ 40 -S.SOCKET.STREAM.hOutMem .EQ 41 +S.SOCKET.SQ.hTCB .EQ 16 +S.SOCKET.SQ.hInMem .EQ 17 +S.SOCKET.SQ.hOutMem .EQ 18 * -S.SOCKET .EQ 42 +S.SOCKET .EQ 32 +*-------------------------------------- +S.TCB.INHEAD .EQ 0 +S.TCB.INTAIL .EQ 2 +S.TCB.OUTHEAD .EQ 4 +S.TCB.OUTTAIL .EQ 6 +S.TCB.INFREE .EQ 8 +S.TCB.OUTFREE .EQ 10 +S.TCB.INUSED .EQ 12 +S.TCB.OUTUSED .EQ 14 +S.TCB.SEQNUM .EQ 16 +S.TCB.ACKNUM .EQ 20 +* +S.TCB .EQ 32 *-------------------------------------- S.ETH.FRAMELEN .EQ 0 S.ETH.DSTMAC .EQ 2 diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index 29b4cd71..93932406 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -74,7 +74,7 @@ SKT.New >PULLW ZPTmpPtr1 lda TmpOffset Did we found an empty slot ? bmi .9 - ldy #S.SOCKET.TEMPLATE-1 + ldy #S.SOCKET.HDR-1 .7 lda (ZPTmpPtr1),y sta (ZPTmpPtr3),y @@ -102,39 +102,50 @@ SKT.New >PULLW ZPTmpPtr1 sec .99 rts *-------------------------------------- -SKT.New.TCP ldy #S.SOCKET.SQ.INFREE - lda #K.TCP.WSIZE - sta (ZPTmpPtr3),y - iny - lda /K.TCP.WSIZE - sta (ZPTmpPtr3),y +SKT.New.TCP >PUSHW S.TCB + >PUSHBI 0 + >SYSCALL GetMem + bcs .9 - ldy #S.SOCKET.SQ.OUTFREE - lda #K.TCP.WSIZE - sta (ZPTmpPtr3),y - iny - lda /K.TCP.WSIZE - sta (ZPTmpPtr3),y - - lda #0 - ldy #S.SOCKET.SQ.INUSED - sta (ZPTmpPtr3),y - iny - sta (ZPTmpPtr3),y - - ldy #S.SOCKET.SQ.OUTUSED - sta (ZPTmpPtr3),y - iny + >STYA ZPTmpPtr2 + txa + + ldy #S.SOCKET.SQ.hTCB sta (ZPTmpPtr3),y - ldx #3 - ldy #S.SOCKET.SQ.SEQNUM+3 + ldy #S.TCB.INFREE + lda #K.TCP.WSIZE + sta (ZPTmpPtr2),y + iny + lda /K.TCP.WSIZE + sta (ZPTmpPtr2),y -.2 lda A2osX.TIMER16,x - sta (ZPTmpPtr3),y + ldy #S.TCB.OUTFREE + lda #K.TCP.WSIZE + sta (ZPTmpPtr2),y + iny + lda /K.TCP.WSIZE + sta (ZPTmpPtr2),y + + lda #0 + ldy #S.TCB.INUSED + sta (ZPTmpPtr2),y + iny + sta (ZPTmpPtr2),y + + ldy #S.TCB.OUTUSED + sta (ZPTmpPtr2),y + iny + sta (ZPTmpPtr2),y + + ldx #3 + ldy #S.TCB.SEQNUM+3 + +.1 lda A2osX.TIMER16,x + sta (ZPTmpPtr2),y dey dex - bpl .2 + bpl .1 >PUSHW K.TCP.WSIZE >PUSHBI 0 @@ -142,7 +153,7 @@ SKT.New.TCP ldy #S.SOCKET.SQ.INFREE bcs .9 txa - ldy #S.SOCKET.STREAM.hInMem + ldy #S.SOCKET.SQ.hInMem sta (ZPTmpPtr3),y >PUSHW K.TCP.WSIZE @@ -151,7 +162,7 @@ SKT.New.TCP ldy #S.SOCKET.SQ.INFREE bcs .9 txa - ldy #S.SOCKET.STREAM.hOutMem + ldy #S.SOCKET.SQ.hOutMem sta (ZPTmpPtr3),y clc @@ -558,7 +569,7 @@ SKT.Read.I jsr SKT.GetA.I bcs .99 No data... >STYA TmpOffset - ldy #S.SOCKET.SQ.ACKNUM + ldy #S.TCB.ACKNUM lda (ZPPtrSKT),y clc adc TmpOffset @@ -633,7 +644,7 @@ SKT.AddToQueueA sta .2+1 *-------------------------------------- SKT.FreeDataFromSktOutAX pha - ldy #S.SOCKET.SQ.OUTTAIL + ldy #S.TCB.OUTTAIL clc adc (ZPPtrSKT),y sta (ZPPtrSKT),y @@ -648,7 +659,7 @@ SKT.FreeDataFromSktOutAX sta .1+1 stx .2+1 - ldy #S.SOCKET.SQ.OUTFREE + ldy #S.TCB.OUTFREE clc adc (ZPPtrSKT),y sta (ZPPtrSKT),y @@ -658,7 +669,7 @@ SKT.FreeDataFromSktOutAX adc (ZPPtrSKT),y sta (ZPPtrSKT),y - ldy #S.SOCKET.SQ.OUTUSED + ldy #S.TCB.OUTUSED sec lda (ZPPtrSKT),y .1 sbc #$ff @@ -679,22 +690,23 @@ SKT.AddDataToSktIn jsr SKT.GetTCB ldx ZPDataInLen - cpx SKT.TCBCache+S.SOCKET.SQ.INFREE + cpx SKT.TCBCache+S.TCB.INFREE lda ZPDataInLen+1 - sbc SKT.TCBCache+S.SOCKET.SQ.INFREE+1 + sbc SKT.TCBCache+S.TCB.INFREE+1 bcc .9 Not enough room in Q - lda SKT.TCBCache+S.SOCKET.STREAM.hInMem + ldy #S.SOCKET.SQ.hInMem + lda (ZPPtrSKT),y >SYSCALL GetMemPtrA >STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base lda ZPTmpPtr1 clc - adc SKT.TCBCache+S.SOCKET.SQ.INHEAD + adc SKT.TCBCache+S.TCB.INHEAD sta ZPTmpPtr2 lda ZPTmpPtr1+1 - adc SKT.TCBCache+S.SOCKET.SQ.INHEAD+1 + adc SKT.TCBCache+S.TCB.INHEAD+1 sta ZPTmpPtr2+1 Make ZPTmpPtr2=base+Tail lda ZPDataInLen @@ -723,13 +735,13 @@ SKT.AddDataToSktIn bne .4 inc ZPTmpPtr2+1 -.4 inc SKT.TCBCache+S.SOCKET.SQ.INHEAD +.4 inc SKT.TCBCache+S.TCB.INHEAD bne .1 - inc SKT.TCBCache+S.SOCKET.SQ.INHEAD+1 - lda SKT.TCBCache+S.SOCKET.SQ.INHEAD+1 + inc SKT.TCBCache+S.TCB.INHEAD+1 + lda SKT.TCBCache+S.TCB.INHEAD+1 cmp /K.TCP.WSIZE bne .1 - stz SKT.TCBCache+S.SOCKET.SQ.INHEAD+1 + stz SKT.TCBCache+S.TCB.INHEAD+1 lda ZPTmpPtr1 Dst Ptr=Buffer Base sta ZPTmpPtr2 @@ -740,25 +752,23 @@ SKT.AddDataToSktIn .9 sec rts -.8 lda SKT.TCBCache+S.SOCKET.SQ.INFREE +.8 lda SKT.TCBCache+S.TCB.INFREE sec sbc ZPDataInLen - sta SKT.TCBCache+S.SOCKET.SQ.INFREE - lda SKT.TCBCache+S.SOCKET.SQ.INFREE+1 + sta SKT.TCBCache+S.TCB.INFREE + lda SKT.TCBCache+S.TCB.INFREE+1 sbc ZPDataInLen+1 - sta SKT.TCBCache+S.SOCKET.SQ.INFREE+1 + sta SKT.TCBCache+S.TCB.INFREE+1 - lda SKT.TCBCache+S.SOCKET.SQ.INUSED + lda SKT.TCBCache+S.TCB.INUSED clc adc ZPDataInLen - sta SKT.TCBCache+S.SOCKET.SQ.INUSED - lda SKT.TCBCache+S.SOCKET.SQ.INUSED+1 + sta SKT.TCBCache+S.TCB.INUSED + lda SKT.TCBCache+S.TCB.INUSED+1 adc ZPDataInLen+1 - sta SKT.TCBCache+S.SOCKET.SQ.INUSED+1 + sta SKT.TCBCache+S.TCB.INUSED+1 - jsr SKT.StoreTCB - clc - rts + jmp SKT.StoreTCB *-------------------------------------- * From SKT.SEND.TCP * Src : ZPDataInPtr/ZPDataInLen @@ -768,22 +778,23 @@ SKT.AddDataToSktOut jsr SKT.GetTCB ldx ZPDataInLen - cpx SKT.TCBCache+S.SOCKET.SQ.OUTFREE + cpx SKT.TCBCache+S.TCB.OUTFREE lda ZPDataInLen+1 - sbc SKT.TCBCache+S.SOCKET.SQ.OUTFREE+1 + sbc SKT.TCBCache+S.TCB.OUTFREE+1 bcc .9 Not enough room in Q - lda SKT.TCBCache+S.SOCKET.STREAM.hOutMem + ldy #S.SOCKET.SQ.hOutMem + lda (ZPPtrSKT),y >SYSCALL GetMemPtrA >STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base lda ZPTmpPtr1 clc - adc SKT.TCBCache+S.SOCKET.SQ.OUTHEAD + adc SKT.TCBCache+S.TCB.OUTHEAD sta ZPTmpPtr2 lda ZPTmpPtr1+1 - adc SKT.TCBCache+S.SOCKET.SQ.OUTHEAD+1 + adc SKT.TCBCache+S.TCB.OUTHEAD+1 sta ZPTmpPtr2+1 Make ZPTmpPtr2=base+Tail lda ZPDataInLen @@ -812,13 +823,13 @@ SKT.AddDataToSktOut bne .4 inc ZPTmpPtr2+1 -.4 inc SKT.TCBCache+S.SOCKET.SQ.OUTHEAD +.4 inc SKT.TCBCache+S.TCB.OUTHEAD bne .1 - inc SKT.TCBCache+S.SOCKET.SQ.OUTHEAD+1 - lda SKT.TCBCache+S.SOCKET.SQ.OUTHEAD+1 + inc SKT.TCBCache+S.TCB.OUTHEAD+1 + lda SKT.TCBCache+S.TCB.OUTHEAD+1 cmp /K.TCP.WSIZE bne .1 - stz SKT.TCBCache+S.SOCKET.SQ.OUTHEAD+1 + stz SKT.TCBCache+S.TCB.OUTHEAD+1 lda ZPTmpPtr1 Dst Ptr=Buffer Base sta ZPTmpPtr2 @@ -829,25 +840,23 @@ SKT.AddDataToSktOut .9 sec rts -.8 lda SKT.TCBCache+S.SOCKET.SQ.OUTFREE +.8 lda SKT.TCBCache+S.TCB.OUTFREE sec sbc ZPDataInLen - sta SKT.TCBCache+S.SOCKET.SQ.OUTFREE - lda SKT.TCBCache+S.SOCKET.SQ.OUTFREE+1 + sta SKT.TCBCache+S.TCB.OUTFREE + lda SKT.TCBCache+S.TCB.OUTFREE+1 sbc ZPDataInLen+1 - sta SKT.TCBCache+S.SOCKET.SQ.OUTFREE+1 + sta SKT.TCBCache+S.TCB.OUTFREE+1 - lda SKT.TCBCache+S.SOCKET.SQ.OUTUSED + lda SKT.TCBCache+S.TCB.OUTUSED clc adc ZPDataInLen - sta SKT.TCBCache+S.SOCKET.SQ.OUTUSED - lda SKT.TCBCache+S.SOCKET.SQ.OUTUSED+1 + sta SKT.TCBCache+S.TCB.OUTUSED + lda SKT.TCBCache+S.TCB.OUTUSED+1 adc ZPDataInLen+1 - sta SKT.TCBCache+S.SOCKET.SQ.OUTUSED+1 + sta SKT.TCBCache+S.TCB.OUTUSED+1 - jsr SKT.StoreTCB - clc - rts + jmp SKT.StoreTCB *-------------------------------------- * From TCP.OUT * Src : hOutMem/OUTTAIL @@ -856,17 +865,19 @@ SKT.AddDataToSktOut SKT.GetDataFromSktOut jsr SKT.GetTCB - lda SKT.TCBCache+S.SOCKET.STREAM.hOutMem + ldy #S.SOCKET.SQ.hOutMem + lda (ZPPtrSKT),y + >SYSCALL GetMemPtrA >STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base lda ZPTmpPtr1 clc - adc SKT.TCBCache+S.SOCKET.SQ.OUTTAIL + adc SKT.TCBCache+S.TCB.OUTTAIL sta ZPTmpPtr2 lda ZPTmpPtr1+1 - adc SKT.TCBCache+S.SOCKET.SQ.OUTTAIL+1 + adc SKT.TCBCache+S.TCB.OUTTAIL+1 sta ZPTmpPtr2+1 lda ZPDataOutLen @@ -895,13 +906,13 @@ SKT.GetDataFromSktOut bne .4 inc ZPTmpPtr2+1 -.4 inc SKT.TCBCache+S.SOCKET.SQ.OUTTAIL +.4 inc SKT.TCBCache+S.TCB.OUTTAIL bne .1 - inc SKT.TCBCache+S.SOCKET.SQ.OUTTAIL+1 - lda SKT.TCBCache+S.SOCKET.SQ.OUTTAIL+1 + inc SKT.TCBCache+S.TCB.OUTTAIL+1 + lda SKT.TCBCache+S.TCB.OUTTAIL+1 cmp /K.TCP.WSIZE bne .1 - stz SKT.TCBCache+S.SOCKET.SQ.OUTTAIL+1 + stz SKT.TCBCache+S.TCB.OUTTAIL+1 lda ZPTmpPtr1 Dst Ptr=Buffer Base sta ZPTmpPtr2 @@ -909,8 +920,7 @@ SKT.GetDataFromSktOut sta ZPTmpPtr2+1 bra .1 -.8 clc - rts +.8 jmp SKT.StoreTCB *-------------------------------------- * From SKT.Read * In: @@ -922,7 +932,7 @@ SKT.GetDataFromSktOut * Y,A = bytes read *-------------------------------------- SKT.GetDataFromSktIn - ldy #S.SOCKET.STREAM.hInMem + ldy #S.SOCKET.SQ.hInMem lda (ZPPtrSKT),y >SYSCALL GetMemPtrA >STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base @@ -931,11 +941,11 @@ SKT.GetDataFromSktIn lda ZPTmpPtr1 clc - adc SKT.TCBCache+S.SOCKET.SQ.INTAIL + adc SKT.TCBCache+S.TCB.INTAIL sta ZPTmpPtr2 lda ZPTmpPtr1+1 - adc SKT.TCBCache+S.SOCKET.SQ.INTAIL+1 + adc SKT.TCBCache+S.TCB.INTAIL+1 sta ZPTmpPtr2+1 lda ZPDataOutLen @@ -958,25 +968,25 @@ SKT.GetDataFromSktIn beq .7 pha -.2 lda SKT.TCBCache+S.SOCKET.SQ.INTAIL - eor SKT.TCBCache+S.SOCKET.SQ.INHEAD +.2 lda SKT.TCBCache+S.TCB.INTAIL + eor SKT.TCBCache+S.TCB.INHEAD bne .3 - lda SKT.TCBCache+S.SOCKET.SQ.INTAIL+1 - eor SKT.TCBCache+S.SOCKET.SQ.INHEAD+1 + lda SKT.TCBCache+S.TCB.INTAIL+1 + eor SKT.TCBCache+S.TCB.INHEAD+1 beq .8 no more data.... .3 lda (ZPTmpPtr2) pha - inc SKT.TCBCache+S.SOCKET.SQ.INTAIL + inc SKT.TCBCache+S.TCB.INTAIL bne .5 - inc SKT.TCBCache+S.SOCKET.SQ.INTAIL+1 - lda SKT.TCBCache+S.SOCKET.SQ.INTAIL+1 + inc SKT.TCBCache+S.TCB.INTAIL+1 + lda SKT.TCBCache+S.TCB.INTAIL+1 cmp /K.TCP.WSIZE bne .4 - stz SKT.TCBCache+S.SOCKET.SQ.INTAIL+1 + stz SKT.TCBCache+S.TCB.INTAIL+1 lda ZPTmpPtr1 sta ZPTmpPtr2 lda ZPTmpPtr1+1 @@ -1015,23 +1025,23 @@ SKT.GetDataFromSktIn eor ZPTmpPtr3+1 beq .9 - lda SKT.TCBCache+S.SOCKET.SQ.INFREE + lda SKT.TCBCache+S.TCB.INFREE clc adc ZPTmpPtr3 - sta SKT.TCBCache+S.SOCKET.SQ.INFREE + sta SKT.TCBCache+S.TCB.INFREE - lda SKT.TCBCache+S.SOCKET.SQ.INFREE+1 + lda SKT.TCBCache+S.TCB.INFREE+1 adc ZPTmpPtr3+1 - sta SKT.TCBCache+S.SOCKET.SQ.INFREE+1 + sta SKT.TCBCache+S.TCB.INFREE+1 - lda SKT.TCBCache+S.SOCKET.SQ.INUSED + lda SKT.TCBCache+S.TCB.INUSED sec sbc ZPTmpPtr3 - sta SKT.TCBCache+S.SOCKET.SQ.INUSED + sta SKT.TCBCache+S.TCB.INUSED - lda SKT.TCBCache+S.SOCKET.SQ.INUSED+1 + lda SKT.TCBCache+S.TCB.INUSED+1 sbc ZPTmpPtr3+1 - sta SKT.TCBCache+S.SOCKET.SQ.INUSED+1 + sta SKT.TCBCache+S.TCB.INUSED+1 jsr SKT.StoreTCB >LDYA ZPTmpPtr3 @@ -1042,17 +1052,31 @@ SKT.GetDataFromSktIn sec rts *-------------------------------------- -SKT.GetTCB ldy #S.SOCKET-1 -.1 lda (ZPPtrSKT),y - sta SKT.TCBCache,y - dey +SKT.GetTCB ldy #S.SOCKET.SQ.hTCB + lda (ZPPtrSKT),y + >SYSCALL GetMemPtrA + + >STYA .1+1 + + ldx #S.TCB-1 + +.1 lda $ffff,x + sta SKT.TCBCache,x + dex bpl .1 rts *-------------------------------------- -SKT.StoreTCB ldy #S.SOCKET-1 -.1 lda SKT.TCBCache,y - sta (ZPPtrSKT),y - dey +SKT.StoreTCB ldy #S.SOCKET.SQ.hTCB + lda (ZPPtrSKT),y + >SYSCALL GetMemPtrA + + >STYA .2+1 + + ldx #S.TCB-1 + +.1 lda SKT.TCBCache,x +.2 sta $ffff,x + dex bpl .1 rts *-------------------------------------- diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index 5079f308..ebf0a52f 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -146,7 +146,7 @@ TCP.IN.JMP.LISTEN bpl .1 ldx #3 - ldy #S.SOCKET.SQ.ACKNUM+3 + ldy #S.TCB.ACKNUM+3 .4 lda TmpDWord,x Update new socket with ACK number sta (ZPPtrSKT),y @@ -172,7 +172,7 @@ TCP.IN.JMP.SYNSENT bne .8 ldx #3 - ldy #S.SOCKET.SQ.SEQNUM+3 + ldy #S.TCB.SEQNUM+3 sec @@ -193,7 +193,7 @@ TCP.IN.JMP.SYNSENT bpl .11 ldx #3 - ldy #S.SOCKET.SQ.SEQNUM+3 + ldy #S.TCB.SEQNUM+3 .12 lda TmpDWord,x sta (ZPPtrSKT),y dey @@ -227,7 +227,7 @@ TCP.IN.JMP.ESTBLSH dex bpl .1 - ldy #S.SOCKET.SQ.ACKNUM Substract old Ack from socket + ldy #S.TCB.ACKNUM Substract old Ack from socket sec lda (ZPPtrSKT),y sbc TmpDWord @@ -317,7 +317,7 @@ TCP.OUT.SYNACK >LDYAI 0 clc .9 rts *-------------------------------------- -TCP.OUT.ESTBLSH ldy #S.SOCKET.SQ.OUTUSED +TCP.OUT.ESTBLSH ldy #S.TCB.OUTUSED lda (ZPPtrSKT),y pha @@ -345,7 +345,7 @@ TCP.OUT.ESTBLSH ldy #S.SOCKET.SQ.OUTUSED jsr SKT.GetDataFromSktOut - ldy #S.SOCKET.SQ.SEQNUM compute new SEQ.NUM + ldy #S.TCB.SEQNUM compute new SEQ.NUM lda (ZPPtrSKT),y clc adc TmpOffset @@ -397,7 +397,7 @@ TCP.OUT.ESTBLSH ldy #S.SOCKET.SQ.OUTUSED sta (ZPPtrSKT),y ldx #3 - ldy #S.SOCKET.SQ.SEQNUM+3 + ldy #S.TCB.SEQNUM+3 .71 lda TmpDWord,x sta (ZPPtrSKT),y @@ -418,7 +418,7 @@ TCP.GetSktAckNum dex bne .1 - ldy #S.SOCKET.SQ.ACKNUM+3 + ldy #S.TCB.ACKNUM+3 ldx #4 .2 pla @@ -429,7 +429,7 @@ TCP.GetSktAckNum rts *-------------------------------------- TCP.UpdateSktAckNum - ldy #S.SOCKET.SQ.ACKNUM+3 + ldy #S.TCB.ACKNUM+3 lda (ZPPtrSKT),y clc adc ZPDataInLen @@ -513,7 +513,7 @@ TCP.NewFrame ldx #S.IP.PROTOCOL.TCP lda #$50 Header size = 5 DWORDS sta (ZPFrameOutPtr),y - ldy #S.SOCKET.SQ.INFREE + ldy #S.TCB.INFREE lda (ZPPtrSKT),y pha iny @@ -529,7 +529,7 @@ TCP.NewFrame ldx #S.IP.PROTOCOL.TCP clc .9 rts *-------------------------------------- -TCP.SendFrame ldy #S.SOCKET.SQ.SEQNUM+7 +TCP.SendFrame ldy #S.TCB.SEQNUM+7 ldx #7 .1 lda (ZPPtrSKT),y diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index 6ac7bd19..7fc89832 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -293,8 +293,8 @@ DNS.HostNameLen .BS 1 DNS.HostName .BS K.DNS.MAXLEN+1 DNS.TmpCache .BS S.DNSCACHE ARP.TmpCache .BS S.ARP -SKT.Template .BS S.SOCKET.TEMPLATE -SKT.TCBCache .BS S.SOCKET +SKT.Template .BS S.SOCKET +SKT.TCBCache .BS S.TCB TmpByte .BS 1 TmpDWord .BS 4 TmpOffset .BS 2 diff --git a/SBIN/DHCPCLNT.S.txt b/SBIN/DHCPCLNT.S.txt index 1f769c2e..b9d7362e 100644 --- a/SBIN/DHCPCLNT.S.txt +++ b/SBIN/DHCPCLNT.S.txt @@ -13,7 +13,7 @@ AUTO 6 .INB /A2OSX.DEV/INC/LIBTCPIP.I .INB /A2OSX.DEV/INC/DHCP.I *-------------------------------------- -TIMEOUT.MAX .EQ 100 10 sec. +TIMEOUT.MAX .EQ 200 20 sec. *-------------------------------------- ZPIPCfgPtr .EQ ZPBIN ZPFrameBase .EQ ZPBIN+2 @@ -269,15 +269,24 @@ CheckDHCPOffer jsr CheckDHCPXID cmp #S.DHCP.OPTIONS.DHCPOffer bne .9 - ldy #S.DHCP.YIADDR+3 + ldy #S.DHCP.GIADDR+3 ldx #3 .1 lda (ZPFrameBase),y + sta DHCP.REQ.GIADDR,x + dey + dex + bpl .1 + + ldy #S.DHCP.YIADDR+3 + ldx #3 + +.2 lda (ZPFrameBase),y sta DHCP.REQ.OPT.REQIP,x sta IPCFG+S.IPCFG.IP,x dey dex - bpl .1 + bpl .2 ldy #S.IP.SRC+3 ldx #3 @@ -449,11 +458,11 @@ Socket .DA #S.SOCKET.SOCK.DGRAM DHCP.DISC .HS 01010600 OP,HTYPE,HLEN,HOPS DHCP.DISC.XID .BS 4 .HS 0000 SECS - .HS 0000 FLAGS + .DA S.DHCP.FLAGS.BRDCST .HS 00000000 CIADDR DHCP.DISC.YIADDR .HS 00000000 .HS 00000000 SIADDR - .HS 00000000 GIADDR +DHCP.DISC.GIADDR .HS 00000000 DHCP.DISC.CHADDR .HS 00000000.00000000.00000000.00000000 .BS 64 SNAME .BS 128 FILE @@ -466,11 +475,11 @@ DHCP.DISC.LEN .EQ *-DHCP.DISC DHCP.REQ .HS 01010600 OP,HTYPE,HLEN,HOPS DHCP.REQ.XID .BS 4 .HS 0000 SECS - .HS 0000 FLAGS + .DA S.DHCP.FLAGS.BRDCST .HS 00000000 CIADDR DHCP.REQ.YIADDR .HS 00000000 .HS 00000000 SIADDR - .HS 00000000 GIADDR +DHCP.REQ.GIADDR .HS 00000000 DHCP.REQ.CHADDR .HS 00000000.00000000.00000000.00000000 .BS 64 SNAME .BS 128 FILE