Kernel 0.9.2

This commit is contained in:
Rémy GIBERT 2018-07-26 17:26:39 +02:00
parent 6e9fe36875
commit dc285bcbc0
9 changed files with 562 additions and 541 deletions

Binary file not shown.

Binary file not shown.

View File

@ -1,11 +1,11 @@
NEW
PREFIX /A2OSX.BUILD
AUTO 4,1
IP=192.168.1.150
MASK=255.255.255.0
GW=192.168.1.254
DNS1=192.168.1.2
DNS2=192.168.1.1
DOMAIN=coincoin.hd.free.fr
address 192.168.1.150
netmask 255.255.255.0
gateway 192.168.1.254
nameserver 192.168.1.2
nameserver 192.168.1.254
dnsdomain coincoin.hd.free.fr
MAN
TEXT ETC/TCPIP.CONF

View File

@ -101,7 +101,7 @@ SYS.GetC .EQ $24
SYS.GetChar .EQ $26
SYS.FPutS .EQ $28
SYS.PutS .EQ $2A
* .EQ $2C
SYS.FGetS .EQ $2C
* .EQ $2E
SYS.FOpen .EQ $30

View File

@ -5,23 +5,43 @@ AUTO 4,1
*--------------------------------------
* PULLW = PTR to S.IPCFG
*--------------------------------------
SET.IPCFG >PULLW ZPTmpPtr1 IPCFG
CFG.Init >LDYA L.DEVNAME
>SYSCALL GetDevByName
bcc .1
inc DEVNAME+3
lda DEVNAME+3
cmp #'8'
bne CFG.Init
>LDYA L.MSG.DEV.KO
>SYSCALL printf
lda #MLI.E.NODEV
.9 sec
rts
.1 stx IPCFG+S.IPCFG.HDEV
>PUSHW L.DEVNAME
>LDYA L.MSG.DEV.OK
>SYSCALL printf
>PUSHWI 0
>PUSHBI IOCTL.OPEN
lda IPCFG+S.IPCFG.HDEV
>SYSCALL IOCTL
bcs .9
>LDYA L.DCB.NIC
>STYA IOCTL+S.IOCTL.BUFPTR
lda #S.IOCTL.STATCODE.GETDCB
sta IOCTL+S.IOCTL.STATCODE
ldx #IOCTL.STATUS
jsr SET.IPCFG.IOCTL
ldy #0
.1 lda (ZPTmpPtr1),y
sta IPCFG,y
iny
cpy #S.IPCFG
bne .1
>PUSHW L.IOCTL
>PUSHBI IOCTL.STATUS
lda IPCFG+S.IPCFG.HDEV
>SYSCALL IOCTL
bcs .9
ldx #5
@ -43,34 +63,421 @@ SET.IPCFG >PULLW ZPTmpPtr1 IPCFG
dex
bpl .3
lda DCB.NIC+S.DCB.NIC.FLAGS
and #S.DCB.NIC.FLAGS.ARPOFFLOAD
CFG.EtcFiles >LDYA L.MSG.CFG
>SYSCALL printf
jsr CFG.Read.HOSTNAME
jsr CFG.Read.Result
lda IPCFG+S.IPCFG.HOSTNAME
bne .4
ldy #$ff
.2 iny
lda DefaultHostName,y
sta IPCFG+S.IPCFG.HOSTNAME,y
bne .2
.3 lda A2osX.TIMER16
jsr CFG.A2CharAX
sta IPCFG+S.IPCFG.HOSTNAME+6
stx IPCFG+S.IPCFG.HOSTNAME+7
lda A2osX.TIMER16+1
jsr CFG.A2CharAX
sta IPCFG+S.IPCFG.HOSTNAME+8
stx IPCFG+S.IPCFG.HOSTNAME+9
.4 >PUSHW L.TCPIP.CONF
>LDYA L.MSG.CFG
>SYSCALL printf
jsr CFG.Read.TCPIP.CONF
jsr CFG.Read.Result
>PUSHW L.HOSTS
>LDYA L.MSG.CFG
>SYSCALL printf
jsr CFG.Read.HOSTS
jsr CFG.Read.Result
jmp SET.IPCFG.I
*--------------------------------------
CFG.Read.Result bcc .1
>PUSHA
>LDYA L.MSG.CFG.KO
bra .2
.1 >LDYA L.MSG.CFG.OK
.2 >SYSCALL printf
rts
*--------------------------------------
CFG.Read.HOSTNAME
>LDYA L.HOSTNAME
jsr CFG.Read.LoadFile
bcs .9
* read 15 chars MAX, until CR or EOF
ldx #$15
lda CFG.FileLen+1
bne .1 File is more than 256....?
ldx CFG.FileLen
beq .9 len is 0 !!!
.1 ldy #0
.2 lda (ZPTmpPtr1),y
cmp #13
beq .8 A CR, end of name
sta IPCFG+S.IPCFG.HOSTNAME,y
iny
dex
bne .2
.8 lda #0
sta IPCFG+S.IPCFG.HOSTNAME,y
jsr CFG.Read.CleanUp
clc
rts
.9 jsr CFG.Read.CleanUp
sec
rts
*--------------------------------------
CFG.Read.TCPIP.CONF
>LDYA L.TCPIP.CONF
jsr CFG.Read.LoadFile
bcs .9
.1 jsr CFG.GetLine
bcs .8
jsr CFG.GetKeyword
bcs .1
lda CFG.Keyword
bne .3
ldy UsrBuf256
lda UsrBuf256+1,y
cmp #35 DOMAIN too long!!!
bcs .1
sta IPCFG+S.IPCFG.DOMAIN
ldx #0
.2 lda UsrBuf256+2,y
sta IPCFG+S.IPCFG.DOMAIN,x
beq .1
inx
iny
bne .2
bra .1
.9 jsr CFG.Read.CleanUp
sec
rts
.3 jsr CFG.ScanIP
bcs .1
ldy CFG.Keyword
lda CFG.Keyword.Map,y
tax
ldy #0
.4 lda CFG.IP+1,y
sta IPCFG,x
inx
iny
cpy #4
bne .4
lda CFG.Keyword
cmp #1
bne .1
lda #S.IPCFG.STATUS.OK
sta IPCFG
bra .1
.8 jsr CFG.Read.CleanUp
clc
rts
*--------------------------------------
CFG.Read.HOSTS >LDYA L.HOSTS
jsr CFG.Read.LoadFile
bcs .9
.8 jsr CFG.Read.CleanUp
clc
rts
.9 jsr CFG.Read.CleanUp
sec
rts
*--------------------------------------
CFG.Read.LoadFile
stz CFG.hCfgFile
stz CFG.hCfgPath
>SYSCALL ExpandStr
bcs .9
stx CFG.hCfgPath
pha
>PUSHWI 0 Aux type
>PUSHBI 4 S.FI.T.TXT
>PUSHBI SYS.FOpen.R
pla
>SYSCALL LoadFile
bcs .9
stx CFG.hCfgFile
>STYA CFG.FileLen
txa
>SYSCALL GetMemPtr
>STYA ZPTmpPtr1
.9 rts
*--------------------------------------
CFG.Read.CleanUp
pha
lda CFG.hCfgPath
beq .1
>SYSCALL FreeMem
.1 lda CFG.hCfgFile
beq .8
>SYSCALL FreeMem
.8 pla
rts
*--------------------------------------
CFG.GetLine stz UsrBuf256
ldx #0
ldy #0
.1 jsr CFG.GetChar
bne .2 end of file?
txa
bne .8
sec
rts
.2 cmp #$0D
beq .8 end of line
inx
sta UsrBuf256,x
cmp #'='
bne .3
txa
dec
tay
.3 cpx #64 line too long ?
bne .1
sec
rts
.8 tya = found ?
beq .9
sta UsrBuf256
txa
sec
sbc UsrBuf256
sta UsrBuf256+1,y
stz UsrBuf256+1,x End with 0 for ScanIP
clc
rts
.9 sec
rts
*--------------------------------------
CFG.GetChar lda CFG.FileLen
bne .1
lda CFG.FileLen+1
beq .9
dec CFG.FileLen+1
.1 dec CFG.FileLen
lda (ZPTmpPtr1)
inc ZPTmpPtr1
bne .9
inc ZPTmpPtr1+1 NZ
.9 rts
*--------------------------------------
CFG.GetKeyword stz CFG.Keyword
ldx #0
.1 phx
ldy #0
.2 lda CFG.Keywords,x
cmp UsrBuf256,y
bne .3
cpy UsrBuf256
beq .4
inx
iny
bne .2
plx
sec
rts
.3 inc CFG.Keyword
plx
txa
sec
adc CFG.Keywords,x
tax
lda CFG.Keywords,x
bne .1
sec
rts
.4 plx
clc
rts
*--------------------------------------
CFG.ScanIP stz CFG.IP
ldx UsrBuf256
.1 ldy #0
.11 lda UsrBuf256+2,x
beq .3
cmp #'0'
bcc .2
cmp #'9'+1
bcs .2
cpy #3
beq .9
iny
sta CFG.StrBuf,y
inx
bra .11
.2 cmp #'.'
bne .9
.3 sty CFG.StrBuf
lda CFG.IP
cmp #4
beq .9
jsr CFG.Dec2Hex
bcs .9
lda CFG.HexByte
inc CFG.IP
ldy CFG.IP
sta CFG.IP,y
inx
lda UsrBuf256+1,x
bne .1
clc
rts
.9 sec
rts
*--------------------------------------
CFG.Dec2Hex sec
ldy CFG.StrBuf
beq .9
lda CFG.StrBuf+1
and #$0f
sta CFG.HexByte
ldy #1
.1 cpy CFG.StrBuf
beq .8
iny
lda CFG.HexByte
asl CFG.HexByte
bcs .9
asl CFG.HexByte
bcs .9
adc CFG.HexByte
bcs .9
asl
bcs .9
sta CFG.HexByte
lda CFG.StrBuf,y
and #$0f
adc CFG.HexByte
sta CFG.HexByte
bcc .1
.9 rts
.8 clc
rts
*--------------------------------------
CFG.A2CharAX pha
lsr
lsr
lsr
lsr
ora #$30
cmp #'9'+1
bcc .1
adc #6
.1 tax
pla
and #$0F
ora #$30
cmp #'9'+1
bcc .8
adc #6
.8 rts
*--------------------------------------
SET.IPCFG >PULLW ZPTmpPtr1 IPCFG
ldy #0
.1 lda (ZPTmpPtr1),y
sta IPCFG,y
iny
cpy #S.IPCFG
bne .1
SET.IPCFG.I lda DCB.NIC+S.DCB.NIC.FLAGS
and #S.DCB.NIC.FLAGS.ARPOFFLOAD
beq .2
ldx #11
.31 lda IPCFG+S.IPCFG.IP,x
.1 lda IPCFG+S.IPCFG.IP,x
sta DCB.NIC+S.DCB.NIC.IP,x
dex
bpl .31
bpl .1
* lda S.IOCTL.CTRLCODE.SETDCB same as lda S.IOCTL.STATCODE.GETDCB
* sta S.IOCTL.CTRLCODE same as sta S.IOCTL.STATCODE
lda S.IOCTL.CTRLCODE.SETDCB
sta S.IOCTL.CTRLCODE
ldx #IOCTL.CONTROL
jsr SET.IPCFG.IOCTL
>PUSHW L.IOCTL
>PUSHBI IOCTL.CONTROL
lda IPCFG+S.IPCFG.HDEV
>SYSCALL IOCTL
bcs .9
.4 lda hDNSSocket1
beq .41
.2 lda hDNSSocket1
beq .3
jsr SKT.Close
stz hDNSSocket1
.41 lda hDNSSocket2
beq .42
.3 lda hDNSSocket2
beq .4
jsr SKT.Close
stz hDNSSocket2
.42 lda IPCFG+S.IPCFG.DNS1
.4 lda IPCFG+S.IPCFG.DNS1
beq .6
ldx #3
@ -110,13 +517,6 @@ SET.IPCFG >PULLW ZPTmpPtr1 IPCFG
.8 clc
.9 rts
SET.IPCFG.IOCTL >PUSHW L.IOCTL
txa
>PUSHA
lda IPCFG+S.IPCFG.HDEV
>SYSCALL IOCTL
rts
*--------------------------------------
* grab a copy on the fly for lib function
* OUT :

