mirror of
https://github.com/A2osX/A2osX.git
synced 2025-04-07 09:37:34 +00:00
Kernel 0.9.2
This commit is contained in:
parent
8c5ba4b1a7
commit
4986ce68c6
@ -52,7 +52,7 @@
|
||||
**Out:**
|
||||
Y,A = PTR to DNS.CACHE
|
||||
|
||||
# SKT.Socket
|
||||
# Socket
|
||||
Create a new socket
|
||||
|
||||
## C
|
||||
@ -67,7 +67,7 @@ Create a new socket
|
||||
CC: A = hSOCKET
|
||||
CS: A = EC
|
||||
|
||||
# SKT.bind
|
||||
# Bind
|
||||
bind a name to a socket
|
||||
|
||||
## C
|
||||
@ -82,7 +82,7 @@ bind a name to a socket
|
||||
CC: A = hSOCKET
|
||||
CS: A = EC
|
||||
|
||||
# SKT.connect
|
||||
# Connect
|
||||
Iinitiate a connection on a socket
|
||||
|
||||
## C
|
||||
@ -97,7 +97,7 @@ Iinitiate a connection on a socket
|
||||
CC: A = hSOCKET
|
||||
CS: A = EC
|
||||
|
||||
# SKT.listen
|
||||
# Listen
|
||||
Listen for connections on a socket
|
||||
|
||||
## C
|
||||
@ -110,7 +110,7 @@ Listen for connections on a socket
|
||||
**Out:**
|
||||
CS: A = EC
|
||||
|
||||
# SKT.Accept
|
||||
# Accept
|
||||
Accept a connection on a socket
|
||||
|
||||
## C
|
||||
@ -123,19 +123,19 @@ Accept a connection on a socket
|
||||
**Out:**
|
||||
A = hSocket
|
||||
|
||||
# SKT.Close
|
||||
# Shutdown
|
||||
Close socket
|
||||
|
||||
## C
|
||||
`int close(int fd);`
|
||||
`int shutdown(int fd);`
|
||||
|
||||
## ASM
|
||||
**In:**
|
||||
`lda fd`
|
||||
`>LIBCALL hLIBTCPIP,LIBTCPIP.close`
|
||||
`>LIBCALL hLIBTCPIP,LIBTCPIP.shutdown`
|
||||
**Out:**
|
||||
|
||||
# SKT.Read (STREAM)
|
||||
# Read (STREAM)
|
||||
|
||||
## C
|
||||
`int skt.read(hFD fd, void *buf, int count);`
|
||||
@ -150,7 +150,7 @@ Close socket
|
||||
CC: Y,A = bytes read
|
||||
CS: A = EC
|
||||
|
||||
# SKT.Write (STREAM)
|
||||
# Write (STREAM)
|
||||
|
||||
## C
|
||||
`int skt.write(hFD fd, const void *buf, int count);`
|
||||
@ -165,11 +165,13 @@ CS: A = EC
|
||||
CC: Y,A = bytes written
|
||||
CS: A = EC
|
||||
|
||||
# SKT.Recv (RAW,DGRAM,SEQPACKET)
|
||||
# Recv (RAW,DGRAM,SEQPACKET)
|
||||
|
||||
# SKT.RecvFrom (RAW,DGRAM,SEQPACKET)
|
||||
hMem recv(hFD fd);
|
||||
hMem recvfrom(hFD fd, struct sockaddr *addr);
|
||||
# RecvFrom (RAW,DGRAM,SEQPACKET)
|
||||
|
||||
## C
|
||||
`hMem recv(hFD fd);`
|
||||
`hMem recvfrom(hFD fd, struct sockaddr *addr);`
|
||||
|
||||
## ASM
|
||||
**In:**
|
||||
@ -180,9 +182,9 @@ hMem recvfrom(hFD fd, struct sockaddr *addr);
|
||||
CC: A = hMem
|
||||
CS: A = EC
|
||||
|
||||
# SKT.Send (RAW,DGRAM,SEQPACKET)
|
||||
# Send (RAW,DGRAM,SEQPACKET)
|
||||
|
||||
# SKT.SendTo (RAW,DGRAM,SEQPACKET)
|
||||
# SendTo (RAW,DGRAM,SEQPACKET)
|
||||
|
||||
## C
|
||||
`int skt.send(hFD fd, const void *buf, int count);`
|
||||
@ -199,11 +201,11 @@ CS: A = EC
|
||||
CC: Y,A = bytes written
|
||||
CS: A = EC
|
||||
|
||||
# SKT.GetTable
|
||||
# GetTable
|
||||
Get socket table
|
||||
|
||||
## C
|
||||
`void * skt.gettable();`
|
||||
`void * gettable();`
|
||||
|
||||
## ASM
|
||||
**In:**
|
||||
|
Binary file not shown.
Binary file not shown.
@ -36,10 +36,15 @@ CS.START cld
|
||||
L.LIBTCPIP .DA LIBTCPIP
|
||||
L.MSG0 .DA MSG0
|
||||
L.MSG1 .DA MSG1
|
||||
.DA MSG1.UDP
|
||||
.DA MSG1.TCP
|
||||
.DA MSG1.RAW
|
||||
.DA MSG1.INV
|
||||
L.MSG1.T .DA MSG1.T.RAW
|
||||
.DA MSG1.T.DGRAM
|
||||
.DA MSG1.T.SEQPKT
|
||||
.DA MSG1.T.STREAM
|
||||
.DA MSG1.T.INV
|
||||
L.MSG1.P .DA MSG1.P.ICMP
|
||||
.DA MSG1.P.TCP
|
||||
.DA MSG1.P.UDP
|
||||
.DA MSG1.P.INV
|
||||
L.MSG1.S .DA MSG1.S.0
|
||||
.DA MSG1.S.1
|
||||
.DA MSG1.S.2
|
||||
@ -51,6 +56,7 @@ L.MSG1.S .DA MSG1.S.0
|
||||
.DA MSG1.S.8
|
||||
.DA MSG1.S.9
|
||||
.DA MSG1.S.10
|
||||
.DA MSG1.S.INV
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
CS.INIT >LDYA L.LIBTCPIP
|
||||
@ -64,7 +70,7 @@ CS.INIT >LDYA L.LIBTCPIP
|
||||
CS.RUN >LDYA L.MSG0
|
||||
>SYSCALL puts
|
||||
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.GETTABLE
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.GetTable
|
||||
>STYA ZPPTR1
|
||||
|
||||
>STZ.G SocketCount
|
||||
@ -72,15 +78,15 @@ CS.RUN >LDYA L.MSG0
|
||||
.1 tay
|
||||
lda (ZPPTR1),y
|
||||
beq .7
|
||||
|
||||
>SYSCALL GetMemPtr
|
||||
>STYA ZPPTR2
|
||||
ldy #S.SOCKET.TCP.S
|
||||
lda (ZPPTR2),y
|
||||
cmp #S.SOCKET.TCP.S.TIMEWT+1
|
||||
bcs *
|
||||
tax
|
||||
>PUSHB L.MSG1.S+1,x
|
||||
>PUSHB L.MSG1.S,x
|
||||
|
||||
lda (ZPPTR2)
|
||||
cmp #AF.INET
|
||||
* bne .7
|
||||
|
||||
jsr CS.RUN.S
|
||||
|
||||
ldy #S.SOCKET.O
|
||||
>PUSHB (ZPPTR2),y
|
||||
@ -92,15 +98,10 @@ CS.RUN >LDYA L.MSG0
|
||||
cpy #S.SOCKET.LOC.ADDR-1
|
||||
bne .2
|
||||
|
||||
lda (ZPPTR2)
|
||||
tax
|
||||
cpx #S.SOCKET.T.SEQPACKET+1
|
||||
bcc .3
|
||||
|
||||
ldx #S.SOCKET.T.SEQPACKET+1
|
||||
.3 >PUSHB L.MSG1+1,x
|
||||
>PUSHB L.MSG1,x
|
||||
>PUSHBI 17
|
||||
jsr CS.RUN.P
|
||||
jsr CS.RUN.T
|
||||
|
||||
>PUSHBI 19
|
||||
>LDYA L.MSG1
|
||||
>SYSCALL printf
|
||||
|
||||
@ -112,6 +113,53 @@ CS.RUN >LDYA L.MSG0
|
||||
sec we do not want to stay in memory
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN.S ldy #S.SOCKET.TCP.S
|
||||
lda (ZPPTR2),y
|
||||
|
||||
cmp #S.SOCKET.TCP.S.TIMEWT+1
|
||||
bcc .1
|
||||
|
||||
lda #S.SOCKET.TCP.S.TIMEWT+1
|
||||
|
||||
.1 asl
|
||||
tax
|
||||
>PUSHB L.MSG1.S+1,x
|
||||
>PUSHB L.MSG1.S,x
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN.P ldy #S.SOCKET.PROTO
|
||||
lda (ZPPTR2),y
|
||||
|
||||
ldx #0
|
||||
|
||||
.3 cmp PROTO,x
|
||||
beq .4
|
||||
inx
|
||||
cpx #PROTO.Cnt
|
||||
bne .3
|
||||
|
||||
.4 txa
|
||||
asl
|
||||
tax
|
||||
|
||||
>PUSHB L.MSG1.P+1,x
|
||||
>PUSHB L.MSG1.P,x
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN.T ldy #S.SOCKET.T
|
||||
lda (ZPPTR2),y
|
||||
tax
|
||||
cpx #S.SOCKET.T.STREAM+1
|
||||
bcc .5
|
||||
|
||||
ldx #S.SOCKET.T.STREAM+1
|
||||
|
||||
.5 >PUSHB L.MSG1.T+1,x
|
||||
>PUSHB L.MSG1.T,x
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.DOEVENT sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -124,12 +172,19 @@ CS.QUIT lda hLIBTCPIP
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
LIBTCPIP .AZ "libtcpip"
|
||||
MSG0 .AZ "Proto Local Remote Options Status"
|
||||
MSG1 .AZ "%s %03d.%03d.%03d.%03d:%05D %03d.%03d.%03d.%03d:%05D %b %s\r\n"
|
||||
MSG1.UDP .AZ "UDP"
|
||||
MSG1.TCP .AZ "TCP"
|
||||
MSG1.RAW .AZ "RAW"
|
||||
MSG1.INV .AZ "???"
|
||||
MSG0 .AZ "Type Prot Local Remote Options Status"
|
||||
MSG1 .AZ "%s %s %03d.%03d.%03d.%03d:%05D %03d.%03d.%03d.%03d:%05D %b %s\r\n"
|
||||
MSG1.T.RAW .AZ "RAW "
|
||||
MSG1.T.DGRAM .AZ "DGRAM "
|
||||
MSG1.T.SEQPKT .AZ "SEQPKT"
|
||||
MSG1.T.STREAM .AZ "STREAM"
|
||||
MSG1.T.INV .AZ "??? "
|
||||
PROTO .DA #S.IP.PROTOCOL.ICMP,#S.IP.PROTOCOL.TCP,#S.IP.PROTOCOL.UDP
|
||||
PROTO.Cnt .EQ *-PROTO
|
||||
MSG1.P.ICMP .AZ "ICMP"
|
||||
MSG1.P.TCP .AZ "TCP "
|
||||
MSG1.P.UDP .AZ "UDP "
|
||||
MSG1.P.INV .AZ "??? "
|
||||
MSG1.S.0 .AZ "*"
|
||||
MSG1.S.1 .AZ "LISTENING"
|
||||
MSG1.S.2 .AZ "SYN-SENT"
|
||||
@ -141,6 +196,7 @@ MSG1.S.7 .AZ "FIN-WAIT-1"
|
||||
MSG1.S.8 .AZ "FIN-WAIT-2"
|
||||
MSG1.S.9 .AZ "CLOSING"
|
||||
MSG1.S.10 .AZ "TIME-WAIT"
|
||||
MSG1.S.INV .AZ "???"
|
||||
hLIBTCPIP .BS 1
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
|
@ -10,6 +10,7 @@ AUTO 4,1
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/ETH.I
|
||||
.INB INC/LIBTCPIP.I
|
||||
.INB INC/NET.TELNET.I
|
||||
*--------------------------------------
|
||||
TIMEOUT.MAX .EQ 40 4 sec.
|
||||
BUFSIZE .EQ 256
|
||||
@ -37,7 +38,10 @@ CS.START cld
|
||||
.DA CS.DOEVENT
|
||||
.DA CS.QUIT
|
||||
L.LIBTCPIP .DA LIBTCPIP
|
||||
L.Socket .DA Socket
|
||||
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
|
||||
L.MSG.USAGE .DA MSG.USAGE
|
||||
L.MSG.UNKNOWN .DA MSG.UNKNOWN
|
||||
@ -54,12 +58,7 @@ CS.INIT >LDYA L.LIBTCPIP
|
||||
bcs .9
|
||||
sta hLIBTCPIP
|
||||
|
||||
lda (pPs)
|
||||
ora #S.PS.F.EVENT Now accept events
|
||||
sta (pPs)
|
||||
|
||||
clc
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ?
|
||||
@ -81,7 +80,7 @@ CS.RUN.IPOK ldy #S.PS.ARGC
|
||||
|
||||
jsr Init.Timeout
|
||||
|
||||
.2 >PUSHEA.G DST.IP
|
||||
.2 >PUSHW L.SA.REMOTE.AD
|
||||
lda #1
|
||||
>SYSCALL GetArg
|
||||
>PUSHYA
|
||||
@ -114,21 +113,17 @@ CS.RUN.HOSTOK ldy #S.PS.ARGC
|
||||
lda #2
|
||||
>SYSCALL GetArg
|
||||
>SYSCALL atoi
|
||||
>STYA Socket.Dst.Port
|
||||
>STYA SA.REMOTE+S.SOCKADDR.PORT
|
||||
|
||||
CS.RUN.PORTOK lda #1
|
||||
>SYSCALL GetArg
|
||||
>PUSHYA
|
||||
|
||||
>PUSHW Socket.Dst.Port
|
||||
>PUSHW SA.REMOTE+S.SOCKADDR.PORT
|
||||
|
||||
ldy #DST.IP+3
|
||||
ldx #3
|
||||
|
||||
.1 lda (pData),y
|
||||
sta Socket.Dst.Addr,x
|
||||
>PUSHA
|
||||
dey
|
||||
.1 >PUSHB SA.REMOTE+S.SOCKADDR.ADDR,x
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
@ -136,26 +131,27 @@ CS.RUN.PORTOK lda #1
|
||||
>LDYA L.MSG.HOSTOK
|
||||
>SYSCALL printf
|
||||
|
||||
CS.RUN.OPENSKT ldx #3
|
||||
ldy #S.IPCFG.IP+3
|
||||
|
||||
.1 lda (ZPIPCfgPtr),y
|
||||
sta Socket.Src.Addr,x
|
||||
dey
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
>PUSHW L.Socket
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.New
|
||||
CS.RUN.OPENSKT >PUSHBI 0 no protocol
|
||||
lda #S.SOCKET.T.STREAM
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
|
||||
bcs .9
|
||||
|
||||
>STA.G hSocket
|
||||
pha
|
||||
>PUSHW L.SA.LOCAL
|
||||
pla
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.Bind
|
||||
bcc .2
|
||||
|
||||
>LDYA L.MSG.SKTKO
|
||||
.9 >LDYA L.MSG.SKTKO
|
||||
>SYSCALL puts
|
||||
lda #K.E.SYN
|
||||
sec
|
||||
.9 rts
|
||||
rts
|
||||
|
||||
.2 >STA.G hSocket
|
||||
.2 >PUSHW L.SA.REMOTE
|
||||
>LDA.G hSocket
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect
|
||||
|
||||
>LDYA L.MSG.SKTOK
|
||||
>SYSCALL puts
|
||||
@ -172,7 +168,7 @@ CS.RUN.LOOP >SLEEP
|
||||
>PUSHWI BUFSIZE
|
||||
>PUSHW ZPBufPtr
|
||||
>LDA.G hSocket
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Read
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.Read
|
||||
bcc .1
|
||||
|
||||
tay
|
||||
@ -205,7 +201,7 @@ CS.RUN.LOOP >SLEEP
|
||||
>PUSHW ZPBufLen
|
||||
>PUSHW ZPBufPtr
|
||||
>LDA.G hSocket
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Write
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.Write
|
||||
|
||||
bcs CS.RUN.SKTERR
|
||||
|
||||
@ -255,7 +251,7 @@ CS.DOEVENT lda (pEvent)
|
||||
CS.QUIT >LDA.G hSocket
|
||||
beq .1
|
||||
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Close
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
|
||||
|
||||
.1 >LDA.G hBuf
|
||||
beq .2
|
||||
@ -293,19 +289,19 @@ MSG.SKTERR .AZ "Socket Error : $%h\r\n"
|
||||
MSG.IOERR .AZ "I/O Error : $%h\r\n"
|
||||
MSG.USER .AZ "User interrupt."
|
||||
*--------------------------------------
|
||||
Socket .DA #S.SOCKET.T.STREAM
|
||||
SA.LOCAL .DA #AF.INET S.SOCKADDR.AF
|
||||
.BS 1
|
||||
.BS 4 S.SOCKADDR.ADDR
|
||||
.BS 2 S.SOCKADDR.PORT
|
||||
*--------------------------------------
|
||||
SA.REMOTE .DA #AF.INET S.SOCKADDR.AF
|
||||
.BS 1
|
||||
.BS 1
|
||||
Socket.Src.Addr .BS 4
|
||||
Socket.Src.Port .DA 0 Dynamic
|
||||
Socket.Dst.Addr .BS 4
|
||||
Socket.Dst.Port .DA TCP.PORT.TELNET
|
||||
.BS 4 S.SOCKADDR.ADDR
|
||||
.DA TCP.PORT.TELNET
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
.OR 0
|
||||
DS.START
|
||||
DST.IP .BS 4
|
||||
hBuf .BS 1
|
||||
hSocket .BS 1
|
||||
TimeOut .BS 1
|
||||
|
@ -39,23 +39,23 @@ LIBTCPIP.DNS.GetCache .EQ 26
|
||||
LIBTCPIP.HST.GetByName .EQ 28
|
||||
LIBTCPIP.HST.GetByAddr .EQ 30
|
||||
|
||||
LIBTCPIP.SKT.Socket .EQ 32
|
||||
LIBTCPIP.SKT.Bind .EQ 34
|
||||
LIBTCPIP.SKT.Connect .EQ 36
|
||||
LIBTCPIP.SKT.Listen .EQ 38
|
||||
LIBTCPIP.Socket .EQ 32
|
||||
LIBTCPIP.Bind .EQ 34
|
||||
LIBTCPIP.Connect .EQ 36
|
||||
LIBTCPIP.Listen .EQ 38
|
||||
|
||||
LIBTCPIP.SKT.Accept .EQ 40
|
||||
LIBTCPIP.SKT.Close .EQ 42
|
||||
LIBTCPIP.Accept .EQ 40
|
||||
LIBTCPIP.shutdown .EQ 42
|
||||
|
||||
LIBTCPIP.SKT.Read .EQ 44
|
||||
LIBTCPIP.SKT.Write .EQ 46
|
||||
LIBTCPIP.SKT.Recv .EQ 48
|
||||
LIBTCPIP.SKT.Send .EQ 50
|
||||
LIBTCPIP.Read .EQ 44
|
||||
LIBTCPIP.Write .EQ 46
|
||||
LIBTCPIP.Recv .EQ 48
|
||||
LIBTCPIP.Send .EQ 50
|
||||
|
||||
LIBTCPIP.SKT.RecvFrom .EQ 52
|
||||
LIBTCPIP.SKT.SendTo .EQ 54
|
||||
LIBTCPIP.RecvFrom .EQ 52
|
||||
LIBTCPIP.SendTo .EQ 54
|
||||
|
||||
LIBTCPIP.SKT.GetTable .EQ 56
|
||||
LIBTCPIP.GetTable .EQ 56
|
||||
*--------------------------------------
|
||||
ERR.SKT.OOS .EQ $BF
|
||||
ERR.SKT.BUSY .EQ $BE
|
||||
@ -69,8 +69,6 @@ ERR.ARP.PENDING .EQ $B5
|
||||
UDP.PORT.DNS .EQ 53
|
||||
UDP.PORT.PMAP .EQ 111
|
||||
*--------------------------------------
|
||||
TCP.PORT.TELNET .EQ 23
|
||||
*--------------------------------------
|
||||
S.IPCFG.STATUS .EQ 0
|
||||
S.IPCFG.STATUS.OFF .EQ %00000000 TCPIP Unconfigured
|
||||
S.IPCFG.STATUS.SDISC .EQ %00000001 DISCOVERY Sent
|
||||
|
@ -493,7 +493,7 @@ SET.IPCFG.I >LDYA L.DCB.NIC
|
||||
|
||||
.2 lda hDNSSocket
|
||||
beq .3
|
||||
jsr SKT.Close
|
||||
jsr SKT.Shutdown
|
||||
stz hDNSSocket
|
||||
|
||||
.3 lda IPCFG+S.IPCFG.DNS1
|
||||
|
@ -3,7 +3,7 @@ PREFIX /A2OSX.BUILD
|
||||
AUTO 4,1
|
||||
.LIST OFF
|
||||
*/--------------------------------------
|
||||
* # SKT.Socket
|
||||
* # Socket
|
||||
* Create a new socket
|
||||
* ## C
|
||||
* `hFD socket(short int type, short int protocol);`
|
||||
@ -101,7 +101,7 @@ SKT.Socket.FindFree
|
||||
clc
|
||||
rts
|
||||
*/--------------------------------------
|
||||
* # SKT.bind
|
||||
* # Bind
|
||||
* bind a name to a socket
|
||||
* ## C
|
||||
* `int bind(hFD fd, const struct sockaddr *addr);`
|
||||
@ -121,13 +121,13 @@ SKT.bind >SYSCALL GetMemPtr
|
||||
|
||||
lda SKT.LOC.ADDR+S.SOCKADDR.PORT
|
||||
bne .1
|
||||
ldy SKT.LOC.ADDR+S.SOCKADDR.PORT+1
|
||||
ldx SKT.LOC.ADDR+S.SOCKADDR.PORT+1
|
||||
bne .1
|
||||
|
||||
jsr GetDynPort
|
||||
|
||||
sta SKT.LOC.ADDR+S.SOCKADDR.PORT+1
|
||||
stx SKT.LOC.ADDR+S.SOCKADDR.PORT
|
||||
sta SKT.LOC.ADDR+S.SOCKADDR.PORT
|
||||
stx SKT.LOC.ADDR+S.SOCKADDR.PORT+1
|
||||
|
||||
.1 jsr SKT.FindMatchingLoc
|
||||
bcc .9
|
||||
@ -141,7 +141,7 @@ SKT.bind >SYSCALL GetMemPtr
|
||||
sec
|
||||
rts
|
||||
*/--------------------------------------
|
||||
* # SKT.connect
|
||||
* # Connect
|
||||
* Iinitiate a connection on a socket
|
||||
* ## C
|
||||
* `int connect(hFD fd, const struct sockaddr *addr);`
|
||||
@ -231,7 +231,7 @@ SKT.connect.9 lda #ERR.SKT.BAD
|
||||
sec
|
||||
SKT.connect.99 rts
|
||||
*/--------------------------------------
|
||||
* # SKT.listen
|
||||
* # Listen
|
||||
* Listen for connections on a socket
|
||||
* ## C
|
||||
* `int listen(hFD fd);`
|
||||
@ -268,7 +268,7 @@ SKT.listen >SYSCALL GetMemPtr
|
||||
sec
|
||||
rts
|
||||
*/--------------------------------------
|
||||
* # SKT.Accept
|
||||
* # Accept
|
||||
* Accept a connection on a socket
|
||||
* ## C
|
||||
* `hFD Accept(hFD fd);`
|
||||
@ -314,17 +314,17 @@ SKT.Accept >SYSCALL GetMemPtr
|
||||
sec
|
||||
.9 rts
|
||||
*/--------------------------------------
|
||||
* # SKT.Close
|
||||
* # Shutdown
|
||||
* Close socket
|
||||
* ## C
|
||||
* `int close(int fd);`
|
||||
* `int shutdown(int fd);`
|
||||
* ## ASM
|
||||
* **In:**
|
||||
* `lda fd`
|
||||
* `>LIBCALL hLIBTCPIP,LIBTCPIP.close`
|
||||
* `>LIBCALL hLIBTCPIP,LIBTCPIP.shutdown`
|
||||
* **Out:**
|
||||
*\--------------------------------------
|
||||
SKT.Close >SYSCALL GetMemPtr
|
||||
SKT.shutdown >SYSCALL GetMemPtr
|
||||
>STYA ZPPtrSKT
|
||||
|
||||
cmp #S.SOCKET.T.STREAM
|
||||
@ -391,7 +391,7 @@ SKT.Close >SYSCALL GetMemPtr
|
||||
|
||||
jmp TCP.OUT Try to push FIN/ACK
|
||||
*/--------------------------------------
|
||||
* # SKT.Read (STREAM)
|
||||
* # Read (STREAM)
|
||||
* ## C
|
||||
* `int skt.read(hFD fd, void *buf, int count);`
|
||||
* ## ASM
|
||||
@ -442,7 +442,7 @@ SKT.Read >SYSCALL GetMemPtr
|
||||
sec
|
||||
.99 rts
|
||||
*/--------------------------------------
|
||||
* # SKT.Write (STREAM)
|
||||
* # Write (STREAM)
|
||||
* ## C
|
||||
* `int skt.write(hFD fd, const void *buf, int count);`
|
||||
* ## ASM
|
||||
@ -495,8 +495,8 @@ SKT.Write >SYSCALL GetMemPtr
|
||||
sec
|
||||
rts
|
||||
*/--------------------------------------
|
||||
* # SKT.Recv (RAW,DGRAM,SEQPACKET)
|
||||
* # SKT.RecvFrom (RAW,DGRAM,SEQPACKET)
|
||||
* # Recv (RAW,DGRAM,SEQPACKET)
|
||||
* # RecvFrom (RAW,DGRAM,SEQPACKET)
|
||||
* ## C
|
||||
* `hMem recv(hFD fd);`
|
||||
* `hMem recvfrom(hFD fd, struct sockaddr *addr);`
|
||||
@ -601,8 +601,8 @@ SKT.Recv clc
|
||||
sec
|
||||
rts
|
||||
*/--------------------------------------
|
||||
* # SKT.Send (RAW,DGRAM,SEQPACKET)
|
||||
* # SKT.SendTo (RAW,DGRAM,SEQPACKET)
|
||||
* # Send (RAW,DGRAM,SEQPACKET)
|
||||
* # SendTo (RAW,DGRAM,SEQPACKET)
|
||||
* ## C
|
||||
* `int skt.send(hFD fd, const void *buf, int count);`
|
||||
* `int skt.sendto(hFD fd, const void *buf, int count, const struct sockaddr *addr);`
|
||||
@ -669,10 +669,10 @@ SKT.Send.9 rts
|
||||
SKT.Send.SEQPACKET
|
||||
bra *
|
||||
*/--------------------------------------
|
||||
* # SKT.GetTable
|
||||
* # GetTable
|
||||
* Get socket table
|
||||
* ## C
|
||||
* `void * skt.gettable();`
|
||||
* `void * gettable();`
|
||||
* ## ASM
|
||||
* **In:**
|
||||
* `>LIBCALL hLIBTCPIP,LIBTCPIP.skt.GetTable`
|
||||
@ -691,7 +691,7 @@ SKT.PullLocAddr >PULLW ZPTmpPtr1
|
||||
.1 lda (ZPTmpPtr1),y
|
||||
sta SKT.LOC.ADDR,y
|
||||
dey
|
||||
bne .1
|
||||
bpl .1
|
||||
rts
|
||||
*--------------------------------------
|
||||
SKT.PullRemAddr >PULLW ZPTmpPtr1
|
||||
@ -701,24 +701,24 @@ SKT.PullRemAddr >PULLW ZPTmpPtr1
|
||||
.1 lda (ZPTmpPtr1),y
|
||||
sta SKT.REM.ADDR,y
|
||||
dey
|
||||
bpl .1
|
||||
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
|
||||
cpy #S.SOCKET.LOC.PORT+2
|
||||
bne .1
|
||||
rts
|
||||
*--------------------------------------
|
||||
SKT.SetLocAddr ldy #S.SOCKET.LOC.PORT+1
|
||||
SKT.SetRemAddr ldy #S.SOCKET.REM.ADDR
|
||||
|
||||
.1 lda SKT.LOC.ADDR-S.SOCKET.LOC.ADDR,y
|
||||
.1 lda SKT.REM.ADDR+S.SOCKADDR.ADDR-S.SOCKET.REM.ADDR,y
|
||||
sta (ZPPtrSKT),y
|
||||
dey
|
||||
cpy #S.SOCKET.LOC.ADDR-1
|
||||
bne .1
|
||||
rts
|
||||
*--------------------------------------
|
||||
SKT.SetRemAddr ldy #S.SOCKET.REM.PORT+1
|
||||
|
||||
.1 lda SKT.REM.ADDR-S.SOCKET.REM.ADDR,y
|
||||
sta (ZPPtrSKT),y
|
||||
dey
|
||||
cpy #S.SOCKET.REM.ADDR-1
|
||||
iny
|
||||
cpy #S.SOCKET.REM.PORT+2
|
||||
bne .1
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -742,13 +742,13 @@ SKT.FindMatchingLocRem
|
||||
|
||||
.3 lda (ZPTmpPtr1),y
|
||||
|
||||
.4 cmp SKT.LOC.ADDR-S.SOCKET.LOC.ADDR,y
|
||||
.4 cmp SKT.LOC.ADDR+S.SOCKADDR.ADDR-S.SOCKET.LOC.ADDR,y
|
||||
bne .8
|
||||
iny
|
||||
cpy #S.SOCKET.REM.ADDR
|
||||
bne .3
|
||||
|
||||
lda SKT.REM.ADDR
|
||||
lda SKT.REM.ADDR+S.SOCKADDR.ADDR
|
||||
cmp #$ff FF.FF.FF.FF, Broadcast ?
|
||||
bne .5
|
||||
|
||||
@ -760,7 +760,7 @@ SKT.FindMatchingLocRem
|
||||
ldy #S.SOCKET.REM.PORT Boradcast, check port only
|
||||
|
||||
.5 lda (ZPTmpPtr1),y
|
||||
cmp SKT.REM.ADDR-S.SOCKET.REM.ADDR,y
|
||||
cmp SKT.REM.ADDR+S.SOCKADDR.ADDR-S.SOCKET.REM.ADDR,y
|
||||
bne .9 wrong remote host, exit....
|
||||
iny
|
||||
cpy #S.SOCKET.REM.PORT+2
|
||||
@ -797,7 +797,7 @@ SKT.FindMatchingLoc
|
||||
phy
|
||||
|
||||
.2 lda (ZPTmpPtr1),y
|
||||
cmp SKT.LOC.ADDR-S.SOCKET.LOC.ADDR,y
|
||||
cmp SKT.LOC.ADDR+S.SOCKADDR.ADDR-S.SOCKET.LOC.ADDR,y
|
||||
bne .7
|
||||
dey
|
||||
cpy #S.SOCKET.LOC.ADDR-1
|
||||
|
@ -78,7 +78,7 @@ CS.START cld
|
||||
.DA SKT.Listen
|
||||
|
||||
.DA SKT.Accept
|
||||
.DA SKT.Close
|
||||
.DA SKT.Shutdown
|
||||
|
||||
.DA SKT.Read
|
||||
.DA SKT.Write
|
||||
@ -308,8 +308,8 @@ FD.DSOCK .DA #S.FD.T.DSOCK
|
||||
.BS 1 S.FD.DSOCK.HSKT
|
||||
.DA #0 S.FD.DSOCK.OPEN
|
||||
.DA #0 S.FD.DSOCK.CLOSE
|
||||
.DA #LIBTCPIP.SKT.Recv
|
||||
.DA #LIBTCPIP.SKT.Send
|
||||
.DA #LIBTCPIP.Recv
|
||||
.DA #LIBTCPIP.Send
|
||||
.DA #0 S.FD.DSOCK.STATUS
|
||||
*--------------------------------------
|
||||
.DA #AF.INET S.SOCKET.AF
|
||||
@ -322,8 +322,8 @@ FD.SSOCK .DA #S.FD.T.SSOCK
|
||||
.BS 1 S.FD.DSOCK.HSKT
|
||||
.DA #0 S.FD.DSOCK.OPEN
|
||||
.DA #0 S.FD.DSOCK.CLOSE
|
||||
.DA #LIBTCPIP.SKT.Read
|
||||
.DA #LIBTCPIP.SKT.Write
|
||||
.DA #LIBTCPIP.Read
|
||||
.DA #LIBTCPIP.Write
|
||||
.DA #0 S.FD.DSOCK.STATUS
|
||||
*--------------------------------------
|
||||
.DA #AF.INET S.SOCKET.AF
|
||||
|
@ -10,6 +10,7 @@ AUTO 4,1
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/ETH.I
|
||||
.INB INC/LIBTCPIP.I
|
||||
.INB INC/NET.TELNET.I
|
||||
*--------------------------------------
|
||||
CONN.MAX .EQ 16
|
||||
TIMEOUT.MAX .EQ 30 30 sec.
|
||||
@ -38,7 +39,9 @@ CS.START cld
|
||||
.DA CS.DOEVENT
|
||||
.DA CS.QUIT
|
||||
L.LIBTCPIP .DA LIBTCPIP
|
||||
L.Socket .DA Socket
|
||||
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
|
||||
@ -85,16 +88,26 @@ CS.RUN jsr Init.Timeout
|
||||
CS.RUN.INIT ldx #3
|
||||
ldy #S.IPCFG.IP+3
|
||||
.1 lda (ZPIPCfgPtr),y
|
||||
sta Socket.Src.Addr,x
|
||||
sta SA.LOCAL+S.SOCKADDR.ADDR,x
|
||||
dey
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
>PUSHW L.Socket
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.New
|
||||
>PUSHBI 0 no protocol
|
||||
lda #S.SOCKET.T.STREAM
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
|
||||
bcs .9
|
||||
|
||||
>STA.G hSrvSocket
|
||||
pha
|
||||
>PUSHW L.SA.LOCAL
|
||||
pla
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.Bind
|
||||
bcs .9
|
||||
|
||||
>LDA.G hSrvSocket
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.Listen
|
||||
bcs .9
|
||||
|
||||
>LDYA L.MSG.INITOK
|
||||
>SYSCALL puts
|
||||
@ -127,7 +140,7 @@ CS.RUN.ERR sec
|
||||
*--------------------------------------
|
||||
CS.RUN.SERVER >LDA.G hSrvSocket
|
||||
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Accept
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.Accept
|
||||
bcs .8
|
||||
>STA.G hClientSocket
|
||||
|
||||
@ -135,21 +148,23 @@ CS.RUN.SERVER >LDA.G hSrvSocket
|
||||
ldx #CONN.MAX
|
||||
|
||||
.1 lda (pData),y
|
||||
beq .2
|
||||
beq CS.RUN.CLIENT
|
||||
iny
|
||||
dex
|
||||
bne .1
|
||||
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Close
|
||||
bra .8
|
||||
>LDA.G hClientSocket
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.2 sta (pData),y
|
||||
CS.RUN.CLIENT sta (pData),y
|
||||
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Get
|
||||
>SYSCALL GetMemPtr
|
||||
>STYA ZPSktPtr
|
||||
|
||||
ldx #3
|
||||
ldy #S.SOCKET.DST.ADDR+3
|
||||
ldy #S.SOCKET.REM.ADDR+3
|
||||
|
||||
.3 >PUSHB (ZPSktPtr),y
|
||||
dey
|
||||
@ -163,8 +178,16 @@ CS.RUN.SERVER >LDA.G hSrvSocket
|
||||
>SYSCALL printf
|
||||
bcs .9
|
||||
|
||||
|
||||
>PUSHB.G hClientSocket
|
||||
>PUSHBI 1
|
||||
>PUSHWI L.NOD.Template
|
||||
>LDYAI L.NOD.Name
|
||||
>SYSCALL sprintf
|
||||
|
||||
>PUSHB.G hClientSocket
|
||||
>PUSHW 0
|
||||
>LDYAI L.NOD.Name
|
||||
>SYSCALL mknod
|
||||
|
||||
|
||||
.8 clc
|
||||
@ -190,7 +213,7 @@ CS.QUIT ldx #CONN.MAX
|
||||
|
||||
phx
|
||||
phy
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Close
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
|
||||
ply
|
||||
plx
|
||||
|
||||
@ -201,7 +224,7 @@ CS.QUIT ldx #CONN.MAX
|
||||
ldy #hSrvSocket
|
||||
lda (pData),y
|
||||
beq .3
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Close
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
|
||||
|
||||
.3 lda hLIBTCPIP
|
||||
>SYSCALL UnloadLib
|
||||
@ -223,7 +246,7 @@ Wait.TimeOut sec
|
||||
CS.END
|
||||
*--------------------------------------
|
||||
hLIBTCPIP .BS 1
|
||||
LIBTCPIP .AZ "libtcpip.o"
|
||||
LIBTCPIP .AZ "libtcpip"
|
||||
MSG.TCPWAIT .AZ "TELNETD:Waiting for TCP/IP initializing..."
|
||||
MSG.INITOK .AZ "TELNETD:Init Ok, Listening."
|
||||
MSG.TCPIPERR .AZ "TELNETD:TCP/IP Not initialized properly"
|
||||
@ -234,16 +257,18 @@ CMD.LINE .AS "${A2OSX}SBIN/GETTY "
|
||||
|
||||
.AZ " ${A2OSX}SBIN/LOGIN"
|
||||
*--------------------------------------
|
||||
Socket .DA #S.SOCKET.T.STREAM
|
||||
.DA #S.SOCKET.O.ACCEPTCONN
|
||||
.DA #S.SOCKET.TCP.S.LISTEN
|
||||
SA.LOCAL .DA #AF.INET S.SOCKADDR.AF
|
||||
.BS 1
|
||||
Socket.Src.Addr .BS 4
|
||||
Socket.Src.Port .DA TCP.PORT.TELNET
|
||||
Socket.Dst.Addr .BS 4
|
||||
Socket.Dst.Port .BS 2
|
||||
.BS 4 S.SOCKADDR.ADDR
|
||||
.DA TCP.PORT.TELNET
|
||||
*--------------------------------------
|
||||
NOD.Name .AZ "TTY%h"
|
||||
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
|
||||
|
Loading…
x
Reference in New Issue
Block a user