diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po
index 094b8fce..c4fa85e4 100644
Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ
diff --git a/.Tools/userDefineLang.xml b/.Tools/userDefineLang.xml
index b890a643..9f6716be 100644
--- a/.Tools/userDefineLang.xml
+++ b/.Tools/userDefineLang.xml
@@ -26,7 +26,7 @@
.BS
.DA
.AS
.AT
.AZ
.EQ
.MA
.EM
.OR
.TF
.LIST
.HS
.IN
.INB
.OP
.TA
.EM
.PH
.EP
.DUMMY
.ED
adc
and
asl
bit
brk
clc
cld
cli
clv
cmp
cpx
cpy
dec
dex
dey
eor
inc
inx
iny
lda
ldx
ldy
lsr
nop
ora
rmb
rol
ror
rti
rts
sbc
sec
sed
sei
smb
sta
stp
stx
sty
stz
tax
tay
trb
tsb
tsx
txa
txs
tya
wai
- $
%
/
#
&
+ $
%
/
#
&
^
.1
.2
.3
.4
.5
.6
.7
.8
.9
AUTO
MAN
LOAD
SAVE
ASM
CREATE
INC
LOMEM
PREFIX
PR#
NEW
BLOAD
BSAVE
TEXT
DELETE
.DO
.ELSE
.FIN
pha
php
phx
phy
pla
plp
plx
ply
diff --git a/BIN/IPCONFIG.S.DEV.txt b/BIN/IPCONFIG.S.DEV.txt
index ffbad20e..46f1bc95 100644
--- a/BIN/IPCONFIG.S.DEV.txt
+++ b/BIN/IPCONFIG.S.DEV.txt
@@ -9,6 +9,7 @@ DEV.Bind >PUSHBI 0
>LDYA L.DEVNAME
>SYSCALL open
bcc .1
+
inc DEVNAME+8
lda DEVNAME+8
cmp #'8'
@@ -21,7 +22,8 @@ DEV.Bind >PUSHBI 0
sec
rts
-.1 sta IPCFG+S.IPCFG.hFD
+.1 ldy #S.IPCFG.hFD
+ sta (pIPCFG),y
>PUSHW L.DEVNAME
>PUSHBI 2
diff --git a/BIN/IPCONFIG.S.DHCP.txt b/BIN/IPCONFIG.S.DHCP.txt
index c63dc363..63357c92 100644
--- a/BIN/IPCONFIG.S.DHCP.txt
+++ b/BIN/IPCONFIG.S.DHCP.txt
@@ -3,47 +3,17 @@ PREFIX
AUTO 4,1
.LIST OFF
*--------------------------------------
-* Relocation Table
-*--------------------------------------
-.1 .DA CS.INIT
- .DA CS.RUN
- .DA CS.DOEVENT
- .DA CS.QUIT
-L.LIBTCPIP .DA LIBTCPIP
-L.IPCFG .DA IPCFG
-L.SA.LOCAL .DA SA.LOCAL
-L.SA.REMOTE .DA SA.REMOTE
-L.MSG.CFG1 .DA MSG.CFG1
-L.MSG.CFG2 .DA MSG.CFG2
-L.MSG.CFG.KO .DA MSG.CFG.KO
-L.MSG.CFG.OK .DA MSG.CFG.OK
-L.MSG.CFG.ND .DA MSG.CFG.ND
-L.MSG.CFG.NA .DA MSG.CFG.NA
-L.DHCP.DISC .DA DHCP.DISC
-L.DHCP.REQ .DA DHCP.REQ
- .DA 0
-*--------------------------------------
-CS.INIT >LDYA L.LIBTCPIP
- >SYSCALL LoadLib
- bcs .9
- sta hLIBTCPIP
-
- >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG
- bcs .9
-
- >STYA ZPIPCfgPtr
-
- lda (ZPIPCfgPtr)
+DHCP.INIT lda (pIPCFG)
and #S.IPCFG.STATUS.OK
bne .99 Already Configured, exit
ldy #S.IPCFG.hFD
- lda (ZPIPCfgPtr),y
+ lda (pIPCFG),y
beq .98
ldy #S.IPCFG-1
-.1 lda (ZPIPCfgPtr),y
+.1 lda (pIPCFG),y
sta IPCFG,y
dey
bne .1
@@ -69,20 +39,20 @@ CS.INIT >LDYA L.LIBTCPIP
clc
.9 rts
-.98 >LDYA L.MSG.CFG.ND
+.98 >LDYA L.MSG.DHCP.ND
bra .90
-.99 >LDYA L.MSG.CFG.NA
+.99 >LDYA L.MSG.DHCP.NA
.90 >SYSCALL puts
lda #0
sec
rts
*--------------------------------------
-CS.RUN >PUSHBI 0 no protocol
+DHCP.RUN >PUSHBI 0 no protocol
lda #S.SOCKET.T.DGRAM
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
bcc .1
-.9 jmp CS.RUN.KO
+.9 jmp DHCP.RUN.KO
.1 >STA.G hSocket
pha
@@ -100,105 +70,108 @@ CS.RUN >PUSHBI 0 no protocol
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect
bcs .9
- >LDYA L.MSG.CFG1
+ >LDYA L.MSG.DHCP.CFG1
>SYSCALL puts
jsr Init.Timeout
-CS.RUN.SDISC >PUSHWI DHCP.DISC.LEN
+DHCP.RUN.SDISC >PUSHWI DHCP.DISC.LEN
>PUSHW L.DHCP.DISC
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Send
bcc .1
- jmp CS.RUN.KO
+ jmp DHCP.RUN.KO
.1 lda #S.IPCFG.STATUS.SDISC
sta IPCFG
-CS.RUN.ROFFER >SLEEP
+DHCP.RUN.ROFFER >SLEEP
- jsr CS.RUN.SKT.RCVD
+ jsr DHCP.RUN.SKT.RCVD
bcc .1
jsr Wait.Timeout
- bne CS.RUN.ROFFER
+ bne DHCP.RUN.ROFFER
lda #1
- jmp CS.RUN.KO
+ jmp DHCP.RUN.KO
.1 jsr CheckDHCPOffer
- bcs CS.RUN.ROFFER
+ bcs DHCP.RUN.ROFFER
lda #S.IPCFG.STATUS.ROFFER
sta IPCFG
-CS.RUN.SREQ ldx #3
+DHCP.RUN.SREQ ldx #3
.1 >PUSHB IPCFG+S.IPCFG.DHCPSRVR,x
dex
bpl .1
>PUSHBI 4
- >LDYA L.MSG.CFG2
+ >LDYA L.MSG.DHCP.CFG2
>SYSCALL printf
>PUSHWI DHCP.REQ.LEN
>PUSHW L.DHCP.REQ
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Send
- bcs CS.RUN.KO
+ bcs DHCP.RUN.KO
lda #S.IPCFG.STATUS.SREQ
sta IPCFG
-CS.RUN.RACK >SLEEP
+DHCP.RUN.RACK >SLEEP
- jsr CS.RUN.SKT.RCVD
+ jsr DHCP.RUN.SKT.RCVD
bcc .1
jsr Wait.Timeout
- bne CS.RUN.RACK
+ bne DHCP.RUN.RACK
lda #2
- bra CS.RUN.KO
+ bra DHCP.RUN.KO
.1 jsr CheckDHCPAck
- bcs CS.RUN.RACK
+ bcs DHCP.RUN.RACK
-CS.RUN.OK lda #S.IPCFG.STATUS.OK
+DHCP.RUN.OK lda #S.IPCFG.STATUS.OK
sta IPCFG
>PUSHW L.IPCFG
>LIBCALL hLIBTCPIP,LIBTCPIP.SET.IPCFG
ldx #3
+
.1 lda IPCFG+S.IPCFG.MASK,x
>PUSHA
dex
bpl .1
ldx #3
+
.2 lda IPCFG+S.IPCFG.IP,x
>PUSHA
dex
bpl .2
>PUSHBI 8
- >LDYA L.MSG.CFG.OK
+ >LDYA L.MSG.DHCP.OK
>SYSCALL printf
lda #0 Leave with NO ERROR
sec
rts
-CS.RUN.KO pha
+DHCP.RUN.KO pha
>PUSHA
>PUSHBI 1
- >LDYA L.MSG.CFG.KO
+ >LDYA L.MSG.DHCP.KO
>SYSCALL printf
pla
sec
rts
*--------------------------------------
-CS.RUN.SKT.RCVD >LDA.G hSocket
+DHCP.RUN.SKT.RCVD
+ >LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Recv
bcs .9
>STA.G hFrame
@@ -207,29 +180,12 @@ CS.RUN.SKT.RCVD >LDA.G hSocket
>STYA ZPFrameBase
.9 rts
*--------------------------------------
-CS.DOEVENT lda (pEvent)
- bpl .9 is it a TIMER event?
-
- ldy #TimeOut
- lda (pData),y
- beq .9
-
- dec
- sta (pData),y
-
-.9 sec do not discard TIMER event
- rts
-*--------------------------------------
-CS.QUIT >LDA.G hSocket
+DHCP.QUIT >LDA.G hSocket
beq .1
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
-.1 lda hLIBTCPIP
- beq .8
- >SYSCALL UnloadLib
-
-.8 clc
+.1 clc
rts
*--------------------------------------
CheckDHCPOffer jsr CheckDHCPXID
@@ -307,10 +263,6 @@ CheckDHCPOffer jsr CheckDHCPXID
sec
rts
*--------------------------------------
-CS.RUN.DISCARD >LDA.G hFrame
- >SYSCALL FreeMem
- rts
-*--------------------------------------
GetDHCPOption cmp #S.DHCP.OPTIONS.MASK
bne .1
ldx #S.IPCFG.MASK
@@ -400,6 +352,10 @@ CheckDHCPAck jsr CheckDHCPXID
sec
rts
*--------------------------------------
+CS.RUN.DISCARD >LDA.G hFrame
+ >SYSCALL FreeMem
+ rts
+*--------------------------------------
CheckDHCPXID ldy #S.DHCP.XID+3
ldx #3
@@ -416,79 +372,6 @@ CheckDHCPXID ldy #S.DHCP.XID+3
.9 sec
rts
*--------------------------------------
-Init.Timeout ldy #TimeOut
- lda #TIMEOUT.MAX
- sta (pData),y
- rts
-*--------------------------------------
-Wait.TimeOut ldy #TimeOut
- lda (pData),y
- rts
-*--------------------------------------
-CS.END
-LIBTCPIP .AZ "libtcpip"
-MSG.CFG1 .AZ "DHCPCLNT:Searching for DHCP servers..."
-MSG.CFG2 .AZ "DHCPCLNT:Reply from DHCP Server at %d.%d.%d.%d, requesting...\r\n"
-MSG.CFG.KO .AZ "DHCPCLNT:Time Out [%h].\r\n"
-MSG.CFG.OK .AZ "DHCPCLNT:Success:[IP=%d.%d.%d.%d/%d.%d.%d.%d]\r\n"
-MSG.CFG.ND .AZ "DHCPCLNT:No Device, exiting."
-MSG.CFG.NA .AZ "DHCPCLNT:TCPIP Already configured, exiting."
-hLIBTCPIP .BS 1
-IPCFG .BS S.IPCFG
-*--------------------------------------
-SA.LOCAL .DA #AF.INET S.SOCKADDR.AF
- .BS 1
- .HS 00.00.00.00 S.SOCKADDR.ADDR
- .DA UDP.PORT.DHCPC S.SOCKADDR.PORT
-*--------------------------------------
-SA.REMOTE .DA #AF.INET S.SOCKADDR.AF
- .BS 1
- .HS FF.FF.FF.FF S.SOCKADDR.ADDR
- .DA UDP.PORT.DHCPS S.SOCKADDR.PORT
-*--------------------------------------
-DHCP.DISC .HS 01010600 OP,HTYPE,HLEN,HOPS
-DHCP.DISC.XID .BS 4
- .HS 0000 SECS
- .DA S.DHCP.FLAGS.BRDCST
- .HS 00000000 CIADDR
-DHCP.DISC.YIADDR .HS 00000000
- .HS 00000000 SIADDR
-DHCP.DISC.GIADDR .HS 00000000
-DHCP.DISC.CHADDR .HS 00000000.00000000.00000000.00000000
- .BS 64 SNAME
- .BS 128 FILE
- .HS 63825363 COOKIE
- .HS 3501 OPT
- .DA #S.DHCP.OPTIONS.DHCPDiscover
- .HS 37040103060FFF
-DHCP.DISC.LEN .EQ *-DHCP.DISC
-*--------------------------------------
-DHCP.REQ .HS 01010600 OP,HTYPE,HLEN,HOPS
-DHCP.REQ.XID .BS 4
- .HS 0000 SECS
- .DA S.DHCP.FLAGS.BRDCST
- .HS 00000000 CIADDR
-DHCP.REQ.YIADDR .HS 00000000
- .HS 00000000 SIADDR
-DHCP.REQ.GIADDR .HS 00000000
-DHCP.REQ.CHADDR .HS 00000000.00000000.00000000.00000000
- .BS 64 SNAME
- .BS 128 FILE
- .HS 63825363 COOKIE
- .HS 3501 OPT
- .DA #S.DHCP.OPTIONS.DHCPRequest
- .HS 3204
-DHCP.REQ.OPT.REQIP .BS 4
- .HS 3604
-DHCP.REQ.OPT.SVRIP .BS 4
- .HS FF
-DHCP.REQ.LEN .EQ *-DHCP.REQ
-*--------------------------------------
-DS.START
-TimeOut .BS 1
-hSocket .BS 1
-hFrame .BS 1
-DS.END
MAN
SAVE USR/SRC/SBIN/IPCONFIG.S.DHCP
LOAD USR/SRC/SBIN/IPCONFIG.S
diff --git a/BIN/IPCONFIG.S.ETC.txt b/BIN/IPCONFIG.S.ETC.txt
index 0486f5dc..a381f45a 100644
--- a/BIN/IPCONFIG.S.ETC.txt
+++ b/BIN/IPCONFIG.S.ETC.txt
@@ -48,7 +48,7 @@ CFG.EtcFiles >LDYAI 256
jsr CFG.Read.PrintF
jsr CFG.Read.HOSTS
- jsr SET.IPCFG.I
+ >LIBCALL hLIBTCPIP,LIBTCPIP.Set.IPCFG
lda CFG.hBuf1
>SYSCALL freemem
@@ -326,7 +326,7 @@ CFG.DNS.ADD >STYA ZPTmpPtr1
>PUSHYA
>PUSHW ZPTmpPtr1
- jsr DNS.Add
+ >LIBCALL hLIBTCPIP,LIBTCPIP.DNS.Add
*--------------------------------------
CFG.Read.Result bcc .1
>PUSHA
@@ -405,92 +405,6 @@ CFG.A2CharAX pha
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 >LDYA L.DCB.NIC
- >STYA IOCTL+S.IOCTL.BUFPTR
- lda #S.IOCTL.STATCODE.GETDCB
- sta IOCTL+S.IOCTL.STATCODE
-
- >PUSHW L.IOCTL
- >PUSHBI IOCTL.STATUS
- lda IPCFG+S.IPCFG.hFD
- >SYSCALL IOCTL
- bcs *
-
- ldx #5
-
-.10 lda DCB.NIC+S.DCB.NIC.MAC,x
- sta IPCFG+S.IPCFG.MAC,x
- sta ARP.REQ.SRCMAC,x
- sta ARP.REQ.SHA,x
- sta ARP.REP.SRCMAC,x
- sta ARP.REP.SHA,x
- dex
- bpl .10
-
- ldx #3
-
-.11 lda IPCFG+S.IPCFG.IP,x
- sta SA.LOCAL+S.SOCKADDR.ADDR,x
- sta ARP.REQ.SPA,x
- sta ARP.REP.SPA,x
- dex
- bpl .11
-
- lda DCB.NIC+S.DCB.NIC.FLAGS
- and #S.DCB.NIC.FLAGS.ARPOFFLOAD
- beq .2
-
- ldx #11
-
-.1 lda IPCFG+S.IPCFG.IP,x
- sta DCB.NIC+S.DCB.NIC.IP,x
- dex
- bpl .1
-
- lda S.IOCTL.CTRLCODE.SETDCB
- sta S.IOCTL.CTRLCODE
-
- >PUSHW L.IOCTL
- >PUSHBI IOCTL.CONTROL
- lda IPCFG+S.IPCFG.hFD
- >SYSCALL IOCTL
- bcs .9
-
-.2 lda hDNSSocket
- beq .3
- jsr SKT.Shutdown
- stz hDNSSocket
-
-.3 lda IPCFG+S.IPCFG.DNS1
- beq .8
-
- >PUSHBI 0 no protocol
- lda #S.SOCKET.T.DGRAM
- jsr SKT.Socket
- bcs .9
-
- sta hDNSSocket
-
- stz SA.LOCAL+S.SOCKADDR.PORT
- stz SA.LOCAL+S.SOCKADDR.PORT+1
-
- >PUSHW L.SA.LOCAL
- lda hDNSSocket
- jsr SKT.Bind
-
-.8 clc
-.9 rts
-*--------------------------------------
* grab a copy on the fly for lib function
* OUT :
* Y,A = PTR to S.IPCFG
diff --git a/BIN/IPCONFIG.S.txt b/BIN/IPCONFIG.S.txt
index 141be64e..b6857fb9 100644
--- a/BIN/IPCONFIG.S.txt
+++ b/BIN/IPCONFIG.S.txt
@@ -8,10 +8,15 @@ AUTO 4,1
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
+ .INB INC/KERNEL.I
+ .INB INC/MLI.I
.INB INC/MLI.E.I
.INB INC/NIC.I
.INB INC/ETH.I
.INB INC/LIBTCPIP.I
+ .INB INC/NET.DHCP.I
+*--------------------------------------
+TIMEOUT.MAX .EQ 200 20 sec.
*--------------------------------------
.DUMMY
.OR ZPBIN
@@ -20,6 +25,13 @@ ZPPtr1 .BS 2
pIPCFG .BS 2
pFD .BS 2
pDEV .BS 2
+ZPIPCfgPtr .BS 2
+ZPFrameBase .BS 2
+ZPFramePtr .BS 2
+ZPTmpPtr1 .BS 2
+ZPTmpPtr2 .BS 2
+ZPTmpPtr3 .BS 2
+*--------------------------------------
ZS.END
.ED
*--------------------------------------
@@ -73,8 +85,33 @@ L.MSG.DNS.ADD .DA MSG.DNS.ADD
L.HOSTNAME .DA HOSTNAME
L.TCPIP.CONF .DA TCPIP.CONF
L.HOSTS .DA HOSTS
+L.IPCFG .DA IPCFG
+L.IOCTL .DA IOCTL
+L.DCB.NIC .DA DCB.NIC
+L.CFG.IP .DA CFG.IP
+L.HST.SScanF .DA HST.SScanF
+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
.DA 0
*--------------------------------------
+* DHCP
+*--------------------------------------
+L.SA.LOCAL .DA SA.LOCAL
+L.SA.REMOTE .DA SA.REMOTE
+L.MSG.DHCP.CFG1 .DA MSG.DHCP.CFG1
+L.MSG.DHCP.CFG2 .DA MSG.DHCP.CFG2
+L.MSG.DHCP.KO .DA MSG.DHCP.KO
+L.MSG.DHCP.OK .DA MSG.DHCP.OK
+L.MSG.DHCP.ND .DA MSG.DHCP.ND
+L.MSG.DHCP.NA .DA MSG.DHCP.NA
+L.DHCP.DISC .DA DHCP.DISC
+L.DHCP.REQ .DA DHCP.REQ
+*--------------------------------------
CS.INIT >LDYA L.LIBTCPIP
>SYSCALL LoadLib
bcs .9
@@ -164,13 +201,15 @@ CS.RUN.DUMP >LDYA L.MSG0.L
>PUSHEA.G DIB+S.DIB.IDS
- lda #S.FD.DEV.NAME
- clc
- adc pFD
- tay
- lda /S.FD.DEV.NAME
- adc pFD+1
-
+ >LDA.G FD.ETH
+ ldx #$ff
+
+.11 inx
+ cmp Dev.Table.hFD,x
+ bne .11
+
+ lda Dev.Table.hPath,x
+ >SYSCALL GetMemPtr
>PUSHYA
>PUSHB.G FD.ETH
@@ -323,7 +362,16 @@ CS.RUN.DONE lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory
rts
*--------------------------------------
-CS.DOEVENT sec
+CS.DOEVENT lda (pEvent)
+ bpl .9 is it a TIMER event?
+
+ >LDA.G TimeOut
+ beq .9
+
+ dec
+ sta (pData),y
+
+.9 sec do not discard TIMER event
rts
*--------------------------------------
CS.QUIT lda hLIBTCPIP
@@ -332,8 +380,19 @@ CS.QUIT lda hLIBTCPIP
.8 clc
rts
+*--------------------------------------
+Init.Timeout ldy #TimeOut
+ lda #TIMEOUT.MAX
+ sta (pData),y
+ rts
+*--------------------------------------
+Wait.TimeOut ldy #TimeOut
+ lda (pData),y
+ rts
*--------------------------------------
.INB USR/SRC/SBIN/IPCONFIG.S.DEV
+ .INB USR/SRC/SBIN/IPCONFIG.S.DHCP
+ .INB USR/SRC/SBIN/IPCONFIG.S.ETC
*--------------------------------------
CS.END
LIBTCPIP .AZ "libtcpip"
@@ -351,7 +410,7 @@ MSG0.L .AZ "Loaded"
MSG0.NL .AZ "Not Loaded"
*--------------------------------------
MSG1.DEV .AS "Device Configuration :\r\n"
- .AS " FD.ETH : $%h\r\n"
+ .AS " Device ID : $%h\r\n"
.AS " Device Name : %s\r\n"
.AS " Device Type : %S\r\n"
.AZ " HW Address : %02h:%02h:%02h:%02h:%02h:%02h\r\n"
@@ -385,6 +444,7 @@ MSG.DNS.ADD .AZ " - Adding static host %d.%d.%d.%d %s..."
HOSTNAME .AZ "${ROOT}ETC/HOSTNAME"
TCPIP.CONF .AZ "${ROOT}ETC/TCPIP.CONF"
HOSTS .AZ "${ROOT}ETC/HOSTS"
+HST.SScanF .AZ "%d.%d.%d.%d"
*--------------------------------------
CFG.DefaultHost .AZ "a2osx-XXXX"
CFG.Keywords >PSTR "address"
@@ -400,6 +460,62 @@ CFG.hCfgPath .BS 1
CFG.hCfgFile .BS 1
CFG.IP .BS 4
CFG.HOSTS.SScanF .AZ "%d.%d.%d.%d %s %s"
+IPCFG .BS S.IPCFG
+*--------------------------------------
+MSG.DHCP.CFG1 .AZ "Searching for DHCP servers..."
+MSG.DHCP.CFG2 .AZ "Reply from DHCP Server at %d.%d.%d.%d, requesting...\r\n"
+MSG.DHCP.KO .AZ "Time Out [%h].\r\n"
+MSG.DHCP.OK .AZ "Success:[IP=%d.%d.%d.%d/%d.%d.%d.%d]\r\n"
+MSG.DHCP.ND .AZ "No Device, exiting."
+MSG.DHCP.NA .AZ "TCPIP Already configured, exiting."
+*--------------------------------------
+SA.LOCAL .DA #AF.INET S.SOCKADDR.AF
+ .BS 1
+ .HS 00.00.00.00 S.SOCKADDR.ADDR
+ .DA UDP.PORT.DHCPC S.SOCKADDR.PORT
+*--------------------------------------
+SA.REMOTE .DA #AF.INET S.SOCKADDR.AF
+ .BS 1
+ .HS FF.FF.FF.FF S.SOCKADDR.ADDR
+ .DA UDP.PORT.DHCPS S.SOCKADDR.PORT
+*--------------------------------------
+DHCP.DISC .HS 01010600 OP,HTYPE,HLEN,HOPS
+DHCP.DISC.XID .BS 4
+ .HS 0000 SECS
+ .DA S.DHCP.FLAGS.BRDCST
+ .HS 00000000 CIADDR
+DHCP.DISC.YIADDR .HS 00000000
+ .HS 00000000 SIADDR
+DHCP.DISC.GIADDR .HS 00000000
+DHCP.DISC.CHADDR .HS 00000000.00000000.00000000.00000000
+ .BS 64 SNAME
+ .BS 128 FILE
+ .HS 63825363 COOKIE
+ .HS 3501 OPT
+ .DA #S.DHCP.OPTIONS.DHCPDiscover
+ .HS 37040103060FFF
+DHCP.DISC.LEN .EQ *-DHCP.DISC
+*--------------------------------------
+DHCP.REQ .HS 01010600 OP,HTYPE,HLEN,HOPS
+DHCP.REQ.XID .BS 4
+ .HS 0000 SECS
+ .DA S.DHCP.FLAGS.BRDCST
+ .HS 00000000 CIADDR
+DHCP.REQ.YIADDR .HS 00000000
+ .HS 00000000 SIADDR
+DHCP.REQ.GIADDR .HS 00000000
+DHCP.REQ.CHADDR .HS 00000000.00000000.00000000.00000000
+ .BS 64 SNAME
+ .BS 128 FILE
+ .HS 63825363 COOKIE
+ .HS 3501 OPT
+ .DA #S.DHCP.OPTIONS.DHCPRequest
+ .HS 3204
+DHCP.REQ.OPT.REQIP .BS 4
+ .HS 3604
+DHCP.REQ.OPT.SVRIP .BS 4
+ .HS FF
+DHCP.REQ.LEN .EQ *-DHCP.REQ
*--------------------------------------
.DUMMY
.OR 0
@@ -412,6 +528,9 @@ FD.ETH .BS 1
IOCTL .BS S.IOCTL
DIB .BS S.DIB
DCB.NIC .BS S.DCB.NIC
+TimeOut .BS 1
+hSocket .BS 1
+hFrame .BS 1
DS.END .ED
*--------------------------------------
MAN
diff --git a/DRV/UTHERNET.DRV.S.txt b/DRV/UTHERNET.DRV.S.txt
index b7ae1357..47ac16f0 100644
--- a/DRV/UTHERNET.DRV.S.txt
+++ b/DRV/UTHERNET.DRV.S.txt
@@ -397,7 +397,7 @@ READ php
bcs .9
>STYA ZPBufPtr
- stx .8+1
+ phx
phy
ldy #S.IOCTL.BUFPTR+1
@@ -433,7 +433,7 @@ READ php
inc ZPBufPtr+1
bne .2
-.8 lda #$ff SELF MODIFIED hMem
+.8 pla hMem
plp
clc
diff --git a/INC/LIBETALK.I.txt b/INC/LIBETALK.I.txt
new file mode 100644
index 00000000..dfc60c2c
--- /dev/null
+++ b/INC/LIBETALK.I.txt
@@ -0,0 +1,16 @@
+NEW
+PREFIX
+AUTO 4,1
+ .LIST OFF
+ .OP 65C02
+*--------------------------------------
+LIBETALK.SETCFG .EQ 4
+LIBETALK.GETCFG .EQ 6
+
+LIBETALK.INCOMING .EQ 8
+LIBETALK.PULSE .EQ 10
+*--------------------------------------
+MAN
+SAVE INC/LIBETALK.I
+LOAD USR/SRC/LIB/LIBETALK.S
+ASM
diff --git a/LIB/LIBETALK.S.txt b/LIB/LIBETALK.S.txt
new file mode 100644
index 00000000..b30178a4
--- /dev/null
+++ b/LIB/LIBETALK.S.txt
@@ -0,0 +1,93 @@
+NEW
+PREFIX
+AUTO 4,1
+ .LIST OFF
+ .OP 65C02
+ .OR $2000
+ .TF LIB/LIBETALK
+*--------------------------------------
+ .INB INC/MACROS.I
+ .INB INC/A2OSX.I
+ .INB INC/NIC.I
+ .INB INC/ETH.I
+*--------------------------------------
+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
+
+ZPIOCTL .EQ ZPLIB+16
+*--------------------------------------
+* 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
+ .DA 0
+ .DA 0
+ .DA 0
+*--------------------------------------
+* Relocation Table
+*--------------------------------------
+.1 .DA LIB.LOAD
+ .DA LIB.UNLOAD
+
+ .DA SETCFG
+ .DA GETCFG
+
+ .DA INCOMING
+ .DA PULSE
+*--------------------------------------
+ .DA 0
+*--------------------------------------
+LIB.LOAD clc
+ rts
+*--------------------------------------
+LIB.UNLOAD clc
+ rts
+*--------------------------------------
+SETCFG
+*--------------------------------------
+GETCFG
+*--------------------------------------
+INCOMING sta hFrameIn
+ >PULLW ZPIOCTL
+
+ ldy #S.IOCTL.BUFPTR+3
+ ldx #3
+
+.1 lda (ZPIOCTL),y
+ sta ZPFrameInPtr,x
+ dey
+ dex
+ bpl .1
+
+ sec
+ rts
+*--------------------------------------
+* Expire = every sec
+* Retry = every 100 msec
+*--------------------------------------
+PULSE and #S.EVT.F.T1SEC
+ beq .1
+
+.1 clc
+ rts
+*--------------------------------------
+CS.END
+*--------------------------------------
+hFrameIn .BS 1
+*--------------------------------------
+MAN
+SAVE USR/SRC/LIB/LIBETALK.S
+ASM
diff --git a/SBIN/NETWORKD.S.txt b/SBIN/NETWORKD.S.txt
new file mode 100644
index 00000000..9a45faf2
--- /dev/null
+++ b/SBIN/NETWORKD.S.txt
@@ -0,0 +1,176 @@
+NEW
+PREFIX
+AUTO 4,1
+ .LIST OFF
+ .OP 65C02
+ .OR $2000
+ .TF SBIN/NETWORKD
+*--------------------------------------
+ .INB INC/MACROS.I
+ .INB INC/A2OSX.I
+ .INB INC/MLI.E.I
+ .INB INC/ETH.I
+ .INB INC/LIBTCPIP.I
+ .INB INC/LIBETALK.I
+*--------------------------------------
+* Zero Page Segment, up to 32 bytes
+*--------------------------------------
+ .DUMMY
+ .OR ZPBIN
+ZS.START
+* MyPtr .BS 2
+ZS.END
+ .ED
+*--------------------------------------
+* File Header (16 Bytes)
+*--------------------------------------
+CS.START cld
+ jmp (.1,x)
+ .DA #$61 6502,Level 1 (65c02)
+ .DA #1 BIN Layout Version 1
+ .DA #S.PS.F.EVENT
+ .DA #0
+ .DA CS.END-CS.START Code Size (without Constants)
+ .DA DS.END-DS.START Data SegmentSize
+ .DA #16 Stack Size
+ .DA #ZS.END-ZS.START Zero Page Size
+ .DA 0
+*--------------------------------------
+* Relocation Table
+*--------------------------------------
+.1 .DA CS.INIT
+ .DA CS.RUN
+ .DA CS.DOEVENT
+ .DA CS.QUIT
+L.DEVNAME .DA DEVNAME
+L.MSG.DEV.OK .DA MSG.DEV.OK
+L.MSG.DEV.KO .DA MSG.DEV.KO
+L.LIBTCPIP .DA LIBTCPIP
+L.LIBETALK .DA LIBETALK
+L.IOCTL .DA IOCTL
+ .DA 0
+*--------------------------------------
+CS.INIT clc
+ rts
+*--------------------------------------
+CS.RUN >PUSHBI 0
+ >LDYA L.DEVNAME
+ >SYSCALL open
+ bcc .1
+
+ inc DEVNAME+8
+ lda DEVNAME+8
+ cmp #'8'
+ bne CS.RUN
+
+ >LDYA L.MSG.DEV.KO
+ >SYSCALL puts
+
+ lda #MLI.E.NODEV
+ sec
+ rts
+
+.1 sta hFD
+
+ >PUSHW L.DEVNAME
+ >PUSHBI 2
+ >LDYA L.MSG.DEV.OK
+ >SYSCALL printf
+
+* >LDYA L.LIBTCPIP
+* >SYSCALL LoadLib
+* bcs .2
+* sta hLIBTCPIP
+
+.2 >LDYA L.LIBETALK
+ >SYSCALL LoadLib
+ bcs .3
+ sta hLIBETALK
+
+.3
+CS.RUN.LOOP >SLEEP
+
+ >PUSHW L.IOCTL
+ >PUSHBI IOCTL.READ
+ lda hFD
+ >SYSCALL IOCTL
+ bcs CS.RUN.LOOP No Frame
+
+ sta hFrameIn
+
+ ldx hLIBTCPIP
+ beq .1
+
+* >PUSHW L.IOCTL
+* lda hFrameIn
+
+* >LIBCALL hLIBTCPIP,LIBTCPIP.INCOMING
+* bcc CS.RUN.LOOP
+
+.1 ldx hLIBETALK
+ beq .9
+
+ >PUSHW L.IOCTL
+ lda hFrameIn
+ >LIBCALL hLIBETALK,LIBETALK.INCOMING
+ bcc CS.RUN.LOOP
+
+.9 lda hFrameIn
+ >SYSCALL freemem
+
+ bra CS.RUN.LOOP
+*--------------------------------------
+CS.DOEVENT lda (pEvent)
+ bpl .9
+
+ ldx hLIBTCPIP
+ beq .1
+* >LIBCALL hLIBTCPIP,LIBTCPIP.PULSE
+
+.1 ldx hLIBETALK
+ beq .9
+ lda (pEvent)
+ >LIBCALL hLIBETALK,LIBETALK.PULSE
+
+.9 sec never discard TIME event
+ rts
+*--------------------------------------
+CS.QUIT lda hLIBTCPIP
+ beq .1
+
+ >SYSCALL UnloadLib
+
+.1 lda hLIBETALK
+ beq .2
+
+ >SYSCALL UnloadLib
+
+.2 >PUSHWI 0
+ >PUSHBI IOCTL.CLOSE
+ lda hFD
+ >SYSCALL IOCTL
+
+ clc
+ rts
+*--------------------------------------
+CS.END
+*--------------------------------------
+DEVNAME .AZ "/DEV/ETH1"
+MSG.DEV.KO .AZ "No Device Found, exiting."
+MSG.DEV.OK .AZ "Bound To Device : %s\r\n"
+LIBTCPIP .AZ "libtcpip"
+LIBETALK .AZ "libetalk"
+hFD .BS 1
+hLIBTCPIP .BS 1
+hLIBETALK .BS 1
+IOCTL .BS S.IOCTL
+hFrameIn .BS 1
+*--------------------------------------
+ .DUMMY
+ .OR 0
+DS.START
+DS.END .ED
+*--------------------------------------
+MAN
+SAVE USR/SRC/SBIN/NETWORKD.S
+ASM
diff --git a/SBIN/TELNETD.S.txt b/SBIN/TELNETD.S.txt
index 9b4d99cb..1bf46050 100644
--- a/SBIN/TELNETD.S.txt
+++ b/SBIN/TELNETD.S.txt
@@ -88,13 +88,21 @@ CS.RUN jsr Init.Timeout
CS.RUN.INIT ldx #3
ldy #S.IPCFG.IP+3
+
.1 lda (ZPIPCfgPtr),y
sta SA.LOCAL+S.SOCKADDR.ADDR,x
dey
dex
bpl .1
- >PUSHBI 0 no protocol
+ lda #1
+ >SYSCALL ArgV
+ bcs CS.RUN.PORTOK
+
+ >SYSCALL atoi
+ >STYA SA.LOCAL+S.SOCKADDR.PORT
+
+CS.RUN.PORTOK >PUSHBI 0 no protocol
lda #S.SOCKET.T.STREAM
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
bcs .9