From 62b2d1f9be13e423220e41888d6b9e25ef45c314 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Sun, 7 Jun 2020 15:47:00 +0200 Subject: [PATCH] Kernel 0.94 --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes LIB/LIBTCPIP.S.IP.txt | 1 + LIB/LIBTCPIP.S.SKT.txt | 36 +++++++++++++++++++++++------------- LIB/LIBTCPIP.S.TCP.txt | 8 +++++--- SBIN/HTTPD.S.txt | 38 ++++++++++++++++++++------------------ 5 files changed, 49 insertions(+), 34 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index bb8ced2b904f7f5cecb01fcbd1e3260323db75c1..993fb87f292f9c6aecf6ce3bb3302c17313cc371 100644 GIT binary patch delta 23248 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�Bme+`FDv zDUsG94Wf+`RMH%&9inQjftl?#AsCWWbjf0EoL@7i!k(TAcgDSschi@$qgAa)Ge&jCx(9q~s%qeh$8#+00+9llHspT~{^v07SAVaZdmqhpys%!=BRMX9^RldRI8+ry{2Y>7LTjN_rJqu zGIQ~!clg-R^JEJ1DFuChG2$Nw+GHIEOT$LFvm#|bb{W3%t~iQ+*2~aW|?3M-h70Q z;Z{?EWtg#h`8p}8*BymRm1`(b_q8(7bug5*_{RX*?8A{lXz*Q?ZL^qu!?g*NE%qhXs0r+%c?F|SEw zmHKWKp4;oHsqlTBRsvtyw;z!%r*3yv_S|g=$Z_6cyAkDjU z20tP>IhUiV*0Sp9_{<6(wl>G06y3rMJptogQ|5!GoZwB0lPc-TfZ~)2SJ##4l_=pf z?mWSpnfLIy6MPicqoNl=`V>crtRLXGlYEN%hmI~;VC9QzPx2b(f7E*heuAGp$p`2@ zb(9!_TtAb2qxmd8eUguNIj1rwk-hmNgY*jRmr^|sx33%(l2FOlc-Sd^YT!32IDNPP zg#~F-bDLC0e22SF@x$Rd*iWbUaQBO{gf2-MoO+7ac*P3H?MDYu0YzQG>8JTf|DT`) zam81uQmcE3pO(°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 delta 22898 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 diff --git a/LIB/LIBTCPIP.S.IP.txt b/LIB/LIBTCPIP.S.IP.txt index 9acf6a5d..58562b4e 100644 --- a/LIB/LIBTCPIP.S.IP.txt +++ b/LIB/LIBTCPIP.S.IP.txt @@ -8,6 +8,7 @@ IP.IN ldy #S.IP.PROTOCOL bne .2 jmp ICMP.IN + .2 cmp #S.IP.PROTOCOL.UDP bne .3 diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index 8b3124a5..b25dd308 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -864,10 +864,14 @@ SKT.Recv clc ldy #S.SOCKET.T lda (ZPPtrSKT),y - cmp #S.SOCKET.T.STREAM - beq .99 + cmp #S.SOCKET.T.SEQPKT + bcc .10 + bne .99 STREAM + + jsr SKT.CheckTCP + bcs .91 - ldy #S.SOCKET.HQ.TAIL +.10 ldy #S.SOCKET.HQ.TAIL lda (ZPPtrSKT),y tax @@ -878,6 +882,7 @@ SKT.Recv clc inc cmp #S.SOCKET.HQ.MAX bne .1 + lda #0 .1 ldy #S.SOCKET.HQ.TAIL @@ -936,13 +941,13 @@ SKT.Recv clc clc .9 rts -.99 plp - lda #ERR.SKT.BAD +.99 lda #ERR.SKT.BAD +.91 plp sec rts -.90 plp - lda #0 no data +.90 lda #0 no data + plp sec rts */-------------------------------------- @@ -996,7 +1001,9 @@ SKT.Send.8 jsr SKT.SetFrameOutDstIP clc Queue if fail jmp FRM.SendIP *-------------------------------------- -SKT.Send.SEQPKT +SKT.Send.SEQPKT jsr SKT.CheckTCP + bcs SKT.Send.9 + >LDYA ZPDataInLen jsr TCP.NewFrame bcs SKT.Send.9 @@ -1076,12 +1083,13 @@ SKT.EOF.I ldy #S.SOCKET.TCP.INUSED * clc .9 rts *-------------------------------------- -SKT.CheckStream ldy #S.SOCKET.T - lda (ZPPtrSKT),y - cmp #S.SOCKET.T.STREAM - bne .99 +SKT.CheckStream lda #S.SOCKET.T.STREAM + + ldy #S.SOCKET.T + cmp (ZPPtrSKT),y + bne SKT.BAD - ldy #S.SOCKET.O +SKT.CheckTCP ldy #S.SOCKET.O lda (ZPPtrSKT),y and #S.SOCKET.O.ACCEPTCONN bne .99 @@ -1103,6 +1111,7 @@ SKT.CheckStream ldy #S.SOCKET.T .90 lda #ERR.SKT.NOCONN sec rts + .99 SKT.BAD lda #ERR.SKT.BAD sec @@ -1266,6 +1275,7 @@ SKT.AddToQueueA pha inc cmp #S.SOCKET.HQ.MAX bne .1 + lda #0 .1 ldy #S.SOCKET.HQ.TAIL diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index e6261664..acc78e2e 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -204,14 +204,16 @@ TCP.IN.JMP.ESTBLSH bne .52 jsr SKT.AddDataToSktIn yes, queue data if there is room for.... - bcs .9 - - bra .6 + bcc .6 + + rts .52 lda hFrameIn jsr SKT.AddToQueueA bcs .9 + stz hFrameIn DON'T DISCARD + .6 lda ZPDataInLen ldy ZPDataInLen+1 ldx #S.SOCKET.TCP.INSEQNUM diff --git a/SBIN/HTTPD.S.txt b/SBIN/HTTPD.S.txt index edf2b3d8..15d836d9 100644 --- a/SBIN/HTTPD.S.txt +++ b/SBIN/HTTPD.S.txt @@ -165,7 +165,7 @@ CS.RUN.INIT ldx #3 bcs CS.RUN.RTS >PUSHBI 0 no protocol - lda #S.SOCKET.T.SEQPACKET + lda #S.SOCKET.T.SEQPKT >LIBCALL hLIBTCPIP,LIBTCPIP.Socket bcs CS.RUN.RTS @@ -345,7 +345,7 @@ CS.RUN.CLIENT >LDYAI 1024 >STYA ZPRepPtr txa - >STA.G REQ.hBuf + >STA.G REP.hBuf .10 >STZ.G REQ.FullPath >STA.G REQ.hReq @@ -386,20 +386,16 @@ CS.RUN.CLIENT >LDYAI 1024 bcs .9 jsr CS.RUN.SendFile - bcc .5 - bra .90 + bcs .5 + + bcc .6 .9 >PUSHWI HTTP.404.len >PUSHW L.HTTP.404 >LDA.G CLN.hSocket >LIBCALL hLIBTCPIP,LIBTCPIP.Send - >STZ.G REQ.KeepAlive - -.5 >LDA.G REQ.hFile - beq .6 - - >SYSCALL FClose +.5 >STZ.G REQ.KeepAlive .6 >LDA.G REQ.hReq beq .8 @@ -410,12 +406,10 @@ CS.RUN.CLIENT >LDYAI 1024 beq .90 jmp .10 -.90 >LDA.G REQ.hBuf - beq .91 - +.90 >LDA.G REP.hBuf >SYSCALL freemem -.91 >PUSHW L.MSG.SKTCLOSE + >PUSHW L.MSG.SKTCLOSE >PUSHB.G CLN.hSocket >PUSHBI 1 >SYSCALL printf @@ -423,7 +417,7 @@ CS.RUN.CLIENT >LDYAI 1024 >LDA.G CLN.hSocket >LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown -.99 rts + rts *-------------------------------------- CS.RUN.REQ.GetReq >STA.G REQ.hReq @@ -577,15 +571,22 @@ CS.RUN.SendFile >PUSHW ZPRepPtr bcs .8 jsr CS.RUN.SendBuf - bcc .1 + bcs .9 - rts + bra .1 .8 cmp #MLI.E.EOF bne .9 clc -.9 rts + +.9 php + pha + >LDA.G REQ.hFile + >SYSCALL FClose + pla + plp + rts *-------------------------------------- CS.RUN.SendBuf >PUSHYA >PUSHW ZPRepPtr @@ -807,6 +808,7 @@ REQ.hFile .BS 1 REQ.hBuf .BS 1 REQ.MimeType .BS 1 REQ.KeepAlive .BS 1 +REP.hBuf .BS 1 CLN.hSocket .BS 1 DS.END .ED