Kernel 0.9.2

This commit is contained in:
Rémy GIBERT 2018-11-01 09:53:47 +01:00
parent 8bcf18386a
commit 005c2ee1c6
12 changed files with 359 additions and 331 deletions

Binary file not shown.

Binary file not shown.

View File

@ -37,28 +37,35 @@ L.LIBTCPIP .DA LIBTCPIP
L.SSCANF.IP .DA SSCANF.IP L.SSCANF.IP .DA SSCANF.IP
L.MSG0 .DA MSG0 L.MSG0 .DA MSG0
L.MSG1 .DA MSG1 L.MSG1 .DA MSG1
L.MSG.USAGE .DA MSG.USAGE
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
CS.INIT >LDYA L.LIBTCPIP CS.INIT >LDYA L.LIBTCPIP
>SYSCALL LoadLib >SYSCALL LoadLib
sta hLIBTCPIP sta hLIBTCPIP
* lda (pPs)
* ora #S.PS.F.EVENT Now accept events
* sta (pPs)
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN ldy #S.PS.ARGC CS.RUN ldy #S.PS.ARGC
lda (pPs),y lda (pPs),y
bne CS.RUN.ADD cmp #1
bne .1
jmp CS.RUN.DUMP jmp CS.RUN.DUMP
*--------------------------------------
CS.RUN.ADD cmp #2
beq .1
jmp .9
.1 >PUSHEA.G DST.IP+3 .1 cmp #3
beq CS.RUN.ADD
>PUSHBI 0
>LDYA L.MSG.USAGE
>SYSCALL printf
lda #E.SYN
sec
rts
*--------------------------------------
CS.RUN.ADD >PUSHEA.G DST.IP+3
>PUSHEA.G DST.IP+2 >PUSHEA.G DST.IP+2
>PUSHEA.G DST.IP+1 >PUSHEA.G DST.IP+1
>PUSHEA.G DST.IP >PUSHEA.G DST.IP
@ -152,10 +159,12 @@ CS.QUIT lda hLIBTCPIP
*-------------------------------------- *--------------------------------------
CS.END CS.END
LIBTCPIP .AZ "libtcpip" LIBTCPIP .AZ "libtcpip"
hLIBTCPIP .BS 1
SSCANF.IP .AZ "%d.%d.%d.%d" SSCANF.IP .AZ "%d.%d.%d.%d"
MSG0 .AZ "STS TR.ID Hostname IP Address TTL" MSG0 .AZ "STS TR.ID Hostname IP Address TTL"
MSG1 .AZ "$%h $%H %32s %03d.%03d.%03d.%03d %u\r\n" MSG1 .AZ "$%h $%H %32s %03d.%03d.%03d.%03d %u\r\n"
hLIBTCPIP .BS 1 MSG.USAGE .AS "Usage : Add a static entry, DNSINFO <host> <IP>\r\n"
.AZ " Dump DNS Cache, DNSINFO \r\n"
*-------------------------------------- *--------------------------------------
DS.START DS.START
DST.IP .BS 4 DST.IP .BS 4

View File

@ -39,7 +39,6 @@ CS.START cld
.DA CS.QUIT .DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP L.LIBTCPIP .DA LIBTCPIP
L.SA.LOCAL .DA SA.LOCAL L.SA.LOCAL .DA SA.LOCAL
L.SA.LOCAL.AD .DA SA.LOCAL+S.SOCKADDR.ADDR
L.SA.REMOTE .DA SA.REMOTE L.SA.REMOTE .DA SA.REMOTE
L.SA.REMOTE.AD .DA SA.REMOTE+S.SOCKADDR.ADDR L.SA.REMOTE.AD .DA SA.REMOTE+S.SOCKADDR.ADDR
L.MSG.IPKO .DA MSG.IPKO L.MSG.IPKO .DA MSG.IPKO
@ -75,8 +74,17 @@ CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ?
CS.RUN.IPOK ldy #S.PS.ARGC CS.RUN.IPOK ldy #S.PS.ARGC
lda (pPs),y lda (pPs),y
cmp #2
beq .9 bcc .9
ldy #S.IPCFG.IP+3
ldx #3
.1 lda (ZPIPCfgPtr),y
sta SA.LOCAL+S.SOCKADDR.ADDR,x
dey
dex
bpl .1
jsr Init.Timeout jsr Init.Timeout
@ -105,13 +113,10 @@ CS.RUN.IPOK ldy #S.PS.ARGC
sec sec
rts rts
CS.RUN.HOSTOK ldy #S.PS.ARGC CS.RUN.HOSTOK lda #2
lda (pPs),y
cmp #2
bcc CS.RUN.PORTOK
lda #2
>SYSCALL ArgV >SYSCALL ArgV
bcs CS.RUN.PORTOK
>SYSCALL atoi >SYSCALL atoi
>STYA SA.REMOTE+S.SOCKADDR.PORT >STYA SA.REMOTE+S.SOCKADDR.PORT
@ -152,7 +157,8 @@ CS.RUN.OPENSKT >PUSHBI 0 no protocol
.2 >PUSHW L.SA.REMOTE .2 >PUSHW L.SA.REMOTE
>LDA.G hSocket >LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect >LIBCALL hLIBTCPIP,LIBTCPIP.Connect
bcs .9
>LDYA L.MSG.SKTOK >LDYA L.MSG.SKTOK
>SYSCALL puts >SYSCALL puts
@ -164,7 +170,6 @@ CS.RUN.OPENSKT >PUSHBI 0 no protocol
>STA.G hBuf >STA.G hBuf
CS.RUN.LOOP >SLEEP CS.RUN.LOOP >SLEEP
>PUSHWI BUFSIZE >PUSHWI BUFSIZE
>PUSHW ZPBufPtr >PUSHW ZPBufPtr
>LDA.G hSocket >LDA.G hSocket
@ -179,14 +184,15 @@ CS.RUN.LOOP >SLEEP
>PUSHW ZPBufPtr >PUSHW ZPBufPtr
ldy #S.PS.hStdOut ldy #S.PS.hStdOut
lda (pPs),y lda (pPs),y
>SYSCALL write >SYSCALL fwrite
bcs .11 bcs .11
.2 >PUSHWI BUFSIZE .2 >PUSHWI BUFSIZE
>PUSHW ZPBufPtr >PUSHW ZPBufPtr
ldy #S.PS.hStdIn ldy #S.PS.hStdIn
lda (pPs),y lda (pPs),y
>SYSCALL read
>SYSCALL fread
bcc .3 bcc .3
tay tay
beq CS.RUN.LOOP no char from STDIN beq CS.RUN.LOOP no char from STDIN
@ -198,14 +204,20 @@ CS.RUN.LOOP >SLEEP
cmp #3 Ctrl-C cmp #3 Ctrl-C
beq CS.RUN.USER beq CS.RUN.USER
>PUSHW ZPBufLen .4 >PUSHW ZPBufLen
>PUSHW ZPBufPtr >PUSHW ZPBufPtr
>LDA.G hSocket >LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Write >LIBCALL hLIBTCPIP,LIBTCPIP.Write
bcs CS.RUN.SKTERR bcc .8
jmp CS.RUN.LOOP tay
bne CS.RUN.SKTERR
* >SLEEP
* bra .4
.8 jmp CS.RUN.LOOP
.9 lda #0 .9 lda #0
sec sec

View File

@ -106,8 +106,16 @@ DNS.REQUEST lda hDNSSocket
rts rts
*-------------------------------------- *--------------------------------------
DNS.REQUEST.SEND DNS.REQUEST.SEND
ldy #3
* TODO : >PUSHW L.SOCKADDR.DNS1....DNS2 .1 lda IPCFG+S.IPCFG.DNS1,y
sta SA.REMOTE+S.SOCKADDR.ADDR,y
dey
bpl .1
>LDYAI UDP.PORT.DNS
>STYA SA.REMOTE+S.SOCKADDR.PORT
>PUSHW L.SA.REMOTE
>PUSHW DNS.MSG.LEN >PUSHW DNS.MSG.LEN
>PUSHW L.DNS.MSG >PUSHW L.DNS.MSG
@ -415,7 +423,7 @@ DNS.DecodeMsg sta hFrameIn
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPFrameInPtr >STYA ZPFrameInPtr
ldy #S.DNS.F+1 ldy #S.DNS.F
lda (ZPFrameInPtr),y lda (ZPFrameInPtr),y
and /S.DNS.F.QR and /S.DNS.F.QR
beq .9 beq .9

View File

