diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 9e145c2b..85fbf306 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 1785a972..45484cab 100644 --- a/INC/LIBTCPIP.I.txt +++ b/INC/LIBTCPIP.I.txt @@ -187,13 +187,13 @@ S.SOCKET.TCP.OUTFREE .EQ S.SOCKET+16 S.SOCKET.TCP.OUTTOSEND .EQ S.SOCKET+18 S.SOCKET.TCP.OUTUSED .EQ S.SOCKET+20 * -S.SOCKET.TCP.INLASTSEQNUM .EQ S.SOCKET+22 Recv:Last SEQ received from remote +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.OUTACKNUM .EQ S.SOCKET+34 Send:ACK to send to remote +*S.SOCKET.TCP.OUTACKNUM .EQ S.SOCKET+34 Send:ACK to send to remote * -S.SOCKET.TCP .EQ S.SOCKET+38 +S.SOCKET.TCP .EQ S.SOCKET+34 *-------------------------------------- S.ARP.HTYPE .EQ S.ETH.EII+0 $0001 S.ARP.PTYPE .EQ S.ETH.EII+2 $0800 diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index 0521ad37..841b4462 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -484,29 +484,112 @@ SKT.GetDataFromSktIn .8 >ADC16 SKT.Cache+S.SOCKET.TCP.INFREE,ZPDataInLen >SBC16 SKT.Cache+S.SOCKET.TCP.INUSED,ZPDataInLen - lda SKT.Cache+S.SOCKET.TCP.OUTACKNUM+3 - clc - adc ZPDataInLen - sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM+3 - lda SKT.Cache+S.SOCKET.TCP.OUTACKNUM+2 - adc ZPDataInLen+1 - sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM+2 +* lda SKT.Cache+S.SOCKET.TCP.OUTACKNUM+3 +* clc +* adc ZPDataInLen +* sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM+3 +* lda SKT.Cache+S.SOCKET.TCP.OUTACKNUM+2 +* adc ZPDataInLen+1 +* sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM+2 - bcc .80 - inc SKT.Cache+S.SOCKET.TCP.OUTACKNUM+1 - bne .80 - inc SKT.Cache+S.SOCKET.TCP.OUTACKNUM +* bcc .80 +* inc SKT.Cache+S.SOCKET.TCP.OUTACKNUM+1 +* bne .80 +* inc SKT.Cache+S.SOCKET.TCP.OUTACKNUM +*.80 + jsr SKT.StoreTCB -.80 jsr SKT.StoreTCB - - lda #S.TCP.OPTIONS.ACK - jsr TCP.OUT.SendOptA +* lda #S.TCP.OPTIONS.ACK +* jsr TCP.OUT.SendOptA -* jsr TCP.SetSocketTCPO.ACK + jsr TCP.SetSocketTCPO.ACK ACK=1 -> send WSIZE * jsr TCP.OUT.I SKT.GetTCB already called >LDYA ZPDataInLen + clc + rts +*-------------------------------------- +* From TCP.IN +* Src : ZPDataInPtr/ZPDataInLen +* Dst : hInMem/INHEAD +*-------------------------------------- +SKT.AddDataToSktIn + lda SKT.Cache+S.SOCKET.TCP.INFREE + sec + sbc ZPDataInLen + tax + lda SKT.Cache+S.SOCKET.TCP.INFREE+1 + sbc ZPDataInLen+1 + bcc .9 Not enough room in Q + + stx SKT.Cache+S.SOCKET.TCP.INFREE + sta SKT.Cache+S.SOCKET.TCP.INFREE+1 + + ldy #S.SOCKET.SQ.hInMem + lda (ZPPtrSKT),y + >SYSCALL2 GetMemPtr + >STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base + + pha + tya +* clc + adc SKT.Cache+S.SOCKET.TCP.INHEAD + sta ZPTmpPtr2 + + pla + adc SKT.Cache+S.SOCKET.TCP.INHEAD+1 + sta ZPTmpPtr2+1 Make ZPTmpPtr2=base+Tail + + lda ZPDataInLen + eor #$FF + tax + + lda ZPDataInLen+1 + eor #$FF + pha + + ldy #0 + +.1 inx + bne .2 + pla + inc + beq .8 + + pha + +.2 lda (ZPDataInPtr),y + sta (ZPTmpPtr2) + iny + bne .3 + inc ZPDataInPtr+1 + +.3 inc SKT.Cache+S.SOCKET.TCP.INHEAD + bne .4 + + inc SKT.Cache+S.SOCKET.TCP.INHEAD+1 + lda SKT.Cache+S.SOCKET.TCP.INHEAD+1 + cmp /K.TCP.WSIZE + bne .4 + + stz SKT.Cache+S.SOCKET.TCP.INHEAD+1 + lda ZPTmpPtr1 Dst Ptr=Buffer Base + sta ZPTmpPtr2 + lda ZPTmpPtr1+1 + sta ZPTmpPtr2+1 + bra .1 + +.4 inc ZPTmpPtr2 + bne .1 + inc ZPTmpPtr2+1 + bra .1 + +.9 sec + rts + +.8 >ADC16 SKT.Cache+S.SOCKET.TCP.INUSED,ZPDataInLen + clc rts */-------------------------------------- @@ -609,9 +692,79 @@ SKT.AddDataToSktOut >ADC16 SKT.Cache+S.SOCKET.TCP.OUTTOSEND,ZPDataInLen jsr SKT.StoreTCB - jsr TCP.OUT.I SKT.GetTCB called, try to push, ignore error.... +* jsr TCP.OUT.I SKT.GetTCB called, try to push, ignore error.... >LDYA ZPDataInLen + clc + rts +*-------------------------------------- +* From TCP.OUT +* Src : hOutMem/OUTTAIL +* Dst : ZPDataOutPtr/ZPDataOutLen +*-------------------------------------- +SKT.GetDataFromSktOut + ldy #S.SOCKET.SQ.hOutMem + lda (ZPPtrSKT),y + + >SYSCALL2 GetMemPtr + >STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base + + pha + tya +* clc + adc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT + sta ZPTmpPtr2 Make ZPTmpPtr2=base+nexttail + + pla + adc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1 + sta ZPTmpPtr2+1 + + lda ZPDataOutLen + eor #$FF + tax + + lda ZPDataOutLen+1 + eor #$FF + pha + + ldy #0 + +.1 inx + bne .2 + pla + inc + beq .8 + + pha + +.2 lda (ZPTmpPtr2) + sta (ZPDataOutPtr),y + iny + bne .3 + inc ZPDataOutPtr+1 + +.3 inc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT + bne .4 + + inc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1 + lda SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1 + cmp /K.TCP.WSIZE + bne .4 + + stz SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1 + lda ZPTmpPtr1 Dst Ptr=Buffer Base + sta ZPTmpPtr2 + lda ZPTmpPtr1+1 + sta ZPTmpPtr2+1 + bra .1 + +.4 inc ZPTmpPtr2 + bne .1 + inc ZPTmpPtr2+1 + bra .1 + +.8 >SBC16 SKT.Cache+S.SOCKET.TCP.OUTTOSEND,ZPDataOutLen + clc rts */-------------------------------------- @@ -1040,201 +1193,6 @@ SKT.AddToQueueA pha * sec rts *-------------------------------------- -* From TCP.IN -* Src : ZPDataInPtr/ZPDataInLen -* Dst : hInMem/INHEAD -*-------------------------------------- -SKT.AddDataToSktIn - .DO IPDEBUG=2 - ldx #3 -.91 lda SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM,x - >PUSHA - dex - bpl .91 - - ldy #S.TCP.SEQNUM+3 -.92 lda (ZPFrameInPtr),y - >PUSHA - dey - cpy #S.TCP.SEQNUM-1 - bne .92 - >PUSHBI 8 - >LDYA L.MSG.SEQNUM - >SYSCALL printf - .FIN - - lda SKT.Cache+S.SOCKET.TCP.INFREE - sec - sbc ZPDataInLen - tax - lda SKT.Cache+S.SOCKET.TCP.INFREE+1 - sbc ZPDataInLen+1 - bcc .9 Not enough room in Q - - stx SKT.Cache+S.SOCKET.TCP.INFREE - sta SKT.Cache+S.SOCKET.TCP.INFREE+1 - - ldy #S.TCP.SEQNUM+3 - ldx #3 - -.10 lda (ZPFrameInPtr),y - eor SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM,x - bne .9 - dey - dex - bpl .10 - - ldy #S.SOCKET.SQ.hInMem - lda (ZPPtrSKT),y - >SYSCALL2 GetMemPtr - >STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base - - pha - tya -* clc - adc SKT.Cache+S.SOCKET.TCP.INHEAD - sta ZPTmpPtr2 - - pla - adc SKT.Cache+S.SOCKET.TCP.INHEAD+1 - sta ZPTmpPtr2+1 Make ZPTmpPtr2=base+Tail - - lda ZPDataInLen - eor #$FF - tax - - lda ZPDataInLen+1 - eor #$FF - pha - - ldy #0 - -.1 inx - bne .2 - pla - inc - beq .8 - - pha - -.2 lda (ZPDataInPtr),y - sta (ZPTmpPtr2) - iny - bne .3 - inc ZPDataInPtr+1 - -.3 inc SKT.Cache+S.SOCKET.TCP.INHEAD - bne .4 - - inc SKT.Cache+S.SOCKET.TCP.INHEAD+1 - lda SKT.Cache+S.SOCKET.TCP.INHEAD+1 - cmp /K.TCP.WSIZE - bne .4 - - stz SKT.Cache+S.SOCKET.TCP.INHEAD+1 - lda ZPTmpPtr1 Dst Ptr=Buffer Base - sta ZPTmpPtr2 - lda ZPTmpPtr1+1 - sta ZPTmpPtr2+1 - bra .1 - -.4 inc ZPTmpPtr2 - bne .1 - inc ZPTmpPtr2+1 - bra .1 - -.9 sec - rts - -.8 >ADC16 SKT.Cache+S.SOCKET.TCP.INUSED,ZPDataInLen - - clc - - lda SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM+3 - adc ZPDataInLen - sta SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM+3 - - lda SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM+2 - adc ZPDataInLen+1 - sta SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM+2 - bcc .81 - inc SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM+1 - bne .80 - inc SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM - -.80 clc -.81 rts -*-------------------------------------- -* From TCP.OUT -* Src : hOutMem/OUTTAIL -* Dst : ZPDataOutPtr/ZPDataOutLen -*-------------------------------------- -SKT.GetDataFromSktOut - ldy #S.SOCKET.SQ.hOutMem - lda (ZPPtrSKT),y - - >SYSCALL2 GetMemPtr - >STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base - - pha - tya -* clc - adc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT - sta ZPTmpPtr2 Make ZPTmpPtr2=base+nexttail - - pla - adc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1 - sta ZPTmpPtr2+1 - - lda ZPDataOutLen - eor #$FF - tax - - lda ZPDataOutLen+1 - eor #$FF - pha - - ldy #0 - -.1 inx - bne .2 - pla - inc - beq .8 - - pha - -.2 lda (ZPTmpPtr2) - sta (ZPDataOutPtr),y - iny - bne .3 - inc ZPDataOutPtr+1 - -.3 inc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT - bne .4 - - inc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1 - lda SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1 - cmp /K.TCP.WSIZE - bne .4 - - stz SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1 - lda ZPTmpPtr1 Dst Ptr=Buffer Base - sta ZPTmpPtr2 - lda ZPTmpPtr1+1 - sta ZPTmpPtr2+1 - bra .1 - -.4 inc ZPTmpPtr2 - bne .1 - inc ZPTmpPtr2+1 - bra .1 - -.8 >SBC16 SKT.Cache+S.SOCKET.TCP.OUTTOSEND,ZPDataOutLen - - clc - rts -*-------------------------------------- SKT.NewTCB ldx #S.SOCKET.TCP.INTAIL .1 stz SKT.Cache,x diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index 2852b8f4..0a0c86dc 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -199,18 +199,41 @@ TCP.IN.JMP.ESTBLSH lda ZPDataInLen Incoming Data in this frame ? ora ZPDataInLen+1 - beq .5 No data, ... + beq .7 No data, ... + + ldy #S.TCP.SEQNUM+3 + ldx #3 + +.5 lda (ZPFrameInPtr),y + eor SKT.Cache+S.SOCKET.TCP.INSEQNUM,x + bne .7 + dey + dex + bpl .5 jsr SKT.AddDataToSktIn yes, queue data if there is room for.... - bcs .5 + bcs .7 - jsr SKT.StoreTCB success, update socket + lda SKT.Cache+S.SOCKET.TCP.INSEQNUM+3 +* clc + adc ZPDataInLen + sta SKT.Cache+S.SOCKET.TCP.INSEQNUM+3 -* jsr TCP.SetSocketTCPO.ACK Try to ACK read DATA + lda SKT.Cache+S.SOCKET.TCP.INSEQNUM+2 + adc ZPDataInLen+1 + sta SKT.Cache+S.SOCKET.TCP.INSEQNUM+2 + bcc .6 + inc SKT.Cache+S.SOCKET.TCP.INSEQNUM+1 + bne .6 + inc SKT.Cache+S.SOCKET.TCP.INSEQNUM + +.6 jsr SKT.StoreTCB success, update socket + + jsr TCP.SetSocketTCPO.ACK Try to ACK read DATA * jsr TCP.OUT.I SKT.GetTCB already called -.5 ldy #S.TCP.OPTIONS +.7 ldy #S.TCP.OPTIONS lda (ZPFrameInPtr),y and #S.TCP.OPTIONS.FIN beq .8 @@ -315,8 +338,8 @@ TCP.IN.ACKTheSYN .3 lda (ZPFrameInPtr),y Set OUTACK=SEQ+1 for new socket... adc #0 - sta SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM,x - sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM,x + sta SKT.Cache+S.SOCKET.TCP.INSEQNUM,x +* sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM,x dey dex bpl .3 @@ -327,17 +350,17 @@ TCP.IN.ACKTheFIN ldx #3 -.1 inc SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM,x - bne .2 +.1 inc SKT.Cache+S.SOCKET.TCP.INSEQNUM,x + bne .8 dex bpl .1 -.2 ldx #3 +*.2 ldx #3 -.3 inc SKT.Cache+S.SOCKET.TCP.OUTACKNUM,x - bne .8 - dex - bpl .3 +*.3 inc SKT.Cache+S.SOCKET.TCP.OUTACKNUM,x +* bne .8 +* dex +* bpl .3 .8 rts *-------------------------------------- @@ -483,7 +506,7 @@ TCP.OUT.I lda SKT.Cache+S.SOCKET.TCP.OUTTOSEND+1 lda #S.TCP.OPTIONS.ACK+S.TCP.OPTIONS.PSH - jsr TCP.SetSocketTCPO +* jsr TCP.SetSocketTCPO jsr TCP.OUT.Send @@ -523,7 +546,7 @@ TCP.OUT.Send ldy #S.TCP.OPTIONS ldx #3 ldy #S.TCP.ACKNUM+3 -.1 lda SKT.Cache+S.SOCKET.TCP.OUTACKNUM,x +.1 lda SKT.Cache+S.SOCKET.TCP.INSEQNUM,x sta (ZPFrameOutPtr),y dey dex diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index b507f469..b17b0920 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -161,9 +161,6 @@ J.SKT.send .DA SKT.send.RAW .DO IPDEBUG=1 L.MSG.FRM.Dump .DA MSG.FRM.Dump L.MSG.SKT.Dump .DA MSG.SKT.Dump - .FIN - .DO IPDEBUG=2 -L.MSG.SEQNUM .DA MSG.SEQNUM .FIN .DA 0 *-------------------------------------- @@ -466,9 +463,6 @@ IP.ID .BS 2 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" .FIN - .DO IPDEBUG=2 -MSG.SEQNUM .AZ "FRM:%h%h%h%h,SKT:%h%h%h%h\r\n" - .FIN *-------------------------------------- MAN SAVE USR/SRC/LIB/LIBTCPIP.S