From 3a3aa1464a3a31c133d3f4d22666699e231ab146 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Mon, 17 Jun 2019 17:40:26 +0200 Subject: [PATCH] Kernel 0.93 --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes LIB/LIBTCPIP.S.IP.txt | 15 ++- LIB/LIBTCPIP.S.SKT.txt | 243 +++++++++++++++++++-------------------- LIB/LIBTCPIP.S.TCP.txt | 45 +++++--- LIB/LIBTCPIP.S.UDP.txt | 26 ----- LIB/LIBTCPIP.S.txt | 16 +-- 6 files changed, 169 insertions(+), 176 deletions(-) delete mode 100644 LIB/LIBTCPIP.S.UDP.txt diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 99ea0eb3b0b3ccc95b9144c3dee38f8a24e07371..ebf5ed8dd438f678bc52933d5d45e19468621968 100644 GIT binary patch delta 29612 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 delta 29781 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 L!hZRpu>Su66rA0a diff --git a/LIB/LIBTCPIP.S.IP.txt b/LIB/LIBTCPIP.S.IP.txt index b0df98ff..dfbe3e0a 100644 --- a/LIB/LIBTCPIP.S.IP.txt +++ b/LIB/LIBTCPIP.S.IP.txt @@ -11,7 +11,20 @@ IP.IN ldy #S.IP.PROTOCOL .2 cmp #S.IP.PROTOCOL.UDP bne .3 - jmp UDP.IN + jsr FRM.GetTargetSKT.TCPUDP + + jsr SKT.FindMatchingLocRem + bcs .9 + + ldy #S.SOCKET.PROTO + lda (ZPPtrSKT),y + cmp #S.IP.PROTOCOL.UDP + bne .9 + + lda hFrameIn + jsr SKT.AddToQueueA + bcs .9 Q full, discard... + rts .3 cmp #S.IP.PROTOCOL.TCP bne .9 diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index 45a2b212..6e820204 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -111,8 +111,7 @@ SKT.bind >SYSCALL2 GetMemPtr jsr SKT.PullLocAddr lda SKT.LOC.ADDR+S.SOCKADDR.PORT - bne .1 - ldx SKT.LOC.ADDR+S.SOCKADDR.PORT+1 + ora SKT.LOC.ADDR+S.SOCKADDR.PORT+1 bne .1 jsr GetDynPort @@ -302,8 +301,9 @@ SKT.shutdown pha ldy #S.SOCKET.T lda (ZPPtrSKT),y - tax - jmp (J.SKT.shutdown,x) + cmp #S.SOCKET.T.STREAM + beq SKT.shutdown.STREAM +*-------------------------------------- SKT.shutdown.LISTEN SKT.shutdown.RAW SKT.shutdown.DGRAM @@ -347,8 +347,9 @@ SKT.shutdown.SEQPACKET .5 stz SKT.TABLE,x >SYSCALL2 freemem - clc +* clc rts +*-------------------------------------- SKT.shutdown.STREAM pla jsr SKT.GetTCB @@ -365,15 +366,17 @@ SKT.shutdown.STREAM lda #S.SOCKET.TCP.S.FINWT1 jmp SKT.StoreTCB.S -.1 cmp #S.SOCKET.TCP.S.TIMEWT - beq .8 +.1 bcs .8 Already Closing +* cmp #S.SOCKET.TCP.S.TIMEWT +* beq .8 - lda #S.TCP.OPTIONS.RST+S.TCP.OPTIONS.ACK - jsr TCP.OUT.SendOptA Send RST/ACK + lda #S.TCP.OPTIONS.RST + jsr TCP.OUT.SendOptA Send RST bcs .9 lda #S.SOCKET.TCP.S.TIMEWT jmp SKT.StoreTCB.S + .8 clc .9 rts */-------------------------------------- @@ -429,17 +432,11 @@ SKT.GetDataFromSktIn ldy #S.SOCKET.SQ.hInMem lda (ZPPtrSKT),y >SYSCALL2 GetMemPtr - >STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base + sty ZPTmpPtr1 - pha - tya * clc - adc SKT.Cache+S.SOCKET.TCP.INTAIL - sta ZPTmpPtr2 - - pla adc SKT.Cache+S.SOCKET.TCP.INTAIL+1 - sta ZPTmpPtr2+1 + sta ZPTmpPtr1+1 lda ZPDataInLen eor #$FF @@ -449,7 +446,7 @@ SKT.GetDataFromSktIn eor #$FF pha - ldy #0 + ldy SKT.Cache+S.SOCKET.TCP.INTAIL .1 inx Check if room left in dest buffer bne .2 @@ -459,33 +456,30 @@ SKT.GetDataFromSktIn pha -.2 lda (ZPTmpPtr2) - sta (ZPDataInPtr),y - iny +.2 lda (ZPTmpPtr1),y + sta (ZPDataInPtr) + inc ZPDataInPtr bne .3 inc ZPDataInPtr+1 -.3 inc SKT.Cache+S.SOCKET.TCP.INTAIL - bne .4 +.3 iny + bne .1 + + inc ZPTmpPtr1+1 inc SKT.Cache+S.SOCKET.TCP.INTAIL+1 lda SKT.Cache+S.SOCKET.TCP.INTAIL+1 cmp /K.TCP.WSIZE - bne .4 + bne .1 stz SKT.Cache+S.SOCKET.TCP.INTAIL+1 lda ZPTmpPtr1 - sta ZPTmpPtr2 - lda ZPTmpPtr1+1 - sta ZPTmpPtr2+1 - bra .1 -.4 inc ZPTmpPtr2 - bne .1 - inc ZPTmpPtr2+1 bra .1 -.8 >ADC16 SKT.Cache+S.SOCKET.TCP.INFREE,ZPDataInLen +.8 sty SKT.Cache+S.SOCKET.TCP.INTAIL + + >ADC16 SKT.Cache+S.SOCKET.TCP.INFREE,ZPDataInLen >SBC16 SKT.Cache+S.SOCKET.TCP.INUSED,ZPDataInLen jsr SKT.StoreTCB @@ -501,17 +495,6 @@ 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 @@ -526,17 +509,11 @@ SKT.AddDataToSktIn ldy #S.SOCKET.SQ.hInMem lda (ZPPtrSKT),y >SYSCALL2 GetMemPtr - >STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base + sty ZPTmpPtr1 - 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 + sta ZPTmpPtr1+1 lda ZPDataInLen eor #$FF @@ -546,46 +523,58 @@ SKT.AddDataToSktIn eor #$FF pha - ldy #0 + ldy SKT.Cache+S.SOCKET.TCP.INHEAD -.1 inx - bne .2 +.1 .DO AUXPIPE=1 + sta SETWRITEAUX + .FIN + +.2 inx + bne .3 pla inc beq .8 pha -.2 lda (ZPDataInPtr),y - sta (ZPTmpPtr2) - iny - bne .3 +.3 lda (ZPDataInPtr) + sta (ZPTmpPtr1),y + inc ZPDataInPtr + bne .4 inc ZPDataInPtr+1 -.3 inc SKT.Cache+S.SOCKET.TCP.INHEAD - bne .4 +.4 iny + bne .2 + + .DO AUXPIPE=1 + sta CLRWRITEAUX + .FIN + + inc ZPTmpPtr1+1 inc SKT.Cache+S.SOCKET.TCP.INHEAD+1 lda SKT.Cache+S.SOCKET.TCP.INHEAD+1 cmp /K.TCP.WSIZE - bne .4 + bne .1 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 +* sec + sbc /K.TCP.WSIZE + sta ZPTmpPtr1+1 bra .1 .9 sec rts -.8 >ADC16 SKT.Cache+S.SOCKET.TCP.INUSED,ZPDataInLen +.8 .DO AUXPIPE=1 + sta CLRWRITEAUX + .FIN + + sty SKT.Cache+S.SOCKET.TCP.INHEAD + + >ADC16 SKT.Cache+S.SOCKET.TCP.INUSED,ZPDataInLen clc rts @@ -628,17 +617,14 @@ SKT.AddDataToSktOut ldy #S.SOCKET.SQ.hOutMem lda (ZPPtrSKT),y >SYSCALL2 GetMemPtr - >STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base + sty ZPTmpPtr1 - pha - tya * clc - adc SKT.Cache+S.SOCKET.TCP.OUTHEAD - sta ZPTmpPtr2 - pla adc SKT.Cache+S.SOCKET.TCP.OUTHEAD+1 - sta ZPTmpPtr2+1 Make ZPTmpPtr2=base+Tail + sta ZPTmpPtr1+1 + + ldy SKT.Cache+S.SOCKET.TCP.OUTHEAD lda ZPDataInLen eor #$FF @@ -647,44 +633,55 @@ SKT.AddDataToSktOut lda ZPDataInLen+1 eor #$FF pha + +.1 .DO AUXPIPE=1 + sta SETWRITEAUX + .FIN - ldy #0 - -.1 inx - bne .2 +.2 inx + bne .3 pla inc beq .8 pha -.2 lda (ZPDataInPtr),y - sta (ZPTmpPtr2) - iny - bne .3 +.3 lda (ZPDataInPtr) + sta (ZPTmpPtr1),y + + inc ZPDataInPtr + bne .4 inc ZPDataInPtr+1 -.3 inc SKT.Cache+S.SOCKET.TCP.OUTHEAD - bne .4 +.4 iny + bne .2 + + inc ZPTmpPtr1+1 + + .DO AUXPIPE=1 + sta CLRWRITEAUX + .FIN inc SKT.Cache+S.SOCKET.TCP.OUTHEAD+1 lda SKT.Cache+S.SOCKET.TCP.OUTHEAD+1 cmp /K.TCP.WSIZE - bne .4 + bne .1 stz SKT.Cache+S.SOCKET.TCP.OUTHEAD+1 - lda ZPTmpPtr1 Dst Ptr=Buffer Base - sta ZPTmpPtr2 + lda ZPTmpPtr1+1 - sta ZPTmpPtr2+1 +* sec + sbc /K.TCP.WSIZE + sta ZPTmpPtr1+1 bra .1 -.4 inc ZPTmpPtr2 - bne .1 - inc ZPTmpPtr2+1 - bra .1 +.8 .DO AUXPIPE=1 + sta CLRWRITEAUX + .FIN + + sty SKT.Cache+S.SOCKET.TCP.OUTHEAD -.8 >SBC16 SKT.Cache+S.SOCKET.TCP.OUTFREE,ZPDataInLen + >SBC16 SKT.Cache+S.SOCKET.TCP.OUTFREE,ZPDataInLen >ADC16 SKT.Cache+S.SOCKET.TCP.OUTUSED,ZPDataInLen >ADC16 SKT.Cache+S.SOCKET.TCP.OUTTOSEND,ZPDataInLen jsr SKT.StoreTCB @@ -702,18 +699,12 @@ SKT.GetDataFromSktOut lda (ZPPtrSKT),y >SYSCALL2 GetMemPtr - >STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base + sty ZPTmpPtr1 - pha - tya * clc - adc SKT.Cache+S.SOCKET.TCP.OUTTAILSENT - sta ZPTmpPtr2 Make ZPTmpPtr2=base+nexttail - - pla adc SKT.Cache+S.SOCKET.TCP.OUTTAILSENT+1 - sta ZPTmpPtr2+1 - + sta ZPTmpPtr1+1 + lda ZPDataOutLen eor #$FF tax @@ -722,7 +713,7 @@ SKT.GetDataFromSktOut eor #$FF pha - ldy #0 + ldy SKT.Cache+S.SOCKET.TCP.OUTTAILSENT .1 inx bne .2 @@ -732,33 +723,33 @@ SKT.GetDataFromSktOut pha -.2 lda (ZPTmpPtr2) - sta (ZPDataOutPtr),y - iny +.2 lda (ZPTmpPtr1),y + sta (ZPDataOutPtr) + inc ZPDataOutPtr bne .3 inc ZPDataOutPtr+1 -.3 inc SKT.Cache+S.SOCKET.TCP.OUTTAILSENT - bne .4 +.3 iny + bne .1 + + inc ZPTmpPtr1+1 inc SKT.Cache+S.SOCKET.TCP.OUTTAILSENT+1 lda SKT.Cache+S.SOCKET.TCP.OUTTAILSENT+1 cmp /K.TCP.WSIZE - bne .4 + bne .1 stz SKT.Cache+S.SOCKET.TCP.OUTTAILSENT+1 - lda ZPTmpPtr1 Dst Ptr=Buffer Base - sta ZPTmpPtr2 + lda ZPTmpPtr1+1 - sta ZPTmpPtr2+1 +* sec + sbc /K.TCP.WSIZE + sta ZPTmpPtr1+1 bra .1 -.4 inc ZPTmpPtr2 - bne .1 - inc ZPTmpPtr2+1 - bra .1 +.8 sty SKT.Cache+S.SOCKET.TCP.OUTTAILSENT -.8 >SBC16 SKT.Cache+S.SOCKET.TCP.OUTTOSEND,ZPDataOutLen + >SBC16 SKT.Cache+S.SOCKET.TCP.OUTTOSEND,ZPDataOutLen clc rts @@ -986,11 +977,11 @@ SKT.EOF.I ldy #S.SOCKET.TCP.INUSED bcs .9 lda #$ff no DATA, EOF = true - clc +* clc rts .8 lda #0 ...EOF = false - clc +* clc .9 rts *-------------------------------------- SKT.CheckStream ldy #S.SOCKET.T @@ -1197,7 +1188,11 @@ SKT.NewTCB ldx #S.SOCKET.TCP.INTAIL >LDYAI K.TCP.WSIZE >STYA SKT.Cache+S.SOCKET.TCP.INFREE + .DO AUXPIPE=1 + >SYSCALL2 NewStkObj + .ELSE >SYSCALL2 getmem + .FIN bcs .9 txa ldy #S.SOCKET.SQ.hInMem @@ -1205,7 +1200,11 @@ SKT.NewTCB ldx #S.SOCKET.TCP.INTAIL >LDYAI K.TCP.WSIZE >STYA SKT.Cache+S.SOCKET.TCP.OUTFREE + .DO AUXPIPE=1 + >SYSCALL2 NewStkObj + .ELSE >SYSCALL2 getmem + .FIN bcs .9 txa ldy #S.SOCKET.SQ.hOutMem diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index 19e6a1df..7f3f0fed 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -254,21 +254,9 @@ TCP.IN.JMP.ESTBLSH .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 +.9 +* clc +* rts *-------------------------------------- TCP.IN.JMP.CLWAIT clc Wait for SKT.shutdown @@ -344,8 +332,9 @@ TCP.IN.JMP.CLOSING lda #S.SOCKET.TCP.S.TIMEWT sta (ZPPtrSKT),y -.1 clc - rts +.1 +* clc +* rts *-------------------------------------- TCP.IN.JMP.TIMEWT clc Wait for TCP.Close @@ -462,12 +451,21 @@ TCP.SENDCLOSE ldx #0 .4 ldy #S.SOCKET.SQ.hInMem lda (ZPPtrSKT),y beq .5 + .DO AUXPIPE=1 + >SYSCALL2 FreeStkObj + .ELSE >SYSCALL2 freemem + .FIN .5 ldy #S.SOCKET.SQ.hOutMem lda (ZPPtrSKT),y beq .6 + + .DO AUXPIPE=1 + >SYSCALL2 FreeStkObj + .ELSE >SYSCALL2 freemem + .FIN .6 plx phx @@ -617,6 +615,19 @@ TCP.NewFrame ldx #S.IP.PROTOCOL.TCP clc .9 rts +*-------------------------------------- + .DO IPDEBUG=1 +DEBUG.IPID ldy #S.IP.IDENTIFICATION + lda (ZPFrameInPtr),y + >PUSHA + iny + lda (ZPFrameInPtr),y + >PUSHA + >PUSHBI 2 + >LDYA L.MSG.IPID + >SYSCALL printf + rts + .FIN *-------------------------------------- MAN SAVE USR/SRC/LIB/LIBTCPIP.S.TCP diff --git a/LIB/LIBTCPIP.S.UDP.txt b/LIB/LIBTCPIP.S.UDP.txt deleted file mode 100644 index b244410d..00000000 --- a/LIB/LIBTCPIP.S.UDP.txt +++ /dev/null @@ -1,26 +0,0 @@ -NEW - AUTO 3,1 - .LIST OFF -*-------------------------------------- -UDP.IN jsr FRM.GetTargetSKT.TCPUDP - - jsr SKT.FindMatchingLocRem - bcs .9 - - ldy #S.SOCKET.PROTO - lda (ZPPtrSKT),y - cmp #S.IP.PROTOCOL.UDP - bne .9 - - lda hFrameIn - jsr SKT.AddToQueueA - bcc .8 - -.9 lda hFrameIn Q full, discard... - >SYSCALL2 FreeMem -.8 rts -*-------------------------------------- -MAN -SAVE USR/SRC/LIB/LIBTCPIP.S.UDP -LOAD USR/SRC/LIB/LIBTCPIP.S -ASM diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index 9185a6b7..972d6751 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -5,7 +5,7 @@ NEW .OR $2000 .TF LIB/LIBTCPIP *-------------------------------------- -AUXPIPE .EQ 1 +AUXPIPE .EQ 0 IPDEBUG .EQ 0 *-------------------------------------- .MA ADC16 @@ -56,10 +56,11 @@ ZPPtrSKT .EQ ZPLIB+22 ZPCachePtr .EQ ZPLIB+24 ZPTmpPtr1 .EQ ZPLIB+26 -ZPTmpPtr2 .EQ ZPLIB+28 -TmpDWord .EQ ZPLIB+28 + IP.CHECKSUM .EQ ZPLIB+28 IP.CHECKSUM.TMP .EQ ZPLIB+30 + +TmpDWord .EQ ZPLIB+28 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -150,16 +151,12 @@ J.SKT.connect .DA SKT.connect.RAW .DA SKT.connect.DGRAM .DA SKT.connect.SEQPACKET .DA SKT.connect.STREAM -J.SKT.shutdown .DA SKT.shutdown.RAW - .DA SKT.shutdown.DGRAM - .DA SKT.shutdown.SEQPACKET - .DA SKT.shutdown.STREAM 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.IPID .DA MSG.IPID L.MSG.FRM.Dump .DA MSG.FRM.Dump L.MSG.SKT.Dump .DA MSG.SKT.Dump .FIN @@ -358,7 +355,6 @@ SKT.Dump ldy #S.SOCKET.REM.PORT+1 .INB USR/SRC/LIB/LIBTCPIP.S.IP .INB USR/SRC/LIB/LIBTCPIP.S.SKT .INB USR/SRC/LIB/LIBTCPIP.S.TCP - .INB USR/SRC/LIB/LIBTCPIP.S.UDP *-------------------------------------- CS.END *-------------------------------------- @@ -465,8 +461,8 @@ 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.IPID .AZ "IPID:%H\r\n" 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