networking: AF_INET partially working

This commit is contained in:
burniouf
2026-01-31 14:19:45 +01:00
parent aaf29065e2
commit af864fc5dc
25 changed files with 925 additions and 712 deletions
Binary file not shown.
Binary file not shown.
+24 -26
View File
@@ -14,8 +14,6 @@ NEW
.INB inc/zp.i
.INB inc/gfx.i
*--------------------------------------
pRWReg .EQ 0 x.printf.s
*--------------------------------------
TmpPtr1 .EQ $0 main & aux ZP
TmpPtr2 .EQ $2 main & aux ZP
*--------------------------------------
@@ -152,7 +150,7 @@ A2osX.SetupQC bit IO.RRAMWRAMBNK2
bit IO.RRAMWRAMBNK2
ldx #0
.2 lda A2osX.QC.B.Start,x Still at $2xxx !!! not moved to $1xxx
sta $D100,x
lda A2osX.QC.B.Start+$100,x
@@ -165,7 +163,7 @@ A2osX.SetupQC bit IO.RRAMWRAMBNK2
lda MLI.KVER
cmp #$8D
bne .3
bra A2osX.MLIQuit
.3 bit IO.RROMBNK1
@@ -177,9 +175,9 @@ A2osX.EnumPM >LDYAI MSG.PMENUM do this After SetupQC, a PM could override QC
A2osX.MLIQuit >LDYAI MSG.INIT0OK
jsr X.PrintF
>DEBUGOA
stz $280 Quit to A2osX
jsr MLI
.DA #MLI.QUIT
.DA MLIQUIT01
@@ -209,9 +207,9 @@ A2osX.Screen80 lda #$8C Reset 80 col screen ($0C:HOME)
sta MLICLOSE00+1
jsr MLI
.DA #MLI.READ
.DA MLIREAD00
.DA MLIREAD00
bcs .98
jsr .98
bra A2osX.ScreenDLGR
@@ -232,7 +230,7 @@ A2osX.ScreenDLGR
* sta IO.SET80DISP
* sta IO.SET80STORE
* sta IO.CLRPAGE2
bit IO.RDIOUDIS
sta IO.SETIOUDIS
sta IO.SETDHIRES
@@ -248,16 +246,16 @@ A2osX.ScreenDLGR
sta TmpPtr1+1
ldx #0
.1 phx
lda SCR.BASEL,x
sta TmpPtr2
lda SCR.BASEH,x
sta TmpPtr2+1
ldy #0
.2 lda (TmpPtr1),y
pha
@@ -295,7 +293,7 @@ A2osX.ScreenDLGR
.4 lda (TmpPtr1),y
pha
and #$f
tax
lda PALETTE.AUX,x
asl
@@ -324,13 +322,13 @@ A2osX.ScreenDLGR
iny
cpy #40
bne .4
lda TmpPtr1
clc
adc #40
sta TmpPtr1
bcc .7
inc TmpPtr1+1
.7 plx
@@ -343,7 +341,7 @@ A2osX.ScreenDLGR
DisableRamDRV php
sei
lda MLI.DEVPTRS3D2
cmp MLI.DEVPTRS S0D1=NOVEV
cmp MLI.DEVPTRS S0D1=NOVEV
bne .1
lda MLI.DEVPTRS3D2+1
@@ -415,14 +413,14 @@ EnumPM ldx #0
sty Sys.Prefix
sty PM.Filename
lda #Sys.Prefix
pha
lda /Sys.Prefix
pha
>LDYAI MSG.PMSYSDIR
jsr X.PrintF
jsr MLI
.DA #MLI.SETPREFIX
.DA MLISETPREFIX02
@@ -432,7 +430,7 @@ EnumPM ldx #0
.DA #MLI.OPEN
.DA MLIOPEN01
bcc .10
.19 pha
>LDYAI MSG.PMSYSDIR.KO
jsr X.PrintF
@@ -486,7 +484,7 @@ EnumPM ldx #0
jsr LoadPM
.5 lda EnumPM.BPTR
clc
clc
adc #EnumPM.EL
sta EnumPM.BPTR
bcc .6
@@ -516,7 +514,7 @@ EnumPM ldx #0
jsr MLI
.DA #MLI.SETPREFIX
.DA MLISETPREFIX01
.99 rts
*--------------------------------------
EnumPM.EC .BS 1
@@ -528,7 +526,7 @@ LoadPM ldy #$1c
iny
lda (TmpPtr1),y
sta LoadPM.MVERSION
ldx Sys.Prefix
lda (TmpPtr1)
and #$0F
@@ -543,7 +541,7 @@ LoadPM ldy #$1c
cpy #8
bcs .3
lda LoadPM.Bits,y
bit LoadPM.MVERSION
beq .6
@@ -552,7 +550,7 @@ LoadPM ldy #$1c
.3 lda LoadPM.Bits-8,y
bit LoadPM.VERSION
beq .6
.4 lda (TmpPtr1),y
eor #$20
.HS 2C BIT ABS
@@ -642,7 +640,7 @@ MLIONLINE01 .DA #2
*--------------------------------------
MLIOPEN00 .DA #3 For DIR listing
.DA Logo.Filename
.DA A2osX.OpenBuff1
.DA A2osX.OpenBuff1
.BS 1
MLIREAD00 .DA #4
.BS 1
@@ -654,7 +652,7 @@ MLICLOSE00 .DA #1
*--------------------------------------
MLIOPEN01 .DA #3 For DIR listing
.DA Sys.Prefix
.DA A2osX.OpenBuff1
.DA A2osX.OpenBuff1
.BS 1
MLIREAD01 .DA #4
.BS 1
+1
View File
@@ -7,6 +7,7 @@ NEW
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/a2osx.api.i
.INB inc/arc.i
.INB inc/mli.e.i
*--------------------------------------
+1
View File
@@ -7,6 +7,7 @@ NEW
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/a2osx.api.i
.INB inc/mli.e.i
.INB inc/arc.i
*--------------------------------------
+16 -16
View File
@@ -63,8 +63,8 @@ L.MSG1.S .DA MSG1.S.0
.DA MSG1.S.10
.DA MSG1.S.11
.DA MSG1.S.INV
L.SPRINTF.IPP .DA SPRINTF.IPP
L.SPRINTF.IPP .DA SPRINTF.IPP
.DA 0
*--------------------------------------
CS.INIT clc
@@ -76,7 +76,7 @@ CS.RUN >LDYA L.MSG0
lda #0
.1 sta hFD
>KAPI GetFDByID
bcs .7
@@ -95,9 +95,9 @@ CS.RUN >LDYA L.MSG0
bne .6
jsr CS.RUN.ADDR
jsr CS.RUN.Print
.6 >LDYA pFD
>LIBC Free
@@ -165,10 +165,10 @@ CS.RUN.ADDR >SS
>PUSHWI S.SA.IN
>LIBC GetSockName
>SR
>SS
>PUSHEA.G LocAddr
jsr CS.RUN.PushSA
jsr CS.RUN.PushSA
>PUSHBI 6
>LIBC SPrintF
>SR
@@ -179,7 +179,7 @@ CS.RUN.ADDR >SS
>PUSHWI S.SA.IN
>LIBC GetPeerName
>SR
>SS
>PUSHEA.G RemAddr
jsr CS.RUN.PushSA
@@ -234,15 +234,15 @@ MSG1.P.INV .AZ "??? "
MSG1.S.0 .AZ "*"
MSG1.S.1 .AZ "OPENED"
MSG1.S.2 .AZ "LISTENING"
MSG1.S.3 .AZ "SYN-SENT"
MSG1.S.4 .AZ "SYN-RECEIVED"
MSG1.S.3 .AZ "SYN_SENT"
MSG1.S.4 .AZ "SYN_RECEIVED"
MSG1.S.5 .AZ "ESTABLISHED"
MSG1.S.6 .AZ "CLOSE-WAIT"
MSG1.S.7 .AZ "LAST-ACK"
MSG1.S.8 .AZ "FIN-WAIT-1"
MSG1.S.9 .AZ "FIN-WAIT-2"
MSG1.S.6 .AZ "CLOSE_WAIT"
MSG1.S.7 .AZ "LAST_ACK"
MSG1.S.8 .AZ "FIN_WAIT1"
MSG1.S.9 .AZ "FIN_WAIT2"
MSG1.S.10 .AZ "CLOSING"
MSG1.S.11 .AZ "TIME-WAIT"
MSG1.S.11 .AZ "TIME_WAIT"
MSG1.S.INV .AZ "???"
SPRINTF.IPP .AZ "%d.%d.%d.%d:%D"
OPTIONS .AZ "DARKDBUL"
@@ -253,7 +253,7 @@ ID.END .EQ *
.OR 0
SA .BS S.SA.IN
LocAddr .BS 22
RemAddr .BS 22
RemAddr .BS 22
DS.END .ED
*--------------------------------------
MAN
+7 -6
View File
@@ -7,6 +7,7 @@ NEW
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/a2osx.api.i
.INB inc/mli.i
.INB inc/mli.e.i
*--------------------------------------
@@ -59,7 +60,7 @@ CS.INIT clc
rts
*--------------------------------------
CS.RUN inc bNewLine
jsr CS.RUN.ISATTY
jsr CS.RUN.CheckArgs
bcs CS.RUN.LOOP.RTS
@@ -72,7 +73,7 @@ CS.RUN.LOOP >SLEEP
jsr X.CheckCtrl
bcs .9
bvs CS.RUN.LOOP
>LDYA pFile
@@ -135,9 +136,9 @@ CS.RUN.CheckArgs
jsr X.IsPipeIn
bcs .99
bvc .97
>STYA pFile
.80 >LDYAI 256
@@ -200,7 +201,7 @@ CS.RUN.ISATTY ldy #S.PS.pStdOut
>LIBC FStat
>SR
bcs .9
>LDA.G STATBUF+S.STAT.MODE+1
and #$F0
@@ -229,7 +230,7 @@ CS.RUN.PRINTBYTE
beq .2
stz bNewLine
>SS
>PUSHW L.MSG.LINENUM
>PUSHW LineCount
+1
View File
@@ -7,6 +7,7 @@ NEW
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/a2osx.api.i
.INB inc/mli.i
.INB inc/mli.e.i
*--------------------------------------
+2 -1
View File
@@ -7,6 +7,7 @@ NEW
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/a2osx.api.i
.INB inc/mli.i
.INB inc/mli.e.i
*--------------------------------------
@@ -134,7 +135,7 @@ CS.RUN.CheckArgs
jsr X.IsPipeIn
bcs .9
bvc .97
>STYA pFile
+2 -1
View File
@@ -3,6 +3,7 @@ NEW
# HTTPD configuration file
ServerName www.example.com:6580
Listen 6580
DocumentRoot ${ROOT}srv/www
DocumentRoot /srv/www
MAN
TEXT etc/httpd.conf
+15
View File
@@ -0,0 +1,15 @@
NEW
AUTO 3,1
*** ISSUE ***
Greetings, ${GECOS}.
UID = $UID
GID = $GID
LOGNAME = $LOGNAME
HOME = $HOME
SHELL = $SHELL
TERM = $TERM
MAN
TEXT etc/issue
+8
View File
@@ -0,0 +1,8 @@
NEW
AUTO 3,1
*** MOTD ***
!!! Welcome to A2osX ==== 1.00 PREVIEW ==== !!!
MAN
TEXT etc/motd
+9
View File
@@ -0,0 +1,9 @@
NEW
AUTO 3,1
*** A2osX-Login: NOAUTH ***
No ETC/PASSWD file present, Logged as ROOT.
Consider adding ROOT user with USERADD command.
MAN
TEXT etc/noauth
-11
View File
@@ -1,11 +0,0 @@
NEW
PREFIX /A2OSX.BUILD
AUTO 4,1
address 192.168.1.150
netmask 255.255.255.0
gateway 192.168.1.254
nameserver 192.168.1.2
nameserver 192.168.1.254
dnsdomain coincoin.hd.free.fr
MAN
TEXT ETC/TCPIP.CONF
+40 -40
View File
@@ -183,50 +183,50 @@ S.SKT.IN.O.DONTROUTE .EQ $10
S.SKT.IN.O.BROADCAST .EQ $20
S.SKT.IN.O.USELOOPBACK .EQ $40
S.SKT.IN.O.LINGER .EQ $80
* TODO : TCP_NODELAY
*--------------------------------------
* TODO: S.SKT.IN.P .EQ S.FD+0
* TODO : S.SKT.IN.O.TCP_NODELAY
*--------------------------------------
S.SKT.IN.LOC.ADDR .EQ S.FD+0
S.SKT.IN.LOC.PORT .EQ S.FD+4
S.SKT.IN.REM.ADDR .EQ S.FD+6
S.SKT.IN.REM.PORT .EQ S.FD+10
*--------------------------------------
S.SKT.IN.BNK .EQ S.FD+12
S.SKT.IN.QTAIL .EQ S.FD+13
S.SKT.IN.QHEAD .EQ S.FD+14
S.SKT.IN.QBASE .EQ S.FD+36
S.SKT.IN.QTOP .EQ S.FD+64 ->S.SKT.IN
*--------------------------------------
* TODO: S.SKT.IN.P .EQ S.FD+15
* for proper RAW / ICMP ping support
*--------------------------------------
S.SKT.IN.BNK .EQ S.FD+2
S.SKT.IN.TCPOPT .EQ S.FD+3
S.SKT.IN.LOC.ADDR .EQ S.FD+4
S.SKT.IN.LOC.PORT .EQ S.FD+8
S.SKT.IN.REM.ADDR .EQ S.FD+10
S.SKT.IN.REM.PORT .EQ S.FD+14
S.SKT.IN.INSEQNUM .EQ S.FD+16
S.SKT.IN.INACKNUM .EQ S.FD+20
S.SKT.IN.OUTNEXTSEQ .EQ S.FD+24
S.SKT.IN.OUTSENTSEQ .EQ S.FD+28
*--------------------------------------
S.SKT.IN.QTAIL .EQ S.FD+32
S.SKT.IN.QHEAD .EQ S.FD+33
S.SKT.IN.Q .EQ S.FD+34 -> S.SKT.IN
*--------------------------------------
S.SKT.IN.INTAIL .EQ S.FD+32
S.SKT.IN.INHEAD .EQ S.FD+34
S.SKT.IN.INFREE .EQ S.FD+36
S.SKT.IN.INUSED .EQ S.FD+38
S.SKT.IN.OUTTOSEND .EQ S.FD+40
S.SKT.IN.OUTTAILSENT .EQ S.FD+42
S.SKT.IN.OUTTAIL .EQ S.FD+44
S.SKT.IN.OUTHEAD .EQ S.FD+46
S.SKT.IN.OUTFREE .EQ S.FD+48
S.SKT.IN.OUTUSED .EQ S.FD+50
S.SKT.IN.pOUTH .EQ S.FD+52
S.SKT.IN.pOUT .EQ S.FD+54
S.SKT.IN.pINH .EQ S.FD+56
S.SKT.IN.pIN .EQ S.FD+58
*
S.SKT.IN.TCPOPT .EQ S.FD+16 IPPROTO_TCP
*
S.SKT.IN.WSIZE .EQ S.FD+18
*--------------------------------------
S.SKT.IN.INSEQNUM .EQ S.FD+20 SOCK_SEQPACKET,SOCK_STREAM
S.SKT.IN.INACKNUM .EQ S.FD+24
S.SKT.IN.OUTNEXTSEQ .EQ S.FD+28
S.SKT.IN.OUTSENTSEQ .EQ S.FD+32
*--------------------------------------
S.SKT.IN.pIN .EQ S.FD+36 SOCK_STREAM
S.SKT.IN.pINTAIL .EQ S.FD+38
S.SKT.IN.pINHEAD .EQ S.FD+40
S.SKT.IN.pINH .EQ S.FD+42
S.SKT.IN.INFREE .EQ S.FD+44
S.SKT.IN.INUSED .EQ S.FD+46
S.SKT.IN.pOUT .EQ S.FD+48
S.SKT.IN.pOUTTAIL .EQ S.FD+50
S.SKT.IN.pOUTHEAD .EQ S.FD+52
S.SKT.IN.pOUTH .EQ S.FD+54
S.SKT.IN.OUTFREE .EQ S.FD+56
S.SKT.IN.OUTUSED .EQ S.FD+58
S.SKT.IN.pOUTTOSEND .EQ S.FD+60
S.SKT.IN.OUTTOSEND .EQ S.FD+62
*
S.SKT.IN .EQ S.FD+64
*--------------------------------------
+2 -1
View File
@@ -247,7 +247,7 @@ CS.RUN.IAC.CMD cmp #WILL
>SS
ldy #S.PS.pStdOut
jsr CS.RUN.GetPSyW
>PUSHA
>PUSHYA
>PUSHW L.TELNETOPT.LMODE
>PUSHWI TELNETOPT.LMODE.LEN
@@ -299,6 +299,7 @@ CS.RUN.IAC.SB >LIBC GetChar Wait for IAC SB.IS or SEND
>PUSHWZ
>LIBC SetEnv
>SR
.8 jmp CS.RUN.LOOP1
.9 rts
+299 -303
View File
File diff suppressed because it is too large Load Diff
+3 -1
View File
@@ -1,9 +1,11 @@
NEW
AUTO 3,1
*--------------------------------------
X.VT.Init >PUSHW L.X.VT.SeqInit
X.VT.Init >SS
>PUSHW L.X.VT.SeqInit
>PUSHBI 0
>LIBC PrintF Send Query for term W & H
>SR
bcs .9
.1 jsr X.VT.GetCh
+9 -11
View File
@@ -315,31 +315,29 @@ CORE.Dispatch sta CORE.Sigs
ldx #0
.1 ldy A2osX.pAFs+1,x
beq .2
.1 lda A2osX.pAFs+1,x
beq .5
sty .10+2
ldy A2osX.pAFs,x
sty .10+1
>STYA .2+1
phx
lda CORE.Sigs
ldx #32
.10 jsr $FFFF SELF MODIFIED
.2 jsr $FFFF SELF MODIFIED
plx
lda CORE.Sigs
.2 inx
.5 inx
inx
cpx #8 LOCAL,INET,APPLETALK...
bcc .1
*--------------------------------------
ldx #2 skip PS0
.3 stx CORE.PSIndex
.6 stx CORE.PSIndex
lda pPSs+1,x
beq .7
@@ -375,7 +373,7 @@ CORE.Dispatch sta CORE.Sigs
.7 inx
inx
cpx #K.PS.MAX*2
bcc .3
bcc .6
* sec
+1 -1
View File
@@ -371,7 +371,7 @@ LC.Check tax %11000000 or %00111000
rts
.9 lda #E.INVH
* >DEBUG
sec
rts
*--------------------------------------
+1 -1
View File
@@ -523,7 +523,7 @@ FS.PTime2StatYAX
stx FORPNT
lda /K.S.STAT
sta FORPNT+1
* >DEBUG
ldx #X_PT2ST
jsr RAMSW.JMPX
bcs .9
+5 -5
View File
@@ -842,12 +842,12 @@ K.Rename jsr PFT.GetPath0 newpath
sec
rts
.1 ldx #$ff
.1 ldx K.MLI.P1
.3 inx
lda K.MLI.P1,x
.3 lda K.MLI.P1,x
sta K.MLI.P2,x
bne .3
dex
bpl .3
jsr PFT.GetPath2 oldpath
bcs .9
@@ -1183,7 +1183,7 @@ PrintF.F clc
* sec
adc pStack
ldy pStack+1 A,Y = float
* >DEBUG
jsr RAMSW.AY2FAC
bit IO.RROMWRAMBNK2
+1 -1
View File
@@ -363,7 +363,7 @@ ARP.GetFreeCache
rts
*--------------------------------------
ARP.Expire ldx #0
rts
.1 lda ARP.CACHE+S.ARPCACHE.S,x
beq .7
+330 -155
View File
@@ -8,6 +8,10 @@ Socket jsr SKT.New
>STYA pSKT
lda A2osX.ActBnk
ldy #S.SKT.IN.BNK
sta (pSKT),y
ldy #2 socket_type
jsr K.GetStkYW
@@ -33,7 +37,17 @@ Socket_DGRAM lda #S.FD.T.DSOCK
sta (pSKT) #S.FD.T
lda #S.IP.PROTOCOL.UDP
bra Socket_Q
Socket_Q ldy #S.FD.SOCK.P
sta (pSKT),y
jsr SKT.InitQ
ldy hSKT
lda #0
clc
rts
*--------------------------------------
Socket_SEQPACKET
lda #S.FD.T.DSOCK
@@ -41,14 +55,7 @@ Socket_SEQPACKET
lda #S.IP.PROTOCOL.TCP
Socket_Q ldy #S.FD.SOCK.P
sta (pSKT),y
lda #S.SKT.IN.Q
ldy #S.SKT.IN.QTAIL
sta (pSKT),y
iny #S.SKT.IN.QHEAD
ldy #S.FD.SOCK.P
sta (pSKT),y
ldy hSKT
@@ -153,8 +160,7 @@ Connect_RAW
Connect_DGRAM jmp SKT.SetRemAddr
*--------------------------------------
Connect_SEQPACKET
Connect_STREAM
ldy #S.FD.SOCK.S
Connect_STREAM ldy #S.FD.SOCK.S
lda (pSKT),y
beq .1
@@ -211,15 +217,7 @@ Listen ldy #S.FD.SOCK.T
lda #S.SKT.IN.O.ACCEPTCONN
sta (pFD),y
lda #S.SKT.IN.Q
ldy #S.SKT.IN.QTAIL
sta (pSKT),y
iny #S.SKT.IN.QHEAD
sta (pSKT),y
clc
rts
jmp SKT.InitQ
listen.9 lda #SKT.E.BAD
sec
@@ -231,87 +229,24 @@ Accept ldy #S.FD.SOCK.O
lda (pFD),y
and #S.SKT.IN.O.ACCEPTCONN
beq listen.9
*--------------------------------------
SKT.GetFromQ ldy #S.SKT.IN.QTAIL
lda (pFD),y
iny #S.SKT.IN.QHEAD
cmp (pFD),y
beq .9 CS
tay
jsr SKT.GetFromQ
bcs .9
lda (pFD),y
tax
stx .8+1
phy
iny
iny
tya
cmp #S.SKT.IN
bne .1
lda #S.SKT.IN.Q
.1 ldy #S.SKT.IN.QTAIL
sta (pFD),y
lda pFDs,x
lda pFDs,y
sta pFD
lda pFDs+1,x
lda pFDs+1,y
sta pFD+1
jsr GetPeerName
.8 ldy #$FF SELF MODIFIED
lda #0
ply
lda #0 Y,A = Socket
clc
rts
.9 lda #E.NODATA
sec
rts
*--------------------------------------
SKT.AddFrameInToQ
>LDYA pFrameIn
SKT.AddYAToQ pha
phy
ldy #S.SKT.IN.QHEAD
lda (pSKT),y
tax
inc
inc
cmp #S.SKT.IN
bne .1
lda #S.SKT.IN.Q
.1 dey #S.SKT.IN.QTAIL
cmp (pSKT),y
beq .9 Queue full!!
iny #S.SKT.IN.QHEAD
sta (pSKT),y
txa
tay
pla
sta (pSKT),y
iny
pla
sta (pSKT),y
clc
rts
.9 pla dicard pFrame
pla
* sec
rts
.9 rts
*--------------------------------------
* int shutdown(int socket, int how);
*--------------------------------------
@@ -445,10 +380,7 @@ EOF_TRUE tay TRUE : exit with int=1
rts
*--------------------------------------
Recv_RAW
Recv_DGRAM
Recv_SEQPACKET
jsr SKT.GetFromQ
Recv_DGRAM jsr SKT.GetFromQ
bcs .9
>STYA A1
@@ -488,7 +420,6 @@ Recv_SEQPACKET
*--------------------------------------
.2 ldy #S.IP.TOTAL.LENGTH+1
lda (A1),y
iny
sec
sbc #S.ETH.EII
sta A4
@@ -530,6 +461,74 @@ Recv_SEQPACKET
.9 rts
*--------------------------------------
Recv_SEQPACKET jsr SKT.GetFromQ
bcs .9
* >DEBUG
>STYA A1
>STYA A3 for KFree
ldy #S.IP.TOTAL.LENGTH+1
lda (A1),y
sec
sbc #S.TCP
sta A4
dey
lda (A1),y
sbc /S.TCP
sta A4+1
lda #S.TCP
clc
adc A1
sta A1
bcc .1
inc A1+1
.1 ldy #S.SKT.IN.INACKNUM+3
clc
lda A4
adc (pSKT),y
sta (pSKT),y
dey
lda A4+1
adc (pSKT),y
sta (pSKT),y
dey
lda #0
adc (pSKT),y
sta (pSKT),y
dey
lda #0
adc (pSKT),y
sta (pSKT),y
lda #S.TCP.OPTIONS.ACK
jsr SKT.SetTCPOPT
.6 ldy #2 length
jsr K.GetStkYW
cpy A4
pha
sbc A4+1
pla
bcs .7
>STYA A4
.7 sta IO.SETWRITEAUX
>DAPI MemCpy
sta IO.CLRWRITEAUX
>LDYA A3
>DAPI KFree
>LDYA A4
clc
.9 rts
*--------------------------------------
Recv_STREAM jsr SKT.Get
lda SKT.CACHE+S.SKT.IN.INUSED
@@ -542,7 +541,7 @@ Recv_STREAM jsr SKT.Get
lda #E.NODATA
sec
.9 rts
*--------------------------------------
.1 >LDYA SKT.CACHE+S.SKT.IN.INUSED
cpy A4
@@ -567,10 +566,8 @@ Recv_STREAM jsr SKT.Get
ldx #S.SKT.IN.INUSED
jsr SKT.SubA4AtSktX
lda A4
ldy A4+1
ldx #S.SKT.IN.INACKNUM
jsr TCP.AddAYToSktCacheAtX
jsr SKT.Add32A4AtSktX
jsr SKT.Update
@@ -1060,21 +1057,45 @@ SKT.TCPInit ldx #S.SKT.IN.INSEQNUM
ldy #S.FD.SOCK.T
lda (pSKT),y
cmp #SOCK_SEQPACKET
bcc .8
cmp #SOCK_STREAM
beq SKT.TCPInitStream
*--------------------------------------
SKT.TCPInitSeqPkt
ldy #S.SKT.IN.WSIZE
lda #K.TCP.MSS*10
sta (pSKT),y
iny
lda /K.TCP.MSS*10
sta (pSKT),y
*--------------------------------------
SKT.InitQ lda #S.SKT.IN.QBASE
tax
ldy #S.SKT.IN.QTAIL
sta (pSKT),y
iny #S.SKT.IN.QHEAD
sta (pSKT),y
clc
rts
*--------------------------------------
SKT.TCPInitStream
ldy #S.SKT.IN.WSIZE
lda #K.TCP.WSIZE
sta (pSKT),y
iny
lda /K.TCP.WSIZE
sta (pSKT),y
lda A2osX.ActBnk
pha
ldy #S.SKT.IN.BNK
lda (pSKT),y
sta (pRWReg)
>LDYAI K.TCP.WSIZE
>STYA SKT.CACHE+S.SKT.IN.INFREE
cpx #SOCK_STREAM
bcc .8
lda A2osX.ActBnk
ldy #S.SKT.IN.BNK
sta (pSKT),y
>DAPI Malloc
bcs .99
@@ -1091,7 +1112,6 @@ SKT.TCPInit ldx #S.SKT.IN.INSEQNUM
>LDYAI K.TCP.WSIZE
>STYA SKT.CACHE+S.SKT.IN.OUTFREE
>DAPI Malloc
bcs .98
@@ -1107,7 +1127,9 @@ SKT.TCPInit ldx #S.SKT.IN.INSEQNUM
iny
sta SKT.CACHE+S.SKT.IN.pOUTH+1
.8
pla
sta (pRWReg)
* clc
rts
@@ -1117,9 +1139,93 @@ SKT.TCPInit ldx #S.SKT.IN.INSEQNUM
pla
sec
.99 rts
.99 tax
pla
sta (pRWReg)
txa
rts
*--------------------------------------
SKT.Get ldy #S.SKT.IN.INSEQNUM
SKT.AddFrameInToQ
>LDYA pFrameIn
SKT.AddYAToQ pha
phy
ldy #S.SKT.IN.QHEAD
lda (pSKT),y
tax
inc
inc
cmp #S.SKT.IN.QTOP
bne .1
lda #S.SKT.IN.QBASE
.1 dey #S.SKT.IN.QTAIL
cmp (pSKT),y
beq .9 Queue full!!
iny #S.SKT.IN.QHEAD
sta (pSKT),y
txa
tay
pla
sta (pSKT),y
iny
pla
sta (pSKT),y
clc
rts
.9 pla dicard pFrame
pla
* sec
rts
*--------------------------------------
SKT.GetFromQ ldy #S.SKT.IN.QTAIL
lda (pFD),y
iny #S.SKT.IN.QHEAD
cmp (pFD),y
beq .9 CS
pha
inc
inc
cmp #S.SKT.IN.QTOP
bne .1
lda #S.SKT.IN.QBASE
.1 dey #S.SKT.IN.QTAIL
sta (pFD),y
ply
lda (pFD),y
pha
iny
lda (pFD),y
ply
clc
rts
.9 lda #E.NODATA
sec
rts
*--------------------------------------
SKT.Get ldy #S.FD.SOCK.T
lda (pSKT),y
ldy #S.SKT.IN.INSEQNUM
cmp #SOCK_STREAM
bne .2
.1 lda (pSKT),y
sta SKT.CACHE,y
@@ -1127,12 +1233,28 @@ SKT.Get ldy #S.SKT.IN.INSEQNUM
cpy #S.SKT.IN
bcc .1
rts
.2 lda (pSKT),y
sta SKT.CACHE,y
iny
cpy #S.SKT.IN.OUTSENTSEQ+4
bcc .2
rts
*--------------------------------------
SKT.Update.S ldy #S.FD.SOCK.S
sta (pSKT),y
SKT.Update ldy #S.SKT.IN.INSEQNUM
SKT.Update ldy #S.FD.SOCK.T
lda (pSKT),y
ldy #S.SKT.IN.INSEQNUM
cmp #SOCK_STREAM
bne .2
ldy #S.SKT.IN.INSEQNUM
.1 lda SKT.CACHE,y
sta (pSKT),y
@@ -1140,6 +1262,15 @@ SKT.Update ldy #S.SKT.IN.INSEQNUM
cpy #S.SKT.IN
bcc .1
clc
rts
.2 lda SKT.CACHE,y
sta (pSKT),y
iny
cpy #S.SKT.IN.OUTSENTSEQ+4
bcc .2
clc
rts
*--------------------------------------
@@ -1300,19 +1431,17 @@ SKT.GetDynPort inc DYNPORT.LAST
*--------------------------------------
* From Recv SOCK_STREAM
* Src : A1 = S.SKT.IN.pIN/INTAIL (AUX PIPE)
* Dst : A2 = User Buffer
* Len : A4 = User Buffer Len
* Out:
* Y,A = bytes read
* Dst : A2 = User Buffer (IOOpt)
* Len : A4
*--------------------------------------
SKT.GetDataFromSktIn
clc
lda SKT.CACHE+S.SKT.IN.pIN
adc SKT.CACHE+S.SKT.IN.INTAIL
adc SKT.CACHE+S.SKT.IN.pINTAIL
sta A1
lda SKT.CACHE+S.SKT.IN.pIN+1
adc SKT.CACHE+S.SKT.IN.INTAIL+1
adc SKT.CACHE+S.SKT.IN.pINTAIL+1
sta A1+1
clc
@@ -1332,7 +1461,7 @@ SKT.GetDataFromSktIn
lda A3+1
sbc SKT.CACHE+S.SKT.IN.pINH+1
sta A3+1 A3 = Extra data after pINH
bcc .8 no extra...
bcc .3 no extra...
* sec
lda A4
@@ -1343,10 +1472,16 @@ SKT.GetDataFromSktIn
sbc A3+1
sta A4+1
>DAPI MemCpyX2X
bit A2osX.IOOpt
bmi .1
stz SKT.CACHE+S.SKT.IN.INTAIL
stz SKT.CACHE+S.SKT.IN.INTAIL+1
>DAPI MemCpyX2M
bra .2
.1 >DAPI MemCpyX2X
.2 stz SKT.CACHE+S.SKT.IN.pINTAIL
stz SKT.CACHE+S.SKT.IN.pINTAIL+1
>LDYA SKT.CACHE+S.SKT.IN.pIN
>STYA A1
@@ -1363,16 +1498,21 @@ SKT.GetDataFromSktIn
>LDYA A3
>STYA A4
.8 >DAPI MemCpyX2X
.3 bit A2osX.IOOpt
bmi .4
ldx #S.SKT.IN.INTAIL
>DAPI MemCpyX2M
bra .8
.4 >DAPI MemCpyX2X
.8 ldx #S.SKT.IN.pINTAIL
jmp SKT.AddA4AtSktX
*--------------------------------------
* From TCP.IN (STREAM)
* Src : A1 = Data from FrameIn
* Len : A4
*
* Src : A1 = Data from FrameIn (MAIN)
* Dst : A2 = S.SKT.IN.pIN+INHEAD (AUX PIPE)
* Len : A4
*--------------------------------------
SKT.AddDataToSktIn
sec
@@ -1401,11 +1541,11 @@ SKT.AddDataToSktIn
clc
lda SKT.CACHE+S.SKT.IN.pIN
adc SKT.CACHE+S.SKT.IN.INHEAD
adc SKT.CACHE+S.SKT.IN.pINHEAD
sta A2
lda SKT.CACHE+S.SKT.IN.pIN+1
adc SKT.CACHE+S.SKT.IN.INHEAD+1
adc SKT.CACHE+S.SKT.IN.pINHEAD+1
sta A2+1
clc
@@ -1440,8 +1580,8 @@ SKT.AddDataToSktIn
>DAPI MemCpy
sta IO.CLRWRITEAUX
stz SKT.CACHE+S.SKT.IN.INHEAD
stz SKT.CACHE+S.SKT.IN.INHEAD+1
stz SKT.CACHE+S.SKT.IN.pINHEAD
stz SKT.CACHE+S.SKT.IN.pINHEAD+1
clc
lda A1
@@ -1465,22 +1605,22 @@ SKT.AddDataToSktIn
pla
sta (pRWReg)
ldx #S.SKT.IN.INHEAD
ldx #S.SKT.IN.pINHEAD
jmp SKT.AddA4AtSktX
*--------------------------------------
* From Send_STREAM
* Src : A1 = User Buffer
* Len : A4
* Src : A1 = User Buffer (IOOpt)
* Dst : A2 = S.SKT.IN.pOUT+OUTHEAD (AUX PIPE)
* Len : A4
*--------------------------------------
SKT.AddDataToSktOut
clc
lda SKT.CACHE+S.SKT.IN.pOUT
adc SKT.CACHE+S.SKT.IN.OUTHEAD
adc SKT.CACHE+S.SKT.IN.pOUTHEAD
sta A2
lda SKT.CACHE+S.SKT.IN.pOUT+1
adc SKT.CACHE+S.SKT.IN.OUTHEAD+1
adc SKT.CACHE+S.SKT.IN.pOUTHEAD+1
sta A2+1
clc
@@ -1500,7 +1640,7 @@ SKT.AddDataToSktOut
lda A3+1
sbc SKT.CACHE+S.SKT.IN.pOUTH+1
sta A3+1 A3 = Extra data after pOUTH
bcc .8 no extra...
bcc .3 no extra...
* sec
lda A4
@@ -1511,10 +1651,18 @@ SKT.AddDataToSktOut
sbc A3+1
sta A4+1
>DAPI MemCpyX2X
bit A2osX.IOOpt
bmi .1
stz SKT.CACHE+S.SKT.IN.OUTHEAD
stz SKT.CACHE+S.SKT.IN.OUTHEAD+1
sta IO.SETWRITEAUX
>DAPI MemCpy
sta IO.CLRWRITEAUX
bra .2
.1 >DAPI MemCpyX2X
.2 stz SKT.CACHE+S.SKT.IN.pOUTHEAD
stz SKT.CACHE+S.SKT.IN.pOUTHEAD+1
clc
lda A1
@@ -1531,14 +1679,23 @@ SKT.AddDataToSktOut
>LDYA A3
>STYA A4
.8 >DAPI MemCpyX2X
.3 bit A2osX.IOOpt
bmi .4
ldx #S.SKT.IN.OUTHEAD
sta IO.SETWRITEAUX
>DAPI MemCpy
sta IO.CLRWRITEAUX
bra .8
.4 >DAPI MemCpyX2X
.8 ldx #S.SKT.IN.pOUTHEAD
jmp SKT.AddA4AtSktX
*--------------------------------------
* From TCP.OUT
* Src : A1 = S.SKT.IN.pOUT+OUTTAILSENT (AUX PIPE)
* Dst : A2 = pDataOut
* Src : A1 = S.SKT.IN.pOUT+pOUTTOSEND (AUX PIPE)
* Dst : A2 = pDataOut (MAIN)
* Len : A4
*--------------------------------------
SKT.GetDataFromSktOut
lda A2osX.ActBnk
@@ -1550,11 +1707,11 @@ SKT.GetDataFromSktOut
clc
lda SKT.CACHE+S.SKT.IN.pOUT
adc SKT.CACHE+S.SKT.IN.OUTTAILSENT
adc SKT.CACHE+S.SKT.IN.pOUTTOSEND
sta A1
lda SKT.CACHE+S.SKT.IN.pOUT+1
adc SKT.CACHE+S.SKT.IN.OUTTAILSENT+1
adc SKT.CACHE+S.SKT.IN.pOUTTOSEND+1
sta A1+1
clc
@@ -1564,7 +1721,7 @@ SKT.GetDataFromSktOut
lda A1+1
adc A4+1
sta A3+1 A3 = pOUT+OUTTAILSENT+A4
sta A3+1 A3 = pOUT+pOUTTOSEND+A4
sec
lda A3
@@ -1587,10 +1744,10 @@ SKT.GetDataFromSktOut
>DAPI MemCpyX2M
stz SKT.CACHE+S.SKT.IN.OUTTAILSENT
stz SKT.CACHE+S.SKT.IN.OUTTAILSENT+1
stz SKT.CACHE+S.SKT.IN.pOUTTOSEND
stz SKT.CACHE+S.SKT.IN.pOUTTOSEND+1
>LDYA SKT.CACHE+S.SKT.IN.pOUTH
>LDYA SKT.CACHE+S.SKT.IN.pOUT
>STYA A1
clc
@@ -1610,7 +1767,7 @@ SKT.GetDataFromSktOut
pla
sta (pRWReg)
ldx #S.SKT.IN.OUTTAILSENT
ldx #S.SKT.IN.pOUTTOSEND
* jmp SKT.AddA4AtSktX
*--------------------------------------
SKT.AddA4AtSktX clc
@@ -1637,6 +1794,24 @@ SKT.SubA4AtSktX sec
rts
*--------------------------------------
SKT.Add32A4AtSktX
clc
lda SKT.CACHE+3,x
adc A4
sta SKT.CACHE+3,x
lda SKT.CACHE+2,x
adc A4+1
sta SKT.CACHE+2,x
bcc .8
inc SKT.CACHE+1,x
bne .8
inc SKT.CACHE,x
.8 rts
*--------------------------------------
MAN
SAVE usr/src/sys/km.inet.s.skt
LOAD usr/src/sys/km.inet.s
+148 -132
View File
@@ -16,12 +16,26 @@ TCP.IN ldy #S.TCP.OPTIONS
TCP.IN.RST lda #S.SKT.IN.S.TIMEWT
ldy #S.FD.SOCK.S
sta (pSKT),y
*--------------------------------------
TCP.IN.CLOSED
*--------------------------------------
TCP.IN.OPENED
*--------------------------------------
TCP.IN.CLWAIT
clc
rts
* Wait for SKT.shutdown
*--------------------------------------
TCP.IN.CLOSING
* Wait for SKT.Shutdown
*--------------------------------------
TCP.IN.TIMEWT
* Wait for TCP.SendClose
jmp FRM.DiscardIn
*--------------------------------------
TCP.IN.LISTEN jsr ARP.AddFrompFrameIn trash ZPPtr1!!!
@@ -70,6 +84,10 @@ TCP.IN.LISTEN jsr ARP.AddFrompFrameIn trash ZPPtr1!!!
dex
bpl .4
ldy #S.SKT.IN.BNK
lda (pSKT),y
sta (ZPPtr1),y
lda ZPPtr1
sta pSKT
lda ZPPtr1+1
@@ -119,7 +137,9 @@ TCP.IN.SYNSENT ldy #S.TCP.OPTIONS SYN Send, only accept SYN.ACK packet, then Se
bcs .9
lda #S.SKT.IN.S.ESTBLSH
jmp SKT.Update.S
jsr SKT.Update.S
jmp FRM.DiscardIn
.9 lda #S.TCP.OPTIONS.RST
jsr TCP.OUT.SendOptA Send RST
@@ -150,17 +170,16 @@ TCP.IN.SYNRCVD ldy #S.TCP.OPTIONS SYN Received, SYN.ACK Sent, only accept ACK p
bpl .1
lda #S.SKT.IN.S.ESTBLSH
jmp SKT.Update.S
jsr SKT.Update.S
.8 clc
rts
.8 jmp FRM.DiscardIn
*--------------------------------------
TCP.IN.ESTBLSH jsr SKT.Get
ldy #S.TCP.OPTIONS
lda (pFrameIn),y
and #S.TCP.OPTIONS.ACK Remote side ACKed data ?
beq .4
beq .3
*--------------------------------------
* Ack sent data
*--------------------------------------
@@ -179,63 +198,68 @@ TCP.IN.ESTBLSH jsr SKT.Get
dex
bpl .1
bcc .7 ACK > SENT SEQ ????
bcc .80 ACK > SENTSEQ ????
lda TmpDWord+3
ldx TmpDWord+2
ora TmpDWord+2
beq .3 ACK = SENT SEQ
ldy #S.FD.SOCK.T
lda (pSKT),y
cmp #SOCK_STREAM
bne .2
clc
lda TmpDWord+3
sta A4
adc SKT.CACHE+S.SKT.IN.pOUTTAIL
sta SKT.CACHE+S.SKT.IN.pOUTTAIL
tay
beq .4
.2 pha
lda TmpDWord+2
sta A4+1
adc SKT.CACHE+S.SKT.IN.pOUTTAIL+1
sta SKT.CACHE+S.SKT.IN.pOUTTAIL+1
clc
adc SKT.CACHE+S.SKT.IN.OUTTAIL
sta SKT.CACHE+S.SKT.IN.OUTTAIL
txa
adc SKT.CACHE+S.SKT.IN.OUTTAIL+1
and /K.TCP.WSIZE-1
sta SKT.CACHE+S.SKT.IN.OUTTAIL+1
pla
clc
adc SKT.CACHE+S.SKT.IN.OUTFREE
sta SKT.CACHE+S.SKT.IN.OUTFREE
txa
adc SKT.CACHE+S.SKT.IN.OUTFREE+1
sta SKT.CACHE+S.SKT.IN.OUTFREE+1
lda SKT.CACHE+S.SKT.IN.OUTUSED
pha
tya
sec
sbc TmpDWord+3
sta SKT.CACHE+S.SKT.IN.OUTUSED
lda SKT.CACHE+S.SKT.IN.OUTUSED+1
sbc TmpDWord+2
sta SKT.CACHE+S.SKT.IN.OUTUSED+1
sbc #K.TCP.WSIZE
tay
pla
sbc /K.TCP.WSIZE
bcc .20
jsr SKT.Update
>STYA SKT.CACHE+S.SKT.IN.pOUTTAIL
.20 ldx #S.SKT.IN.OUTFREE
jsr SKT.AddA4AtSktX
ldx #S.SKT.IN.OUTUSED
jsr SKT.SubA4AtSktX
.2 jsr SKT.Update
*--------------------------------------
* Store incoming data
*--------------------------------------
.4 jsr TCP.IN.SetA1A4
beq .7 No data in this frame
.3 jsr TCP.IN.SetA1A4
beq .80 No data in this frame
ldy #S.TCP.SEQNUM+3
ldx #3
.5 lda (pFrameIn),y
.4 lda (pFrameIn),y
eor SKT.CACHE+S.SKT.IN.INSEQNUM,x
bne .90 Missed a frame.....
dey
dex
bpl .5
bpl .4
ldy #S.FD.SOCK.T
lda (pSKT),y
cmp #SOCK_STREAM
bne .52
bne .5
lda A4+1
pha
@@ -249,23 +273,43 @@ TCP.IN.ESTBLSH jsr SKT.Get
plx
stx A4+1
bcc .6
bcs .80
rts
.52 jsr SKT.AddFrameInToQ
bcs .99
stz pFrameIn+1 DON'T DISCARD
.6 lda A4
ldy A4+1
ldx #S.SKT.IN.INSEQNUM
jsr TCP.AddAYToSktCacheAtX
jsr SKT.Add32A4AtSktX
jsr SKT.Update
.80 jsr TCP.IN.CheckFIN
jmp FRM.DiscardIn
*--------------------------------------
.7 ldy #S.TCP.OPTIONS
.5 jsr SKT.AddFrameInToQ
bcs .80
.6 ldx #S.SKT.IN.INSEQNUM
jsr SKT.Add32A4AtSktX
jsr SKT.Update
jsr TCP.IN.CheckFIN
clc DONT'T DISCARD
rts
*--------------------------------------
.90
* lda #S.TCP.OPTIONS.ACK Send 3 ACK for last SEQ number
* jsr TCP.OUT.SendOptA
* lda #S.TCP.OPTIONS.ACK
* jsr TCP.OUT.SendOptA
lda #S.TCP.OPTIONS.ACK
jsr TCP.OUT.SendOptA
jmp FRM.DiscardIn
*--------------------------------------
TCP.IN.CheckFIN ldy #S.TCP.OPTIONS
lda (pFrameIn),y
and #S.TCP.OPTIONS.FIN
beq .8
@@ -277,37 +321,21 @@ TCP.IN.ESTBLSH jsr SKT.Get
lda #S.SKT.IN.S.LASTACK
jmp SKT.Update.S
.8 ldy #S.FD.SOCK.O
lda (pSKT),y
bne .91
.80 clc
.99 rts
.90
* lda #S.TCP.OPTIONS.ACK Send 3 ACK for last SEQ number
* jsr TCP.OUT.SendOptA
* lda #S.TCP.OPTIONS.ACK
* jsr TCP.OUT.SendOptA
lda #S.TCP.OPTIONS.ACK
.91 jmp TCP.OUT.SendOptA
*--------------------------------------
TCP.IN.CLWAIT clc Wait for SKT.shutdown
rts
.8 rts
*--------------------------------------
TCP.IN.LASTACK ldy #S.TCP.OPTIONS only accept ACK packet
lda (pFrameIn),y
bit #S.TCP.OPTIONS.ACK
beq TCP.IN.CLWAIT
beq .8
jsr SKT.Get
* jsr TCP.OUT.SendACK
lda #S.SKT.IN.S.CLWAIT
jmp SKT.Update.S
jsr SKT.Update.S
.8 jmp FRM.DiscardIn
*--------------------------------------
TCP.IN.FINWT1 ldy #S.TCP.OPTIONS FIN sent, accept ACK or FIN/ACK packet
lda (pFrameIn),y
@@ -316,13 +344,15 @@ TCP.IN.FINWT1 ldy #S.TCP.OPTIONS FIN sent, accept ACK or FIN/ACK packet
jsr SKT.Get
lda #S.SKT.IN.S.FINWT2
jmp SKT.Update.S
jsr SKT.Update.S
TCP.IN.FINWT1.9 jmp FRM.DiscardIn
*--------------------------------------
TCP.IN.FINWT2 ldy #S.TCP.OPTIONS FIN sent & ACKed, awaiting FIN
lda (pFrameIn),y
bit #S.TCP.OPTIONS.FIN
beq TCP.IN.TIMEWT
beq TCP.IN.FINWT1.9
TCP.IN.2TIMEWT jsr SKT.Get
@@ -332,21 +362,9 @@ TCP.IN.2TIMEWT jsr SKT.Get
bcs .9
lda #S.SKT.IN.S.TIMEWT
jmp SKT.Update.S
jsr SKT.Update.S
.9 rts
*--------------------------------------
TCP.IN.CLOSING
* Wait for SKT.Shutdown
*--------------------------------------
TCP.IN.TIMEWT
* Wait for TCP.SendClose
clc
rts
.9 jmp FRM.DiscardIn
*--------------------------------------
TCP.IN.SetA1A4 ldy #S.IP.TOTAL.LENGTH+1
lda (pFrameIn),y
@@ -487,15 +505,11 @@ TCP.SendClose ldx #0
bne .5
jsr Shutdown_EQ
bra .7
bra .6
*--------------------------------------
.5 ldy #S.SKT.IN.pIN
jsr .9
.5 jsr .9
ldy #S.SKT.IN.pOUT
jsr .9
ldx hSKT
.6 ldx hSKT
jsr SKT.FreeX
*--------------------------------------
@@ -508,8 +522,25 @@ TCP.SendClose ldx #0
clc
rts
*--------------------------------------
.9 lda A2osX.ActBnk
pha
.9 lda (pSKT),y
ldy #S.SKT.IN.BNK
lda (pSKT),y
sta (pRWReg)
ldy #S.SKT.IN.pIN
jsr .90
ldy #S.SKT.IN.pOUT
jsr .90
pla
sta (pRWReg)
rts
.90 lda (pSKT),y
pha
iny
lda (pSKT),y
@@ -517,17 +548,12 @@ TCP.SendClose ldx #0
>DAPI Free
rts
*--------------------------------------
TCP.OUT jsr SKT.Get
lda SKT.CACHE+S.SKT.IN.OUTTOSEND+1
ldy SKT.CACHE+S.SKT.IN.OUTTOSEND
TCP.OUT ldy #S.SKT.IN.OUTTOSEND
lda (pSKT),y
iny
ora (pSKT),y
bne .1
tax
bne .1
* Y,A=0 : no data to send
ldy #S.SKT.IN.TCPOPT
lda (pSKT),y
bne TCP.OUT.SendOpt a least an option...
@@ -535,8 +561,12 @@ TCP.OUT jsr SKT.Get
clc No data, no flag....exit
.9 rts
*--------------------------------------
.1 jsr SKT.Get
.1 cpy #K.TCP.MSS
>LDYA SKT.CACHE+S.SKT.IN.OUTTOSEND
cpy #K.TCP.MSS
pha
sbc /K.TCP.MSS OUTDATA > MSS ?
pla
@@ -564,22 +594,24 @@ TCP.OUT jsr SKT.Get
ldx #S.SKT.IN.OUTTOSEND
jsr SKT.SubA4AtSktX
TCP.OUT.SEQSEND ldy #S.TCP.WINDOW
lda SKT.CACHE+S.SKT.IN.INFREE+1
*--------------------------------------
TCP.OUT.SEQSEND ldy #S.SKT.IN.WSIZE+1
lda (pSKT),y
tax
dey
lda (pSKT),y
ldy #S.TCP.WINDOW+1
sta (pFrameOut),y
iny
lda SKT.CACHE+S.SKT.IN.INFREE
dey
txa
sta (pFrameOut),y
lda #S.TCP.OPTIONS.ACK+S.TCP.OPTIONS.PSH
jsr TCP.OUT.Send
bcs TCP.OUT.Send.RTS
lda A4
ldy A4+1
ldx #S.SKT.IN.OUTNEXTSEQ
jsr TCP.AddAYToSktCacheAtX
jsr SKT.Add32A4AtSktX
jmp SKT.Update exits with CC
*--------------------------------------
@@ -611,7 +643,7 @@ TCP.OUT.SendOpt stz A4
jsr TCP.OUT.NewFrame
bcs TCP.OUT.Send.RTS
ldy #S.SKT.IN.INFREE+1
ldy #S.SKT.IN.WSIZE+1
lda (pSKT),y
tax
dey
@@ -685,22 +717,6 @@ TCP.OUT.NewFrame
clc
.9 rts
*--------------------------------------
TCP.AddAYToSktCacheAtX
clc
adc SKT.CACHE+3,x
sta SKT.CACHE+3,x
tya
adc SKT.CACHE+2,x
sta SKT.CACHE+2,x
bcc .8
inc SKT.CACHE+1,x
bne .8
inc SKT.CACHE,x
.8 rts
*--------------------------------------
MAN
SAVE usr/src/sys/km.inet.s.tcp
LOAD usr/src/sys/km.inet.s