@ -16,22 +16,19 @@ AUTO 4,1
* CC: A = hSOCKET * CC: A = hSOCKET
* CS: A = EC * CS: A = EC
*\-------------------------------------- *\--------------------------------------
SKT.Socket tax type (RAW,DGRAM,SEQPACKET,STREAM) SKT.Socket tax
>PULLA get protocol (RAW) >PULLA get protocol (RAW)
SKT.Socket.I jmp (J.SKT.Socket,x) SKT.Socket.I jmp (J.SKT.Socket,x)
SKT.Socket.RAW ldy #S.SOCKET socket.size SKT.Socket.RAW ldy #S.SOCKET
bra SKT.Socket.DSOCK bra SKT.Socket.DSOCK
SKT.Socket.DGRAM SKT.Socket.DGRAM
lda #S.IP.PROTOCOL.UDP lda #S.IP.PROTOCOL.UDP
ldy #S.SOCKET socket.size ldy #S.SOCKET
bra SKT.Socket.DSOCK bra SKT.Socket.DSOCK
SKT.Socket.SEQPACKET SKT.Socket.SEQPACKET
lda #S.IP.PROTOCOL.TCP lda #S.IP.PROTOCOL.TCP
ldy #S.SOCKET.TCP socket.size ldy #S.SOCKET.TCP
SKT.Socket.DSOCK SKT.Socket.DSOCK
stx FD.DSOCK+S.SOCKET.T save type stx FD.DSOCK+S.SOCKET.T save type
sta FD.DSOCK+S.SOCKET.PROTO ICMP,UDP,TCP sta FD.DSOCK+S.SOCKET.PROTO ICMP,UDP,TCP
@ -40,27 +37,27 @@ SKT.Socket.DSOCK
bcs .9 bcs .9
>STYA ZPTmpPtr1 >STYA ZPTmpPtr1
stx FD.DSOCK+S.FD.DSOCK.HSKT stx FD.DSOCK+S.FD.DSOCK.HSKT
jsr SKT.Socket.FindFree jsr SKT.Socket.FindFree
bcs .9 bcs .9
ldy #FD.DSOCK.SIZE-1 ldy #FD.DSOCK.SIZE-1
.1 lda FD.DSOCK,y .1 lda FD.DSOCK,y
sta (ZPTmpPtr1),y sta (ZPTmpPtr1),y
dey dey
bpl .1 bpl .1
txa txa
clc clc
.9 rts .9 rts
SKT.Socket.STREAM SKT.Socket.STREAM
lda #S.IP.PROTOCOL.TCP lda #S.IP.PROTOCOL.TCP
ldy #S.SOCKET.TCP ldy #S.SOCKET.TCP
stx FD.SSOCK+S.SOCKET.T save type stx FD.SSOCK+S.SOCKET.T save type
sta FD.SSOCK+S.SOCKET.PROTO ICMP,UDP,TCP sta FD.SSOCK+S.SOCKET.PROTO
lda #0 Y = socket.size lda #0 Y = socket.size
>SYSCALL GetMem0 >SYSCALL GetMem0
bcs .9 bcs .9
@ -116,22 +113,21 @@ SKT.Socket.FindFree
*\-------------------------------------- *\--------------------------------------
SKT.bind >SYSCALL GetMemPtr SKT.bind >SYSCALL GetMemPtr
>STYA ZPPtrSKT >STYA ZPPtrSKT
jsr SKT.PullLocAddr jsr SKT.PullLocAddr
lda SKT.LOC.ADDR+S.SOCKADDR.PORT lda SKT.LOC.ADDR+S.SOCKADDR.PORT
bne .1 bne .1
ldx SKT.LOC.ADDR+S.SOCKADDR.PORT+1 ldx SKT.LOC.ADDR+S.SOCKADDR.PORT+1
bne .1 bne .1
jsr GetDynPort jsr GetDynPort
sta SKT.LOC.ADDR+S.SOCKADDR.PORT sta SKT.LOC.ADDR+S.SOCKADDR.PORT
stx SKT.LOC.ADDR+S.SOCKADDR.PORT+1 stx SKT.LOC.ADDR+S.SOCKADDR.PORT+1
.1 jsr SKT.FindMatchingLoc .1 jsr SKT.FindMatchingLoc
bcc .9 bcc .9
jsr SKT.SetLocAddr jsr SKT.SetLocAddr
clc clc
@ -142,7 +138,7 @@ SKT.bind >SYSCALL GetMemPtr
rts rts
*/-------------------------------------- */--------------------------------------
* # Connect * # Connect
* Iinitiate a connection on a socket * Initiate a connection on a socket
* ## C * ## C
* `int connect(hFD fd, const struct sockaddr *addr);` * `int connect(hFD fd, const struct sockaddr *addr);`
* ## ASM * ## ASM
@ -163,71 +159,27 @@ SKT.connect >SYSCALL GetMemPtr
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
tax tax
jmp (J.SKT.connect,x) jmp (J.SKT.connect,x)
SKT.connect.RAW SKT.connect.RAW
SKT.connect.DGRAM SKT.connect.DGRAM
jsr SKT.SetRemAddr jsr SKT.SetRemAddr
clc clc
rts rts
SKT.connect.STREAM SKT.connect.STREAM
>LDYAI K.TCP.WSIZE
>SYSCALL getmem
bcs SKT.connect.99
txa
ldy #S.SOCKET.SQ.hInMem
sta (ZPPtrSKT),y
>LDYAI K.TCP.WSIZE
>SYSCALL getmem
bcs SKT.connect.99
txa
ldy #S.SOCKET.SQ.hOutMem
sta (ZPPtrSKT),y
SKT.connect.SEQPACKET SKT.connect.SEQPACKET
ldy #S.SOCKET.TCP.S
lda (ZPPtrSKT),y
bne SKT.connect.9
jsr SKT.SetRemAddr jsr SKT.SetRemAddr
jsr SKT.NewTCB
bcs SKT.connect.99
lda #K.TCP.WSIZE
ldy #S.SOCKET.TCP.INFREE
sta (ZPPtrSKT),y
ldy #S.SOCKET.TCP.OUTFREE
sta (ZPPtrSKT),y
lda /K.TCP.WSIZE
ldy #S.SOCKET.TCP.INFREE
sta (ZPPtrSKT),y
ldy #S.SOCKET.TCP.OUTFREE
sta (ZPPtrSKT),y
ldy #S.SOCKET.TCP.OUTNEXTSEQ
.2 lda A2osX.TIMER16-S.SOCKET.TCP.OUTNEXTSEQ,y
sta (ZPPtrSKT),y
iny
cpy #S.SOCKET.TCP.OUTNEXTSEQ+4
bne .2
lda #S.TCP.OPTIONS.SYN lda #S.TCP.OPTIONS.SYN
jsr TCP.OUT.SendOptA Send SYN jsr TCP.OUT.SendOptA Send SYN
bcs .9 bcs .9
ldy #S.SOCKET.TCP.S
lda #S.SOCKET.TCP.S.SYNSENT lda #S.SOCKET.TCP.S.SYNSENT
sta (ZPPtrSKT),y sta SKT.TmpCache+S.SOCKET.TCP.S
clc jmp SKT.StoreTCB
.9 rts
SKT.connect.9 lda #ERR.SKT.BAD .9 lda #ERR.SKT.BAD
sec sec
SKT.connect.99 rts SKT.connect.99 rts
*/-------------------------------------- */--------------------------------------
@ -358,9 +310,7 @@ SKT.shutdown >SYSCALL GetMemPtr
>SYSCALL FreeMem >SYSCALL FreeMem
bra .1 bra .1
.8 lda #0 .8 clc
sta (ZPPtrSKT)
clc
rts rts
.9 lda #ERR.SKT.BAD .9 lda #ERR.SKT.BAD
@ -474,7 +424,7 @@ SKT.Write >SYSCALL GetMemPtr
ldy #S.SOCKET.TCP.S ldy #S.SOCKET.TCP.S
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
cmp #S.SOCKET.TCP.S.ESTBLSH cmp #S.SOCKET.TCP.S.ESTBLSH
bne .91 bcc .90 Not yet established...no data
jsr SKT.AddDataToSktOut will call SKT.GetTCB jsr SKT.AddDataToSktOut will call SKT.GetTCB
bcs .90 bcs .90
@ -509,11 +459,16 @@ SKT.Write >SYSCALL GetMemPtr
* CC: A = hMem * CC: A = hMem
* CS: A = EC * CS: A = EC
*\-------------------------------------- *\--------------------------------------
SKT.RecvFrom sec SKT.RecvFrom pha
>PULLW ZPTmpPtr1 addr
pla
sec
.HS 90 BCC .HS 90 BCC
SKT.Recv clc SKT.Recv clc
php
php
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPPtrSKT >STYA ZPPtrSKT
@ -544,13 +499,12 @@ SKT.Recv clc
tay tay
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
plp plp
bcc .9 bcc .9 Exit with CC and A=hFrame
pha pha
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPFrameInPtr >STYA ZPFrameInPtr
>PULLW ZPTmpPtr1 addr
ldy #S.IP.SRC ldy #S.IP.SRC
.2 lda (ZPFrameInPtr),y .2 lda (ZPFrameInPtr),y
@ -625,41 +579,35 @@ SKT.Send clc
>STYA ZPPtrSKT >STYA ZPPtrSKT
plp plp
>PULLW ZPDataInPtr
>PULLW ZPDataInLen
bcc .1 bcc .1
jsr SKT.PullRemAddr jsr SKT.PullRemAddr
jsr SKT.SetRemAddr
.1 >PULLW ZPDataInPtr .1 ldy #S.SOCKET.T
>PULLW ZPDataInLen
ldy #S.SOCKET.T
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
tax tax
jmp (J.SKT.send,x) jmp (J.SKT.send,x)
*-------------------------------------- *--------------------------------------
SKT.Send.RAW ldy #S.SOCKET.PROTO SKT.Send.RAW ldy #S.SOCKET.PROTO
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
tax tax
>LDYA ZPDataInLen >LDYA ZPDataInLen
jsr FRM.NewIP jsr FRM.NewIP
bcs SKT.Send.9 bcs SKT.Send.9
bra SKT.Send.DGRAM.8 bra SKT.Send.DGRAM.8
*-------------------------------------- *--------------------------------------
SKT.Send.DGRAM ldx #S.IP.PROTOCOL.UDP SKT.Send.DGRAM ldx #S.IP.PROTOCOL.UDP
>LDYA ZPDataInLen >LDYA ZPDataInLen
jsr FRM.NewIP jsr FRM.NewIP
bcs SKT.Send.9 bcs SKT.Send.9
jsr SKT.SetFrameOutTCPUDPPorts jsr SKT.SetFrameOutTCPUDPPorts
SKT.Send.DGRAM.8 SKT.Send.DGRAM.8
jsr SKT.SetFrameOutDstIP jsr SKT.SetFrameOutDstIP
jsr SKT.CopyDataInToOut jsr SKT.CopyDataInToOut
jmp FRM.SendIP jmp FRM.SendIP
*-------------------------------------- *--------------------------------------
SKT.Send.STREAM lda #ERR.SKT.BAD SKT.Send.STREAM lda #ERR.SKT.BAD
@ -685,9 +633,7 @@ SKT.GetTable >LDYA L.SKT.Table
* PRIVATE * PRIVATE
*-------------------------------------- *--------------------------------------
SKT.PullLocAddr >PULLW ZPTmpPtr1 SKT.PullLocAddr >PULLW ZPTmpPtr1
ldy #S.SOCKADDR-1 ldy #S.SOCKADDR-1
.1 lda (ZPTmpPtr1),y .1 lda (ZPTmpPtr1),y
sta SKT.LOC.ADDR,y sta SKT.LOC.ADDR,y
dey dey
@ -695,9 +641,7 @@ SKT.PullLocAddr >PULLW ZPTmpPtr1
rts rts
*-------------------------------------- *--------------------------------------
SKT.PullRemAddr >PULLW ZPTmpPtr1 SKT.PullRemAddr >PULLW ZPTmpPtr1
ldy #S.SOCKADDR-1 ldy #S.SOCKADDR-1
.1 lda (ZPTmpPtr1),y .1 lda (ZPTmpPtr1),y
sta SKT.REM.ADDR,y sta SKT.REM.ADDR,y
dey dey
@ -705,7 +649,6 @@ SKT.PullRemAddr >PULLW ZPTmpPtr1
rts rts
*-------------------------------------- *--------------------------------------
SKT.SetLocAddr ldy #S.SOCKET.LOC.ADDR SKT.SetLocAddr ldy #S.SOCKET.LOC.ADDR
.1 lda SKT.LOC.ADDR+S.SOCKADDR.ADDR-S.SOCKET.LOC.ADDR,y .1 lda SKT.LOC.ADDR+S.SOCKADDR.ADDR-S.SOCKET.LOC.ADDR,y
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
iny iny
@ -714,7 +657,6 @@ SKT.SetLocAddr ldy #S.SOCKET.LOC.ADDR
rts rts
*-------------------------------------- *--------------------------------------
SKT.SetRemAddr ldy #S.SOCKET.REM.ADDR SKT.SetRemAddr ldy #S.SOCKET.REM.ADDR
.1 lda SKT.REM.ADDR+S.SOCKADDR.ADDR-S.SOCKET.REM.ADDR,y .1 lda SKT.REM.ADDR+S.SOCKADDR.ADDR-S.SOCKET.REM.ADDR,y
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
iny iny
@ -724,105 +666,118 @@ SKT.SetRemAddr ldy #S.SOCKET.REM.ADDR
*-------------------------------------- *--------------------------------------
SKT.FindMatchingLocRem SKT.FindMatchingLocRem
ldx #0 ldx #0
.1 lda SKT.TABLE,x .1 lda SKT.TABLE,x
beq .8 beq .8
phx phx
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPTmpPtr1 >STYA ZPTmpPtr1
plx plx
ldy #0 ldy #S.SOCKET.AF
lda (ZPTmpPtr1),y
cmp #AF.INET
bne .8
ldy #S.SOCKET.LOC.ADDR
.2 lda (ZPTmpPtr1),y .2 lda (ZPTmpPtr1),y
bne .4 bne .4
ldy #S.SOCKET.LOC.PORT This Socket is bound to 0.0.0.0,check only LOC port ldy #S.SOCKET.LOC.PORT This Socket is bound to 0.0.0.0,check only LOC port
.3 lda (ZPTmpPtr1),y .3 lda (ZPTmpPtr1),y
.4 cmp SKT.LOC.ADDR+S.SOCKADDR.ADDR-S.SOCKET.LOC.ADDR,y .4 cmp SKT.LOC.ADDR+S.SOCKADDR.ADDR-S.SOCKET.LOC.ADDR,y
bne .8 bne .8
iny iny
cpy #S.SOCKET.REM.ADDR cpy #S.SOCKET.LOC.PORT+2
bne .3 bne .3
lda SKT.REM.ADDR+S.SOCKADDR.ADDR
cmp #$ff FF.FF.FF.FF, Broadcast ?
bne .5
ldy #S.SOCKET.O ldy #S.SOCKET.O
lda (ZPTmpPtr1),y
and #S.SOCKET.O.ACCEPTCONN
beq .6
ldy #S.TCP.OPTIONS Listening, only SYN packet....
lda (ZPFrameInPtr),y
cmp #S.TCP.OPTIONS.SYN
beq .7 a SYN recieved on a LISTEN socket, ok
bne .8 bad packet for this listening
.6 lda SKT.REM.ADDR+S.SOCKADDR.ADDR
cmp #$ff FF.FF.FF.FF, Broadcast ?
bne .41
* ldy #S.SOCKET.O
lda (ZPTmpPtr1),y lda (ZPTmpPtr1),y
and #S.SOCKET.O.BROADCAST and #S.SOCKET.O.BROADCAST
beq .9 this socket does not accept broadcast beq .9 this socket does not accept broadcast
ldy #S.SOCKET.REM.PORT Boradcast, check port only ldy #S.SOCKET.REM.PORT Boradcast, check port only
bra .5
.41 ldy #S.SOCKET.REM.ADDR
.5 lda (ZPTmpPtr1),y .5 lda (ZPTmpPtr1),y
cmp SKT.REM.ADDR+S.SOCKADDR.ADDR-S.SOCKET.REM.ADDR,y cmp SKT.REM.ADDR+S.SOCKADDR.ADDR-S.SOCKET.REM.ADDR,y
bne .9 wrong remote host, exit.... bne .8 wrong remote host, exit....
iny iny
cpy #S.SOCKET.REM.PORT+2 cpy #S.SOCKET.REM.PORT+2
bne .5 bne .5
>LDYA ZPTmpPtr1 x = SKT.TABLE index .7 >LDYA ZPTmpPtr1 x = SKT.TABLE index
clc clc
rts rts
.8 inx .8 inx
cpx #K.SKTTABLE.SIZE cpx #K.SKTTABLE.SIZE
bne .1 bne .1
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
SKT.FindMatchingLoc SKT.FindMatchingLoc
ldy #S.SOCKET.LOC.PORT+1
phy
ldx #0 ldx #0
.1 lda SKT.TABLE,x .1 lda SKT.TABLE,x
beq .7 beq .7
phx phx
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPTmpPtr1 >STYA ZPTmpPtr1
plx plx
ply ldy #S.SOCKET.AF
phy lda (ZPTmpPtr1),y
cmp #AF.INET
bne .7
ldy #S.SOCKET.LOC.ADDR
.2 lda (ZPTmpPtr1),y .2 lda (ZPTmpPtr1),y
cmp SKT.LOC.ADDR+S.SOCKADDR.ADDR-S.SOCKET.LOC.ADDR,y cmp SKT.LOC.ADDR+S.SOCKADDR.ADDR-S.SOCKET.LOC.ADDR,y
bne .7 bne .7
dey iny
cpy #S.SOCKET.LOC.ADDR-1 cpy #S.SOCKET.LOC.PORT+2
bne .2 bne .2
ply
>LDYA ZPTmpPtr1 x = SKT.TABLE index >LDYA ZPTmpPtr1 x = SKT.TABLE index
clc clc
rts rts
.7 inx .7 inx
cpx #K.SKTTABLE.SIZE cpx #K.SKTTABLE.SIZE
bne .1 bne .1
ply
* sec * sec
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
* ZPPtrSKT -> actual socket * ZPPtrSKT -> actual socket
* A = hSocket or hFrame * A = hSocket or hFrame
*-------------------------------------- *--------------------------------------
SKT.AddToQueueA sta .2+1 SKT.AddToQueueA pha
ldy #S.SOCKET.HQ.HEAD ldy #S.SOCKET.HQ.HEAD
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
tax tax
@ -830,24 +785,25 @@ SKT.AddToQueueA sta .2+1
cmp #S.SOCKET.HQ.MAX cmp #S.SOCKET.HQ.MAX
bne .1 bne .1
lda #0 lda #0
.1 ldy #S.SOCKET.HQ.TAIL .1 ldy #S.SOCKET.HQ.TAIL
cmp (ZPPtrSKT),y cmp (ZPPtrSKT),y
beq .9 Queue full!! beq .9 Queue full!!
ldy #S.SOCKET.HQ.HEAD ldy #S.SOCKET.HQ.HEAD
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
txa txa
clc clc
adc #S.SOCKET.HQ adc #S.SOCKET.HQ
tay tay
.2 lda #$ff pla
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
clc clc
rts rts
.9 sec .9 pla dicard hFrame
* sec
rts rts
*-------------------------------------- *--------------------------------------
* From TCP.IN * From TCP.IN
@ -860,7 +816,7 @@ SKT.AddDataToSktIn
lda SKT.TmpCache+S.SOCKET.TCP.INFREE+1 lda SKT.TmpCache+S.SOCKET.TCP.INFREE+1
sbc ZPDataInLen+1 sbc ZPDataInLen+1
bcc .9 Not enough room in Q bcc .9 Not enough room in Q
ldy #S.TCP.SEQNUM+3 ldy #S.TCP.SEQNUM+3
ldx #3 ldx #3
@ -870,7 +826,7 @@ SKT.AddDataToSktIn
dey dey
dex dex
bpl .10 bpl .10
ldy #S.SOCKET.SQ.hInMem ldy #S.SOCKET.SQ.hInMem
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
@ -884,15 +840,15 @@ SKT.AddDataToSktIn
lda ZPTmpPtr1+1 lda ZPTmpPtr1+1
adc SKT.TmpCache+S.SOCKET.TCP.INHEAD+1 adc SKT.TmpCache+S.SOCKET.TCP.INHEAD+1
sta ZPTmpPtr2+1 Make ZPTmpPtr2=base+Tail sta ZPTmpPtr2+1 Make ZPTmpPtr2=base+Tail
lda ZPDataInLen lda ZPDataInLen
eor #$FF eor #$FF
tax tax
lda ZPDataInLen+1 lda ZPDataInLen+1
eor #$FF eor #$FF
pha pha
ldy #0 ldy #0
.1 inx .1 inx
@ -900,9 +856,9 @@ SKT.AddDataToSktIn
pla pla
inc inc
beq .8 beq .8
pha pha
.2 lda (ZPDataInPtr),y .2 lda (ZPDataInPtr),y
sta (ZPTmpPtr2) sta (ZPTmpPtr2)
iny iny
@ -912,7 +868,7 @@ SKT.AddDataToSktIn
.3 inc ZPTmpPtr2 .3 inc ZPTmpPtr2
bne .4 bne .4
inc ZPTmpPtr2+1 inc ZPTmpPtr2+1
.4 inc SKT.TmpCache+S.SOCKET.TCP.INHEAD .4 inc SKT.TmpCache+S.SOCKET.TCP.INHEAD
bne .1 bne .1
inc SKT.TmpCache+S.SOCKET.TCP.INHEAD+1 inc SKT.TmpCache+S.SOCKET.TCP.INHEAD+1
@ -920,7 +876,7 @@ SKT.AddDataToSktIn
cmp /K.TCP.WSIZE cmp /K.TCP.WSIZE
bne .1 bne .1
stz SKT.TmpCache+S.SOCKET.TCP.INHEAD+1 stz SKT.TmpCache+S.SOCKET.TCP.INHEAD+1
lda ZPTmpPtr1 Dst Ptr=Buffer Base lda ZPTmpPtr1 Dst Ptr=Buffer Base
sta ZPTmpPtr2 sta ZPTmpPtr2
lda ZPTmpPtr1+1 lda ZPTmpPtr1+1
@ -929,31 +885,31 @@ SKT.AddDataToSktIn
.9 sec .9 sec
rts rts
.8 lda SKT.TmpCache+S.SOCKET.TCP.INFREE .8 lda SKT.TmpCache+S.SOCKET.TCP.INFREE
sec sec
sbc ZPDataInLen sbc ZPDataInLen
sta SKT.TmpCache+S.SOCKET.TCP.INFREE sta SKT.TmpCache+S.SOCKET.TCP.INFREE
lda SKT.TmpCache+S.SOCKET.TCP.INFREE+1 lda SKT.TmpCache+S.SOCKET.TCP.INFREE+1
sbc ZPDataInLen+1 sbc ZPDataInLen+1
sta SKT.TmpCache+S.SOCKET.TCP.INFREE+1 sta SKT.TmpCache+S.SOCKET.TCP.INFREE+1
lda SKT.TmpCache+S.SOCKET.TCP.INUSED lda SKT.TmpCache+S.SOCKET.TCP.INUSED
clc clc
adc ZPDataInLen adc ZPDataInLen
sta SKT.TmpCache+S.SOCKET.TCP.INUSED sta SKT.TmpCache+S.SOCKET.TCP.INUSED
lda SKT.TmpCache+S.SOCKET.TCP.INUSED+1 lda SKT.TmpCache+S.SOCKET.TCP.INUSED+1
adc ZPDataInLen+1 adc ZPDataInLen+1
sta SKT.TmpCache+S.SOCKET.TCP.INUSED+1 sta SKT.TmpCache+S.SOCKET.TCP.INUSED+1
clc clc
lda SKT.TmpCache+S.SOCKET.TCP.INLASTSEQNUM+3 lda SKT.TmpCache+S.SOCKET.TCP.INLASTSEQNUM+3
adc ZPDataInLen adc ZPDataInLen
sta SKT.TmpCache+S.SOCKET.TCP.INLASTSEQNUM+3 sta SKT.TmpCache+S.SOCKET.TCP.INLASTSEQNUM+3
lda SKT.TmpCache+S.SOCKET.TCP.INLASTSEQNUM+2 lda SKT.TmpCache+S.SOCKET.TCP.INLASTSEQNUM+2
adc ZPDataInLen+1 adc ZPDataInLen+1
sta SKT.TmpCache+S.SOCKET.TCP.INLASTSEQNUM+2 sta SKT.TmpCache+S.SOCKET.TCP.INLASTSEQNUM+2
@ -993,20 +949,20 @@ SKT.GetDataFromSktIn
lda ZPTmpPtr1+1 lda ZPTmpPtr1+1
adc SKT.TmpCache+S.SOCKET.TCP.INTAIL+1 adc SKT.TmpCache+S.SOCKET.TCP.INTAIL+1
sta ZPTmpPtr2+1 sta ZPTmpPtr2+1
lda ZPDataInLen lda ZPDataInLen
eor #$FF eor #$FF
tax tax
lda ZPDataInLen+1 lda ZPDataInLen+1
eor #$FF eor #$FF
pha pha
stz ZPTmpPtr3 Reset byte counter stz ZPTmpPtr3 Reset byte counter
stz ZPTmpPtr3+1 stz ZPTmpPtr3+1
ldy #0 ldy #0
.1 inx Check if room left in dest buffer .1 inx Check if room left in dest buffer
bne .2 bne .2
pla pla
@ -1014,60 +970,60 @@ SKT.GetDataFromSktIn
beq .8 beq .8
pha pha
.2 lda SKT.TmpCache+S.SOCKET.TCP.INTAIL .2 lda SKT.TmpCache+S.SOCKET.TCP.INTAIL
eor SKT.TmpCache+S.SOCKET.TCP.INHEAD eor SKT.TmpCache+S.SOCKET.TCP.INHEAD
bne .3 bne .3
lda SKT.TmpCache+S.SOCKET.TCP.INTAIL+1 lda SKT.TmpCache+S.SOCKET.TCP.INTAIL+1
eor SKT.TmpCache+S.SOCKET.TCP.INHEAD+1 eor SKT.TmpCache+S.SOCKET.TCP.INHEAD+1
beq .7 no more data.... beq .7 no more data....
.3 lda (ZPTmpPtr2) .3 lda (ZPTmpPtr2)
pha pha
inc SKT.TmpCache+S.SOCKET.TCP.INTAIL inc SKT.TmpCache+S.SOCKET.TCP.INTAIL
bne .4 bne .4
inc SKT.TmpCache+S.SOCKET.TCP.INTAIL+1 inc SKT.TmpCache+S.SOCKET.TCP.INTAIL+1
lda SKT.TmpCache+S.SOCKET.TCP.INTAIL+1 lda SKT.TmpCache+S.SOCKET.TCP.INTAIL+1
cmp /K.TCP.WSIZE cmp /K.TCP.WSIZE
bne .4 bne .4
stz SKT.TmpCache+S.SOCKET.TCP.INTAIL+1 stz SKT.TmpCache+S.SOCKET.TCP.INTAIL+1
lda ZPTmpPtr1 lda ZPTmpPtr1
sta ZPTmpPtr2 sta ZPTmpPtr2
lda ZPTmpPtr1+1 lda ZPTmpPtr1+1
sta ZPTmpPtr2+1 sta ZPTmpPtr2+1
bra .5 bra .5
.4 inc ZPTmpPtr2 .4 inc ZPTmpPtr2
bne .5 bne .5
inc ZPTmpPtr2+1 inc ZPTmpPtr2+1
.5 pla get back data.... .5 pla get back data....
.6 sta (ZPDataInPtr),y .6 sta (ZPDataInPtr),y
iny iny
bne .61 bne .61
inc ZPDataInPtr+1 inc ZPDataInPtr+1
.61 inc ZPTmpPtr3 .61 inc ZPTmpPtr3
bne .1 bne .1
inc ZPTmpPtr3+1 inc ZPTmpPtr3+1
bra .1 bra .1
.7 pla discard byte counter HI .7 pla discard byte counter HI
.8 lda ZPTmpPtr3 Do we have transfered something? .8 lda ZPTmpPtr3 Do we have transfered something?
ora ZPTmpPtr3+1 ora ZPTmpPtr3+1
beq .9 beq .9
lda SKT.TmpCache+S.SOCKET.TCP.INFREE lda SKT.TmpCache+S.SOCKET.TCP.INFREE
clc clc
adc ZPTmpPtr3 adc ZPTmpPtr3
sta SKT.TmpCache+S.SOCKET.TCP.INFREE sta SKT.TmpCache+S.SOCKET.TCP.INFREE
lda SKT.TmpCache+S.SOCKET.TCP.INFREE+1 lda SKT.TmpCache+S.SOCKET.TCP.INFREE+1
adc ZPTmpPtr3+1 adc ZPTmpPtr3+1
sta SKT.TmpCache+S.SOCKET.TCP.INFREE+1 sta SKT.TmpCache+S.SOCKET.TCP.INFREE+1
@ -1085,16 +1041,16 @@ SKT.GetDataFromSktIn
clc clc
adc ZPTmpPtr3 adc ZPTmpPtr3
sta SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM+3 sta SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM+3
lda SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM+2 lda SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM+2
adc ZPTmpPtr3+1 adc ZPTmpPtr3+1
sta SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM+2 sta SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM+2
bcc .80 bcc .80
inc SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM+1 inc SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM+1
bne .80 bne .80
inc SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM inc SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM
.80 jsr SKT.StoreTCB .80 jsr SKT.StoreTCB
ldy #S.SOCKET.TCP.O ldy #S.SOCKET.TCP.O
@ -1103,11 +1059,10 @@ SKT.GetDataFromSktIn
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
jsr TCP.OUT.I SKT.GetTCB already called, Try to ACK read DATA jsr TCP.OUT.I SKT.GetTCB already called, Try to ACK read DATA
>LDYA ZPTmpPtr3 >LDYA ZPTmpPtr3
clc clc
rts rts
.9 .9
* lda #0 NO DATA * lda #0 NO DATA
sec sec
@ -1138,15 +1093,15 @@ SKT.AddDataToSktOut
lda ZPTmpPtr1+1 lda ZPTmpPtr1+1
adc SKT.TmpCache+S.SOCKET.TCP.OUTHEAD+1 adc SKT.TmpCache+S.SOCKET.TCP.OUTHEAD+1
sta ZPTmpPtr2+1 Make ZPTmpPtr2=base+Tail sta ZPTmpPtr2+1 Make ZPTmpPtr2=base+Tail
lda ZPDataInLen lda ZPDataInLen
eor #$FF eor #$FF
tax tax
lda ZPDataInLen+1 lda ZPDataInLen+1
eor #$FF eor #$FF
pha pha
ldy #0 ldy #0
.1 inx .1 inx
@ -1154,9 +1109,9 @@ SKT.AddDataToSktOut
pla pla
inc inc
beq .8 beq .8
pha pha
.2 lda (ZPDataInPtr),y .2 lda (ZPDataInPtr),y
sta (ZPTmpPtr2) sta (ZPTmpPtr2)
iny iny
@ -1166,7 +1121,7 @@ SKT.AddDataToSktOut
.3 inc ZPTmpPtr2 .3 inc ZPTmpPtr2
bne .4 bne .4
inc ZPTmpPtr2+1 inc ZPTmpPtr2+1
.4 inc SKT.TmpCache+S.SOCKET.TCP.OUTHEAD .4 inc SKT.TmpCache+S.SOCKET.TCP.OUTHEAD
bne .1 bne .1
inc SKT.TmpCache+S.SOCKET.TCP.OUTHEAD+1 inc SKT.TmpCache+S.SOCKET.TCP.OUTHEAD+1
@ -1174,7 +1129,7 @@ SKT.AddDataToSktOut
cmp /K.TCP.WSIZE cmp /K.TCP.WSIZE
bne .1 bne .1
stz SKT.TmpCache+S.SOCKET.TCP.OUTHEAD+1 stz SKT.TmpCache+S.SOCKET.TCP.OUTHEAD+1
lda ZPTmpPtr1 Dst Ptr=Buffer Base lda ZPTmpPtr1 Dst Ptr=Buffer Base
sta ZPTmpPtr2 sta ZPTmpPtr2
lda ZPTmpPtr1+1 lda ZPTmpPtr1+1
@ -1183,7 +1138,7 @@ SKT.AddDataToSktOut
.9 sec .9 sec
rts rts
.8 lda SKT.TmpCache+S.SOCKET.TCP.OUTFREE .8 lda SKT.TmpCache+S.SOCKET.TCP.OUTFREE
sec sec
sbc ZPDataInLen sbc ZPDataInLen
@ -1191,7 +1146,7 @@ SKT.AddDataToSktOut
lda SKT.TmpCache+S.SOCKET.TCP.OUTFREE+1 lda SKT.TmpCache+S.SOCKET.TCP.OUTFREE+1
sbc ZPDataInLen+1 sbc ZPDataInLen+1
sta SKT.TmpCache+S.SOCKET.TCP.OUTFREE+1 sta SKT.TmpCache+S.SOCKET.TCP.OUTFREE+1
lda SKT.TmpCache+S.SOCKET.TCP.OUTUSED lda SKT.TmpCache+S.SOCKET.TCP.OUTUSED
clc clc
adc ZPDataInLen adc ZPDataInLen
@ -1199,7 +1154,7 @@ SKT.AddDataToSktOut
lda SKT.TmpCache+S.SOCKET.TCP.OUTUSED+1 lda SKT.TmpCache+S.SOCKET.TCP.OUTUSED+1
adc ZPDataInLen+1 adc ZPDataInLen+1
sta SKT.TmpCache+S.SOCKET.TCP.OUTUSED+1 sta SKT.TmpCache+S.SOCKET.TCP.OUTUSED+1
lda SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND lda SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND
clc clc
adc ZPDataInLen adc ZPDataInLen
@ -1207,8 +1162,7 @@ SKT.AddDataToSktOut
lda SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND+1 lda SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND+1
adc ZPDataInLen+1 adc ZPDataInLen+1
sta SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND+1 sta SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND+1
jsr SKT.StoreTCB jmp SKT.StoreTCB
rts
*-------------------------------------- *--------------------------------------
* From TCP.OUT * From TCP.OUT
* Src : hOutMem/OUTTAIL * Src : hOutMem/OUTTAIL
@ -1217,7 +1171,7 @@ SKT.AddDataToSktOut
SKT.GetDataFromSktOut SKT.GetDataFromSktOut
ldy #S.SOCKET.SQ.hOutMem ldy #S.SOCKET.SQ.hOutMem
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base >STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base
@ -1229,15 +1183,15 @@ SKT.GetDataFromSktOut
lda ZPTmpPtr1+1 lda ZPTmpPtr1+1
adc SKT.TmpCache+S.SOCKET.TCP.OUTTAILNEXT+1 adc SKT.TmpCache+S.SOCKET.TCP.OUTTAILNEXT+1
sta ZPTmpPtr2+1 sta ZPTmpPtr2+1
lda ZPDataOutLen lda ZPDataOutLen
eor #$FF eor #$FF
tax tax
lda ZPDataOutLen+1 lda ZPDataOutLen+1
eor #$FF eor #$FF
pha pha
ldy #0 ldy #0
.1 inx .1 inx
@ -1245,9 +1199,9 @@ SKT.GetDataFromSktOut
pla pla
inc inc
beq .8 beq .8
pha pha
.2 lda (ZPTmpPtr2) .2 lda (ZPTmpPtr2)
sta (ZPDataOutPtr),y sta (ZPDataOutPtr),y
iny iny
@ -1257,7 +1211,7 @@ SKT.GetDataFromSktOut
.3 inc ZPTmpPtr2 .3 inc ZPTmpPtr2
bne .4 bne .4
inc ZPTmpPtr2+1 inc ZPTmpPtr2+1
.4 inc SKT.TmpCache+S.SOCKET.TCP.OUTTAILNEXT .4 inc SKT.TmpCache+S.SOCKET.TCP.OUTTAILNEXT
bne .1 bne .1
inc SKT.TmpCache+S.SOCKET.TCP.OUTTAILNEXT+1 inc SKT.TmpCache+S.SOCKET.TCP.OUTTAILNEXT+1
@ -1265,7 +1219,7 @@ SKT.GetDataFromSktOut
cmp /K.TCP.WSIZE cmp /K.TCP.WSIZE
bne .1 bne .1
stz SKT.TmpCache+S.SOCKET.TCP.OUTTAILNEXT+1 stz SKT.TmpCache+S.SOCKET.TCP.OUTTAILNEXT+1
lda ZPTmpPtr1 Dst Ptr=Buffer Base lda ZPTmpPtr1 Dst Ptr=Buffer Base
sta ZPTmpPtr2 sta ZPTmpPtr2
lda ZPTmpPtr1+1 lda ZPTmpPtr1+1
@ -1279,7 +1233,7 @@ SKT.GetDataFromSktOut
lda SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND+1 lda SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND+1
sbc ZPDataOutLen+1 sbc ZPDataOutLen+1
sta SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND+1 sta SKT.TmpCache+S.SOCKET.TCP.OUTTOSEND+1
clc clc
rts rts
*-------------------------------------- *--------------------------------------
@ -1302,22 +1256,21 @@ SKT.AckDataToSktOut
dey dey
dex dex
bpl .1 bpl .1
lda TmpDWord+3 lda TmpDWord+3
ldx TmpDWord+2 ldx TmpDWord+2
bne .2 bne .2
tay tay
beq .8 beq .8
.2 clc .2 clc
adc SKT.TmpCache+S.SOCKET.TCP.OUTTAIL adc SKT.TmpCache+S.SOCKET.TCP.OUTTAIL
sta SKT.TmpCache+S.SOCKET.TCP.OUTTAIL sta SKT.TmpCache+S.SOCKET.TCP.OUTTAIL
txa txa
adc SKT.TmpCache+S.SOCKET.TCP.OUTTAIL+1 adc SKT.TmpCache+S.SOCKET.TCP.OUTTAIL+1
and /K.TCP.WSIZE-1 and /K.TCP.WSIZE-1
sta SKT.TmpCache+S.SOCKET.TCP.OUTTAIL+1 sta SKT.TmpCache+S.SOCKET.TCP.OUTTAIL+1
lda SKT.TmpCache+S.SOCKET.TCP.OUTFREE lda SKT.TmpCache+S.SOCKET.TCP.OUTFREE
clc clc
adc TmpDWord+3 adc TmpDWord+3
@ -1325,7 +1278,7 @@ SKT.AckDataToSktOut
lda SKT.TmpCache+S.SOCKET.TCP.OUTFREE+1 lda SKT.TmpCache+S.SOCKET.TCP.OUTFREE+1
adc TmpDWord+2 adc TmpDWord+2
sta SKT.TmpCache+S.SOCKET.TCP.OUTFREE+1 sta SKT.TmpCache+S.SOCKET.TCP.OUTFREE+1
lda SKT.TmpCache+S.SOCKET.TCP.OUTUSED lda SKT.TmpCache+S.SOCKET.TCP.OUTUSED
sec sec
sbc TmpDWord+3 sbc TmpDWord+3
@ -1333,57 +1286,83 @@ SKT.AckDataToSktOut
lda SKT.TmpCache+S.SOCKET.TCP.OUTUSED+1 lda SKT.TmpCache+S.SOCKET.TCP.OUTUSED+1
sbc TmpDWord+2 sbc TmpDWord+2
sta SKT.TmpCache+S.SOCKET.TCP.OUTUSED+1 sta SKT.TmpCache+S.SOCKET.TCP.OUTUSED+1
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
SKT.GetTCB ldy #S.SOCKET.TCP-S.SOCKET SKT.NewTCB ldx #S.SOCKET
.1 dey .1 stz SKT.TmpCache,x
lda (ZPPtrSKT),y inx
sta SKT.TmpCache,y cpx #S.SOCKET.TCP
cpy #S.SOCKET
bne .1 bne .1
>LDYAI K.TCP.WSIZE
>STYA SKT.TmpCache+S.SOCKET.TCP.INFREE
>SYSCALL getmem
bcs SKT.StoreTCB.RTS
txa
ldy #S.SOCKET.SQ.hInMem
sta (ZPPtrSKT),y
>LDYAI K.TCP.WSIZE
>STYA SKT.TmpCache+S.SOCKET.TCP.OUTFREE
>SYSCALL getmem
bcs SKT.StoreTCB.RTS
txa
ldy #S.SOCKET.SQ.hOutMem
sta (ZPPtrSKT),y
ldx #3
.2 lda A2osX.TIMER16,x
sta SKT.TmpCache+S.SOCKET.TCP.OUTNEXTSEQ,x
dex
bpl .2
*--------------------------------------
SKT.StoreTCB ldy #S.SOCKET
.1 lda SKT.TmpCache,y
sta (ZPPtrSKT),y
iny
cpy #S.SOCKET.TCP
bne .1
clc Make CC for successfull exit
SKT.StoreTCB.RTS
rts rts
*-------------------------------------- *--------------------------------------
SKT.StoreTCB ldy #S.SOCKET.TCP-S.SOCKET SKT.GetTCB ldy #S.SOCKET
.1 lda (ZPPtrSKT),y
.1 dey sta SKT.TmpCache,y
lda SKT.TmpCache,y iny
sta (ZPPtrSKT),y cpy #S.SOCKET.TCP
cpy #S.SOCKET
bne .1 bne .1
rts rts
*-------------------------------------- *--------------------------------------
SKT.Destroy ldy #S.SOCKET.SQ.hOutMem SKT.Destroy ldy #S.SOCKET.SQ.hOutMem
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
beq .1 beq .1
>SYSCALL FreeMem >SYSCALL FreeMem
.1 ldy #S.SOCKET.SQ.hInMem .1 ldy #S.SOCKET.SQ.hInMem
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
beq .2 beq .2
>SYSCALL FreeMem >SYSCALL FreeMem
.2 lda #0 .2 clc
sta (ZPPtrSKT)
clc
rts rts
*-------------------------------------- *--------------------------------------
SKT.SetFrameOutDstIP SKT.SetFrameOutDstIP
ldy #S.SOCKET.REM.ADDR ldy #S.SOCKET.REM.ADDR
ldx #4 ldx #4
.1 lda (ZPPtrSKT),y .1 lda (ZPPtrSKT),y
pha pha
iny iny
dex dex
bne .1 bne .1
ldy #S.IP.DST+3 ldy #S.IP.DST+3
ldx #4 ldx #4
.2 pla .2 pla
sta (ZPFrameOutPtr),y sta (ZPFrameOutPtr),y
dey dey

