From 875b15a5b1752343abf342c11c333e2546778c51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Wed, 29 Aug 2018 17:01:02 +0200 Subject: [PATCH] Kernel 0.9.2 --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes BIN/PING.S.txt | 4 +- BIN/RPCDUMP.S.txt | 4 +- BIN/TELNET.S.txt | 2 +- INC/LIBTCPIP.I.txt | 7 +- LIB/LIBTCPIP.S.DNS.txt | 8 +- LIB/LIBTCPIP.S.SKT.txt | 412 ++++++++++++++++----------------------- LIB/LIBTCPIP.S.txt | 5 +- SBIN/DHCPCLNT.S.txt | 6 +- 10 files changed, 183 insertions(+), 265 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index a6ae9a32d5bb781b0b1ab6370b67f6fe286c1d5a..5314b6df5526ba718a8ccda37a0dae07409e5798 100644 GIT binary patch delta 9231 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 M-M9@yolf`v0h?Z3<^TWy diff --git a/BIN/PING.S.txt b/BIN/PING.S.txt index 324fb5f7..a978f819 100644 --- a/BIN/PING.S.txt +++ b/BIN/PING.S.txt @@ -182,7 +182,7 @@ CS.RUN.SEND.ECHO >PUSHW L.ICMP.Request >PUSHWI ICMP.RequestLen - >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Write + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Send bcs CS.RUN.ERR jsr Init.Timeout @@ -196,7 +196,7 @@ CS.RUN.WAIT.REPLY .1 ldy #hSocket lda (pData),y - >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.ReadFrame + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Rcvd bcs .2 ldy #hFrame diff --git a/BIN/RPCDUMP.S.txt b/BIN/RPCDUMP.S.txt index 274aac3f..578e06cc 100644 --- a/BIN/RPCDUMP.S.txt +++ b/BIN/RPCDUMP.S.txt @@ -121,7 +121,7 @@ CS.RUN jsr Init.Timeout >PUSHB (pData),y >PUSHW L.RPC.Request >PUSHWI RPC.Request.End-RPC.Request - >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Write + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Send bcc .4 >SLEEP @@ -133,7 +133,7 @@ CS.RUN jsr Init.Timeout .5 ldy #hSocket lda (pData),y - >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.ReadFrame + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Rcvd bcc .6 >SLEEP diff --git a/BIN/TELNET.S.txt b/BIN/TELNET.S.txt index 3344956e..8de2547a 100644 --- a/BIN/TELNET.S.txt +++ b/BIN/TELNET.S.txt @@ -250,7 +250,7 @@ MSG.SKTOK .AZ "Connected." *-------------------------------------- Socket .DA #S.SOCKET.SOCK.STREAM .BS 1 - .DA #S.IP.PROTOCOL.TCP + .BS 1 .BS 1 Socket.Src.Addr .BS 4 Socket.Src.Port .DA 0 Dynamic diff --git a/INC/LIBTCPIP.I.txt b/INC/LIBTCPIP.I.txt index a4ed8302..24128f43 100644 --- a/INC/LIBTCPIP.I.txt +++ b/INC/LIBTCPIP.I.txt @@ -47,9 +47,10 @@ LIBTCPIP.SKT.Get .EQ 38 LIBTCPIP.SKT.Accept .EQ 40 LIBTCPIP.SKT.MkNod .EQ 42 -LIBTCPIP.SKT.Write .EQ 44 -LIBTCPIP.SKT.Read .EQ 46 -LIBTCPIP.SKT.ReadFrame .EQ 48 +LIBTCPIP.SKT.Read .EQ 44 +LIBTCPIP.SKT.Write .EQ 46 +LIBTCPIP.SKT.Rcvd .EQ 48 +LIBTCPIP.SKT.Send .EQ 50 *-------------------------------------- ERR.SKT.OOS .EQ $BF ERR.SKT.BUSY .EQ $BE diff --git a/LIB/LIBTCPIP.S.DNS.txt b/LIB/LIBTCPIP.S.DNS.txt index 042eb1a7..7caa6b35 100644 --- a/LIB/LIBTCPIP.S.DNS.txt +++ b/LIB/LIBTCPIP.S.DNS.txt @@ -109,7 +109,7 @@ DNS.REQUEST lda hDNSSocket1 >PUSHB hDNSSocket1 >PUSHW L.DNS.MSG >PUSHW DNS.MSG.LEN - jsr SKT.Write + jsr SKT.Send lda hDNSSocket2 beq .3 @@ -117,7 +117,7 @@ DNS.REQUEST lda hDNSSocket1 >PUSHB hDNSSocket2 >PUSHW L.DNS.MSG >PUSHW DNS.MSG.LEN - jsr SKT.Write + jsr SKT.Send .3 lda #ERR.DNS.PENDING .9 sec @@ -360,14 +360,14 @@ DNS.FREE ldy #S.DNSCACHE.hNAME *-------------------------------------- DNS.POLL lda hDNSSocket1 beq .8 - jsr SKT.ReadFrame + jsr SKT.Rcvd bcs .1 jsr DNS.DecodeMsg .1 lda hDNSSocket2 beq .8 - jsr SKT.ReadFrame + jsr SKT.Rcvd bcs .8 jsr DNS.DecodeMsg diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index 83e6be9b..860c5782 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -56,7 +56,7 @@ SKT.New >PULLW ZPTmpPtr1 bpl .5 already found an empty slot.... >LDYA ZPTmpPtr2 found one... - >STYA ZPTmpPtr3 save it! + >STYA ZPPtrSKT save it! stx TmpOffset .5 lda ZPTmpPtr2 @@ -75,7 +75,7 @@ SKT.New >PULLW ZPTmpPtr1 ldy #S.SOCKET.HDR-1 .7 lda (ZPTmpPtr1),y - sta (ZPTmpPtr3),y + sta (ZPPtrSKT),y dey bpl .7 @@ -91,8 +91,6 @@ SKT.New >PULLW ZPTmpPtr1 jsr SKT.NewTCB bcs .99 - >LDYA ZPTmpPtr3 - >STYA ZPPtrSKT lda #S.TCP.OPTIONS.SYN jsr TCP.OUT.SendOptA Send SYN,Only for CLIENT conn!!!! bcs .99 @@ -329,233 +327,6 @@ SKT.MkNod sta .1+1 .9 rts */-------------------------------------- -* # SKT.Write (DGRAM,STREAM,RAW) -* Send block of data -* **In:** -* PUSHB = hSocket -* PUSHW = pBuf -* PUSHW = len -* **Out:** -*\-------------------------------------- -SKT.Write >PULLW ZPDataInLen - >PULLW ZPDataInPtr - >PULLA - - jsr SKT.Get.I - bcs .9 - - cmp #S.SOCKET.SOCK.DGRAM - beq SKT.Write.UDP - - cmp #S.SOCKET.SOCK.RAW - beq SKT.Write.RAW - - cmp #S.SOCKET.SOCK.STREAM - bne .99 - - ldy #S.SOCKET.SO - lda (ZPPtrSKT),y - and #S.SOCKET.SO.ACCEPTCONN - bne .99 - jmp SKT.Write.TCP - -.99 lda #ERR.SKT.BAD - sec -.9 rts -*-------------------------------------- -SKT.Write.RAW ldy #S.SOCKET.RAW.PROTO - lda (ZPPtrSKT),y - - tax - >LDYA ZPDataInLen - jsr FRM.NewIP - bcs .9 - - jsr SKT.SetFrameOutDstIP - - jsr SKT.CopyDataInToOut - - jmp FRM.SendIP - -.9 rts -*-------------------------------------- -SKT.Write.UDP ldx #S.IP.PROTOCOL.UDP - >LDYA ZPDataInLen - jsr FRM.NewIP - bcs .9 - - jsr SKT.SetFrameOutDstIP - - ldy #S.SOCKET.SRC.PORT - lda (ZPPtrSKT),y - tax - iny - lda (ZPPtrSKT),y - ldy #S.UDP.SRCPORT - sta (ZPFrameOutPtr),y - iny - txa - sta (ZPFrameOutPtr),y - - ldy #S.SOCKET.DST.PORT - lda (ZPPtrSKT),y - tax - iny - lda (ZPPtrSKT),y - ldy #S.UDP.DSTPORT - sta (ZPFrameOutPtr),y - iny - txa - sta (ZPFrameOutPtr),y - - jsr SKT.CopyDataInToOut - - jmp FRM.SendIP - -.9 rts -*-------------------------------------- -SKT.Write.TCP ldy #S.SOCKET.TCP.STATUS - lda (ZPPtrSKT),y - cmp #S.SOCKET.TCP.STATUS.ESTBLSH - bne .91 - - jsr SKT.AddDataToSktOut will call SKT.GetTCB - bcs .90 - - jsr TCP.OUT.I SKT.GetTCB called, try to push, ignore error.... - clc - rts - -.90 lda #0 no data transfered - sec - rts - -.91 lda #MLI.E.IO - sec -.99 rts -*/-------------------------------------- -* # SKT.ReadFrame (DGRAM,RAW) -* **In:** -* A = hSocket -* **Out:** -* A = hFrame -*\-------------------------------------- -SKT.ReadFrame jsr SKT.Get.I - bcs .9 - - ldy #S.SOCKET.HQ.TAIL - lda (ZPPtrSKT),y - tax - - ldy #S.SOCKET.HQ.HEAD - cmp (ZPPtrSKT),y - beq .99 - - inc - cmp #S.SOCKET.HQ.MAX - bne .1 - lda #0 - -.1 ldy #S.SOCKET.HQ.TAIL - sta (ZPPtrSKT),y - - txa - clc - adc #S.SOCKET.HQ - tay - lda (ZPPtrSKT),y - clc - rts - -.99 sec -.9 rts -*/-------------------------------------- -* # SKT.PutC (STREAM) -* Write a Char To Stream -* **In:** -* PUSHB = hSocket -* PUSHB = Char -* **Out:** -*\-------------------------------------- -SKT.PutC >PULLB TmpByte - - ldx #1 - stx ZPDataInLen - stz ZPDataInLen+1 - - ldx L.TmpByte - stx ZPDataInPtr - - ldx L.TmpByte+1 - stx ZPDataInPtr+1 - bra SKT.PutS.1 -*/-------------------------------------- -* # SKT.PutS (STREAM) -* Write Line in pBuf -* **In:** -* PUSHB = hSocket -* PUSHW = PSTR -* **Out:** -*\-------------------------------------- -SKT.PutS >PULLW ZPDataOutPtr - lda (ZPDataInPtr) - - sta ZPDataInLen - stz ZPDataInLen+1 - - inc ZPDataInPtr - bne SKT.PutS.1 - inc ZPDataInPtr+1 - -SKT.PutS.1 >PULLA - jsr SKT.Get.I - bcs .9 - - cmp #S.SOCKET.SOCK.STREAM - bne .9 - - jmp SKT.Write.TCP - -.9 lda #ERR.SKT.BAD - sec - rts -*/-------------------------------------- -* # SKT.GetC.A (STREAM) -* Read a Char From Stream in A -* **In:** -* A = hSocket -* **Out:** -* A = char -*\-------------------------------------- -SKT.GetC.A stz bTextMode - - ldx #1 - stx ZPDataOutLen - stz ZPDataOutLen+1 - - ldx L.TmpByte - stx ZPDataOutPtr - ldx L.TmpByte+1 - stx ZPDataOutPtr+1 - - jsr SKT.Read.I - bcs .9 - lda TmpByte - -.9 rts -*/-------------------------------------- -* # SKT.GetS (STREAM) -* Read a CR terminated Line in pBuf -* **In:** -* PUSHB = hSocket -* PUSHW = pBuf -* PUSHW = len -* **Out:** -* Y,A = bytes read -*\-------------------------------------- -SKT.GetS sec - .HS 90 bcc -*/-------------------------------------- * # SKT.Read (STREAM) * Read data in pBuf * **In:** @@ -565,9 +336,7 @@ SKT.GetS sec * **Out:** * Y,A = bytes transfered *\-------------------------------------- -SKT.Read clc - ror bTextMode - >PULLW ZPDataOutLen +SKT.Read >PULLW ZPDataOutLen >PULLW ZPDataOutPtr >PULLA @@ -601,6 +370,163 @@ SKT.Read.I jsr SKT.Get.I .92 lda #0 sec .99 rts +*/-------------------------------------- +* # SKT.Write (STREAM) +* Send block of data +* **In:** +* PUSHB = hSocket +* PUSHW = pBuf +* PUSHW = len +* **Out:** +*\-------------------------------------- +SKT.Write >PULLW ZPDataInLen + >PULLW ZPDataInPtr + >PULLA + + jsr SKT.Get.I + bcs .9 + + cmp #S.SOCKET.SOCK.STREAM + bne .99 + + ldy #S.SOCKET.SO + lda (ZPPtrSKT),y + and #S.SOCKET.SO.ACCEPTCONN + bne .99 + + ldy #S.SOCKET.TCP.STATUS + lda (ZPPtrSKT),y + cmp #S.SOCKET.TCP.STATUS.ESTBLSH + bne .91 + + jsr SKT.AddDataToSktOut will call SKT.GetTCB + bcs .90 + + jsr TCP.OUT.I SKT.GetTCB called, try to push, ignore error.... + clc + rts + +.90 lda #0 no data transfered + sec + rts + +.91 lda #MLI.E.IO + sec + rts + +.99 lda #ERR.SKT.BAD + sec +.9 rts +*/-------------------------------------- +* # SKT.Rcvd (DGRAM,RAW) +* **In:** +* A = hSocket +* **Out:** +* A = hFrame +*\-------------------------------------- +SKT.Rcvd jsr SKT.Get.I + bcs .9 + + ldy #S.SOCKET.HQ.TAIL + lda (ZPPtrSKT),y + tax + + ldy #S.SOCKET.HQ.HEAD + cmp (ZPPtrSKT),y + beq .99 + + inc + cmp #S.SOCKET.HQ.MAX + bne .1 + lda #0 + +.1 ldy #S.SOCKET.HQ.TAIL + sta (ZPPtrSKT),y + + txa + clc + adc #S.SOCKET.HQ + tay + lda (ZPPtrSKT),y + clc + rts + +.99 sec +.9 rts +*/-------------------------------------- +* # SKT.Send (DGRAM,RAW) +* **In:** +* A = hSocket +* **Out:** +* A = hFrame +*\-------------------------------------- +SKT.Send >PULLW ZPDataInLen + >PULLW ZPDataInPtr + >PULLA + + jsr SKT.Get.I + bcs .9 + + cmp #S.SOCKET.SOCK.DGRAM + beq SKT.Send.UDP + + cmp #S.SOCKET.SOCK.RAW + beq SKT.Send.RAW + + lda #ERR.SKT.BAD + sec +.9 rts +*-------------------------------------- +SKT.Send.RAW ldy #S.SOCKET.RAW.PROTO + lda (ZPPtrSKT),y + + tax + >LDYA ZPDataInLen + jsr FRM.NewIP + bcs .9 + + jsr SKT.SetFrameOutDstIP + + jsr SKT.CopyDataInToOut + + jmp FRM.SendIP + +.9 rts +*-------------------------------------- +SKT.Send.UDP ldx #S.IP.PROTOCOL.UDP + >LDYA ZPDataInLen + jsr FRM.NewIP + bcs .9 + + jsr SKT.SetFrameOutDstIP + + ldy #S.SOCKET.SRC.PORT + lda (ZPPtrSKT),y + tax + iny + lda (ZPPtrSKT),y + ldy #S.UDP.SRCPORT + sta (ZPFrameOutPtr),y + iny + txa + sta (ZPFrameOutPtr),y + + ldy #S.SOCKET.DST.PORT + lda (ZPPtrSKT),y + tax + iny + lda (ZPPtrSKT),y + ldy #S.UDP.DSTPORT + sta (ZPFrameOutPtr),y + iny + txa + sta (ZPFrameOutPtr),y + + jsr SKT.CopyDataInToOut + + jmp FRM.SendIP + +.9 rts *-------------------------------------- * PRIVATE *-------------------------------------- @@ -754,7 +680,6 @@ SKT.AddDataToSktIn * In: * Src : hInMem/INTAIL * Dst : ZPDataOutPtr/ZPDataOutLen -* bTextMode * Out: * Y,A = bytes read *-------------------------------------- @@ -832,12 +757,6 @@ SKT.GetDataFromSktIn .5 pla get back data.... - bit bTextMode do we need to check CR ? - bpl .6 - - cmp #13 - beq .7 - .6 sta (ZPDataOutPtr),y iny bne .61 @@ -851,10 +770,7 @@ SKT.GetDataFromSktIn .7 pla discard byte counter HI -.8 bit bTextMode here, bacause dst buf full.... - bmi .9 ....and TextMode selected, NO ending CR found - - lda ZPTmpPtr3 Do we have transfered something? +.8 lda ZPTmpPtr3 Do we have transfered something? ora ZPTmpPtr3+1 beq .9 @@ -1138,7 +1054,7 @@ SKT.NewTCB >LDYAI S.TCB txa ldy #S.SOCKET.SQ.hTCB - sta (ZPTmpPtr3),y + sta (ZPPtrSKT),y lda #K.TCP.WSIZE sta SKT.TCBCache+S.TCB.INFREE @@ -1160,7 +1076,7 @@ SKT.NewTCB >LDYAI S.TCB txa ldy #S.SOCKET.SQ.hInMem - sta (ZPTmpPtr3),y + sta (ZPPtrSKT),y >LDYAI K.TCP.WSIZE >SYSCALL getmem @@ -1168,7 +1084,7 @@ SKT.NewTCB >LDYAI S.TCB txa ldy #S.SOCKET.SQ.hOutMem - sta (ZPTmpPtr3),y + sta (ZPPtrSKT),y ldx #S.TCB-1 diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index b92671b0..727ff2ea 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -79,9 +79,10 @@ CS.START cld .DA SKT.Accept .DA SKT.MkNod - .DA SKT.Write .DA SKT.Read - .DA SKT.ReadFrame + .DA SKT.Write + .DA SKT.Rcvd + .DA SKT.Send *-------------------------------------- L.DEVNAME .DA DEVNAME L.MSG.DEV.KO .DA MSG.DEV.KO diff --git a/SBIN/DHCPCLNT.S.txt b/SBIN/DHCPCLNT.S.txt index 793a5650..9d179cdd 100644 --- a/SBIN/DHCPCLNT.S.txt +++ b/SBIN/DHCPCLNT.S.txt @@ -124,7 +124,7 @@ CS.RUN >PUSHW L.Socket CS.RUN.SDISC >PUSHB.G hSocket >PUSHW L.DHCP.DISC >PUSHWI DHCP.DISC.LEN - >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Write + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Send bcc .1 jmp CS.RUN.KO @@ -161,7 +161,7 @@ CS.RUN.SREQ ldx #3 >PUSHB.G hSocket >PUSHW L.DHCP.REQ >PUSHWI DHCP.REQ.LEN - >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Write + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Send bcs CS.RUN.KO lda #S.IPCFG.STATUS.SREQ @@ -214,7 +214,7 @@ CS.RUN.KO pha rts *-------------------------------------- CS.RUN.SKT.RCVD >LDA.G hSocket - >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.ReadFrame + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Rcvd bcs .9 >STA.G hFrame