View File

@ -83,6 +83,15 @@ CS.START cld
.DA SKT.Read
.DA SKT.ReadFrame
*--------------------------------------
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
L.HOSTNAME .DA HOSTNAME
L.TCPIP.CONF .DA TCPIP.CONF
L.HOSTS .DA HOSTS
L.IPCFG .DA IPCFG
L.ARP.REQ .DA ARP.REQ
L.ARP.REP .DA ARP.REP
@ -110,9 +119,14 @@ L.TCP.IN.JMP .DA TCP.IN.JMP.CLOSED
*--------------------------------------
LIB.LOAD ldx RefCount
bne .8
sta FD.SSOCK+S.FD.HANDLER
jsr CFG.Init
bcs .9
jsr ARP.CLEAR
jsr DNS.CLEAR
>LDYAI K.SKTTABLE.SIZE*S.SOCKET
@ -122,13 +136,22 @@ LIB.LOAD ldx RefCount
stx hSocketTable
.8 inc RefCount
clc
.9 rts
*--------------------------------------
LIB.UNLOAD dec RefCount
bne LIB.UNLOAD.8
lda hSocketTable
lda IPCFG+S.IPCFG.HDEV
beq .1
>PUSHWI 0
>PUSHBI IOCTL.CLOSE
lda IPCFG+S.IPCFG.HDEV
>SYSCALL IOCTL
.1 lda hSocketTable
beq LIB.UNLOAD.8
>SYSCALL FreeMem
@ -224,6 +247,53 @@ GetDynPort inc DYNPORT.LAST
*--------------------------------------
CS.END
*--------------------------------------
DEVNAME .AZ "ETH1"
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"
*--------------------------------------
HOSTNAME .AZ "${A2OSX}ETC/HOSTNAME"
TCPIP.CONF .AZ "${A2OSX}ETC/TCPIP.CONF"
HOSTS .AZ "${A2OSX}ETC/HOSTS"
DefaultHostName .AZ "a2osx-XXXX"
CFG.Keywords >PSTR "DOMAIN"
>PSTR "IP"
>PSTR "MASK"
>PSTR "GW"
>PSTR "DNS1"
>PSTR "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.DNS1
.DA #S.IPCFG.DNS2
CFG.hCfgFile .BS 1
CFG.hCfgPath .BS 1
CFG.FileLen .BS 2
CFG.Keyword .BS 1
CFG.StrBuf .BS 4
CFG.HexByte .BS 1
CFG.IP .BS 5
UsrBuf256 .BS 256
*--------------------------------------
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
*--------------------------------------
ARP.REQ .DA S.ARP Frame size
ARP.REQ.DSTMAC .HS FFFFFFFFFFFF
ARP.REQ.SRCMAC .BS 6
@ -266,9 +336,6 @@ DNS.MSG.ID .BS 2
.BS 6 ANCOUNT,NSCOUNT,ARCOUNT
DNS.MSG.NAME .BS K.DNS.MAXLEN+6
*--------------------------------------
IPCFG .BS S.IPCFG
ARP.CACHE .BS K.ARPCACHE.SIZE*S.ARPCACHE
DNS.CACHE .BS K.DNSCACHE.SIZE*S.DNSCACHE
FRM.QUEUE.Tail .BS 1
FRM.QUEUE.Head .BS 1
FRM.QUEUE.hMem .BS K.FRMQUEUE.SIZE
@ -296,16 +363,6 @@ bTextMode .BS 1
HST.SScanF .AZ "%d.%d.%d.%d"
IP.ID .BS 2
IP.CHECKSUM .BS 4
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
*--------------------------------------
MAN
SAVE /A2OSX.SRC/LIB/LIBTCPIP.S

