From 453c30b3a392c4d6e5da87473467c546ffd19037 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Mon, 17 Jun 2019 08:35:54 +0200 Subject: [PATCH] Kernel 0.93 --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes INC/LIBTCPIP.I.txt | 6 ++-- LIB/LIBTCPIP.S.FRM.txt | 22 +++++++------- LIB/LIBTCPIP.S.SKT.txt | 37 +++++++++++++++++------- LIB/LIBTCPIP.S.TCP.txt | 61 +++++++++++++++++++++++++++------------ LIB/LIBTCPIP.S.txt | 13 +++++++-- 6 files changed, 94 insertions(+), 45 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 780ced1f09dd57a825a8d0ea2ea98ec1bd9d14b0..99ea0eb3b0b3ccc95b9144c3dee38f8a24e07371 100644 GIT binary patch delta 27229 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

8IS_#4@d>10nz~(fJ{IZARCYa$OX6o0|0q| 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�Sv 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 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"