View File

@ -4,13 +4,12 @@ AUTO 4,1
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
TCP.IN jsr FRM.GetTargetSKT.TCPUDP TCP.IN jsr FRM.GetTargetSKT.TCPUDP
>DEBUG
jsr SKT.FindMatchingLocRem jsr SKT.FindMatchingLocRem
bcs TCP.IN.JMP.CLOSED no socket, go discard bcs TCP.IN.JMP.CLOSED no socket, go discard
>STYA ZPPtrSKT >STYA ZPPtrSKT
ldy #S.SOCKET.PROTO ldy #S.SOCKET.PROTO
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
cmp #S.IP.PROTOCOL.TCP cmp #S.IP.PROTOCOL.TCP
@ -35,20 +34,15 @@ TCP.IN.JMP.CLOSED
rts rts
*-------------------------------------- *--------------------------------------
TCP.IN.JMP.LISTEN TCP.IN.JMP.LISTEN
ldy #S.TCP.OPTIONS SYN Received, send SYN.ACK packet
lda (ZPFrameInPtr),y
cmp #S.TCP.OPTIONS.SYN
bne TCP.IN.JMP.CLOSED
ldy #S.SOCKET.T Create a new client socket ldy #S.SOCKET.T Create a new client socket
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
tax Same type a listening socket tax Same type a listening socket
iny #S.SOCKET.PROTO
lda (ZPPtrSKT),y
jsr SKT.Socket.I get new socket in ZPTmpPtr1 jsr SKT.Socket.I get new socket in ZPTmpPtr1
bcs TCP.IN.JMP.CLOSED bcs TCP.IN.JMP.CLOSED
txa
jsr SKT.AddToQueueA Queued successfully ? jsr SKT.AddToQueueA Queued successfully ?
bcs TCP.IN.JMP.CLOSED no, discard frame and new socket bcs TCP.IN.JMP.CLOSED no, discard frame and new socket
@ -57,27 +51,26 @@ TCP.IN.JMP.LISTEN
lda ZPTmpPtr1 lda ZPTmpPtr1
sta ZPPtrSKT sta ZPPtrSKT
ldaZPTmpPtr1+1 lda ZPTmpPtr1+1
sta ZPPtrSKT+1 sta ZPPtrSKT+1
jsr TCP.IN.ACKTheSYN jsr SKT.SetLocAddr
jsr SKT.SetRemAddr
jsr SKT.NewTCB
bcs .99
jsr SKT.StoreTCB jsr TCP.IN.ACKTheSYN
lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK
jsr TCP.OUT.SendOptA SYN received, Send SYN.ACK jsr TCP.OUT.SendOptA SYN received, Send SYN.ACK
bcs .9 bcs .9
ldy #S.SOCKET.TCP.S
lda #S.SOCKET.TCP.S.SYNRCVD lda #S.SOCKET.TCP.S.SYNRCVD
sta (ZPPtrSKT),y sta SKT.TmpCache+S.SOCKET.TCP.S
jmp SKT.StoreTCB
clc .9 lda #ERR.SKT.OOS
rts
.9 lda #0 error
sta (ZPPtrSKT) clear this socket
lda #ERR.SKT.OOS
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
TCP.IN.JMP.SYNSENT TCP.IN.JMP.SYNSENT
@ -109,10 +102,8 @@ TCP.IN.JMP.SYNSENT
jsr TCP.OUT.SendOptA SYN.ACK recieved, Send, ACK jsr TCP.OUT.SendOptA SYN.ACK recieved, Send, ACK
bcs .9 bcs .9
ldy #S.SOCKET.TCP.S
lda #S.SOCKET.TCP.S.ESTBLSH lda #S.SOCKET.TCP.S.ESTBLSH
sta (ZPPtrSKT),y sta SKT.TmpCache+S.SOCKET.TCP.S
jmp SKT.StoreTCB jmp SKT.StoreTCB
.9 lda #S.TCP.OPTIONS.RST .9 lda #S.TCP.OPTIONS.RST
@ -143,9 +134,8 @@ TCP.IN.JMP.SYNRCVD
dex dex
bpl .1 bpl .1
ldy #S.SOCKET.TCP.S
lda #S.SOCKET.TCP.S.ESTBLSH lda #S.SOCKET.TCP.S.ESTBLSH
sta (ZPPtrSKT),y sta SKT.TmpCache+S.SOCKET.TCP.S
jmp SKT.StoreTCB jmp SKT.StoreTCB
.8 clc .8 clc
@ -185,12 +175,13 @@ TCP.IN.JMP.ESTBLSH
ldy #S.SOCKET.TCP.S ldy #S.SOCKET.TCP.S
lda #S.SOCKET.TCP.S.CLWAIT lda #S.SOCKET.TCP.S.CLWAIT
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
jmp SKT.StoreTCB
.8 clc .8 clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
TCP.IN.JMP.CLWAIT TCP.IN.JMP.CLWAIT
clc Wait for SKT.CloseA from Daemon clc Wait for SKT.shutdown
rts rts
*-------------------------------------- *--------------------------------------
TCP.IN.JMP.LASTACK TCP.IN.JMP.LASTACK

