diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index fba51a1d..beaa5763 100644 Binary files a/.Floppies/A2OSX.BOOT.po and b/.Floppies/A2OSX.BOOT.po differ diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 30df98ee..c45fa7ff 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/PAK.S.txt b/BIN/PAK.S.txt index e5de0322..01c6d37a 100644 --- a/BIN/PAK.S.txt +++ b/BIN/PAK.S.txt @@ -123,7 +123,7 @@ CS.RUN >INC.G ArgIndex >LDA.G hSrcBasePath >SYSCALL GetMemPtr >STYA ZPPtr1 - + ldy #$ff .80 iny @@ -335,6 +335,10 @@ CS.RUN.GetFilePath >PUSHW ZPFileName >LDYA ZPFullPath >SYSCALL StrCat + + >LDYA ZPFullPath + >SYSCALL puts + >DEBUG rts *-------------------------------------- CS.RUN.OpenFile >PUSHWZ Aux type diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index f3b8c458..816c34d8 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -185,15 +185,18 @@ SKT.connect.SEQPACKET beq .1 cmp #S.SOCKET.TCP.S.ESTBLSH - beq .8 + beq SKT.listen.8 bcs .9 cmp #S.SOCKET.TCP.S.OPENED beq .2 cmp #S.SOCKET.TCP.S.SYNSENT - beq .3 - bra .9 + beq .99 + +.9 lda #ERR.SKT.BAD + sec + rts .1 jsr SKT.SetRemAddr jsr SKT.NewTCB @@ -204,21 +207,14 @@ SKT.connect.SEQPACKET .2 lda #S.TCP.OPTIONS.SYN jsr TCP.OUT.SendOptA Send SYN - bcs .3 + bcs .99 lda #S.SOCKET.TCP.S.SYNSENT jsr SKT.StoreTCB.S -.3 lda #ERR.SKT.NOCONN +.99 lda #ERR.SKT.NOCONN sec rts - -.8 clc - rts - -.9 lda #ERR.SKT.BAD - sec -.99 rts */-------------------------------------- * # Listen * Listen for connections on a socket @@ -237,11 +233,11 @@ SKT.listen >SYSCALL2 GetMemPtr ldy #S.SOCKET.T lda (ZPPtrSKT),y cmp #S.SOCKET.T.SEQPACKET - bcc .9 + bcc SKT.listen.9 ldy #S.SOCKET.TCP.S lda (ZPPtrSKT),y - bne .9 + bne SKT.listen.9 lda #S.SOCKET.TCP.S.LISTEN sta (ZPPtrSKT),y @@ -250,10 +246,10 @@ SKT.listen >SYSCALL2 GetMemPtr lda #S.SOCKET.O.ACCEPTCONN sta (ZPPtrSKT),y - clc +SKT.listen.8 clc rts -.9 lda #ERR.SKT.BAD +SKT.listen.9 lda #ERR.SKT.BAD sec SKT.listen.RTS rts */-------------------------------------- @@ -425,6 +421,7 @@ SKT.Read jsr SKT.PullhFDDataInPtrLen lda (ZPPtrSKT),y sbc ZPDataInLen+1 bcs SKT.GetDataFromSktIn more data in pipe, get full buffer of data + stx ZPDataInLen less data than INUSED, Get only INUSED data lda (ZPPtrSKT),y sta ZPDataInLen+1 @@ -838,6 +835,9 @@ SKT.Recv clc cmp #S.SOCKET.T.STREAM beq .99 + cmp #S.SOCKET.T.SEQPACKET + php CS is SEQ + ldy #S.SOCKET.HQ.TAIL lda (ZPPtrSKT),y tax @@ -859,7 +859,15 @@ SKT.Recv clc adc #S.SOCKET.HQ tay lda (ZPPtrSKT),y + plp + bcc .10 not a SEQPKT socket + + pha + jsr SKT.Recv.ACKSEQPKT + pla + +.10 plp bcc .9 Exit with CC and A=hFrame pha @@ -906,15 +914,22 @@ SKT.Recv clc clc .9 rts -.99 plp - lda #ERR.SKT.BAD +.99 lda #ERR.SKT.BAD + plp sec rts -.90 plp - lda #0 no data +.90 lda #0 no data + plp + plp sec rts +*-------------------------------------- +SKT.Recv.ACKSEQPKT + +* TODO : compute ACK + clc + rts */-------------------------------------- * # Send (RAW,DGRAM,SEQPACKET) * # SendTo (RAW,DGRAM,SEQPACKET) @@ -940,7 +955,7 @@ SKT.Send clc plp bcc .1 jsr SKT.PullRemAddr -* jsr SKT.SetRemAddr + .1 ldy #S.SOCKET.T lda (ZPPtrSKT),y tax @@ -977,6 +992,8 @@ SKT.Send.SEQPACKET jsr SKT.CopyDataInToOut sec DONT Queue if fail jmp FRM.SendIP + +* TODO add ZPDataInLen to SEQ */-------------------------------------- * # GetSockOpt * Set Socket Options @@ -1166,6 +1183,7 @@ SKT.FindMatchingLocRem ldy #S.IP.PROTOCOL cmp (ZPFrameInPtr),y bne .8 + ldy #S.SOCKET.LOC.ADDR .2 lda (ZPPtrSKT),y @@ -1177,6 +1195,7 @@ SKT.FindMatchingLocRem .4 cmp SKT.LOC.ADDR+S.SOCKADDR.ADDR-S.SOCKET.LOC.ADDR,y bne .8 + iny cpy #S.SOCKET.LOC.PORT+2 bne .3 @@ -1202,7 +1221,7 @@ SKT.FindMatchingLocRem and #S.SOCKET.O.BROADCAST bne .43 * sec - rts this socket does not accept broadcast + rts this socket does not accept broadcast .41 ldy #S.SOCKET.REM.ADDR @@ -1259,41 +1278,50 @@ SKT.AddToQueueA pha rts *-------------------------------------- SKT.NewTCB ldx #S.SOCKET.TCP.INSEQNUM + .1 stz SKT.Cache,x inx cpx #S.SOCKET.TCP bne .1 - >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 - sta (ZPPtrSKT),y - - >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 - sta (ZPPtrSKT),y ldx #3 .2 lda A2osX.TIMER16,x sta SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x dex bpl .2 + + ldy #S.SOCKET.T + lda (ZPPtrSKT),y + cmp #S.SOCKET.T.STREAM + bcc .8 + + >LDYAI K.TCP.WSIZE + >STYA SKT.Cache+S.SOCKET.TCP.INFREE + >STYA SKT.Cache+S.SOCKET.TCP.OUTFREE + .DO AUXPIPE=1 + >SYSCALL2 NewStkObj + .ELSE + >SYSCALL2 getmem + .FIN + bcs .9 + + txa + ldy #S.SOCKET.SQ.hInMem + sta (ZPPtrSKT),y + + .DO AUXPIPE=1 + >SYSCALL2 NewStkObj + .ELSE + >SYSCALL2 getmem + .FIN + bcs .9 + + txa + ldy #S.SOCKET.SQ.hOutMem + sta (ZPPtrSKT),y +.8 * clc .9 rts *-------------------------------------- diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index 60598660..f6f64c4a 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -4,12 +4,13 @@ NEW *-------------------------------------- TCP.IN jsr FRM.GetTargetSKT.TCPUDP jsr SKT.FindMatchingLocRem - bcs TCP.IN.JMP.CLOSED no socket, go discard + bcs TCP.IN.JMP.DISCARD no socket, go discard ldy #S.TCP.OPTIONS lda (ZPFrameInPtr),y and #S.TCP.OPTIONS.RST RST ? go Kill this socket... bne TCP.IN.RST ...and discard frame + ldy #S.SOCKET.TCP.S lda (ZPPtrSKT),y asl @@ -21,6 +22,7 @@ TCP.IN.RST lda SKT.TABLE,x *-------------------------------------- TCP.IN.JMP.OPENED TCP.IN.JMP.CLOSED +TCP.IN.JMP.DISCARD lda hFrameIn stz hFrameIn >SYSCALL2 FreeMem @@ -33,10 +35,10 @@ TCP.IN.JMP.LISTEN iny #S.SOCKET.PROTO lda (ZPPtrSKT),y jsr SKT.Socket.I get new socket in ZPTmpPtr1 - bcs TCP.IN.JMP.CLOSED + bcs TCP.IN.JMP.DISCARD jsr SKT.AddToQueueA Queued successfully ? - bcs TCP.IN.JMP.CLOSED no, discard frame and new socket + bcs TCP.IN.JMP.DISCARD no, discard frame and new socket jsr ARP.AddFromFrameInPtr lda ZPTmpPtr1 @@ -49,6 +51,7 @@ TCP.IN.JMP.LISTEN jsr SKT.NewTCB bcs .99 + jsr TCP.IN.ACKTheSYN lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK jsr TCP.OUT.SendOptA SYN received, Send SYN.ACK @@ -197,12 +200,18 @@ TCP.IN.JMP.ESTBLSH dex bpl .5 + ldy #S.SOCKET.T Create a new client socket + lda (ZPPtrSKT),y + cmp #S.SOCKET.T.STREAM + bne .52 jsr SKT.AddDataToSktIn yes, queue data if there is room for.... - bcs * Should never appends.... - -* clc - - lda ZPDataInLen + bra .59 + +.52 lda hFrameIn + jsr SKT.AddToQueueA + bcs .9 + +.59 lda ZPDataInLen ldy ZPDataInLen+1 ldx #S.SOCKET.TCP.INSEQNUM jsr TCP.AddAYToSktCacheAtX @@ -225,17 +234,13 @@ TCP.IN.JMP.ESTBLSH lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK jsr TCP.SetSocketTCPO FIN received, Send FIN.ACK * jsr TCP.OUT.SendOptA -.8 - clc + +.8 clc rts .9 sec rts *-------------------------------------- -TCP.IN.JMP.CLWAIT - clc Wait for SKT.shutdown - rts -*-------------------------------------- TCP.IN.JMP.LASTACK ldy #S.TCP.OPTIONS only accept ACK packet lda (ZPFrameInPtr),y @@ -244,7 +249,10 @@ TCP.IN.JMP.LASTACK ldy #S.SOCKET.TCP.S lda #S.SOCKET.TCP.S.TIMEWT sta (ZPPtrSKT),y -.8 clc +.8 +*-------------------------------------- +TCP.IN.JMP.CLWAIT + clc Wait for SKT.shutdown rts *-------------------------------------- TCP.IN.JMP.FINWT1