Kernel 0.9.1 : TCPIP stack 0.9.1....(In Progress)

This commit is contained in:
Rémy GIBERT 2017-10-06 08:33:21 +02:00
parent 3dadb01f26
commit 4c5584db40
11 changed files with 619 additions and 22 deletions

Binary file not shown.

Binary file not shown.

View File

@ -62,7 +62,7 @@ Dev.Detect >STYA ARGS
cmp #DEVID
beq .3
.2 dec DEV.HEADER.NAME+4
.2 dec DEV.HEADER.NAME+3
txa
sec
sbc #$10
@ -127,7 +127,7 @@ Dev.Detect >STYA ARGS
*--------------------------------------
CS.END
MSG.DETECT >CSTR "UtherNet/CS8900A Driver.\r\n"
MSG.DETECT.OK >CSTR "UtherNet/CS8900A Installed As Device : %S\r\n"
MSG.DETECT.OK >CSTR "UtherNet/CS8900A Installed As Device : %s\r\n"
MSG.DETECT.KO >CSTR "Hardware Not Found.\r\n"
ARGS .BS 2
*--------------------------------------
@ -137,7 +137,7 @@ DEV.HEADER cld
jmp (DRV.CS.START,x)
.DA #0
.BS 6
DEV.HEADER.NAME >PSTR "ETH7" NAME
DEV.HEADER.NAME >CSTR "ETH7" NAME
*--------------------------------------
* Driver Code
*--------------------------------------

View File

@ -37,7 +37,7 @@ SET.IPCFG >PULLW ZPTmpPtr1
lda IPCFG+S.IPCFG.HDEV
>SYSCALL GetDevByIDA
>SYSCALL GetDevByID.A
>STYA NetDevJmp+1
ldx #DEVMGR.STATUS

View File

@ -156,7 +156,7 @@ DNS.ADD.I sta DNS.TmpCache
jsr DNS.FIND.FREE
>LDYA ZPPtrDNS
>SYSCALL NewPStrYA
>SYSCALL NewStr.YA
bcs .9
txa
ldy #S.DNSCACHE.hNAME

View File

@ -309,13 +309,7 @@ SKT.AcceptA jsr SKT.GetA.I
* ## Out :
* A = hFile
*\--------------------------------------
SKT.MkNodA sta NODE.SSOCK+S.NODE.SSOCK.HSKT
>SYSCALL MkNod.A
K.MkNod.A sta .1+1
SKT.MkNodA sta .1+1
>LDYAI S.NODE.SSOCK
>SYSCALL GetMem0.YA
bcs .9

View File

@ -10,7 +10,8 @@ AUTO 6
*--------------------------------------
.INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/MLI.ERR.I
* .INB /A2OSX.BUILD/INC/MLI.ERR.I
MLI.ERR.IO .EQ $27
.INB /A2OSX.BUILD/INC/NET.I
.INB /A2OSX.BUILD/INC/LIBTCPIP.I
*--------------------------------------
@ -295,8 +296,8 @@ NODE.SSOCK .BS 1 S.NODE.HANDLER
.BS 1 S.NODE.SSOCK.HSKT
.DA #0 S.NODE.SSOCK.OPEN
.DA #0 S.NODE.SSOCK.CLOSE
.DA LIBTCPIP.SKT.GetChar.A
.DA LIBTCPIP.SKT.PutChar
.DA #0
.DA #0
.DA #0 S.NODE.SSOCK.STATUS
*--------------------------------------
MAN

View File

@ -121,7 +121,7 @@ OApple+1,OApple+2,OApple+3 to switch between screens : Kernel Log, text, DHGR.
| SHELL | Working | (See Internal Shell commands) | 0.9.1 |
| KCONFIG | Working | Kernel Configuration Utility | 0.9.1 |
| ---- | ------ | ------- | ----- |
| TCPIP | Working | Socket API.ARP,IP,ICMP,UDP & TCP ok | 0.9 |
| TCPIPD | Working | Socket API.ARP,IP,ICMP,UDP & TCP ok | 0.9 |
| DHCPCLNT| Working | rewritten to use new Socket API | 0.9 |
| TELNETD | In Progress | | 0.9 |
| HTTPD | In Progress | | 0.9 |

View File

