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.MSG0 .DA MSG0
L.MSG1 .DA MSG1
L.MSG.USAGE .DA MSG.USAGE
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBTCPIP
>SYSCALL LoadLib
sta hLIBTCPIP
* lda (pPs)
* ora #S.PS.F.EVENT Now accept events
* sta (pPs)
clc
rts
*--------------------------------------
CS.RUN ldy #S.PS.ARGC
lda (pPs),y
bne CS.RUN.ADD
cmp #1
bne .1
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+1
>PUSHEA.G DST.IP
@ -152,10 +159,12 @@ CS.QUIT lda hLIBTCPIP
*--------------------------------------
CS.END
LIBTCPIP .AZ "libtcpip"
hLIBTCPIP .BS 1
SSCANF.IP .AZ "%d.%d.%d.%d"
MSG0 .AZ "STS TR.ID Hostname IP Address TTL"
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
DST.IP .BS 4

View File

@ -39,7 +39,6 @@ CS.START cld
.DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP
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.AD .DA SA.REMOTE+S.SOCKADDR.ADDR
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
lda (pPs),y
beq .9
cmp #2
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
@ -105,13 +113,10 @@ CS.RUN.IPOK ldy #S.PS.ARGC
sec
rts
CS.RUN.HOSTOK ldy #S.PS.ARGC
lda (pPs),y
cmp #2
bcc CS.RUN.PORTOK
lda #2
CS.RUN.HOSTOK lda #2
>SYSCALL ArgV
bcs CS.RUN.PORTOK
>SYSCALL atoi
>STYA SA.REMOTE+S.SOCKADDR.PORT
@ -152,7 +157,8 @@ CS.RUN.OPENSKT >PUSHBI 0 no protocol
.2 >PUSHW L.SA.REMOTE
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect
bcs .9
>LDYA L.MSG.SKTOK
>SYSCALL puts
@ -164,7 +170,6 @@ CS.RUN.OPENSKT >PUSHBI 0 no protocol
>STA.G hBuf
CS.RUN.LOOP >SLEEP
>PUSHWI BUFSIZE
>PUSHW ZPBufPtr
>LDA.G hSocket
@ -179,14 +184,15 @@ CS.RUN.LOOP >SLEEP
>PUSHW ZPBufPtr
ldy #S.PS.hStdOut
lda (pPs),y
>SYSCALL write
>SYSCALL fwrite
bcs .11
.2 >PUSHWI BUFSIZE
>PUSHW ZPBufPtr
ldy #S.PS.hStdIn
lda (pPs),y
>SYSCALL read
>SYSCALL fread
bcc .3
tay
beq CS.RUN.LOOP no char from STDIN
@ -198,14 +204,20 @@ CS.RUN.LOOP >SLEEP
cmp #3 Ctrl-C
beq CS.RUN.USER
>PUSHW ZPBufLen
.4 >PUSHW ZPBufLen
>PUSHW ZPBufPtr
>LDA.G hSocket
>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
sec

View File

@ -106,8 +106,16 @@ DNS.REQUEST lda hDNSSocket
rts
*--------------------------------------
DNS.REQUEST.SEND
* TODO : >PUSHW L.SOCKADDR.DNS1....DNS2
ldy #3
.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 L.DNS.MSG
@ -415,7 +423,7 @@ DNS.DecodeMsg sta hFrameIn
>SYSCALL GetMemPtr
>STYA ZPFrameInPtr
ldy #S.DNS.F+1
ldy #S.DNS.F
lda (ZPFrameInPtr),y
and /S.DNS.F.QR
beq .9

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -45,17 +45,45 @@ IO.Open.I jsr STDIO.SetMLIPathYA
>LDYAI K.MLI.PATH+6 skip $/DEV/
jsr K.GetDevByName
bcs IO.OPEN.RTS
bcc .7
>STYA pFD
phx DEVID
ldx #0
.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
tax
pla
jmp (.2,x)
jmp (.8,x)
.2 .DA STDIO.IOERR REG
.8 .DA STDIO.IOERR REG
.DA STDIO.IOERR DIR
.DA IO.OPEN.CDEV
.DA STDIO.IOERR BDEV

View File

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