View File

@ -133,16 +133,16 @@ J.TCP.IN .DA TCP.IN.JMP.CLOSED
.DA TCP.IN.JMP.TIMEWT .DA TCP.IN.JMP.TIMEWT
J.SKT.Socket .DA SKT.Socket.RAW J.SKT.Socket .DA SKT.Socket.RAW
.DA SKT.Socket.DGRAM .DA SKT.Socket.DGRAM
.DA SKT.Socket.STREAM
.DA SKT.Socket.SEQPACKET .DA SKT.Socket.SEQPACKET
.DA SKT.Socket.STREAM
J.SKT.connect .DA SKT.connect.RAW J.SKT.connect .DA SKT.connect.RAW
.DA SKT.connect.DGRAM .DA SKT.connect.DGRAM
.DA SKT.connect.STREAM
.DA SKT.connect.SEQPACKET .DA SKT.connect.SEQPACKET
.DA SKT.connect.STREAM
J.SKT.send .DA SKT.send.RAW J.SKT.send .DA SKT.send.RAW
.DA SKT.send.DGRAM .DA SKT.send.DGRAM
.DA SKT.send.STREAM
.DA SKT.send.SEQPACKET .DA SKT.send.SEQPACKET
.DA SKT.send.STREAM
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
LIB.LOAD ldx RefCount LIB.LOAD ldx RefCount
@ -211,7 +211,6 @@ POLL >PUSHW L.IOCTL
jmp IP.IN jmp IP.IN
.9 lda hFrameIn .9 lda hFrameIn
beq LIB.UNLOAD.8
>SYSCALL FreeMem >SYSCALL FreeMem
.99 rts .99 rts
@ -222,11 +221,10 @@ POLL >PUSHW L.IOCTL
PULSE and #S.EVT.F.T1SEC PULSE and #S.EVT.F.T1SEC
beq .1 beq .1
* jsr ARP.EXPIRE jsr ARP.EXPIRE
* jsr DNS.EXPIRE jsr DNS.EXPIRE
.1 .1 jsr DNS.POLL
* jsr DNS.POLL
jmp FRM.RETRY jmp FRM.RETRY
*-------------------------------------- *--------------------------------------
GetDynPort inc DYNPORT.LAST GetDynPort inc DYNPORT.LAST
@ -319,9 +317,9 @@ FD.DSOCK.SIZE .EQ *-FD.DSOCK
*-------------------------------------- *--------------------------------------
FD.SSOCK .DA #S.FD.T.SSOCK FD.SSOCK .DA #S.FD.T.SSOCK
.BS 1 S.FD.HANDLER .BS 1 S.FD.HANDLER
.BS 1 S.FD.DSOCK.HSKT .BS 1 S.FD.SSOCK.HSKT
.DA #0 S.FD.DSOCK.OPEN .DA #0 S.FD.SSOCK.OPEN
.DA #0 S.FD.DSOCK.CLOSE .DA #0 S.FD.SSOCK.CLOSE
.DA #LIBTCPIP.Read .DA #LIBTCPIP.Read
.DA #LIBTCPIP.Write .DA #LIBTCPIP.Write
.DA #0 S.FD.DSOCK.STATUS .DA #0 S.FD.DSOCK.STATUS