@ -26,9 +26,10 @@ CS.START cld
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START
.DA DS.END-DS.START Data Segment to Allocate
.DA 0
.DA CS.END-CS.START CS
.DA DS.END-DS.START DS
.DA #16 SS
.DA #6 ZP
.DA 0
*--------------------------------------
* Relocation Table
@ -51,7 +52,7 @@ L.DHCP.REQ .DA DHCP.REQ
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBTCPIP
>SYSCALL LoadLibYA
>SYSCALL LoadLib.YA
sta hLIBTCPIP
>LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG
@ -245,7 +246,7 @@ CS.QUIT ldy #hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.CloseA
.1 lda hLIBTCPIP
>SYSCALL UnloadLibA
>SYSCALL UnloadLib.A
clc
rts
*--------------------------------------
@ -439,7 +440,7 @@ Wait.TimeOut ldy #TimeOut
rts
*--------------------------------------
CS.END
LIBTCPIP >PSTR "libtcpip.o"
LIBTCPIP >CSTR "libtcpip.o"
MSG.CFG1 >CSTR "DHCPCLNT:Searching for DHCP servers...\r\n"
MSG.CFG2 >CSTR "DHCPCLNT:Reply from DHCP Server at %d.%d.%d.%d, requesting...\r\n"
MSG.CFG.KO >CSTR "DHCPCLNT:Time Out [%h].\r\n"

373
SBIN/TCPIPD.S.CFG.txt Normal file
View File

@ -0,0 +1,373 @@
PR#3
PREFIX /A2OSX.BUILD
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
CFG.Read >PUSHW L.HOSTNAME
>LDYA L.MSG.CFG
>SYSCALL PrintF.YA
jsr CFG.Read.HOSTNAME
bcc .1
>PUSHA
>LDYA L.MSG.CFG.KO
bra .2
.1 >LDYA L.MSG.CFG.OK
.2 >SYSCALL PrintF.YA
>PUSHW L.TCPIP.CONF
>LDYA L.MSG.CFG
>SYSCALL PrintF.YA
jsr CFG.Read.TCPIP.CONF
bcc .3
>PUSHA
>LDYA L.MSG.CFG.KO
bra .4
.3 >LDYA L.MSG.CFG.OK
.4 >SYSCALL PrintF.YA
>PUSHW L.HOSTS
>LDYA L.MSG.CFG
>SYSCALL PrintF.YA
jsr CFG.Read.HOSTS
bcc .5
>PUSHA
>LDYA L.MSG.CFG.KO
bra .6
.5 >SYSCALL PrintF.YA
.6 >LDYA L.MSG.CFG.OK
>SYSCALL PrintF.YA
rts
*--------------------------------------
CFG.Read.HOSTNAME
stz CFG.hCfgFile
stz CFG.hCfgPath
>LDYA L.HOSTNAME
>SYSCALL ExpandStr.YA
bcs .99
stx CFG.hCfgPath
pha
>PUSHWI 0 Aux type
>PUSHBI 4 S.FILEINFO.TYPE.TXT
>PUSHBI SYS.FOpen.R
pla
>PUSHYA
>SYSCALL LoadFile
bcs .9
stx CFG.hCfgFile
>STYA CFG.FileLen
txa
>SYSCALL GetMemPtr.A
>STYA ZPIPCfgPtr
* 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
iny
sta IPCFG+S.IPCFG.HOSTNAME,y
dex
bne .2
.8 sty IPCFG+S.IPCFG.HOSTNAME
jsr CFG.Read.CleanUp
clc
rts
.9 jsr CFG.Read.CleanUp
sec
.99 rts
*--------------------------------------
CFG.Read.TCPIP.CONF
stz CFG.hCfgFile
stz CFG.hCfgPath
>LDYA L.TCPIP.CONF
>SYSCALL ExpandStr.YA
bcs .99
stx CFG.hCfgPath
pha
>PUSHWI 0 Aux type
>PUSHBI 4 S.FILEINFO.TYPE.TXT
>PUSHBI SYS.FOpen.R
pla
>PUSHYA
>SYSCALL LoadFile
bcs .9
stx CFG.hCfgFile
>STYA CFG.FileLen
txa
>SYSCALL GetMemPtr.A
>STYA ZPIPCfgPtr
.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
.99 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 >PUSHWI 0 Aux type
>PUSHBI 4 S.FILEINFO.TYPE.TXT
>PUSHBI SYS.FOpen.R
>PUSHW L.HOSTS
>SYSCALL LoadFile
bcs .99
stx CFG.hCfgFile
>STYA CFG.FileLen
txa
>SYSCALL GetMemPtr.A
>STYA ZPIPCfgPtr
.89 lda CFG.hCfgFile
>SYSCALL FreeMem.A
clc
.99 rts
*--------------------------------------
CFG.Read.CleanUp
pha
lda CFG.hCfgPath
beq .1
>SYSCALL FreeMem.A
.1 lda CFG.hCfgFile
beq .8
>SYSCALL FreeMem.A
.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
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SBIN/TCPIPD.S.CFG
LOAD /A2OSX.SRC/SBIN/TCPIPD.S
ASM

