From 231e530537b85912e5e97d4e4a79da6066d3910e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Mon, 8 Oct 2018 17:41:00 +0200 Subject: [PATCH] Kernel 0.9.2 --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes A2osX.STARTUP.txt | 2 +- INC/A2osX.I.txt | 23 ++-- INC/LIBTCPIP.I.txt | 2 +- LIB/LIBTCPIP.S.CFG.txt | 39 ++----- LIB/LIBTCPIP.S.DNS.txt | 38 +++--- LIB/LIBTCPIP.S.FRM.txt | 6 +- LIB/LIBTCPIP.S.ICMP.txt | 60 +++------- LIB/LIBTCPIP.S.IP.txt | 33 ------ LIB/LIBTCPIP.S.SKT.txt | 245 ++++++++++++++++++--------------------- LIB/LIBTCPIP.S.TCP.txt | 50 ++++---- LIB/LIBTCPIP.S.UDP.txt | 2 +- LIB/LIBTCPIP.S.txt | 10 +- SYS/KERNEL.S.IO.txt | 6 +- 15 files changed, 207 insertions(+), 309 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 6ec965e47669ca1ae7ee39d56f02cb01fad2e2a2..4986cbad4ee66ff6828bcbbe770541faa4d0ebd9 100644 GIT binary patch delta 7750 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 D1w$r< delta 7655 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 diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index f8bcad53d9f780f9e792fe57b5c1c0836504046f..6a5bd45f386b8873ce7bb8390ff93a538ffa639f 100644 GIT binary patch delta 27473 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%0Dhf(obF?6RdybZuh#LTf^~mQ@ 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 diff --git a/A2osX.STARTUP.txt b/A2osX.STARTUP.txt index 4684b7af..a762a5f8 100644 --- a/A2osX.STARTUP.txt +++ b/A2osX.STARTUP.txt @@ -16,7 +16,7 @@ INSDRV UTHERNET.DRV 00:0E:3A:12:34:56 #INSDRV LANCEGS.DRV #INSDRV UTHER2.AI.DRV 00:08:DC:12:34:56 #INSDRV UTHERNET2.DRV 00:08:DC:12:34:56 -#STARTPROC TCPIP +#STARTPROC TCPIPD #STARTPROC DHCPCLNT #STARTPROC TELNETD #STARTPROC HTTPD diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index ae1b7f2e..1912dd5a 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -430,14 +430,23 @@ S.FD.DEV .EQ 16 *-------------------------------------- * S.FD.LNK *-------------------------------------- -S.FD.SOCK.HSKT .EQ 2 -S.FD.SOCK.OPEN .EQ 3 -S.FD.SOCK.CLOSE .EQ 4 -S.FD.SOCK.READ .EQ 5 -S.FD.SOCK.WRITE .EQ 6 -S.FD.SOCK.STATUS .EQ 7 +S.FD.DSOCK.HSKT .EQ 2 +S.FD.DSOCK.OPEN .EQ 3 +S.FD.DSOCK.CLOSE .EQ 4 +S.FD.DSOCK.READ .EQ 5 +S.FD.DSOCK.WRITE .EQ 6 +S.FD.DSOCK.STATUS .EQ 7 * -S.FD.SOCK .EQ 8 +S.FD.DSOCK .EQ 8 +*-------------------------------------- +S.FD.SSOCK.HSKT .EQ 2 +S.FD.SSOCK.OPEN .EQ 3 +S.FD.SSOCK.CLOSE .EQ 4 +S.FD.SSOCK.READ .EQ 5 +S.FD.SSOCK.WRITE .EQ 6 +S.FD.SSOCK.STATUS .EQ 7 +* +S.FD.SSOCK .EQ 8 *-------------------------------------- S.FD.PIPE.S .EQ 2 S.FD.PIPE.S.ROpened .EQ %00000001 diff --git a/INC/LIBTCPIP.I.txt b/INC/LIBTCPIP.I.txt index f9375e12..6f5a4f71 100644 --- a/INC/LIBTCPIP.I.txt +++ b/INC/LIBTCPIP.I.txt @@ -183,7 +183,7 @@ S.SOCKET.TCP.OUTFREE .EQ S.SOCKET+16 S.SOCKET.TCP.OUTTOSEND .EQ S.SOCKET+18 S.SOCKET.TCP.OUTUSED .EQ S.SOCKET+20 * -S.SOCKET.TCP.INLASTSEQNUM .EQ S.SOCKET+22 Rcvd:Last SEQ received from remote +S.SOCKET.TCP.INLASTSEQNUM .EQ S.SOCKET+22 Recv:Last SEQ received from remote S.SOCKET.TCP.OUTSEQNUM .EQ S.SOCKET+26 Send:SEQ sent not yet ACKed (retransmit) S.SOCKET.TCP.OUTNEXTSEQ .EQ S.SOCKET+30 Send:Next SEQ to send diff --git a/LIB/LIBTCPIP.S.CFG.txt b/LIB/LIBTCPIP.S.CFG.txt index df99c45f..14d2e481 100644 --- a/LIB/LIBTCPIP.S.CFG.txt +++ b/LIB/LIBTCPIP.S.CFG.txt @@ -490,18 +490,13 @@ SET.IPCFG.I >LDYA L.DCB.NIC >SYSCALL IOCTL bcs .9 -.2 lda hDNSSocket1 +.2 lda hDNSSocket beq .3 jsr SKT.Close - stz hDNSSocket1 + stz hDNSSocket -.3 lda hDNSSocket2 - beq .4 - jsr SKT.Close - stz hDNSSocket2 - -.4 lda IPCFG+S.IPCFG.DNS1 - beq .6 +.3 lda IPCFG+S.IPCFG.DNS1 + beq .8 ldx #3 @@ -512,31 +507,13 @@ SET.IPCFG.I >LDYA L.DCB.NIC stz DNS.SOCKET.SP stz DNS.SOCKET.SP+1 - + >DEBUG >PUSHW L.DNS.SOCKET - jsr SKT.New + lda #S.SOCKET.T.DGRAM + jsr SKT.Socket bcs .9 - sta hDNSSocket1 - -.6 lda IPCFG+S.IPCFG.DNS2 - beq .8 - - ldx #3 - -.7 lda IPCFG+S.IPCFG.DNS2,x - sta DNS.SOCKET.DA,x - dex - bpl .7 - - stz DNS.SOCKET.SP - stz DNS.SOCKET.SP+1 - - >PUSHW L.DNS.SOCKET - jsr SKT.New - bcs .9 - - sta hDNSSocket2 + sta hDNSSocket .8 clc .9 rts diff --git a/LIB/LIBTCPIP.S.DNS.txt b/LIB/LIBTCPIP.S.DNS.txt index 73d149e2..073135d7 100644 --- a/LIB/LIBTCPIP.S.DNS.txt +++ b/LIB/LIBTCPIP.S.DNS.txt @@ -53,7 +53,7 @@ DNS.Query.I jsr DNS.FIND.BY.NAME sec rts *-------------------------------------- -DNS.REQUEST lda hDNSSocket1 +DNS.REQUEST lda hDNSSocket beq .99 jsr DNS.CSTR2DNS Y=DNS string len+0 @@ -94,30 +94,25 @@ DNS.REQUEST lda hDNSSocket1 jsr DNS.ADD.I bcs .9 - lda hDNSSocket1 jsr DNS.REQUEST.SEND bcs .99 - - lda hDNSSocket2 - beq .8 - - jsr DNS.REQUEST.SEND - bcc .8 + + lda #ERR.DNS.PENDING + sec + rts .99 lda #ERR.DNS.ERROR .9 sec rts - -.8 lda #ERR.DNS.PENDING - sec - rts *-------------------------------------- DNS.REQUEST.SEND - pha + +* TODO : >PUSHW L.SOCKADDR.DNS1....DNS2 + >PUSHW DNS.MSG.LEN >PUSHW L.DNS.MSG - pla - jmp SKT.Send + lda hDNSSocket + jmp SKT.SendTo *-------------------------------------- DNS.CSTR2DNS lda (ZPPtrDNS) beq .9 @@ -406,20 +401,13 @@ DNS.FREE ldy #S.DNSCACHE.hNAME sta (ZPCachePtr) rts *-------------------------------------- -DNS.POLL lda hDNSSocket1 +DNS.POLL lda hDNSSocket beq .8 - jsr SKT.Rcvd - bcs .1 - - jsr DNS.DecodeMsg - -.1 lda hDNSSocket2 - beq .8 - jsr SKT.Rcvd + jsr SKT.Recv bcs .8 jsr DNS.DecodeMsg - + .8 clc rts *-------------------------------------- diff --git a/LIB/LIBTCPIP.S.FRM.txt b/LIB/LIBTCPIP.S.FRM.txt index 17b218a1..56bc8f88 100644 --- a/LIB/LIBTCPIP.S.FRM.txt +++ b/LIB/LIBTCPIP.S.FRM.txt @@ -3,7 +3,7 @@ PREFIX /A2OSX.BUILD AUTO 4,1 .LIST OFF *-------------------------------------- -FRM.GetTargetSKT +FRM.GetTargetSKT.TCPUDP ldy #S.TCPUDP.SRCPORT lda (ZPFrameInPtr),y sta SKT.REM.ADDR+S.SOCKADDR.PORT+1 @@ -18,8 +18,10 @@ FRM.GetTargetSKT lda (ZPFrameInPtr),y sta SKT.LOC.ADDR+S.SOCKADDR.PORT +FRM.GetTargetSKT.RAW ldy #S.IP.SRC+3 ldx #3 + .1 lda (ZPFrameInPtr),y sta SKT.REM.ADDR+S.SOCKADDR.ADDR,x dey @@ -28,11 +30,13 @@ FRM.GetTargetSKT ldy #S.IP.DST+3 ldx #3 + .2 lda (ZPFrameInPtr),y sta SKT.LOC.ADDR+S.SOCKADDR.ADDR,x dey dex bpl .2 + rts *-------------------------------------- * FRM.NewIP diff --git a/LIB/LIBTCPIP.S.ICMP.txt b/LIB/LIBTCPIP.S.ICMP.txt index 7a32f109..3a9afa0a 100644 --- a/LIB/LIBTCPIP.S.ICMP.txt +++ b/LIB/LIBTCPIP.S.ICMP.txt @@ -51,62 +51,34 @@ ICMP.IN.EXIT lda hFrameIn stz hFrameIn .8 rts *-------------------------------------- -ICMP.IN.ECHOREP jsr IP.FillSKT.TemplateSrcDstIP - - lda #S.IP.PROTOCOL.ICMP - sta SKT.Template+S.SOCKET.RAW.PROTO +ICMP.IN.ECHOREP jsr FRM.GetTargetSKT.RAW ldy #S.ICMP.IDENTIFIER lda (ZPFrameInPtr),y - sta SKT.Template+S.SOCKET.REM.PORT+1 + sta SKT.LOC.ADDR+S.SOCKADDR.PORT+1 iny lda (ZPFrameInPtr),y - sta SKT.Template+S.SOCKET.REM.PORT + sta SKT.LOC.ADDR+S.SOCKADDR.PORT - lda hSocketTable - >SYSCALL GetMemPtr + jsr SKT.FindMatchingLocRem + bcs .9 + >STYA ZPPtrSKT - ldx #0 - -.3 lda (ZPPtrSKT) - beq .7 - cmp #S.SOCKET.T.RAW - bne .7 - - ldy #S.SOCKET.LOC.ADDR - -.4 lda (ZPPtrSKT),y - cmp SKT.Template,y - bne .7 - iny - cpy #S.SOCKET.LOC.PORT - bne .5 - - iny - iny - -.5 cpy #S.SOCKET.REM.PORT Compare SRC.ADDR,DST.ADDR,DST.PORT - bne .4 - + ldy #S.SOCKET.PROTO + lda (ZPPtrSKT),y + ldy #S.SOCKET.PROTO + lda (ZPPtrSKT),y + cmp #S.IP.PROTOCOL.ICMP + bne .9 + lda hFrameIn jsr SKT.AddToQueueA - bcs ICMP.IN.EXIT Q full, discard... - - rts DO NOT Discard this queued frame - -.7 lda ZPPtrSKT - clc - adc #S.SOCKET - sta ZPPtrSKT bcc .8 - inc ZPPtrSKT+1 -.8 inx - cpx #K.SKTTABLE.SIZE - bne .3 - - bra ICMP.IN.EXIT +.9 lda hFrameIn Q full, discard... + >SYSCALL FreeMem +.8 rts *-------------------------------------- MAN SAVE /A2OSX.SRC/LIB/LIBTCPIP.S.ICMP diff --git a/LIB/LIBTCPIP.S.IP.txt b/LIB/LIBTCPIP.S.IP.txt index a886c1db..47bbf200 100644 --- a/LIB/LIBTCPIP.S.IP.txt +++ b/LIB/LIBTCPIP.S.IP.txt @@ -186,39 +186,6 @@ IP.AddSrcDstIPToChecksum rts *-------------------------------------- -IP.FillSKT.TemplateSrcDstIPP - ldy #S.TCPUDP.SRCPORT - lda (ZPFrameInPtr),y - sta SKT.Template+S.SOCKET.REM.PORT+1 - iny - lda (ZPFrameInPtr),y - sta SKT.Template+S.SOCKET.REM.PORT - - iny #S.TCPUDP.DSTPORT - lda (ZPFrameInPtr),y - sta SKT.Template+S.SOCKET.LOC.PORT+1 - iny - lda (ZPFrameInPtr),y - sta SKT.Template+S.SOCKET.LOC.PORT -*-------------------------------------- -IP.FillSKT.TemplateSrcDstIP - ldy #S.IP.SRC+3 - ldx #3 -.1 lda (ZPFrameInPtr),y - sta SKT.Template+S.SOCKET.REM.ADDR,x - dey - dex - bpl .1 - - ldy #S.IP.DST+3 - ldx #3 -.2 lda (ZPFrameInPtr),y - sta SKT.Template+S.SOCKET.LOC.ADDR,x - dey - dex - bpl .2 - rts -*-------------------------------------- IP.SetDestMAC ldy #S.IP.DST lda (ZPFrameOutPtr),y iny diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index a1b6df07..1fb8783f 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -37,7 +37,7 @@ SKT.Socket.DSOCK sta FD.DSOCK+S.SOCKET.PROTO ICMP,UDP,TCP lda #0 Y = socket.size >SYSCALL GetMem0 - bcs .99 + bcs .9 >STYA ZPTmpPtr1 stx FD.DSOCK+S.FD.DSOCK.HSKT @@ -63,7 +63,7 @@ SKT.Socket.STREAM sta FD.SSOCK+S.SOCKET.PROTO ICMP,UDP,TCP lda #0 Y = socket.size >SYSCALL GetMem0 - bcs .99 + bcs .9 >STYA ZPTmpPtr1 stx FD.SSOCK+S.FD.SSOCK.HSKT @@ -498,8 +498,9 @@ SKT.Write >SYSCALL GetMemPtr */-------------------------------------- * # SKT.Recv (RAW,DGRAM,SEQPACKET) * # SKT.RecvFrom (RAW,DGRAM,SEQPACKET) -* hMem recv(hFD fd); -* hMem recvfrom(hFD fd, struct sockaddr *addr); +* ## C +* `hMem recv(hFD fd);` +* `hMem recvfrom(hFD fd, struct sockaddr *addr);` * ## ASM * **In:** * `>PUSHW addr` (RecvFrom) @@ -602,7 +603,7 @@ SKT.Send clc tax jmp (J.SKT.send,x) *-------------------------------------- -SKT.Send.RAW ldy #S.SOCKET.RAW.PROTO +SKT.Send.RAW ldy #S.SOCKET.PROTO lda (ZPPtrSKT),y tax @@ -629,7 +630,7 @@ SKT.Send.DGRAM.8 *-------------------------------------- SKT.Send.STREAM lda #ERR.SKT.BAD sec - rts +SKT.Send.9 rts *-------------------------------------- SKT.Send.SEQPACKET bra * @@ -816,9 +817,9 @@ SKT.AddToQueueA sta .2+1 * Dst : hInMem/INHEAD *-------------------------------------- SKT.AddDataToSktIn - ldx SKT.TCBCache+S.SOCKET.TCP.INFREE + ldx SKT.TmpCache+S.SOCKET.TCP.INFREE cpx ZPDataInLen - lda SKT.TCBCache+S.SOCKET.TCP.INFREE+1 + lda SKT.TmpCache+S.SOCKET.TCP.INFREE+1 sbc ZPDataInLen+1 bcc .9 Not enough room in Q @@ -826,7 +827,7 @@ SKT.AddDataToSktIn ldx #3 .10 lda (ZPFrameInPtr),y - eor SKT.TCBCache+S.SOCKET.TCP.INLASTSEQNUM,x + eor SKT.TmpCache+S.SOCKET.TCP.INLASTSEQNUM,x bne .9 dey dex @@ -839,11 +840,11 @@ SKT.AddDataToSktIn lda ZPTmpPtr1 clc - adc SKT.TCBCache+S.SOCKET.TCP.INHEAD + adc SKT.TmpCache+S.SOCKET.TCP.INHEAD sta ZPTmpPtr2 lda ZPTmpPtr1+1 - adc SKT.TCBCache+S.SOCKET.TCP.INHEAD+1 + adc SKT.TmpCache+S.SOCKET.TCP.INHEAD+1 sta ZPTmpPtr2+1 Make ZPTmpPtr2=base+Tail lda ZPDataInLen @@ -874,13 +875,13 @@ SKT.AddDataToSktIn bne .4 inc ZPTmpPtr2+1 -.4 inc SKT.TCBCache+S.SOCKET.TCP.INHEAD +.4 inc SKT.TmpCache+S.SOCKET.TCP.INHEAD bne .1 - inc SKT.TCBCache+S.SOCKET.TCP.INHEAD+1 - lda SKT.TCBCache+S.SOCKET.TCP.INHEAD+1 + inc SKT.TmpCache+S.SOCKET.TCP.INHEAD+1 + lda SKT.TmpCache+S.SOCKET.TCP.INHEAD+1 cmp /K.TCP.WSIZE bne .1 - stz SKT.TCBCache+S.SOCKET.TCP.INHEAD+1 + stz SKT.TmpCache+S.SOCKET.TCP.INHEAD+1 lda ZPTmpPtr1 Dst Ptr=Buffer Base sta ZPTmpPtr2 @@ -891,37 +892,37 @@ SKT.AddDataToSktIn .9 sec rts -.8 lda SKT.TCBCache+S.SOCKET.TCP.INFREE +.8 lda SKT.TmpCache+S.SOCKET.TCP.INFREE sec sbc ZPDataInLen - sta SKT.TCBCache+S.SOCKET.TCP.INFREE + sta SKT.TmpCache+S.SOCKET.TCP.INFREE - lda SKT.TCBCache+S.SOCKET.TCP.INFREE+1 + lda SKT.TmpCache+S.SOCKET.TCP.INFREE+1 sbc ZPDataInLen+1 - sta SKT.TCBCache+S.SOCKET.TCP.INFREE+1 + sta SKT.TmpCache+S.SOCKET.TCP.INFREE+1 - lda SKT.TCBCache+S.SOCKET.TCP.INUSED + lda SKT.TmpCache+S.SOCKET.TCP.INUSED clc adc ZPDataInLen - sta SKT.TCBCache+S.SOCKET.TCP.INUSED + sta SKT.TmpCache+S.SOCKET.TCP.INUSED - lda SKT.TCBCache+S.SOCKET.TCP.INUSED+1 + lda SKT.TmpCache+S.SOCKET.TCP.INUSED+1 adc ZPDataInLen+1 - sta SKT.TCBCache+S.SOCKET.TCP.INUSED+1 + sta SKT.TmpCache+S.SOCKET.TCP.INUSED+1 clc - lda SKT.TCBCache+S.SOCKET.TCP.INLASTSEQNUM+3 + lda SKT.TmpCache+S.SOCKET.TCP.INLASTSEQNUM+3 adc ZPDataInLen - sta SKT.TCBCache+S.SOCKET.TCP.INLASTSEQNUM+3 + sta SKT.TmpCache+S.SOCKET.TCP.INLASTSEQNUM+3 - lda SKT.TCBCache+S.SOCKET.TCP.INLASTSEQNUM+2 + lda SKT.TmpCache+S.SOCKET.TCP.INLASTSEQNUM+2 adc ZPDataInLen+1 - sta SKT.TCBCache+S.SOCKET.TCP.INLASTSEQNUM+2 + sta SKT.TmpCache+S.SOCKET.TCP.INLASTSEQNUM+2 bcc .80 - inc SKT.TCBCache+S.SOCKET.TCP.INLASTSEQNUM+1 + inc SKT.TmpCache+S.SOCKET.TCP.INLASTSEQNUM+1 bne .80 - inc SKT.TCBCache+S.SOCKET.TCP.INLASTSEQNUM + inc SKT.TmpCache+S.SOCKET.TCP.INLASTSEQNUM .80 clc rts @@ -935,8 +936,8 @@ SKT.AddDataToSktIn *-------------------------------------- SKT.GetDataFromSktIn jsr SKT.GetTCB - lda SKT.TCBCache+S.SOCKET.TCP.INUSED - ora SKT.TCBCache+S.SOCKET.TCP.INUSED+1 + lda SKT.TmpCache+S.SOCKET.TCP.INUSED + ora SKT.TmpCache+S.SOCKET.TCP.INUSED+1 bne .10 sec rts A=0,NO DATA @@ -948,11 +949,11 @@ SKT.GetDataFromSktIn lda ZPTmpPtr1 clc - adc SKT.TCBCache+S.SOCKET.TCP.INTAIL + adc SKT.TmpCache+S.SOCKET.TCP.INTAIL sta ZPTmpPtr2 lda ZPTmpPtr1+1 - adc SKT.TCBCache+S.SOCKET.TCP.INTAIL+1 + adc SKT.TmpCache+S.SOCKET.TCP.INTAIL+1 sta ZPTmpPtr2+1 lda ZPDataInLen @@ -976,25 +977,25 @@ SKT.GetDataFromSktIn pha -.2 lda SKT.TCBCache+S.SOCKET.TCP.INTAIL - eor SKT.TCBCache+S.SOCKET.TCP.INHEAD +.2 lda SKT.TmpCache+S.SOCKET.TCP.INTAIL + eor SKT.TmpCache+S.SOCKET.TCP.INHEAD bne .3 - lda SKT.TCBCache+S.SOCKET.TCP.INTAIL+1 - eor SKT.TCBCache+S.SOCKET.TCP.INHEAD+1 + lda SKT.TmpCache+S.SOCKET.TCP.INTAIL+1 + eor SKT.TmpCache+S.SOCKET.TCP.INHEAD+1 beq .7 no more data.... .3 lda (ZPTmpPtr2) pha - inc SKT.TCBCache+S.SOCKET.TCP.INTAIL + inc SKT.TmpCache+S.SOCKET.TCP.INTAIL bne .4 - inc SKT.TCBCache+S.SOCKET.TCP.INTAIL+1 - lda SKT.TCBCache+S.SOCKET.TCP.INTAIL+1 + inc SKT.TmpCache+S.SOCKET.TCP.INTAIL+1 + lda SKT.TmpCache+S.SOCKET.TCP.INTAIL+1 cmp /K.TCP.WSIZE bne .4 - stz SKT.TCBCache+S.SOCKET.TCP.INTAIL+1 + stz SKT.TmpCache+S.SOCKET.TCP.INTAIL+1 lda ZPTmpPtr1 sta ZPTmpPtr2 lda ZPTmpPtr1+1 @@ -1024,37 +1025,37 @@ SKT.GetDataFromSktIn ora ZPTmpPtr3+1 beq .9 - lda SKT.TCBCache+S.SOCKET.TCP.INFREE + lda SKT.TmpCache+S.SOCKET.TCP.INFREE clc adc ZPTmpPtr3 - sta SKT.TCBCache+S.SOCKET.TCP.INFREE + sta SKT.TmpCache+S.SOCKET.TCP.INFREE - lda SKT.TCBCache+S.SOCKET.TCP.INFREE+1 + lda SKT.TmpCache+S.SOCKET.TCP.INFREE+1 adc ZPTmpPtr3+1 - sta SKT.TCBCache+S.SOCKET.TCP.INFREE+1 + sta SKT.TmpCache+S.SOCKET.TCP.INFREE+1 - lda SKT.TCBCache+S.SOCKET.TCP.INUSED + lda SKT.TmpCache+S.SOCKET.TCP.INUSED sec sbc ZPTmpPtr3 - sta SKT.TCBCache+S.SOCKET.TCP.INUSED + sta SKT.TmpCache+S.SOCKET.TCP.INUSED - lda SKT.TCBCache+S.SOCKET.TCP.INUSED+1 + lda SKT.TmpCache+S.SOCKET.TCP.INUSED+1 sbc ZPTmpPtr3+1 - sta SKT.TCBCache+S.SOCKET.TCP.INUSED+1 + sta SKT.TmpCache+S.SOCKET.TCP.INUSED+1 - lda SKT.TCBCache+S.SOCKET.TCP.OUTACKNUM+3 + lda SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM+3 clc adc ZPTmpPtr3 - sta SKT.TCBCache+S.SOCKET.TCP.OUTACKNUM+3 + sta SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM+3 - lda SKT.TCBCache+S.SOCKET.TCP.OUTACKNUM+2 + lda SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM+2 adc ZPTmpPtr3+1 - sta SKT.TCBCache+S.SOCKET.TCP.OUTACKNUM+2 + sta SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM+2 bcc .80 - inc SKT.TCBCache+S.SOCKET.TCP.OUTACKNUM+1 + inc SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM+1 bne .80 - inc SKT.TCBCache+S.SOCKET.TCP.OUTACKNUM + inc SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM .80 jsr SKT.StoreTCB @@ -1080,9 +1081,9 @@ SKT.GetDataFromSktIn *-------------------------------------- SKT.AddDataToSktOut jsr SKT.GetTCB - ldx SKT.TCBCache+S.SOCKET.TCP.OUTFREE + ldx SKT.TmpCache+S.SOCKET.TCP.OUTFREE cpx ZPDataInLen - lda SKT.TCBCache+S.SOCKET.TCP.OUTFREE+1 + lda SKT.TmpCache+S.SOCKET.TCP.OUTFREE+1 sbc ZPDataInLen+1 bcc .9 Not enough room in Q @@ -1093,11 +1094,11 @@ SKT.AddDataToSktOut lda ZPTmpPtr1 clc - adc SKT.TCBCache+S.SOCKET.TCP.OUTHEAD + adc SKT.TmpCache+S.SOCKET.TCP.OUTHEAD sta ZPTmpPtr2 lda ZPTmpPtr1+1 - adc SKT.TCBCache+S.SOCKET.TCP.OUTHEAD+1 + adc SKT.TmpCache+S.SOCKET.TCP.OUTHEAD+1 sta ZPTmpPtr2+1 Make ZPTmpPtr2=base+Tail lda ZPDataInLen @@ -1128,13 +1129,13 @@ SKT.AddDataToSktOut bne .4 inc ZPTmpPtr2+1 -.4 inc SKT.TCBCache+S.SOCKET.TCP.OUTHEAD +.4 inc SKT.TmpCache+S.SOCKET.TCP.OUTHEAD bne .1 - inc SKT.TCBCache+S.SOCKET.TCP.OUTHEAD+1 - lda SKT.TCBCache+S.SOCKET.TCP.OUTHEAD+1 + inc SKT.TmpCache+S.SOCKET.TCP.OUTHEAD+1 + lda SKT.TmpCache+S.SOCKET.TCP.OUTHEAD+1 cmp /K.TCP.WSIZE bne .1 - stz SKT.TCBCache+S.SOCKET.TCP.OUTHEAD+1 + stz SKT.TmpCache+S.SOCKET.TCP.OUTHEAD+1 lda ZPTmpPtr1 Dst Ptr=Buffer Base sta ZPTmpPtr2 @@ -1145,29 +1146,29 @@ SKT.AddDataToSktOut .9 sec rts -.8 lda SKT.TCBCache+S.SOCKET.TCP.OUTFREE +.8 lda SKT.TmpCache+S.SOCKET.TCP.OUTFREE sec sbc ZPDataInLen - sta SKT.TCBCache+S.SOCKET.TCP.OUTFREE - lda SKT.TCBCache+S.SOCKET.TCP.OUTFREE+1 + sta SKT.TmpCache+S.SOCKET.TCP.OUTFREE + lda SKT.TmpCache+S.SOCKET.TCP.OUTFREE+1 sbc ZPDataInLen+1 - sta SKT.TCBCache+S.SOCKET.TCP.OUTFREE+1 + sta SKT.TmpCache+S.SOCKET.TCP.OUTFREE+1 - lda SKT.TCBCache+S.SOCKET.TCP.OUTUSED + lda SKT.TmpCache+S.SOCKET.TCP.OUTUSED clc adc ZPDataInLen - sta SKT.TCBCache+S.SOCKET.TCP.OUTUSED - lda SKT.TCBCache+S.SOCKET.TCP.OUTUSED+1 + sta SKT.TmpCache+S.SOCKET.TCP.OUTUSED + lda SKT.TmpCache+S.SOCKET.TCP.OUTUSED+1 adc ZPDataInLen+1 - sta SKT.TCBCache+S.SOCKET.TCP.OUTUSED+1 + sta SKT.TmpCache+S.SOCKET.TCP.OUTUSED+1 - lda SKT.TCBCache+S.SOCKET.TCP.OUTTOSEND + lda SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND clc adc ZPDataInLen - sta SKT.TCBCache+S.SOCKET.TCP.OUTTOSEND - lda SKT.TCBCache+S.SOCKET.TCP.OUTTOSEND+1 + sta SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND + lda SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND+1 adc ZPDataInLen+1 - sta SKT.TCBCache+S.SOCKET.TCP.OUTTOSEND+1 + sta SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND+1 jsr SKT.StoreTCB rts *-------------------------------------- @@ -1184,11 +1185,11 @@ SKT.GetDataFromSktOut lda ZPTmpPtr1 clc - adc SKT.TCBCache+S.SOCKET.TCP.OUTTAILNEXT + adc SKT.TmpCache+S.SOCKET.TCP.OUTTAILNEXT sta ZPTmpPtr2 Make ZPTmpPtr2=base+nexttail lda ZPTmpPtr1+1 - adc SKT.TCBCache+S.SOCKET.TCP.OUTTAILNEXT+1 + adc SKT.TmpCache+S.SOCKET.TCP.OUTTAILNEXT+1 sta ZPTmpPtr2+1 lda ZPDataOutLen @@ -1219,13 +1220,13 @@ SKT.GetDataFromSktOut bne .4 inc ZPTmpPtr2+1 -.4 inc SKT.TCBCache+S.SOCKET.TCP.OUTTAILNEXT +.4 inc SKT.TmpCache+S.SOCKET.TCP.OUTTAILNEXT bne .1 - inc SKT.TCBCache+S.SOCKET.TCP.OUTTAILNEXT+1 - lda SKT.TCBCache+S.SOCKET.TCP.OUTTAILNEXT+1 + inc SKT.TmpCache+S.SOCKET.TCP.OUTTAILNEXT+1 + lda SKT.TmpCache+S.SOCKET.TCP.OUTTAILNEXT+1 cmp /K.TCP.WSIZE bne .1 - stz SKT.TCBCache+S.SOCKET.TCP.OUTTAILNEXT+1 + stz SKT.TmpCache+S.SOCKET.TCP.OUTTAILNEXT+1 lda ZPTmpPtr1 Dst Ptr=Buffer Base sta ZPTmpPtr2 @@ -1233,13 +1234,13 @@ SKT.GetDataFromSktOut sta ZPTmpPtr2+1 bra .1 -.8 lda SKT.TCBCache+S.SOCKET.TCP.OUTTOSEND +.8 lda SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND sec sbc ZPDataOutLen - sta SKT.TCBCache+S.SOCKET.TCP.OUTTOSEND - lda SKT.TCBCache+S.SOCKET.TCP.OUTTOSEND+1 + sta SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND + lda SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND+1 sbc ZPDataOutLen+1 - sta SKT.TCBCache+S.SOCKET.TCP.OUTTOSEND+1 + sta SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND+1 clc rts @@ -1256,10 +1257,10 @@ SKT.AckDataToSktOut .1 lda (ZPFrameInPtr),y pha - sbc SKT.TCBCache+S.SOCKET.TCP.OUTSEQNUM,x + sbc SKT.TmpCache+S.SOCKET.TCP.OUTSEQNUM,x sta TmpDWord,x pla ....and Set SEQ = new SEQ - sta SKT.TCBCache+S.SOCKET.TCP.OUTSEQNUM,x + sta SKT.TmpCache+S.SOCKET.TCP.OUTSEQNUM,x dey dex bpl .1 @@ -1271,65 +1272,50 @@ SKT.AckDataToSktOut beq .8 .2 clc - adc SKT.TCBCache+S.SOCKET.TCP.OUTTAIL - sta SKT.TCBCache+S.SOCKET.TCP.OUTTAIL + adc SKT.TmpCache+S.SOCKET.TCP.OUTTAIL + sta SKT.TmpCache+S.SOCKET.TCP.OUTTAIL txa - adc SKT.TCBCache+S.SOCKET.TCP.OUTTAIL+1 + adc SKT.TmpCache+S.SOCKET.TCP.OUTTAIL+1 and /K.TCP.WSIZE-1 - sta SKT.TCBCache+S.SOCKET.TCP.OUTTAIL+1 + sta SKT.TmpCache+S.SOCKET.TCP.OUTTAIL+1 - lda SKT.TCBCache+S.SOCKET.TCP.OUTFREE + lda SKT.TmpCache+S.SOCKET.TCP.OUTFREE clc adc TmpDWord+3 - sta SKT.TCBCache+S.SOCKET.TCP.OUTFREE - lda SKT.TCBCache+S.SOCKET.TCP.OUTFREE+1 + sta SKT.TmpCache+S.SOCKET.TCP.OUTFREE + lda SKT.TmpCache+S.SOCKET.TCP.OUTFREE+1 adc TmpDWord+2 - sta SKT.TCBCache+S.SOCKET.TCP.OUTFREE+1 + sta SKT.TmpCache+S.SOCKET.TCP.OUTFREE+1 - lda SKT.TCBCache+S.SOCKET.TCP.OUTUSED + lda SKT.TmpCache+S.SOCKET.TCP.OUTUSED sec sbc TmpDWord+3 - sta SKT.TCBCache+S.SOCKET.TCP.OUTUSED - lda SKT.TCBCache+S.SOCKET.TCP.OUTUSED+1 + sta SKT.TmpCache+S.SOCKET.TCP.OUTUSED + lda SKT.TmpCache+S.SOCKET.TCP.OUTUSED+1 sbc TmpDWord+2 - sta SKT.TCBCache+S.SOCKET.TCP.OUTUSED+1 + sta SKT.TmpCache+S.SOCKET.TCP.OUTUSED+1 .8 rts *-------------------------------------- -SKT.NewTCB +SKT.GetTCB ldy #S.SOCKET.TCP-S.SOCKET - - - clc -.9 rts -*-------------------------------------- -SKT.GetTCB ldy #S.SOCKET.SQ.hTCB +.1 dey lda (ZPPtrSKT),y - >SYSCALL GetMemPtr - bcs * - >STYA .1+1 + sta SKT.TmpCache,y + cpy #S.SOCKET + bne .1 - ldx #S.TCB-1 - -.1 lda $ffff,x - sta SKT.TCBCache,x - dex - bpl .1 rts *-------------------------------------- -SKT.StoreTCB ldy #S.SOCKET.SQ.hTCB - lda (ZPPtrSKT),y - >SYSCALL GetMemPtr - bcs * - >STYA .2+1 +SKT.StoreTCB ldy #S.SOCKET.TCP-S.SOCKET + +.1 dey + lda SKT.TmpCache,y + sta (ZPPtrSKT),y + cpy #S.SOCKET + bne .1 - ldx #S.TCB-1 - -.1 lda SKT.TCBCache,x -.2 sta $ffff,x - dex - bpl .1 rts *-------------------------------------- SKT.Destroy ldy #S.SOCKET.SQ.hOutMem @@ -1342,12 +1328,7 @@ SKT.Destroy ldy #S.SOCKET.SQ.hOutMem beq .2 >SYSCALL FreeMem -.2 ldy #S.SOCKET.SQ.hTCB - lda (ZPPtrSKT),y - beq .3 - >SYSCALL FreeMem - -.3 lda #0 +.2 lda #0 sta (ZPPtrSKT) clc rts diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index 3481fc34..2fb6aed4 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -3,7 +3,7 @@ PREFIX /A2OSX.BUILD AUTO 4,1 .LIST OFF *-------------------------------------- -TCP.IN jsr FRM.GetTargetSKT +TCP.IN jsr FRM.GetTargetSKT.TCPUDP jsr SKT.FindMatchingLocRem bcs TCP.IN.JMP.CLOSED no socket, go discard @@ -12,7 +12,7 @@ TCP.IN jsr FRM.GetTargetSKT ldy #S.SOCKET.PROTO lda (ZPPtrSKT),y - cmp #S.SOCKET.T.TCP + cmp #S.IP.PROTOCOL.TCP bne TCP.IN.JMP.CLOSED wrong protocol, go discard ldy #S.TCP.OPTIONS @@ -93,9 +93,9 @@ TCP.IN.JMP.SYNSENT sec Check if ACK=OUTNEXTSEQ+1 -.1 lda SKT.TCBCache+S.SOCKET.TCP.OUTNEXTSEQ,x +.1 lda SKT.TmpCache+S.SOCKET.TCP.OUTNEXTSEQ,x adc #0 - sta SKT.TCBCache+S.SOCKET.TCP.OUTNEXTSEQ,x + sta SKT.TmpCache+S.SOCKET.TCP.OUTNEXTSEQ,x eor (ZPFrameInPtr),y bne .9 dey @@ -132,10 +132,10 @@ TCP.IN.JMP.SYNRCVD sec -.1 lda SKT.TCBCache+S.SOCKET.TCP.OUTNEXTSEQ,x Check if ACK=OUTNEXTSEQ+1 +.1 lda SKT.TmpCache+S.SOCKET.TCP.OUTNEXTSEQ,x Check if ACK=OUTNEXTSEQ+1 adc #0 - sta SKT.TCBCache+S.SOCKET.TCP.OUTSEQNUM,x setup SEQNUM - sta SKT.TCBCache+S.SOCKET.TCP.OUTNEXTSEQ,x ...and update NEXTSEQ + sta SKT.TmpCache+S.SOCKET.TCP.OUTSEQNUM,x setup SEQNUM + sta SKT.TmpCache+S.SOCKET.TCP.OUTNEXTSEQ,x ...and update NEXTSEQ eor (ZPFrameInPtr),y bne .8 dey @@ -253,8 +253,8 @@ TCP.IN.ACKTheSYN .3 lda (ZPFrameInPtr),y Set OUTACK=SEQ+1 for new socket... adc #0 - sta SKT.TCBCache+S.SOCKET.TCP.INLASTSEQNUM,x - sta SKT.TCBCache+S.SOCKET.TCP.OUTACKNUM,x + sta SKT.TmpCache+S.SOCKET.TCP.INLASTSEQNUM,x + sta SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM,x dey dex bpl .3 @@ -273,9 +273,9 @@ TCP.IN.ACKTheFIN sec -.3 lda SKT.TCBCache+S.SOCKET.TCP.OUTACKNUM,x +.3 lda SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM,x adc #0 - sta SKT.TCBCache+S.SOCKET.TCP.OUTACKNUM,x + sta SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM,x dey dex bpl .3 @@ -331,8 +331,8 @@ TCP.IN.SetDataInPtrAndLen *-------------------------------------- TCP.OUT jsr SKT.GetTCB -TCP.OUT.I lda SKT.TCBCache+S.SOCKET.TCP.OUTTOSEND+1 - ldy SKT.TCBCache+S.SOCKET.TCP.OUTTOSEND +TCP.OUT.I lda SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND+1 + ldy SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND bne .1 @@ -367,18 +367,18 @@ TCP.OUT.I lda SKT.TCBCache+S.SOCKET.TCP.OUTTOSEND+1 bcs TCP.OUT.9 - lda SKT.TCBCache+S.SOCKET.TCP.OUTNEXTSEQ+3 + lda SKT.TmpCache+S.SOCKET.TCP.OUTNEXTSEQ+3 clc adc ZPDataOutLen - sta SKT.TCBCache+S.SOCKET.TCP.OUTNEXTSEQ+3 + sta SKT.TmpCache+S.SOCKET.TCP.OUTNEXTSEQ+3 - lda SKT.TCBCache+S.SOCKET.TCP.OUTNEXTSEQ+2 + lda SKT.TmpCache+S.SOCKET.TCP.OUTNEXTSEQ+2 adc ZPDataOutLen+1 - sta SKT.TCBCache+S.SOCKET.TCP.OUTNEXTSEQ+2 + sta SKT.TmpCache+S.SOCKET.TCP.OUTNEXTSEQ+2 bcc .80 - inc SKT.TCBCache+S.SOCKET.TCP.OUTNEXTSEQ+1 + inc SKT.TmpCache+S.SOCKET.TCP.OUTNEXTSEQ+1 bne .80 - inc SKT.TCBCache+S.SOCKET.TCP.OUTNEXTSEQ + inc SKT.TmpCache+S.SOCKET.TCP.OUTNEXTSEQ .80 jmp SKT.StoreTCB exits with CC TCP.OUT.9 rts @@ -400,7 +400,7 @@ TCP.OUT.SendOptA.1 ldx #3 ldy #S.TCP.ACKNUM+3 -.1 lda SKT.TCBCache+S.SOCKET.TCP.OUTACKNUM,x +.1 lda SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM,x sta (ZPFrameOutPtr),y dey dex @@ -409,17 +409,17 @@ TCP.OUT.SendOptA.1 .10 ldx #3 ldy #S.TCP.SEQNUM+3 -.2 lda SKT.TCBCache+S.SOCKET.TCP.OUTNEXTSEQ,x +.2 lda SKT.TmpCache+S.SOCKET.TCP.OUTNEXTSEQ,x sta (ZPFrameOutPtr),y dey dex bpl .2 ldy #S.TCP.WINDOW - lda SKT.TCBCache+S.SOCKET.TCP.INFREE+1 + lda SKT.TmpCache+S.SOCKET.TCP.INFREE+1 sta (ZPFrameOutPtr),y iny - lda SKT.TCBCache+S.SOCKET.TCP.INFREE + lda SKT.TmpCache+S.SOCKET.TCP.INFREE sta (ZPFrameOutPtr),y jsr FRM.SendIP @@ -445,10 +445,10 @@ TCP.NewFrame ldx #S.IP.PROTOCOL.TCP sta (ZPFrameOutPtr),y ldy #S.TCP.WINDOW - lda SKT.TCBCache+S.SOCKET.TCP.INFREE+1 + lda SKT.TmpCache+S.SOCKET.TCP.INFREE+1 sta (ZPFrameOutPtr),y iny - lda SKT.TCBCache+S.SOCKET.TCP.INFREE + lda SKT.TmpCache+S.SOCKET.TCP.INFREE sta (ZPFrameOutPtr),y clc diff --git a/LIB/LIBTCPIP.S.UDP.txt b/LIB/LIBTCPIP.S.UDP.txt index 185f4836..8c2b9f31 100644 --- a/LIB/LIBTCPIP.S.UDP.txt +++ b/LIB/LIBTCPIP.S.UDP.txt @@ -3,7 +3,7 @@ PREFIX /A2OSX.BUILD AUTO 4,1 .LIST OFF *-------------------------------------- -UDP.IN jsr FRM.GetTargetSKT +UDP.IN jsr FRM.GetTargetSKT.TCPUDP jsr SKT.FindMatchingLocRem bcs .9 diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index d0c335a4..bb2dd3de 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -8,6 +8,7 @@ AUTO 4,1 *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I + .INB INC/MLI.I .INB INC/MLI.E.I .INB INC/NIC.I .INB INC/ETH.I @@ -81,10 +82,10 @@ CS.START cld .DA SKT.Read .DA SKT.Write - .DA SKT.Rcvd + .DA SKT.Recv .DA SKT.Send - .DA SKT.RcvdFrom + .DA SKT.RecvFrom .DA SKT.SendTo .DA SKT.GetTable @@ -376,13 +377,12 @@ FRM.QUEUE.LenH .BS K.FRMQUEUE.SIZE *-------------------------------------- RefCount .DA #0 DYNPORT.LAST .DA K.DYNPORT.START -hDNSSocket1 .BS 1 -hDNSSocket2 .BS 1 +hDNSSocket .BS 1 DNS.TmpCache .BS S.DNSCACHE ARP.TmpCache .BS S.ARP -SKT.Template .BS S.SOCKET SKT.LOC.ADDR .BS S.SOCKADDR SKT.REM.ADDR .BS S.SOCKADDR +SKT.TmpCache .BS S.SOCKET.TCP TmpDWord .BS 4 TmpOffset .BS 2 hFrameIn .BS 1 diff --git a/SYS/KERNEL.S.IO.txt b/SYS/KERNEL.S.IO.txt index ba93b20c..2baf0f6b 100644 --- a/SYS/KERNEL.S.IO.txt +++ b/SYS/KERNEL.S.IO.txt @@ -320,10 +320,10 @@ IO.WRITE.CDEV ldx #IOCTL.WRITE >LDYA K.S.IOCTL+S.IOCTL.BYTECNT .9 rts *-------------------------------------- -IO.WRITE.SSOCK ldy #S.FD.SOCK.WRITE +IO.WRITE.SSOCK ldy #S.FD.SSOCK.WRITE .HS 2C BIT ABS *-------------------------------------- -IO.READ.SSOCK ldy #S.FD.SOCK.READ +IO.READ.SSOCK ldy #S.FD.SSOCK.READ lda (pFD),y tax Function Offset in LIB @@ -333,7 +333,7 @@ IO.READ.SSOCK ldy #S.FD.SOCK.READ jsr K.GetMemPtr >STYA .1 - ldy #S.FD.SOCK.HSKT + ldy #S.FD.SSOCK.HSKT lda (pFD),y .1 jmp $ffff