View File

@ -55,6 +55,7 @@ CS.RUN ldy #S.PS.ARGC
>PUSHBI O.RDWR >PUSHBI O.RDWR
lda #1 lda #1
>SYSCALL ArgV get /dev/xxx >SYSCALL ArgV get /dev/xxx
>SYSCALL fopen >SYSCALL fopen
bcs .9 bcs .9

View File

@ -40,14 +40,14 @@ CS.START cld
.DA CS.QUIT .DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP L.LIBTCPIP .DA LIBTCPIP
L.SA.LOCAL .DA SA.LOCAL L.SA.LOCAL .DA SA.LOCAL
L.NOD.Template .DA NOD.Template
L.NOD.Name .DA NOD.Name
L.MSG.TCPWAIT .DA MSG.TCPWAIT L.MSG.TCPWAIT .DA MSG.TCPWAIT
L.MSG.INITOK .DA MSG.INITOK L.MSG.INITOK .DA MSG.INITOK
L.MSG.TCPIPERR .DA MSG.TCPIPERR L.MSG.TCPIPERR .DA MSG.TCPIPERR
L.MSG.SKTERR .DA MSG.SKTERR L.MSG.SKTERR .DA MSG.SKTERR
L.MSG.ABORT .DA MSG.ABORT L.MSG.ABORT .DA MSG.ABORT
L.MSG.INCOMING .DA MSG.INCOMING L.MSG.INCOMING .DA MSG.INCOMING
L.NOD.Template .DA NOD.Template
L.CMD.Template .DA CMD.Template
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
CS.INIT >LDYA L.LIBTCPIP CS.INIT >LDYA L.LIBTCPIP
@ -163,6 +163,8 @@ CS.RUN.CLIENT sta (pData),y
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPSktPtr >STYA ZPSktPtr
>PUSHB.G hClientSocket
ldx #3 ldx #3
ldy #S.SOCKET.REM.ADDR+3 ldy #S.SOCKET.REM.ADDR+3
@ -171,24 +173,34 @@ CS.RUN.CLIENT sta (pData),y
dex dex
bpl .3 bpl .3
>PUSHB.G hClientSocket
>PUSHBI 5 >PUSHBI 5
>LDYA L.MSG.INCOMING >LDYA L.MSG.INCOMING
>SYSCALL printf >SYSCALL printf
bcs .9
>PUSHB.G hClientSocket >PUSHB.G hClientSocket
>PUSHBI 1 >PUSHBI 1
>PUSHWI L.NOD.Template >PUSHW L.NOD.Template
>LDYAI L.NOD.Name >LEA.G NodBuf
>SYSCALL sprintf >SYSCALL sprintf
>PUSHB.G hClientSocket >PUSHB.G hClientSocket
>PUSHW 0 >PUSHW 0
>LDYAI L.NOD.Name >LEA.G NodBuf
>SYSCALL mknod >SYSCALL mknod
bcs .9
>PUSHEA.G NodBuf
>PUSHBI 2
>PUSHW L.CMD.Template
>LEA.G CmdBuf
>SYSCALL sprintf
>LEA.G CmdBuf
>SYSCALL puts
>PUSHBI S.PS.F.DUPENV
>LEA.G CmdBuf
>SYSCALL execl
.8 clc .8 clc
.9 rts .9 rts
@ -221,8 +233,7 @@ CS.QUIT ldx #CONN.MAX
dex dex
bne .1 bne .1
ldy #hSrvSocket >LDA.G hSrvSocket
lda (pData),y
beq .3 beq .3
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown >LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
@ -253,22 +264,14 @@ MSG.TCPIPERR .AZ "TELNETD:TCP/IP Not initialized properly"
MSG.SKTERR .AZ "TELNETD:Listen Error." MSG.SKTERR .AZ "TELNETD:Listen Error."
MSG.ABORT .AZ "TELNETD:User Aborted." MSG.ABORT .AZ "TELNETD:User Aborted."
MSG.INCOMING .AZ "TELNETD:Incoming Connection [SKT=%h] From : %d.%d.%d.%d\r\n" MSG.INCOMING .AZ "TELNETD:Incoming Connection [SKT=%h] From : %d.%d.%d.%d\r\n"
CMD.LINE .AS "${A2OSX}SBIN/GETTY " *--------------------------------------
NOD.Template .AZ "/DEV/TTY%h"
.AZ " ${A2OSX}SBIN/LOGIN" CMD.Template .AZ "${A2OSX}SBIN/GETTY %s ${A2OSX}SBIN/LOGIN"
*-------------------------------------- *--------------------------------------
SA.LOCAL .DA #AF.INET S.SOCKADDR.AF SA.LOCAL .DA #AF.INET S.SOCKADDR.AF
.BS 1 .BS 1
.BS 4 S.SOCKADDR.ADDR .BS 4 S.SOCKADDR.ADDR
.DA TCP.PORT.TELNET .DA TCP.PORT.TELNET
*--------------------------------------
SA.REMOTE .DA #AF.INET S.SOCKADDR.AF
.BS 1
.BS 4 S.SOCKADDR.ADDR
.BS 2 S.SOCKADDR.PORT
*--------------------------------------
NOD.Template .AZ "/DEV/TTY%h"
NOD.Name .AZ " "
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR 0 .OR 0
@ -278,7 +281,8 @@ SktIndex .BS 1
hSrvSocket .BS 1 hSrvSocket .BS 1
hClientSocket .BS 1 hClientSocket .BS 1
TimeOut .BS 1 TimeOut .BS 1
NodBuf .BS 11
CmdBuf .BS 65
DS.END DS.END
.ED .ED
*-------------------------------------- *--------------------------------------