View File

@ -1,381 +0,0 @@
NEW
PREFIX /A2OSX.BUILD
AUTO 4,1
.LIST OFF
*--------------------------------------
CFG.Read >PUSHW L.HOSTNAME
>LDYA L.MSG.CFG
>SYSCALL printf
jsr CFG.Read.HOSTNAME
jsr CFG.Read.Result
lda IPCFG+S.IPCFG.HOSTNAME
bne .4
ldy #$ff
.2 iny
lda DefaultHostName,y
sta IPCFG+S.IPCFG.HOSTNAME,y
bne .2
.3 lda A2osX.TIMER16
jsr CFG.A2CharAX
sta IPCFG+S.IPCFG.HOSTNAME+6
stx IPCFG+S.IPCFG.HOSTNAME+7
lda A2osX.TIMER16+1
jsr CFG.A2CharAX
sta IPCFG+S.IPCFG.HOSTNAME+8
stx IPCFG+S.IPCFG.HOSTNAME+9
.4 >PUSHW L.TCPIP.CONF
>LDYA L.MSG.CFG
>SYSCALL printf
jsr CFG.Read.TCPIP.CONF
jsr CFG.Read.Result
>PUSHW L.HOSTS
>LDYA L.MSG.CFG
>SYSCALL printf
jsr CFG.Read.HOSTS
*--------------------------------------
CFG.Read.Result bcc .1
>PUSHA
>LDYA L.MSG.CFG.KO
bra .2
.1 >LDYA L.MSG.CFG.OK
.2 >SYSCALL printf
rts
*--------------------------------------
CFG.Read.HOSTNAME
>LDYA L.HOSTNAME
jsr CFG.Read.LoadFile
bcs .9
* read 15 chars MAX, until CR or EOF
ldx #$15
lda CFG.FileLen+1
bne .1 File is more than 256....?
ldx CFG.FileLen
beq .9 len is 0 !!!
.1 ldy #0
.2 lda (ZPIPCfgPtr),y
cmp #13
beq .8 A CR, end of name
sta IPCFG+S.IPCFG.HOSTNAME,y
iny
dex
bne .2
.8 lda #0
sta IPCFG+S.IPCFG.HOSTNAME,y
jsr CFG.Read.CleanUp
clc
rts
.9 jsr CFG.Read.CleanUp
sec
rts
*--------------------------------------
CFG.Read.TCPIP.CONF
>LDYA L.TCPIP.CONF
jsr CFG.Read.LoadFile
bcs .9
.1 jsr CFG.GetLine
bcs .8
jsr CFG.GetKeyword
bcs .1
lda CFG.Keyword
bne .3
ldy UsrBuf256
lda UsrBuf256+1,y
cmp #35 DOMAIN too long!!!
bcs .1
sta IPCFG+S.IPCFG.DOMAIN
ldx #0
.2 lda UsrBuf256+2,y
sta IPCFG+S.IPCFG.DOMAIN,x
beq .1
inx
iny
bne .2
bra .1
.9 jsr CFG.Read.CleanUp
sec
rts
.3 jsr CFG.ScanIP
bcs .1
ldy CFG.Keyword
lda CFG.Keyword.Map,y
tax
ldy #0
.4 lda CFG.IP+1,y
sta IPCFG,x
inx
iny
cpy #4
bne .4
lda CFG.Keyword
cmp #1
bne .1
lda #S.IPCFG.STATUS.OK
sta IPCFG
bra .1
.8 jsr CFG.Read.CleanUp
clc
rts
*--------------------------------------
CFG.Read.HOSTS >LDYA L.HOSTS
jsr CFG.Read.LoadFile
bcs .9
.8 jsr CFG.Read.CleanUp
clc
rts
.9 jsr CFG.Read.CleanUp
sec
rts
*--------------------------------------
CFG.Read.LoadFile
stz CFG.hCfgFile
stz CFG.hCfgPath
>SYSCALL ExpandStr
bcs .9
stx CFG.hCfgPath
pha
>PUSHWI 0 Aux type
>PUSHBI 4 S.FI.T.TXT
>PUSHBI SYS.FOpen.R
pla
>SYSCALL LoadFile
bcs .9
stx CFG.hCfgFile
>STYA CFG.FileLen
txa
>SYSCALL GetMemPtr
>STYA ZPIPCfgPtr
.9 rts
*--------------------------------------
CFG.Read.CleanUp
pha
lda CFG.hCfgPath
beq .1
>SYSCALL FreeMem
.1 lda CFG.hCfgFile
beq .8
>SYSCALL FreeMem
.8 pla
rts
*--------------------------------------
CFG.GetLine stz UsrBuf256
ldx #0
ldy #0
.1 jsr CFG.GetChar
bne .2 end of file?
txa
bne .8
sec
rts
.2 cmp #$0D
beq .8 end of line
inx
sta UsrBuf256,x
cmp #'='
bne .3
txa
dec
tay
.3 cpx #64 line too long ?
bne .1
sec
rts
.8 tya = found ?
beq .9
sta UsrBuf256
txa
sec
sbc UsrBuf256
sta UsrBuf256+1,y
stz UsrBuf256+1,x End with 0 for ScanIP
clc
rts
.9 sec
rts
*--------------------------------------
CFG.GetChar lda CFG.FileLen
bne .1
lda CFG.FileLen+1
beq .9
dec CFG.FileLen+1
.1 dec CFG.FileLen
lda (ZPIPCfgPtr)
inc ZPIPCfgPtr
bne .9
inc ZPIPCfgPtr+1 NZ
.9 rts
*--------------------------------------
CFG.GetKeyword stz CFG.Keyword
ldx #0
.1 phx
ldy #0
.2 lda CFG.Keywords,x
cmp UsrBuf256,y
bne .3
cpy UsrBuf256
beq .4
inx
iny
bne .2
plx
sec
rts
.3 inc CFG.Keyword
plx
txa
sec
adc CFG.Keywords,x
tax
lda CFG.Keywords,x
bne .1
sec
rts
.4 plx
clc
rts
*--------------------------------------
CFG.ScanIP stz CFG.IP
ldx UsrBuf256
.1 ldy #0
.11 lda UsrBuf256+2,x
beq .3
cmp #'0'
bcc .2
cmp #'9'+1
bcs .2
cpy #3
beq .9
iny
sta CFG.StrBuf,y
inx
bra .11
.2 cmp #'.'
bne .9
.3 sty CFG.StrBuf
lda CFG.IP
cmp #4
beq .9
jsr CFG.Dec2Hex
bcs .9
lda CFG.HexByte
inc CFG.IP
ldy CFG.IP
sta CFG.IP,y
inx
lda UsrBuf256+1,x
bne .1
clc
rts
.9 sec
rts
*--------------------------------------
CFG.Dec2Hex sec
ldy CFG.StrBuf
beq .9
lda CFG.StrBuf+1
and #$0f
sta CFG.HexByte
ldy #1
.1 cpy CFG.StrBuf
beq .8
iny
lda CFG.HexByte
asl CFG.HexByte
bcs .9
asl CFG.HexByte
bcs .9
adc CFG.HexByte
bcs .9
asl
bcs .9
sta CFG.HexByte
lda CFG.StrBuf,y
and #$0f
adc CFG.HexByte
sta CFG.HexByte
bcc .1
.9 rts
.8 clc
rts
*--------------------------------------
CFG.A2CharAX pha
lsr
lsr
lsr
lsr
ora #$30
cmp #'9'+1
bcc .1
adc #6
.1 tax
pla
and #$0F
ora #$30
cmp #'9'+1
bcc .8
adc #6
.8 rts
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SBIN/TCPIPD.S.CFG
LOAD /A2OSX.SRC/SBIN/TCPIPD.S
ASM

