A2osX/LIB/LIBTCPIP.S.txt

377 lines
8.6 KiB
Plaintext
Raw Normal View History

2017-12-22 21:24:30 +00:00
NEW
PREFIX /A2OSX.BUILD
2017-12-22 21:24:30 +00:00
AUTO 4,1
2015-03-14 21:48:35 +00:00
.LIST OFF
.OP 65C02
.OR $2000
2018-07-23 06:28:47 +00:00
.TF LIB/LIBTCPIP.O
2015-03-14 21:48:35 +00:00
*--------------------------------------
2018-07-23 06:28:47 +00:00
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/MLI.ERR.I
.INB INC/NIC.I
.INB INC/ETH.I
.INB INC/LIBTCPIP.I
2015-03-14 21:48:35 +00:00
*--------------------------------------
ZPFrameInPtr .EQ ZPLIB
ZPFrameInLen .EQ ZPLIB+2
ZPDataInPtr .EQ ZPLIB+4
ZPDataInLen .EQ ZPLIB+6
ZPFrameOutPtr .EQ ZPLIB+8
ZPFrameOutLen .EQ ZPLIB+10
ZPDataOutPtr .EQ ZPLIB+12
ZPDataOutLen .EQ ZPLIB+14
ZPPtrIP .EQ ZPLIB+16
ZPPtrMAC .EQ ZPLIB+18
ZPPtrDNS .EQ ZPLIB+20
ZPPtrSKT .EQ ZPLIB+22
ZPCachePtr .EQ ZPLIB+24
ZPTmpPtr1 .EQ ZPLIB+26
ZPTmpPtr2 .EQ ZPLIB+28
ZPTmpPtr3 .EQ ZPLIB+30
2015-03-14 21:48:35 +00:00
*--------------------------------------
2015-06-03 18:30:57 +00:00
* File Header (16 Bytes)
2015-03-14 21:48:35 +00:00
*--------------------------------------
CS.START cld
jmp (.1,x)
2015-06-03 18:30:57 +00:00
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START
.DA 0
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
2015-03-14 21:48:35 +00:00
.1 .DA LIB.LOAD
.DA LIB.UNLOAD
.DA SET.IPCFG
.DA GET.IPCFG
.DA POLL
2018-07-23 15:28:42 +00:00
.DA PULSE
2015-03-14 21:48:35 +00:00
.DA ARP.CLEAR
.DA ARP.QUERY
.DA ARP.ADD
.DA ARP.GetCACHE
2015-03-14 21:48:35 +00:00
.DA DNS.CLEAR
.DA DNS.QUERY
.DA DNS.ADD
.DA DNS.GetCACHE
2015-03-14 21:48:35 +00:00
.DA HST.GETBYNAME
.DA HST.GETBYADDR
.DA SKT.New
2018-07-23 15:28:42 +00:00
.DA SKT.Close
.DA SKT.GetTable
.DA SKT.Get
2018-07-23 15:28:42 +00:00
.DA SKT.Accept
.DA SKT.MkNod
.DA SKT.Write
.DA SKT.Read
2018-07-23 15:28:42 +00:00
.DA SKT.ReadFrame
2015-03-14 21:48:35 +00:00
*--------------------------------------
2018-07-26 15:26:39 +00:00
L.DEVNAME .DA DEVNAME
L.MSG.DEV.KO .DA MSG.DEV.KO
L.MSG.DEV.OK .DA MSG.DEV.OK
L.MSG.CFG .DA MSG.CFG
L.MSG.CFG.KO .DA MSG.CFG.KO
L.MSG.CFG.OK .DA MSG.CFG.OK
2018-08-08 15:13:37 +00:00
L.MSG.DNS.ADD .DA MSG.DNS.ADD
L.MSG.DNS.ERR .DA MSG.DNS.ERR
2018-07-26 15:26:39 +00:00
L.HOSTNAME .DA HOSTNAME
L.TCPIP.CONF .DA TCPIP.CONF
L.HOSTS .DA HOSTS
2015-03-14 21:48:35 +00:00
L.IPCFG .DA IPCFG
2018-08-08 15:13:37 +00:00
L.CFG.IP .DA CFG.IP
L.CFG.HOSTNAME .DA CFG.HOSTNAME
L.CFG.ALIAS .DA CFG.ALIAS
L.CFG.HOSTS.SScanF .DA CFG.HOSTS.SScanF
L.CFG.Keywords .DA CFG.Keywords
J.CFG.Keywords .DA CFG.Read.address
.DA CFG.Read.netmask
.DA CFG.Read.gateway
.DA CFG.Read.nameserver
.DA CFG.Read.dnsdomain
L.ARP.REQ .DA ARP.REQ
L.ARP.REP .DA ARP.REP
L.DNS.SOCKET .DA DNS.SOCKET
L.DNS.MSG .DA DNS.MSG
2015-03-14 21:48:35 +00:00
L.ARP.CACHE .DA ARP.CACHE
L.DNS.CACHE .DA DNS.CACHE
L.SKT.Template .DA SKT.Template
2018-05-25 19:03:31 +00:00
L.HST.SScanF .DA HST.SScanF
L.TmpByte .DA TmpByte
2018-07-23 06:28:47 +00:00
L.IOCTL .DA IOCTL
L.DCB.NIC .DA DCB.NIC
L.TCP.IN.JMP .DA TCP.IN.JMP.CLOSED
.DA TCP.IN.JMP.LISTEN
.DA TCP.IN.JMP.SYNSENT
.DA TCP.IN.JMP.SYNRCVD
.DA TCP.IN.JMP.ESTBLSH
.DA TCP.IN.JMP.CLWAIT
.DA TCP.IN.JMP.LASTACK
.DA TCP.IN.JMP.FINWT1
.DA TCP.IN.JMP.FINWT2
.DA TCP.IN.JMP.CLOSING
.DA TCP.IN.JMP.TIMEWT
2015-03-14 21:48:35 +00:00
.DA 0
*--------------------------------------
LIB.LOAD ldx RefCount
bne .8
2018-07-26 15:26:39 +00:00
2018-07-10 15:33:13 +00:00
sta FD.SSOCK+S.FD.HANDLER
2018-07-26 15:26:39 +00:00
2015-03-14 21:48:35 +00:00
jsr ARP.CLEAR
2018-07-26 15:26:39 +00:00
2015-03-14 21:48:35 +00:00
jsr DNS.CLEAR
>LDYAI K.SKTTABLE.SIZE*S.SOCKET
2018-07-23 06:28:47 +00:00
>SYSCALL getmem0
2017-02-10 07:29:58 +00:00
bcs .9
2018-08-08 15:13:37 +00:00
2017-02-10 07:29:58 +00:00
stx hSocketTable
2018-08-08 15:13:37 +00:00
jsr CFG.Init
bcs .9
.8 inc RefCount
2018-07-26 15:26:39 +00:00
clc
2017-02-10 07:29:58 +00:00
.9 rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
LIB.UNLOAD dec RefCount
2018-07-23 06:28:47 +00:00
bne LIB.UNLOAD.8
2018-08-08 15:13:37 +00:00
lda IPCFG+S.IPCFG.hFD
2018-07-26 15:26:39 +00:00
beq .1
>PUSHWI 0
>PUSHBI IOCTL.CLOSE
2018-08-08 15:13:37 +00:00
lda IPCFG+S.IPCFG.hFD
2018-07-26 15:26:39 +00:00
>SYSCALL IOCTL
.1 lda hSocketTable
2018-07-23 06:28:47 +00:00
beq LIB.UNLOAD.8
2017-02-13 07:26:18 +00:00
2018-07-18 15:30:42 +00:00
>SYSCALL FreeMem
2017-02-13 07:26:18 +00:00
2018-07-23 06:28:47 +00:00
LIB.UNLOAD.8 clc
2015-03-14 21:48:35 +00:00
rts
*--------------------------------------
2018-07-23 06:28:47 +00:00
POLL >PUSHW L.IOCTL
>PUSHBI IOCTL.READ
2018-08-08 15:13:37 +00:00
lda IPCFG+S.IPCFG.hFD
>SYSCALL IOCTL
2017-01-29 21:47:19 +00:00
bcs .99 No Frame
2018-07-23 06:28:47 +00:00
sta hFrameIn
2018-08-08 15:13:37 +00:00
ldx #3
2018-08-08 15:13:37 +00:00
.10 lda IOCTL+S.IOCTL.BUFPTR,x Get Frame Ptr & Len
2018-07-23 06:28:47 +00:00
sta ZPFrameInPtr,x
2018-08-08 15:13:37 +00:00
dex
bpl .10
2017-01-29 21:47:19 +00:00
ldy #S.ETH.ETHERTYPE
lda (ZPFrameInPtr),y
2017-01-29 21:47:19 +00:00
tax
iny
lda (ZPFrameInPtr),y
2017-01-29 21:47:19 +00:00
cmp #S.ETH.ETHERTYPE.ARP
bne .1
cpx /S.ETH.ETHERTYPE.ARP
bne .1
jmp ARP.IN
.1 cmp #S.ETH.ETHERTYPE.IP
bne .9
cpx /S.ETH.ETHERTYPE.IP
bne .9
2017-01-29 21:47:19 +00:00
jmp IP.IN
.9 lda hFrameIn
2018-07-23 06:28:47 +00:00
beq LIB.UNLOAD.8
2018-07-18 15:30:42 +00:00
>SYSCALL FreeMem
2018-07-23 06:28:47 +00:00
2017-01-29 21:47:19 +00:00
.99 rts
*--------------------------------------
* Expire = every sec
* Retry = every 100 msec
*--------------------------------------
2018-07-23 15:28:42 +00:00
PULSE and #S.EVT.F.T1SEC
beq .1
2018-08-08 15:13:37 +00:00
* jsr ARP.EXPIRE
jsr DNS.EXPIRE
2017-01-29 21:47:19 +00:00
.1 jsr DNS.POLL
jmp FRM.RETRY
*--------------------------------------
GetDynPort inc DYNPORT.LAST
bne .1
inc DYNPORT.LAST+1
lda DYNPORT.LAST
cmp #K.DYNPORT.END
lda DYNPORT.LAST+1
sbc /K.DYNPORT.END
bcs .1
2018-07-12 15:20:39 +00:00
lda #K.DYNPORT.START
ldx /K.DYNPORT.START
sta DYNPORT.LAST
stx DYNPORT.LAST+1
rts CC
.1 lda DYNPORT.LAST
ldx DYNPORT.LAST+1
2015-03-14 21:48:35 +00:00
clc
rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
.INB /A2OSX.SRC/LIB/LIBTCPIP.S.ARP
.INB /A2OSX.SRC/LIB/LIBTCPIP.S.CFG
.INB /A2OSX.SRC/LIB/LIBTCPIP.S.DNS
.INB /A2OSX.SRC/LIB/LIBTCPIP.S.FRM
.INB /A2OSX.SRC/LIB/LIBTCPIP.S.HST
.INB /A2OSX.SRC/LIB/LIBTCPIP.S.ICMP
.INB /A2OSX.SRC/LIB/LIBTCPIP.S.IP
.INB /A2OSX.SRC/LIB/LIBTCPIP.S.SKT
.INB /A2OSX.SRC/LIB/LIBTCPIP.S.TCP
.INB /A2OSX.SRC/LIB/LIBTCPIP.S.UDP
*--------------------------------------
2015-03-14 21:48:35 +00:00
CS.END
*--------------------------------------
2018-08-08 15:13:37 +00:00
DEVNAME .AZ "/DEV/ETH1"
2018-07-26 15:26:39 +00:00
MSG.DEV.KO .AZ "TCPIPD:No Device Found, exiting.\r\n"
MSG.DEV.OK .AZ "TCPIPD:Bound To Device : %s\r\n"
MSG.CFG .AZ "TCPIPD:Reading %s..."
MSG.CFG.KO .AZ "Failed!!! [%h]\r\n"
MSG.CFG.OK .AZ "OK.\r\n"
2018-08-08 15:13:37 +00:00
MSG.DNS.ADD .AZ "Added static host %d.%d.%d.%d %s\r\n"
MSG.DNS.ERR .AZ "***ERROR adding static host %d.%d.%d.%d %s\r\n"
2018-07-26 15:26:39 +00:00
*--------------------------------------
HOSTNAME .AZ "${A2OSX}ETC/HOSTNAME"
TCPIP.CONF .AZ "${A2OSX}ETC/TCPIP.CONF"
HOSTS .AZ "${A2OSX}ETC/HOSTS"
2018-08-08 15:13:37 +00:00
*--------------------------------------
CFG.DefaultHost .AZ "a2osx-XXXX"
CFG.Keywords >PSTR "address"
>PSTR "netmask"
>PSTR "gateway"
>PSTR "nameserver"
>PSTR "dnsdomain"
.DA #0
CFG.hBuf .BS 1
2018-07-26 15:26:39 +00:00
CFG.hCfgPath .BS 1
2018-08-08 15:13:37 +00:00
CFG.hCfgFile .BS 1
CFG.IP .BS 4
CFG.HostName .BS K.DNS.MAXLEN+1
CFG.Alias .BS K.DNS.MAXLEN+1
CFG.HOSTS.SScanF .AZ "%d.%d.%d.%d %s %s"
2018-07-26 15:26:39 +00:00
*--------------------------------------
FD.SSOCK .BS 1 S.FD.HANDLER
.DA #S.FD.T.SSOCK
.BS 1 S.FD.SSOCK.HSKT
.DA #0 S.FD.SSOCK.OPEN
.DA #0 S.FD.SSOCK.CLOSE
.DA #0
.DA #0
.DA #0 S.FD.SSOCK.STATUS
*--------------------------------------
IOCTL .BS S.IOCTL
DCB.NIC .BS S.DCB.NIC
IPCFG .BS S.IPCFG
ARP.CACHE .BS K.ARPCACHE.SIZE*S.ARPCACHE
DNS.CACHE .BS K.DNSCACHE.SIZE*S.DNSCACHE
*--------------------------------------
2018-08-08 15:13:37 +00:00
ARP.REQ .EQ *
ARP.REQ.DSTMAC .HS FFFFFFFFFFFF
ARP.REQ.SRCMAC .BS 6
ARP.REQ.ETYPE .DA /S.ETH.ETHERTYPE.ARP
.DA #S.ETH.ETHERTYPE.ARP
.HS 0001.0800.06.04
ARP.REQ.OP .DA /S.ARP.OPERATION.REQ
.DA #S.ARP.OPERATION.REQ
ARP.REQ.SHA .BS 6
ARP.REQ.SPA .BS 4
ARP.REQ.THA .BS 6
ARP.REQ.TPA .BS 4
*--------------------------------------
2018-08-08 15:13:37 +00:00
ARP.REP .EQ *
ARP.REP.DSTMAC .BS 6
ARP.REP.SRCMAC .BS 6
ARP.REP.ETYPE .DA /S.ETH.ETHERTYPE.ARP
.DA #S.ETH.ETHERTYPE.ARP
.HS 0001.0800.06.04
ARP.REP.OP .DA /S.ARP.OPERATION.REP
.DA #S.ARP.OPERATION.REP
ARP.REP.SHA .BS 6
ARP.REP.SPA .BS 4
ARP.REP.THA .BS 6
ARP.REP.TPA .BS 4
*--------------------------------------
DNS.SOCKET .DA #S.SOCKET.SOCK.DGRAM
.BS 3
DNS.SOCKET.SA .BS 4
DNS.SOCKET.SP .DA 0 Dynamic
DNS.SOCKET.DA .BS 4
DNS.SOCKET.DP .DA UDP.PORT.DNS
*--------------------------------------
DNS.MSG.LEN .BS 2
2016-03-15 17:16:14 +00:00
DNS.MSG
DNS.MSG.ID .BS 2
.DA /S.DNS.F.RD Flags=query
.DA #S.DNS.F.RD
.DA $100 QDCOUNT
.BS 6 ANCOUNT,NSCOUNT,ARCOUNT
2016-03-15 17:16:14 +00:00
DNS.MSG.NAME .BS K.DNS.MAXLEN+6
*--------------------------------------
FRM.QUEUE.Tail .BS 1
FRM.QUEUE.Head .BS 1
FRM.QUEUE.hMem .BS K.FRMQUEUE.SIZE
FRM.QUEUE.State .BS K.FRMQUEUE.SIZE
FRM.QUEUE.Retry .BS K.FRMQUEUE.SIZE
2018-07-23 15:28:42 +00:00
FRM.QUEUE.LenL .BS K.FRMQUEUE.SIZE
FRM.QUEUE.LenH .BS K.FRMQUEUE.SIZE
*--------------------------------------
RefCount .DA #0
2017-02-10 07:29:58 +00:00
hSocketTable .BS 1
2017-02-13 07:26:18 +00:00
DYNPORT.LAST .DA K.DYNPORT.START
hDNSSocket1 .BS 1
hDNSSocket2 .BS 1
2016-03-15 17:16:14 +00:00
DNS.HostName .BS K.DNS.MAXLEN+1
DNS.TmpCache .BS S.DNSCACHE
2016-03-16 07:19:54 +00:00
ARP.TmpCache .BS S.ARP
SKT.Template .BS S.SOCKET
SKT.TCBCache .BS S.TCB
TmpByte .BS 1
TmpDWord .BS 4
TmpOffset .BS 2
2017-01-29 21:47:19 +00:00
hFrameIn .BS 1
hFrameOut .BS 1
bTextMode .BS 1
2018-05-25 19:03:31 +00:00
HST.SScanF .AZ "%d.%d.%d.%d"
2017-02-13 07:26:18 +00:00
IP.ID .BS 2
2016-03-15 17:16:14 +00:00
IP.CHECKSUM .BS 4
2015-03-14 21:48:35 +00:00
*--------------------------------------
MAN
SAVE /A2OSX.SRC/LIB/LIBTCPIP.S
2015-03-14 21:48:35 +00:00
ASM