View File

@ -45,17 +45,45 @@ IO.Open.I jsr STDIO.SetMLIPathYA
>LDYAI K.MLI.PATH+6 skip $/DEV/ >LDYAI K.MLI.PATH+6 skip $/DEV/
jsr K.GetDevByName jsr K.GetDevByName
bcs IO.OPEN.RTS bcc .7
>STYA pFD ldx #0
phx DEVID
.10 lda Nod.Table.hPath,x
beq .6
jsr K.GetMemPtr
>STYA ZPPtr1
ldy #0
.2 lda (ZPPtr1),y
iny
cmp K.MLI.PATH,y
bne .6
cmp #0 end of string ?
bne .2
txa return hFILE
clc
rts
.6 inx
cpx #K.NOD.MAX
bne .10
lda #MLI.E.NODEV
* sec
rts no OF found
.7 >STYA pFD
phx DEVID/hFILE
lda (pFD) #S.FD.T lda (pFD) #S.FD.T
tax tax
pla pla
jmp (.2,x) jmp (.8,x)
.2 .DA STDIO.IOERR REG .8 .DA STDIO.IOERR REG
.DA STDIO.IOERR DIR .DA STDIO.IOERR DIR
.DA IO.OPEN.CDEV .DA IO.OPEN.CDEV
.DA STDIO.IOERR BDEV .DA STDIO.IOERR BDEV

