A2osX/SBIN/TCPIP.S.txt
2016-01-10 23:18:12 +01:00

351 lines
7.1 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF /A2OSX.BOOT/SBIN/TCPIP
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/LIBTCPIP.I
*--------------------------------------
ZPFrameBase1 .EQ ZPBIN
ZPFrameLen1 .EQ ZPBIN+2
ZPFramePtr1 .EQ ZPBIN+4
ZPFrameBase2 .EQ ZPBIN+6
ZPFrameLen2 .EQ ZPBIN+8
ZPFramePtr2 .EQ ZPBIN+10
ZPIPCfgPtr .EQ ZPBIN+12
ZPIPDevPtr .EQ ZPBIN+14
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA 0
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP
L.MSG.HELP .DA MSG.HELP
L.MSG.CFG .DA MSG.CFG
L.MSG.CFG.KO .DA MSG.CFG.KO
L.MSG.CFG.OK .DA MSG.CFG.OK
L.HOSTNAME .DA HOSTNAME
L.TCPIP.CONF .DA TCPIP.CONF
L.IPCFG .DA IPCFG
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBTCPIP
>SYSCALL SYS.LoadLibYA
bcs .99
sta hLIBTCPIP
ldy #S.PS.hARGS
lda (pPs),y
bne .1
>LDYA L.MSG.HELP
>SYSCALL SYS.PSTROutYA
lda #0
sec
rts
.1 jsr CS.INIT.DEV
bcs .99
jsr CFG.Read continue even if error opening CFG file
ldx #S.IPCFG.HOSTNAME
lda IPCFG,x
bne .3
ldy #0
.2 lda DefaultHostName,y
sta IPCFG,x
beq .3
inx
iny
bne .2
.3 >PUSHW L.IPCFG
>PUSHBI K.PROTOID.IP
>SYSCALL SYS.AddNetCfg
bcs .99
lda (pPs)
ora #S.PS.F.EVENT Now accept events
sta (pPs)
clc
.99 rts
*--------------------------------------
CS.INIT.DEV ldy #S.PS.hARGS
lda (pPs),y
>PUSHA
>PUSHBI $20 Push SEP=' '
>PUSHBI 1 Push 1 for getting DEV
>SYSCALL SYS.PStrGetTkn
bcs .99
sta hDEVNAME save DevName for discard
>SYSCALL SYS.GetDevByNameA
bcs .98
>STYA pNetDevJmp+1
txa
sta hNetDev
ldx #S.IPCFG.HDEV
sta IPCFG,x
ldx #DEVMGR.OPEN
jsr pNetDevJmp
bcs .98
ldx #DEVMGR.GETINFO
jsr pNetDevJmp
bcs .98
>STYA ZPIPDevPtr
ldy #1
lda (ZPIPDevPtr),y
sta DEVFLAGS
iny
ldx #S.IPCFG.MAC
.1 lda (ZPIPDevPtr),y
sta IPCFG,x
iny
inx
cpx #S.IPCFG.MAC+6
bne .1
jsr .98
clc
rts
.98 pha
lda hDEVNAME
>SYSCALL SYS.FreeMemA
pla
.99 sec
rts
*--------------------------------------
CS.RUN clc
rts
*--------------------------------------
CS.DOEVENT lda (pEvent)
and #S.EVT.F.NET
beq .9
ldy #S.EVT.hDEV
lda (pEvent),y
cmp hNetDev
beq CS.DOEVENT.NET
.9 sec
rts
CS.DOEVENT.NET ldy #S.EVT.DATALO Get Frame hMem
lda (pEvent),y
>SYSCALL SYS.GetMemPtrA
>STYA ZPFrameBase1
ldy #S.EVT.DATAW1 Get Frame Len
lda (pEvent),y
sta ZPFrameLen1
iny
lda (pEvent),y
sta ZPFrameLen1+1
ldy #S.ETH.ETHERTYPE
lda (ZPFrameBase1),y
tax
iny
lda (ZPFrameBase1),y
cmp #S.ETH.ETHERTYPE.ARP
bne .1
cpx /S.ETH.ETHERTYPE.ARP
bne .1
jsr ARPListener
bcc .89
rts
.1 cmp #S.ETH.ETHERTYPE.IP
bne .99
cpx /S.ETH.ETHERTYPE.IP
bne .99
ldy #S.IP.PROTOCOL
lda (ZPFrameBase1),y
cmp #S.IP.PROTOCOL.ICMP
bne .2
jsr ICMPListener
bcc .89
rts
.2 cmp #S.IP.PROTOCOL.UDP
bne .21
ldy #S.UDP.DSTPORT
lda /UDP.PORT.DNS
cmp (ZPFrameBase1),y
bne .3
iny
lda #UDP.PORT.DNS
cmp (ZPFrameBase1),y
bne .3
jsr DNSListener
bcc .89
rts
.21 >PUSHW ZPFrameLen1
>PUSHW ZPFrameBase1
>LIBCALL hLIBTCPIP,LIBTCPIP.UDP.LISTENER
bcc .89
rts
.3 cmp #S.IP.PROTOCOL.TCP
bne .99
>PUSHW ZPFrameLen1
>PUSHW ZPFrameBase1
>LIBCALL hLIBTCPIP,LIBTCPIP.TCP.LISTENER
bcc .89
rts
.89 clc
rts
.99 sec
rts
*--------------------------------------
CS.QUIT ldx #DEVMGR.CLOSE
jsr pNetDevJmp
lda hLIBTCPIP
>SYSCALL SYS.UnloadLibA
clc
rts
*--------------------------------------
*--------------------------------------
*--------------------------------------
*--------------------------------------
GetIPCFG >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG
>STYA ZPIPCfgPtr
ldy #S.IPCFG
.1 dey
lda (ZPIPCfgPtr),y
sta IPCFG,y
tya
bne .1
rts
*--------------------------------------
MakeIPReply >LDAXI S.IP.SRC
jsr SetFramePtr1AX
>LDAXI S.IP.DST
jsr SetFramePtr2AX
ldy #4
jsr CopyFramePtr12
>LDAXI S.IP.DST
jsr SetFramePtr1AX
>LDAXI S.IP.SRC
jsr SetFramePtr2AX
ldy #4
jsr CopyFramePtr12
>LDAXI S.ETH.SRCMAC
jsr SetFramePtr1AX
>LDAXI S.ETH.DSTMAC
jsr SetFramePtr2AX
ldy #6
jsr CopyFramePtr12
rts
*--------------------------------------
* A,X = Frame PTR
*--------------------------------------
SetFramePtr1AX clc
adc ZPFrameBase1
sta ZPFramePtr1
txa
adc ZPFrameBase1+1
sta ZPFramePtr1+1
rts
*--------------------------------------
* A,X = Frame PTR
*--------------------------------------
SetFramePtr2AX clc
adc ZPFrameBase2
sta ZPFramePtr2
txa
adc ZPFrameBase2+1
sta ZPFramePtr2+1
rts
*--------------------------------------
* Y = bytes to copy from ZPFramePtr1 to ZPFramePtr2
*--------------------------------------
CopyFramePtr12 dey
lda (ZPFramePtr1),y
sta (ZPFramePtr2),y
tya
bne CopyFramePtr12
rts
*--------------------------------------
pNetDevJmp jmp *
*--------------------------------------
.INB SBIN/TCPIP.S.CFG
.INB SBIN/TCPIP.S.ARP
.INB SBIN/TCPIP.S.DNS
.INB SBIN/TCPIP.S.ICMP
*--------------------------------------
CS.END
*--------------------------------------
LIBTCPIP >PSTRING "libtcpip.o"
MSG.HELP >PSTRING "Usage: TCPIP ETHx\n"
MSG.CFG >PSTRING "TCPIP:Reading %S..."
MSG.CFG.KO >PSTRING "Failed!!! [%h]\n"
MSG.CFG.OK >PSTRING "OK.\n"
HOSTNAME >PSTRING "${A2OSX}ETC/HOSTNAME"
TCPIP.CONF >PSTRING "${A2OSX}ETC/TCPIP.CONF"
DefaultHostName >CSTRING "a2osx-host"
CFG.Keywords >PSTRING "DOMAIN"
>PSTRING "IP"
>PSTRING "MASK"
>PSTRING "GW"
>PSTRING "DNS1"
>PSTRING "DNS2"
CFG.Keyword.Map .DA #0 End Of Keyword table and NA Keyword
.DA #S.IPCFG.IP
.DA #S.IPCFG.MASK
.DA #S.IPCFG.GW
.DA #S.IPCFG.DNS
.DA #S.IPCFG.DNS+4
hLIBTCPIP .BS 1
hDEVNAME .BS 1
hNetDev .BS 1
DEVFLAGS .BS 1
IPCFG .BS S.IPCFG Get in cache for faster access with ,X
CFG.hCfgFile .BS 1
CFG.FileLen .BS 2
CFG.Keyword .BS 1
CFG.StrBuf .BS 4
CFG.HexByte .BS 1
CFG.IP .BS 5
*--------------------------------------
MAN
SAVE SBIN/TCPIP.S
ASM