diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 780ced1f..99ea0eb3 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/INC/LIBTCPIP.I.txt b/INC/LIBTCPIP.I.txt index 0395b959..26409b62 100644 --- a/INC/LIBTCPIP.I.txt +++ b/INC/LIBTCPIP.I.txt @@ -181,7 +181,7 @@ S.SOCKET.TCP.INFREE .EQ S.SOCKET+6 S.SOCKET.TCP.INUSED .EQ S.SOCKET+8 * S.SOCKET.TCP.OUTTAIL .EQ S.SOCKET+10 -S.SOCKET.TCP.OUTTAILNEXT .EQ S.SOCKET+12 +S.SOCKET.TCP.OUTTAILSENT .EQ S.SOCKET+12 S.SOCKET.TCP.OUTHEAD .EQ S.SOCKET+14 S.SOCKET.TCP.OUTFREE .EQ S.SOCKET+16 S.SOCKET.TCP.OUTTOSEND .EQ S.SOCKET+18 @@ -189,8 +189,8 @@ S.SOCKET.TCP.OUTUSED .EQ S.SOCKET+20 * S.SOCKET.TCP.INSEQNUM .EQ S.SOCKET+22 Recv:Last SEQ received from remote -S.SOCKET.TCP.OUTSEQNUM .EQ S.SOCKET+26 Send:SEQ sent not yet ACKed (retransmit) -S.SOCKET.TCP.OUTNEXTSEQ .EQ S.SOCKET+30 Send:Next SEQ to send +S.SOCKET.TCP.OUTNEXTSEQ .EQ S.SOCKET+26 Send:Next SEQ to send +S.SOCKET.TCP.OUTSENTSEQ .EQ S.SOCKET+30 Send:SEQ sent not yet ACKed (retransmit) * S.SOCKET.TCP .EQ S.SOCKET+34 *-------------------------------------- diff --git a/LIB/LIBTCPIP.S.FRM.txt b/LIB/LIBTCPIP.S.FRM.txt index 21baa354..5f00eb75 100644 --- a/LIB/LIBTCPIP.S.FRM.txt +++ b/LIB/LIBTCPIP.S.FRM.txt @@ -246,15 +246,11 @@ FRM.SendIP ldx #3 Copy SRC.IP even if IP offload bcs FRM.Queue .6 jsr FRM.Send - bcs FRM.Queue - lda hFrameOut - beq .9 - >SYSCALL2 FreeMem - stz hFrameOut - clc -.9 rts + jsr FRM.Discard + clc + rts *-------------------------------------- FRM.Queue ldy hFrameOut no hFrame, cannot queue for retry beq .9 @@ -267,7 +263,8 @@ FRM.Queue ldy hFrameOut no hFrame, cannot queue for retry ldx #0 .1 cpx FRM.QUEUE.Tail - beq .9 + beq FRM.Discard + ldy FRM.QUEUE.Head stx FRM.QUEUE.Head @@ -280,12 +277,17 @@ FRM.Queue ldy hFrameOut no hFrame, cannot queue for retry sta FRM.QUEUE.LenL,y lda ZPFrameOutLen+1 sta FRM.QUEUE.LenH,y - clc - rts .9 sec rts *-------------------------------------- +FRM.Discard lda hFrameOut + beq .9 + >SYSCALL2 FreeMem + stz hFrameOut +.9 sec + rts +*-------------------------------------- FRM.Retry ldx FRM.QUEUE.Tail .10 cpx FRM.QUEUE.Head diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index 839160d4..45a2b212 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -183,17 +183,19 @@ SKT.connect.STREAM SKT.connect.SEQPACKET jsr SKT.SetRemAddr jsr SKT.NewTCB - bcs .99 + bcs SKT.listen.RTS + lda #S.TCP.OPTIONS.SYN jsr TCP.OUT.SendOptA Send SYN - bcs .9 +* bcs .9 could be queued for ARP.... lda #S.SOCKET.TCP.S.SYNSENT jmp SKT.StoreTCB.S -.9 lda #ERR.SKT.BAD - sec -.99 rts +*.9 lda #ERR.SKT.BAD +* sec +* clc +*.99 rts */-------------------------------------- * # Listen * Listen for connections on a socket @@ -230,6 +232,7 @@ SKT.listen >SYSCALL2 GetMemPtr .9 lda #ERR.SKT.BAD sec +SKT.listen.RTS rts */-------------------------------------- * # Accept @@ -364,6 +367,7 @@ SKT.shutdown.STREAM .1 cmp #S.SOCKET.TCP.S.TIMEWT beq .8 + lda #S.TCP.OPTIONS.RST+S.TCP.OPTIONS.ACK jsr TCP.OUT.SendOptA Send RST/ACK bcs .9 @@ -497,6 +501,17 @@ SKT.GetDataFromSktIn * Dst : hInMem/INHEAD *-------------------------------------- SKT.AddDataToSktIn +* lda ZPDataInLen +* cmp #536 +* bne .10 + +* lda ZPDataInLen+1 +* cmp /536 +* bne .10 + +* >DEBUG + +*.10 lda SKT.Cache+S.SOCKET.TCP.INFREE sec sbc ZPDataInLen @@ -692,11 +707,11 @@ SKT.GetDataFromSktOut pha tya * clc - adc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT + adc SKT.Cache+S.SOCKET.TCP.OUTTAILSENT sta ZPTmpPtr2 Make ZPTmpPtr2=base+nexttail pla - adc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1 + adc SKT.Cache+S.SOCKET.TCP.OUTTAILSENT+1 sta ZPTmpPtr2+1 lda ZPDataOutLen @@ -723,15 +738,15 @@ SKT.GetDataFromSktOut bne .3 inc ZPDataOutPtr+1 -.3 inc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT +.3 inc SKT.Cache+S.SOCKET.TCP.OUTTAILSENT bne .4 - inc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1 - lda SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1 + inc SKT.Cache+S.SOCKET.TCP.OUTTAILSENT+1 + lda SKT.Cache+S.SOCKET.TCP.OUTTAILSENT+1 cmp /K.TCP.WSIZE bne .4 - stz SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1 + stz SKT.Cache+S.SOCKET.TCP.OUTTAILSENT+1 lda ZPTmpPtr1 Dst Ptr=Buffer Base sta ZPTmpPtr2 lda ZPTmpPtr1+1 diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index 4a352969..19e6a1df 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -125,7 +125,7 @@ TCP.IN.JMP.SYNRCVD .1 lda SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x Check if ACK=OUTNEXTSEQ+1 adc #0 - sta SKT.Cache+S.SOCKET.TCP.OUTSEQNUM,x setup SEQNUM + sta SKT.Cache+S.SOCKET.TCP.OUTSENTSEQ,x setup SEQNUM sta SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x ...and update NEXTSEQ eor (ZPFrameInPtr),y bne .8 @@ -140,13 +140,16 @@ TCP.IN.JMP.SYNRCVD .9 rts *-------------------------------------- TCP.IN.JMP.ESTBLSH + .DO IPDEBUG=1 + jsr DEBUG.IPID + .FIN jsr SKT.GetTCB ldy #S.TCP.OPTIONS lda (ZPFrameInPtr),y and #S.TCP.OPTIONS.ACK Remote side ACKed data ? beq .4 - +* Ack sent data ldy #S.TCP.ACKNUM+3 Get new ACK number from FrameIn... ldx #3 Substract old ACK from socket @@ -154,10 +157,10 @@ TCP.IN.JMP.ESTBLSH .1 lda (ZPFrameInPtr),y pha - sbc SKT.Cache+S.SOCKET.TCP.OUTSEQNUM,x + sbc SKT.Cache+S.SOCKET.TCP.OUTSENTSEQ,x sta TmpDWord,x pla ....and Set SEQ = new SEQ - sta SKT.Cache+S.SOCKET.TCP.OUTSEQNUM,x + sta SKT.Cache+S.SOCKET.TCP.OUTSENTSEQ,x dey dex bpl .1 @@ -168,7 +171,9 @@ TCP.IN.JMP.ESTBLSH tay beq .4 -.2 clc +.2 pha + + clc adc SKT.Cache+S.SOCKET.TCP.OUTTAIL sta SKT.Cache+S.SOCKET.TCP.OUTTAIL @@ -177,12 +182,14 @@ TCP.IN.JMP.ESTBLSH and /K.TCP.WSIZE-1 sta SKT.Cache+S.SOCKET.TCP.OUTTAIL+1 - lda SKT.Cache+S.SOCKET.TCP.OUTFREE + pla + clc - adc TmpDWord+3 + adc SKT.Cache+S.SOCKET.TCP.OUTFREE sta SKT.Cache+S.SOCKET.TCP.OUTFREE - lda SKT.Cache+S.SOCKET.TCP.OUTFREE+1 - adc TmpDWord+2 + + txa + adc SKT.Cache+S.SOCKET.TCP.OUTFREE+1 sta SKT.Cache+S.SOCKET.TCP.OUTFREE+1 lda SKT.Cache+S.SOCKET.TCP.OUTUSED @@ -193,8 +200,8 @@ TCP.IN.JMP.ESTBLSH sbc TmpDWord+2 sta SKT.Cache+S.SOCKET.TCP.OUTUSED+1 - jsr SKT.StoreTCB - +* jsr SKT.StoreTCB +* Store incoming data .4 jsr TCP.IN.SetDataInPtrAndLen lda ZPDataInLen Incoming Data in this frame ? @@ -206,13 +213,14 @@ TCP.IN.JMP.ESTBLSH .5 lda (ZPFrameInPtr),y eor SKT.Cache+S.SOCKET.TCP.INSEQNUM,x - bne .7 + bne .9 Missed a frame..... + dey dex bpl .5 jsr SKT.AddDataToSktIn yes, queue data if there is room for.... - bcs .7 + bcs .9 Should never appends.... lda SKT.Cache+S.SOCKET.TCP.INSEQNUM+3 * clc @@ -242,10 +250,25 @@ TCP.IN.JMP.ESTBLSH jsr TCP.IN.ACKTheFIN lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK - jmp TCP.SetSocketTCPO FIN received, Send FIN.ACK + jsr TCP.SetSocketTCPO FIN received, Send FIN.ACK -.8 clc -.9 rts +.8 jsr TCP.OUT Send ACK as soon as possible + +.9 clc + rts +*-------------------------------------- + .DO IPDEBUG=1 +DEBUG.IPID ldy #S.IP.IDENTIFICATION + lda (ZPFrameInPtr),y + >PUSHA + iny + lda (ZPFrameInPtr),y + >PUSHA + >PUSHBI 2 + >LDYA L.IPID + >SYSCALL printf + rts + .FIN *-------------------------------------- TCP.IN.JMP.CLWAIT clc Wait for SKT.shutdown @@ -438,13 +461,15 @@ TCP.SENDCLOSE ldx #0 .4 ldy #S.SOCKET.SQ.hInMem lda (ZPPtrSKT),y + beq .5 >SYSCALL2 freemem - ldy #S.SOCKET.SQ.hOutMem +.5 ldy #S.SOCKET.SQ.hOutMem lda (ZPPtrSKT),y + beq .6 >SYSCALL2 freemem - plx +.6 plx phx lda SKT.TABLE,x stz SKT.TABLE,x diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index b17b0920..9185a6b7 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -158,6 +158,7 @@ J.SKT.send .DA SKT.send.RAW .DA SKT.send.DGRAM .DA SKT.send.SEQPACKET .DA SKT.send.STREAM +L.IPID .DA IPID .DO IPDEBUG=1 L.MSG.FRM.Dump .DA MSG.FRM.Dump L.MSG.SKT.Dump .DA MSG.SKT.Dump @@ -212,6 +213,7 @@ INCOMING sta hFrameIn jmp IP.IN .9 sec +INCOMING.RTS rts *-------------------------------------- * A = S.EVT.F @@ -221,13 +223,17 @@ INCOMING sta hFrameIn PULSE and #S.EVT.F.T1SEC beq .1 - jsr ARP.EXPIRE + jsr ARP.EXPIRE every sec jsr DNS.EXPIRE -.1 jsr FRM.RETRY +.1 jsr FRM.RETRY every 100ms jsr DNS.POLL - jmp TCP.SENDCLOSE +* lda A2osX.TIMER16 +* lsr +* bcs INCOMING.RTS Only every 200ms + + jmp TCP.SENDCLOSE *-------------------------------------- GetDynPort inc DYNPORT.LAST bne .1 @@ -459,6 +465,7 @@ hFrameIn .BS 1 hFrameOut .BS 1 HST.SScanF .AZ "%d.%d.%d.%d" IP.ID .BS 2 +IPID .AZ "IPID:%H\r\n" .DO IPDEBUG=1 MSG.FRM.Dump .AZ "FRM:SRC=%d.%d.%d.%d:%D DST=%d.%d.%d.%d:%D\r\n" MSG.SKT.Dump .AZ "SKT:LOC=%d.%d.%d.%d:%D REM=%d.%d.%d.%d:%D\r\n"