View File

@ -35,16 +35,6 @@ CS.START cld
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP
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
L.HOSTNAME .DA HOSTNAME
L.TCPIP.CONF .DA TCPIP.CONF
L.HOSTS .DA HOSTS
L.IPCFG .DA IPCFG
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBTCPIP
@ -52,14 +42,6 @@ CS.INIT >LDYA L.LIBTCPIP
bcs .99
sta hLIBTCPIP
jsr CS.INIT.DEV
bcs .99
jsr CFG.Read continue even if error opening CFG file
>PUSHW L.IPCFG
>LIBCALL hLIBTCPIP,LIBTCPIP.SET.IPCFG
lda (pPs)
ora #S.PS.F.EVENT Now accept events
sta (pPs)
@ -67,38 +49,6 @@ CS.INIT >LDYA L.LIBTCPIP
clc
.99 rts
*--------------------------------------
CS.INIT.DEV >LDYA L.DEVNAME
>SYSCALL GetDevByName
bcc .1
inc DEVNAME+3
lda DEVNAME+3
cmp #'8'
bne CS.INIT.DEV
>LDYA L.MSG.DEV.KO
>SYSCALL printf
lda #MLI.E.NODEV
sec
rts
.1 txa
>STA.G hDev
sta IPCFG+S.IPCFG.HDEV
>PUSHW L.DEVNAME
>LDYA L.MSG.DEV.OK
>SYSCALL printf
>PUSHWI 0
>PUSHBI IOCTL.OPEN
>LDA.G hDev
>SYSCALL IOCTL
rts
.9 sec
rts
*--------------------------------------
CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.POLL
clc
rts
@ -110,62 +60,19 @@ CS.DOEVENT lda (pEvent)
.9 sec never discard TIME event
rts
*--------------------------------------
CS.QUIT >LDA.G hDev
beq .1
>PUSHWI 0
>PUSHBI IOCTL.CLOSE
>LDA.G hDev
>SYSCALL IOCTL
.1 lda hLIBTCPIP
CS.QUIT lda hLIBTCPIP
>SYSCALL UnloadLib
clc
rts
*--------------------------------------
.INB /A2OSX.SRC/SBIN/TCPIPD.S.CFG
*--------------------------------------
CS.END
*--------------------------------------
LIBTCPIP .AZ "libtcpip.o"
DEVNAME .AZ "ETH1"
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"
*--------------------------------------
HOSTNAME .AZ "${A2OSX}ETC/HOSTNAME"
TCPIP.CONF .AZ "${A2OSX}ETC/TCPIP.CONF"
HOSTS .AZ "${A2OSX}ETC/HOSTS"
DefaultHostName .AZ "a2osx-XXXX"
CFG.Keywords >PSTR "DOMAIN"
>PSTR "IP"
>PSTR "MASK"
>PSTR "GW"
>PSTR "DNS1"
>PSTR "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.DNS1
.DA #S.IPCFG.DNS2
hLIBTCPIP .BS 1
IPCFG .BS S.IPCFG
CFG.hCfgFile .BS 1
CFG.hCfgPath .BS 1
CFG.FileLen .BS 2
CFG.Keyword .BS 1
CFG.StrBuf .BS 4
CFG.HexByte .BS 1
CFG.IP .BS 5
UsrBuf256 .BS 256
*--------------------------------------
.DUMMY
.OR 0
DS.START
hDev .BS 1
DS.END .ED
*--------------------------------------
MAN

