diff --git a/A2OSX.BOOT.po b/A2OSX.BOOT.po index 3956df13..2f15e727 100644 Binary files a/A2OSX.BOOT.po and b/A2OSX.BOOT.po differ diff --git a/A2OSX.DEV.po b/A2OSX.DEV.po index be6192c7..461a458a 100644 Binary files a/A2OSX.DEV.po and b/A2OSX.DEV.po differ diff --git a/A2OSX.SRC.po b/A2OSX.SRC.po index 86c4d9cf..cf4b9eb9 100644 Binary files a/A2OSX.SRC.po and b/A2OSX.SRC.po differ diff --git a/INC/LIBTCPIP.I.txt b/INC/LIBTCPIP.I.txt index ebe4c738..e143b8f9 100644 --- a/INC/LIBTCPIP.I.txt +++ b/INC/LIBTCPIP.I.txt @@ -178,10 +178,12 @@ S.TCB.INUSED .EQ 8 S.TCB.OUTUSED .EQ 10 S.TCB.INFREE .EQ 12 S.TCB.OUTFREE .EQ 14 -S.TCB.SEQNUM .EQ 16 -S.TCB.ACKNUM .EQ 20 +S.TCB.SEQNUM .EQ 16 Send:SEQ not yet ACKed +S.TCB.ACKNUM .EQ 20 Rcvd:Last ACK recieved from remote +S.TCB.NEXTSEQ .EQ 24 Send:Next SEQ to use when sending more data +S.TCB.LASTSEQ .EQ 28 Rcvd:Last SEQ accepted data from remote * -S.TCB .EQ 24 +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 fac4a906..1a80d528 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -630,6 +630,16 @@ SKT.AddDataToSktIn sbc ZPDataInLen+1 bcc .9 Not enough room in Q + ldy #S.TCP.SEQ.NUMBER+3 + ldx #3 + +.10 lda (ZPFrameInPtr),y + eor SKT.TCBCache+S.TCB.LASTSEQ,x + bne .9 + dey + dex + bpl .10 + ldy #S.SOCKET.SQ.hInMem lda (ZPPtrSKT),y >SYSCALL GetMemPtrA @@ -707,7 +717,21 @@ SKT.AddDataToSktIn adc ZPDataInLen+1 sta SKT.TCBCache+S.TCB.INUSED+1 - jmp SKT.StoreTCB + clc + + lda SKT.TCBCache+S.TCB.LASTSEQ+3 + adc ZPDataInLen + sta SKT.TCBCache+S.TCB.LASTSEQ+3 + + lda SKT.TCBCache+S.TCB.LASTSEQ+2 + adc ZPDataInLen+1 + sta SKT.TCBCache+S.TCB.LASTSEQ+2 + bcc .80 + inc SKT.TCBCache+S.TCB.LASTSEQ+1 + bne .80 + inc SKT.TCBCache+S.TCB.NEXTSEQ + +.80 jmp SKT.StoreTCB *-------------------------------------- * From SKT.Read * In: @@ -872,8 +896,6 @@ SKT.GetDataFromSktIn *-------------------------------------- SKT.AddDataToSktOut jsr SKT.GetTCB - -* >DEBUG ldx SKT.TCBCache+S.TCB.OUTFREE cpx ZPDataInLen @@ -1031,16 +1053,16 @@ SKT.GetDataFromSktOut *-------------------------------------- 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 ....and Set SEQ = new ACK - sta SKT.TCBCache+S.TCB.SEQNUM,x + pla ....and Set ACK = new ACK + sta SKT.TCBCache+S.TCB.ACKNUM,x dey dex bpl .1 @@ -1098,9 +1120,12 @@ SKT.NewTCB >PUSHWI S.TCB sta SKT.TCBCache+S.TCB.OUTFREE+1 ldx #3 + sec .2 lda A2osX.TIMER16,x sta SKT.TCBCache+S.TCB.SEQNUM,x + adc #0 + sta SKT.TCBCache+S.TCB.NEXTSEQ,x dex bpl .2 diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index f9c8e3b0..09a91556 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -100,7 +100,7 @@ TCP.IN.JMP.LISTEN >PUSHW L.SKT.Template - jsr SKT.New.Listen + jsr SKT.New.Listen Assign SEQNUM bcs .99 sty .1+1 @@ -116,7 +116,7 @@ TCP.IN.JMP.LISTEN .2 lda #$ff sta ZPPtrSKT+1 - ldy #S.TCP.SEQ.NUMBER+3 + ldy #S.TCP.SEQ.NUMBER+3 Get Remote SEQ ldx #3 sec @@ -124,6 +124,7 @@ TCP.IN.JMP.LISTEN .3 lda (ZPFrameInPtr),y Set ACK=SEQ+1 for new socket... adc #0 sta SKT.TCBCache+S.TCB.ACKNUM,x + sta SKT.TCBCache+S.TCB.LASTSEQ,x dey dex bpl .3 @@ -133,7 +134,7 @@ TCP.IN.JMP.LISTEN jsr ARP.AddFromFrameInPtr lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK - jsr TCP.OUT.SendOpt + jsr TCP.OUT.SendOpt Send SYN.ACK bcs .9 ldy #S.SOCKET.TCP.STATUS @@ -157,9 +158,9 @@ TCP.IN.JMP.SYNSENT jsr SKT.GetTCB ldx #3 - ldy #S.TCP.SEQ.NUMBER+3 + ldy #S.TCP.ACK.NUMBER+3 - sec + sec Check if ACK=my SEQ+1 .1 lda SKT.TCBCache+S.TCB.ACKNUM,x adc #0 @@ -192,11 +193,8 @@ TCP.IN.JMP.SYNRCVD ldx #3 ldy #S.TCP.ACK.NUMBER+3 - sec - -.1 lda SKT.TCBCache+S.TCB.SEQNUM,x - adc #0 - sta SKT.TCBCache+S.TCB.SEQNUM,x +.1 lda SKT.TCBCache+S.TCB.NEXTSEQ,x Check if ACK=my SEQ+1 + sta SKT.TCBCache+S.TCB.SEQNUM,x eor (ZPFrameInPtr),y bne .8 dey @@ -218,10 +216,11 @@ TCP.IN.JMP.ESTBLSH ldy #S.TCP.OPTIONS lda (ZPFrameInPtr),y - bit #S.TCP.OPTIONS.ACK Remote side ACKed data ? + and #S.TCP.OPTIONS.ACK Remote side ACKed data ? beq .1 - jsr SKT.AckDataToSktOut (will call SKT.GetTCB) Yes, Discard sent data + jsr SKT.AckDataToSktOut Yes, Discard sent data + jsr SKT.StoreTCB and update SKT .1 jsr TCP.IN.SetDataInPtrAndLen @@ -233,19 +232,22 @@ TCP.IN.JMP.ESTBLSH .2 ldy #S.TCP.OPTIONS lda (ZPFrameInPtr),y - bit #S.TCP.OPTIONS.FIN + and #S.TCP.OPTIONS.FIN beq .8 ldy #S.TCP.OPTIONS - lda (ZPFrameInPtr),y + lda (ZPPtrSKT),y ora #S.TCP.OPTIONS.ACK ACK the FIN.... - sta (ZPFrameInPtr),y + sta (ZPPtrSKT),y + + jsr TCP.OUT.I SKT.GetTCB called, try to ACK the FIN + bcs .9 ldy #S.SOCKET.TCP.STATUS lda #S.SOCKET.TCP.STATUS.CLWAIT sta (ZPPtrSKT),y -.8 jmp TCP.OUT.I SKT.GetTCB called try to ACK +.8 clc .9 rts *-------------------------------------- TCP.IN.JMP.CLWAIT @@ -388,7 +390,7 @@ TCP.OUT.I lda SKT.TCBCache+S.TCB.OUTUSED+1 bne .1 tax - bne .1 Y,A=0 : no data to send + beq .1 Y,A=0 : no data to send ldy #S.SOCKET.TCP.OPTIONS lda (ZPPtrSKT),y @@ -411,11 +413,8 @@ TCP.OUT.I lda SKT.TCBCache+S.TCB.OUTUSED+1 ldy #S.SOCKET.TCP.OPTIONS lda (ZPPtrSKT),y - ora #S.TCP.OPTIONS.ACK - ldy #S.TCP.OPTIONS - sta (ZPFrameOutPtr),y + jsr TCP.OUT.Send -.7 jsr TCP.OUT.Send bcs TCP.OUT.9 jmp SKT.StoreTCB TCP.OUT.9 rts @@ -425,12 +424,11 @@ TCP.OUT.SendOpt sta .1+1 jsr TCP.NewFrame bcs TCP.OUT.9 - ldy #S.TCP.OPTIONS - .1 lda #$ff - sta (ZPFrameOutPtr),y -TCP.OUT.Send ldx #7 +TCP.OUT.Send ldy #S.TCP.OPTIONS + sta (ZPFrameOutPtr),y + ldx #7 ldy #S.TCP.SEQ.NUMBER+7 .2 lda SKT.TCBCache+S.TCB.SEQNUM,x