228
SBIN/TCPIPD.S.txt Normal file
View File

@ -0,0 +1,228 @@
PR#3
PREFIX /A2OSX.BUILD
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF /A2OSX.BUILD/SBIN/TCPIPD
*--------------------------------------
.INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/LIBTCPIP.I
*--------------------------------------
ZPIPCfgPtr .EQ ZPBIN
ZPIPDevPtr .EQ ZPBIN+2
*--------------------------------------
* 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 CS
.DA DS.END-DS.START DS
.DA #16 SS
.DA #4 ZP
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.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
>SYSCALL LoadLib.YA
bcs .99
sta hLIBTCPIP
jsr CS.INIT.DEV
bcs .99
jsr CFG.Read continue even if error opening CFG file
lda IPCFG+S.IPCFG.HOSTNAME
bne .4
ldy DefaultHostName
.2 lda DefaultHostName,y
sta IPCFG+S.IPCFG.HOSTNAME,y
dey
bpl .2
.3 lda A2osX.TIMER16
jsr A2CharAX
sta IPCFG+S.IPCFG.HOSTNAME+7
stx IPCFG+S.IPCFG.HOSTNAME+8
lda A2osX.TIMER16+1
jsr A2CharAX
sta IPCFG+S.IPCFG.HOSTNAME+9
stx IPCFG+S.IPCFG.HOSTNAME+10
.4 >PUSHW L.IPCFG
>LIBCALL hLIBTCPIP,LIBTCPIP.SET.IPCFG
lda (pPs)
ora #S.PS.F.EVENT Now accept events
sta (pPs)
clc
.99 rts
*--------------------------------------
CS.INIT.DEV >LDYA L.DEVNAME
>SYSCALL GetDevByName.YA
bcc .1
inc DEVNAME+3
lda DEVNAME+3
cmp #'8'
bne CS.INIT.DEV
>LDYA L.MSG.DEV.KO
>SYSCALL PrintF.YA
lda #$28 MLI.ERR.NODEV
sec
rts
.1 >STYA ZPIPDevPtr
>STYA NetDevJmp+1
stx hNetDev
stx IPCFG+S.IPCFG.HDEV
>PUSHW L.DEVNAME
>LDYA L.MSG.DEV.OK
>SYSCALL PrintF.YA
ldx #DEVMGR.OPEN
jsr NetDevJmp
bcs .9
ldx #DEVMGR.STATUS
jsr NetDevJmp
bcs .9
>STYA ZPIPDevPtr
ldy #S.DEVSTAT+2 MAC
ldx #S.IPCFG.MAC
.2 lda (ZPIPDevPtr),y
sta IPCFG,x
iny
inx
cpx #S.IPCFG.MAC+6
bne .2
clc
rts
.9 sec
rts
*--------------------------------------
CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.POLL
clc
rts
*--------------------------------------
CS.DOEVENT lda (pEvent)
bpl .9
>LIBCALL hLIBTCPIP,LIBTCPIP.PULSEA
.9 sec never discard TIME event
rts
*--------------------------------------
CS.QUIT lda IPCFG+S.IPCFG.HDEV
beq .1
ldx #DEVMGR.CLOSE
jsr NetDevJmp
.1 lda hLIBTCPIP
>SYSCALL UnloadLib.A
clc
rts
*--------------------------------------
A2CharAX pha
lsr
lsr
lsr
lsr
and #$0F
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
*--------------------------------------
NetDevJmp jmp *
*--------------------------------------
.INB /A2OSX.SRC/SBIN/TCPIPD.S.CFG
*--------------------------------------
CS.END
*--------------------------------------
LIBTCPIP >CSTR "libtcpip.o"
DEVNAME >CSTR "ETH1"
MSG.DEV.KO >CSTR "TCPIPD:No Device Found, exiting.\r\n"
MSG.DEV.OK >CSTR "TCPIPD:Bound To Device : %s\r\n"
MSG.CFG >CSTR "TCPIPD:Reading %S..."
MSG.CFG.KO >CSTR "Failed!!! [%h]\r\n"
MSG.CFG.OK >CSTR "OK.\r\n"
*--------------------------------------
HOSTNAME >CSTR "${A2OSX}ETC/HOSTNAME"
TCPIP.CONF >CSTR "${A2OSX}ETC/TCPIP.CONF"
HOSTS >CSTR "${A2OSX}ETC/HOSTS"
DefaultHostName >PSTR "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
hNetDev .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
DS.END .ED
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SBIN/TCPIPD.S
ASM