View File

@ -70,7 +70,7 @@ K.PutS >STYA K.S.IOCTL+S.IOCTL.BUFPTR
* # FPutS
* Write Str to FILE
* ## C
* `int fputs ( const char * str, hFILE stream );`
* `int fputs (hFILE stream, const char * str );`
* **In:**
* PUSHB : hFILE
* Y,A: str
@ -100,6 +100,28 @@ K.FPutS.I jsr IO.SELECT
stx K.S.IOCTL+S.IOCTL.BYTECNT+1
jmp IO.Write.I
*/--------------------------------------
* # FGetS
* read bytes from stream into the array
* pointed to by s, until n-1 bytes are read, or a <newline> is read and
* transferred to s, or an end-of-file condition is encountered. The
* string is then terminated with a null byte.
* ## C
* `char *fgets(hFILE stream, char * s, int n);`
* ## ASM
* **In:**
* `>PUSHW n`
* `>PUSHW s`
* `lda hFILE`
* `>SYSCALL fgets`
* **Out:**
* Y,A: s
* CC = success
*\--------------------------------------
K.FGetS
clc
rts
*/--------------------------------------
* # PrintF/SPrintF/FPrintF
* Prints C-Style String
* ## C
@ -642,6 +664,7 @@ BCDBUF .EQ ARG
* + %U : dword
* + %h : HEX byte
* + %H : HEX word
* + %s : string
* `>PUSHW ptr`
* `...`
* `>PUSHBI bytecount`
@ -681,12 +704,11 @@ K.SScanF >STYA ZPPtr2 String to Scan
bne .21
inc ZPPtr1+1
.21 ldx #K.SScanFJMP-K.SScanFTBL-2
.21 ldx #K.SScanFCNT-K.SScanFTBL-1
.3 cmp K.SScanFTBL,x
beq .4
dex
dex
bpl .3
.9 jsr .8
@ -717,13 +739,13 @@ K.SScanF >STYA ZPPtr2 String to Scan
iny
sty K.SScanF.ByteIdx
lda K.SScanFTBL+1,x Get VAR size
jmp (K.SScanFJMP,x)
*--------------------------------------
K.SScanF.ByteCnt .BS 1
K.SScanF.ByteIdx .BS 1
*--------------------------------------
K.SScanFTBL .DA #'i,#1,#'d,#1,#'I,#2,#'D,#2,#'l,#4,#'u,#4,#'h,#1,#'H,#2
K.SScanFTBL .DA #'i,#'d,#'I,#'D,#'l,#'u,#'h,#'H,#'s
K.SScanFCNT .DA #1, #1, #2, #2, #4, #4, #1, #2
K.SScanFJMP .DA K.SScanF.I
.DA K.SScanF.D
.DA K.SScanF.II
@ -732,28 +754,26 @@ K.SScanFJMP .DA K.SScanF.I
.DA K.SScanF.U
.DA K.SScanF.H
.DA K.SScanF.HH
.DA K.SScanF.S
*--------------------------------------
K.SScanF.I
K.SScanF.D
K.SScanF.II
K.SScanF.DD
K.SScanF.L
K.SScanF.U pha Save VAL size
K.SScanF.U lda K.SScanFTBL+1,x Get VAR size
pha Save VAL size
jsr STDLIB.GetDec
bra K.SScanF.GetVAL
*--------------------------------------
K.SScanF.HH
K.SScanF.H pha
K.SScanF.H lda K.SScanFTBL+1,x Get VAR size
pha
jsr STDLIB.GetHex
K.SScanF.GetVAL tya Y=char count parsed
clc
adc ZPPtr2
sta ZPPtr2
bcc .1
inc ZPPtr2+1
K.SScanF.GetVAL jsr K.SScanF.Fwd Y=char count parsed
.1 ply get back VAL size
@ -763,6 +783,24 @@ K.SScanF.GetVAL tya Y=char count parsed
bne .2
.9 rts
*--------------------------------------
K.SScanF.S ldy #$ff
.1 iny
lda (ZPPtr2),y
sta (ZPPtr3),y
beq K.SScanF.Fwd
cmp #' '
bne .1
iny
K.SScanF.Fwd tya Y=char count parsed
clc
adc ZPPtr2
sta ZPPtr2
bcc .8
inc ZPPtr2+1
.8 rts
*/--------------------------------------
* # FOpen
* Open a file