diff --git a/A2OSX.BOOT.po b/A2OSX.BOOT.po index 790a67d8..a2a2017e 100644 Binary files a/A2OSX.BOOT.po and b/A2OSX.BOOT.po differ diff --git a/A2OSX.DEV.po b/A2OSX.DEV.po index 114eac2c..9aec28ad 100644 Binary files a/A2OSX.DEV.po and b/A2OSX.DEV.po differ diff --git a/A2OSX.SRC.po b/A2OSX.SRC.po index 20ddf70e..db8a71b5 100644 Binary files a/A2OSX.SRC.po and b/A2OSX.SRC.po differ diff --git a/INC/LIBTCPIP.I.txt b/INC/LIBTCPIP.I.txt index 761e5be6..5135b988 100644 --- a/INC/LIBTCPIP.I.txt +++ b/INC/LIBTCPIP.I.txt @@ -44,10 +44,11 @@ LIBTCPIP.HST.GETBYADDR .EQ 30 LIBTCPIP.SKT.New .EQ 32 LIBTCPIP.SKT.CLOSEA .EQ 34 -LIBTCPIP.SKT.GETTABLE .EQ 36 +LIBTCPIP.SKT.GETTABLE .EQ 36 LIBTCPIP.SKT.GETA .EQ 38 -LIBTCPIP.SKT.ACCEPTA .EQ 40 +LIBTCPIP.SKT.AcceptA .EQ 40 +LIBTCPIP.SKT.MkNodA .EQ 42 LIBTCPIP.SKT.Write .EQ 44 LIBTCPIP.SKT.Read .EQ 46 diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index 9c55d8aa..aa576823 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -284,6 +284,19 @@ SKT.AcceptA jsr SKT.GetA.I .99 lda #ERR.SKT.BAD sec .9 rts + +*/-------------------------------------- +* #SKT.MkNodA +* Create a new file from TCP socket +* ##In : +* A = hSocket +* ##Out : +* A = hFile +*\-------------------------------------- +SKT.MkNodA + + sec + rts */-------------------------------------- * #SKT.Write (DGRAM,STREAM,RAW) * Send block of data @@ -292,13 +305,12 @@ SKT.AcceptA jsr SKT.GetA.I * PUSHW = pBuf * PUSHW = len * ##Out : -* A = hFrame *\-------------------------------------- SKT.Write >PULLW ZPDataInLen >PULLW ZPDataInPtr >PULLB hSocket - jsr SKT.GetA.I +SKT.Write.I jsr SKT.GetA.I bcs .9 cmp #S.SOCKET.SOCK.DGRAM @@ -435,10 +447,19 @@ SKT.ReadA jsr SKT.GetA.I * PUSHB = hSocket * PUSHB = Char * ##Out : -* A = char *\-------------------------------------- -SKT.PutC sec - rts +SKT.PutC >PULLB TmpByte + + >PULLB hSocket + + lda #1 + sta ZPDataOutLen + stz ZPDataOutLen+1 + + >LDYA L.TmpByte + >STYA ZPDataOutPtr + + jmp SKT.Write.I */-------------------------------------- * #SKT.PutS (STREAM) * Write Line in pBuf @@ -447,9 +468,17 @@ SKT.PutC sec * PUSHW = PSTR * ##Out : *\-------------------------------------- -SKT.PutS - sec - rts +SKT.PutS >PULLW ZPDataOutPtr + lda (ZPDataOutPtr) + + sta ZPDataOutLen + stz ZPDataOutLen+1 + + inc ZPDataOutPtr + bne .1 + inc ZPDataOutPtr+1 + +.1 jmp SKT.Write.I */-------------------------------------- * #SKT.GetCA (STREAM) * Read a Char From Stream in A @@ -458,8 +487,21 @@ SKT.PutS * ##Out : * A = char *\-------------------------------------- -SKT.GetCA sec - rts +SKT.GetCA sta hSocket + stz bTextMode + + lda #1 + sta ZPDataOutLen + stz ZPDataOutLen+1 + + >LDYA L.TmpByte + >STYA ZPDataOutPtr + + jsr SKT.Read.I + bcs .9 + lda TmpByte + +.9 rts */-------------------------------------- * #SKT.GetS (STREAM) * Read a CR terminated Line in pBuf @@ -488,7 +530,7 @@ SKT.Read clc >PULLW ZPDataOutPtr >PULLB hSocket - jsr SKT.GetA.I +SKT.Read.I jsr SKT.GetA.I bcs .99 cmp #S.SOCKET.SOCK.STREAM bne .90 bad skt diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index 79f3f4e8..de97cd8c 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -65,6 +65,12 @@ TCP.IN jsr IP.FillSKT.TemplateSrcDst bne .6 stx hSocket + + ldy #S.TCP.OPTIONS + lda (ZPFrameInPtr),y + and #S.TCP.OPTIONS.RST RST ? go Kill this socket. + bne TCP.IN.RST + ldy #S.SOCKET.TCP.STATUS lda (ZPPtrSKT),y asl @@ -85,6 +91,11 @@ TCP.IN jsr IP.FillSKT.TemplateSrcDst .9 clc Discard frame rts *-------------------------------------- +TCP.IN.RST txa + jsr SKT.CloseA + clc + rts +*-------------------------------------- TCP.IN.JMP.CLOSED clc rts diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index 36f130b8..6ac7bd19 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -76,8 +76,8 @@ CS.START cld .DA SKT.GETTABLE .DA SKT.GETA - .DA SKT.ACCEPTA - .DA $FFFF + .DA SKT.AcceptA + .DA SKT.MkNodA .DA SKT.Write .DA SKT.Read @@ -95,6 +95,7 @@ L.DNS.MSG .DA DNS.MSG L.ARP.CACHE .DA ARP.CACHE L.DNS.CACHE .DA DNS.CACHE L.SKT.Template .DA SKT.Template +L.TmpByte .DA TmpByte L.TCP.IN.JMP .DA TCP.IN.JMP.CLOSED .DA TCP.IN.JMP.LISTEN .DA TCP.IN.JMP.SYNSENT @@ -294,6 +295,7 @@ DNS.TmpCache .BS S.DNSCACHE ARP.TmpCache .BS S.ARP SKT.Template .BS S.SOCKET.TEMPLATE SKT.TCBCache .BS S.SOCKET +TmpByte .BS 1 TmpDWord .BS 4 TmpOffset .BS 2 hFrameIn .BS 1 diff --git a/SBIN/NFSD.S.txt b/SBIN/NFSD.S.txt index 3c3109f5..51fac642 100644 --- a/SBIN/NFSD.S.txt +++ b/SBIN/NFSD.S.txt @@ -105,7 +105,7 @@ CS.RUN.INIT ldx #3 ldy #hSocket lda (pData),y - >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.ACCEPTA + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.AcceptA bcs .11 >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.GETA >STYA ZPSktPtr diff --git a/SBIN/TELNETD.S.txt b/SBIN/TELNETD.S.txt index 58879ceb..806aafb8 100644 --- a/SBIN/TELNETD.S.txt +++ b/SBIN/TELNETD.S.txt @@ -12,6 +12,12 @@ AUTO 6 .INB /A2OSX.DEV/INC/A2OSX.I .INB /A2OSX.DEV/INC/LIBTCPIP.I *-------------------------------------- +TIMEOUT.MAX .EQ 30 30 sec. +CONN.MAX .EQ 16 +*-------------------------------------- +ZPIPCfgPtr .EQ ZPBIN +ZPSktPtr .EQ ZPBIN+2 +*-------------------------------------- * File Header (16 Bytes) *-------------------------------------- CS.START cld @@ -20,7 +26,7 @@ CS.START cld .DA #1 BIN Layout Version 1 .DA 0 .DA CS.END-CS.START Code Length To Relocate - .DA 0 + .DA DS.END-DS.START Data Segment to Allocate .DA 0 .DA 0 *-------------------------------------- @@ -31,52 +37,236 @@ CS.START cld .DA CS.DOEVENT .DA CS.QUIT L.LIBTCPIP .DA LIBTCPIP +L.Socket .DA Socket +L.MSG.TCPWAIT .DA MSG.TCPWAIT +L.MSG.INITOK .DA MSG.INITOK +L.MSG.TCPIPERR .DA MSG.TCPIPERR +L.MSG.SKTERR .DA MSG.SKTERR +L.MSG.ABORT .DA MSG.ABORT +L.MSG.INCOMING .DA MSG.INCOMING .DA 0 *-------------------------------------- CS.INIT >LDYA L.LIBTCPIP >SYSCALL LoadLibYA - bcs .99 - sta hLIBTCPIP - >PUSHWI S.IP.PROTOCOL.TCP - >PUSHWI TCP.PORT.TELNET - >LIBCALL hLIBTCPIP,LIBTCPIP.NewSrvSocket - bcs .99 - sta hSrvSocket - - clc -.99 rts + lda (pPs) + ora #S.PS.F.EVENT Now accept events + sta (pPs) + clc + rts *-------------------------------------- -CS.RUN >PUSHB hSrvSocket - >LIBCALL hLIBTCPIP,LIBTCPIP.SrvSocketAccept +CS.RUN jsr Init.Timeout + + >LDYA L.MSG.TCPWAIT + >SYSCALL CPrintFYA + +.1 >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ? + bcs .99 + >STYA ZPIPCfgPtr + + lda (ZPIPCfgPtr) Configured ? + bmi CS.RUN.INIT + + >SYSCALL Sleep + jsr Wait.Timeout + bcc .1 + >SYSCALL GetC + bcs .1 + cmp #$03 + bne .1 + jmp CS.RUN.ABORT + +.99 >LDYA L.MSG.TCPIPERR + >SYSCALL CPrintFYA + lda #SYSMGR.ERRSYN + sec + rts + +CS.RUN.INIT ldx #3 + ldy #S.IPCFG.IP+3 +.1 lda (ZPIPCfgPtr),y + sta Socket.Src.Addr,x + dey + dex + bpl .1 + + >PUSHW L.Socket + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.New + bcs .9 + txa + ldy #hSrvSocket + sta (pData),y + + >LDYA L.MSG.INITOK + >SYSCALL CPrintFYA + +.2 >SYSCALL Sleep + jsr CS.RUN.SERVER + bcs CS.RUN.ERR + + ldy #SktIndex + lda (pData),y + tay + lda (pData),y hSockets + + beq .3 + +* jsr CS.RUN.CLIENT + +.3 ldy #SktIndex + lda (pData),y + inc + cmp #CONN.MAX + bne .4 + lda #0 + +.4 sta (pData),y + + bra .2 + +.9 >LDYA L.MSG.SKTERR + >SYSCALL CPrintFYA + lda #SYSMGR.ERRSYN + sec + rts + +CS.RUN.ABORT >LDYA L.MSG.ABORT + >SYSCALL CPrintFYA + lda #0 + +CS.RUN.ERR sec + rts +*-------------------------------------- +CS.RUN.SERVER ldy #hSrvSocket + lda (pData),y + + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.AcceptA bcs .8 - + pha - + ldy #hSockets + ldx #CONN.MAX +.1 lda (pData),y + beq .2 + iny + dex + bne .1 + + pla + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.CloseA + bra .8 + +.2 pla + sta (pData),y + + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.GetA + >STYA ZPSktPtr + + ldx #3 + ldy #S.SOCKET.DST.ADDR+3 + +.3 >PUSHB (ZPSktPtr),y + dey + dex + bpl .3 + + >LDYA L.MSG.INCOMING + >SYSCALL CPrintFYA +.8 clc +.9 rts +*-------------------------------------- +CS.RUN.CLIENT >PUSHA hSocket + sta .1+1 + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.GetCA + bcs .8 + sta .2+1 + + >SYSCALL PutCA + + +.1 lda #$ff + >PUSHA + +.2 lda #$ff + >PUSHA + + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.PutC + .8 clc rts *-------------------------------------- -CS.DOEVENT clc +CS.DOEVENT sec rts *-------------------------------------- -CS.QUIT >PUSHB hSrvSocket - >LIBCALL hLIBTCPIP,LIBTCPIP.CloseSocket +CS.QUIT ldx #CONN.MAX + ldy #hSockets + +.1 lda (pData),y + beq .2 + + phx + phy + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.CLOSEA + ply + plx + +.2 iny + dex + bne .1 + + ldy #hSrvSocket + lda (pData),y + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.CLOSEA - lda hLIBTCPIP >SYSCALL UnloadLibA clc rts *-------------------------------------- +Init.Timeout ldy #TimeOut + lda #TIMEOUT.MAX + sta (pData),y + rts +*-------------------------------------- +Wait.TimeOut sec + ldy #TimeOut + lda (pData),y + beq .9 + clc +.9 rts +*-------------------------------------- CS.END *-------------------------------------- LIBTCPIP >PSTR "libtcpip.o" +MSG.TCPWAIT >CSTR "TELNETD:Waiting for TCP/IP initializing...\r\n" +MSG.INITOK >CSTR "TELNETD:Init Ok, Listening.\r\n" +MSG.TCPIPERR >CSTR "TELNETD:TCP/IP Not initialized properly\r\n" +MSG.SKTERR >CSTR "TELNETD:Listen Error\r\n" +MSG.ABORT >CSTR "TELNETD:User Aborted\r\n" +MSG.INCOMING >CSTR "TELNETD:Incoming Connection From : %d.%d.%d.%d\r\n" hLIBTCPIP .BS 1 -hSrvSocket .BS 1 *-------------------------------------- - +Socket .DA #S.SOCKET.SOCK.STREAM + .DA #S.SOCKET.SO.ACCEPTCONN + .DA #S.SOCKET.TCP.STATUS.LISTEN + .BS 1 +Socket.Src.Addr .BS 4 +Socket.Src.Port .DA 23 +Socket.Dst.Addr .BS 4 +Socket.Dst.Port .BS 2 +*-------------------------------------- + .DUMMY + .OR 0 +DS.START +hSockets .BS CONN.MAX pData +SktIndex .BS 1 +hSrvSocket .BS 1 +TimeOut .BS 1 +DS.END + .ED +*-------------------------------------- MAN SAVE SBIN/TELNETD.S ASM diff --git a/SYS/KERNEL.S.DEV.txt b/SYS/KERNEL.S.DEV.txt index 6d5fdb92..dadb965f 100644 --- a/SYS/KERNEL.S.DEV.txt +++ b/SYS/KERNEL.S.DEV.txt @@ -1,6 +1,6 @@ PR#3 PREFIX /A2OSX.SRC -NEW +LOMEM $900 INC 1 AUTO 6 .LIST OFF @@ -100,7 +100,7 @@ K.GetDevStatusA jsr K.GetDevByIDA jmp (ZPPtr1) */-------------------------------------- * #MkNodYA -* return a S.FILE for a given Device NAME +* return a hFile for a given Device Name * ##IN: * Y,A=DevName * ##OUT: @@ -164,7 +164,7 @@ K.MkNodYA jsr K.GetDevByNameYA Ptr1=NAME .4 jmp $ffff */-------------------------------------- * #MkNodA -* return a S.FILE for a given Socket +* return a hFile for a given Socket * ##IN: * A=hSocket * ##OUT: @@ -186,7 +186,7 @@ K.MKFIFO >PUSHWI 256 jsr K.GetMem bcs .99 - phx save FIFO buffer + stx .1+1 save FIFO buffer >PUSHWI S.NODE.FIFO >PUSHBI S.MEM.F.INIT0 @@ -201,15 +201,14 @@ K.MKFIFO >PUSHWI 256 sta (ZPPtr1),y iny S.NODE.FIFO.hMem - pla +.1 lda #$ff Self Modified sta (ZPPtr1),y txa clc rts -.9 plx get back FIFO buffer - pha save error code - txa +.9 pha save error code + lda .1+1 get back FIFO buffer jsr K.FreeMemA pla sec diff --git a/_Docs/KERNEL.md b/_Docs/KERNEL.md index 77aa512c..c0956539 100644 --- a/_Docs/KERNEL.md +++ b/_Docs/KERNEL.md @@ -159,7 +159,7 @@ Prints Pascal/C-Style String + Y,A = Ptr to S.DEVINFO #MkNodYA -return a S.FILE for a given Device NAME +return a hFile for a given Device Name ##IN: + Y,A=DevName @@ -169,7 +169,7 @@ return a S.FILE for a given Device NAME + A = hFILE #MkNodA -return a S.FILE for a given Socket +return a hFile for a given Socket ##IN: + A=hSocket diff --git a/_Docs/LIBTCPIP.md b/_Docs/LIBTCPIP.md index a0d8f95f..5e7283f6 100644 --- a/_Docs/LIBTCPIP.md +++ b/_Docs/LIBTCPIP.md @@ -110,6 +110,15 @@ ##Out : + A = hSocket +#SKT.MkNodA ++ Create a new file from TCP socket + +##In : ++ A = hSocket + +##Out : ++ A = hFile + #SKT.Write (DGRAM,STREAM,RAW) + Send block of data @@ -119,7 +128,6 @@ + PUSHW = len ##Out : -+ A = hFrame #SKT.ReadA (DGRAM,RAW) @@ -137,7 +145,6 @@ + PUSHB = Char ##Out : -+ A = char #SKT.PutS (STREAM) + Write Line in pBuf