View File

@ -239,9 +239,8 @@ Mem.NextSlot lda ZPMemMgrSPtr
K.FreeMem.ERR >PUSHA K.FreeMem.ERR >PUSHA
>PUSHBI 1 >PUSHBI 1
>PUSHWI K.FreeMem.ERR1 >LDYAI K.FreeMem.ERR1
lda #DEVID.SYS >SYSCALL printf
>SYSCALL fprintf
sec sec
rts rts
@ -314,14 +313,13 @@ K.FreeMem tay
>PUSHYA >PUSHYA
>PUSHBI 2 >PUSHBI 2
>PUSHWI K.FreeMem.ERR2 >LDYAI K.FreeMem.ERR2
lda #DEVID.SYS >SYSCALL printf
>SYSCALL fprintf
sec sec
rts rts
*-------------------------------------- *--------------------------------------
K.FreeMem.ERR1 .AZ "FreeMem:Bad hMem:%h." K.FreeMem.ERR1 .AZ "FreeMem:Bad hMem:%h.\r\n"
K.FreeMem.ERR2 .AZ "FreeMem:hMem already freed At $%H." K.FreeMem.ERR2 .AZ "FreeMem:hMem already freed At $%H.\r\n"
*/-------------------------------------- */--------------------------------------
* # GetMemPtr * # GetMemPtr
* A = hMem * A = hMem