Kernel 0.92

This commit is contained in:
Rémy GIBERT 2019-01-17 15:05:48 +00:00
parent d810414e18
commit 34d23b68fc
16 changed files with 131 additions and 715 deletions

Binary file not shown.

View File

@ -3,11 +3,11 @@ PREFIX
AUTO 4,1
.LIST OFF
*--------------------------------------
DHCP.INIT lda IPCFG+S.IPCFG.STATUS
DHCP.INIT lda IPCFG+S.NETCFG.STATUS
and #S.IPCFG.STATUS.OK
bne .99 Already Configured, exit
stz IPCFG+S.IPCFG.STATUS
stz IPCFG+S.NETCFG.STATUS
ldx #3
@ -19,7 +19,7 @@ DHCP.INIT lda IPCFG+S.IPCFG.STATUS
ldx #5
.2 lda IPCFG+S.IPCFG.MAC,x
.2 lda IPCFG+S.NETCFG.MAC,x
sta DHCP.DISC.CHADDR,x
sta DHCP.REQ.CHADDR,x
dex
@ -196,14 +196,14 @@ CheckDHCPOffer jsr CheckDHCPXID
cmp #S.DHCP.OPTIONS.DHCPOffer
bne .9
ldy #S.DHCP.GIADDR+3
ldx #3
* ldy #S.DHCP.YIADDR+11 Copy YIADDR,SIADDR+GIADDR
* ldx #11
.1 lda (ZPFrameBase),y
sta DHCP.REQ.GIADDR,x
dey
dex
bpl .1
*.1 lda (ZPFrameBase),y
* sta DHCP.REQ.YIADDR,x
* dey
* dex
* bpl .1
ldy #S.DHCP.YIADDR+3
ldx #3
@ -215,15 +215,20 @@ CheckDHCPOffer jsr CheckDHCPXID
dex
bpl .2
ldy #S.IP.SRC+3
ldx #3
ldy #S.DHCP.SIADDR+3
lda (ZPFrameBase),y
bne .3
.3 lda (ZPFrameBase),y
sta DHCP.REQ.OPT.SVRIP,x
ldy #S.IP.SRC+3
.3 ldx #3
.4 lda (ZPFrameBase),y
sta IPCFG+S.IPCFG.DHCPSRVR,x
sta DHCP.REQ.OPT.SVRIP,x
dey
dex
bpl .3
bpl .4
.5 inc ZPFramePtr skip Option 53 (DHCPOffer:530102)
bne .6
@ -239,7 +244,7 @@ CheckDHCPOffer jsr CheckDHCPXID
.7 lda (ZPFramePtr)
cmp #S.DHCP.OPTIONS.END
beq .8
jsr GetDHCPOption
jsr GetDHCPOption May override SVRIP
bra .5
.8 jsr CS.RUN.DISCARD
@ -267,24 +272,37 @@ GetDHCPOption cmp #S.DHCP.OPTIONS.MASK
ldx #S.IPCFG.DNS1
bra GetDHCPOption.CopyIP
.3 cmp #S.DHCP.OPTIONS.DOMAIN
.3 cmp #S.DHCP.OPTIONS.SRVID
bne .4
ldy #5
ldx #3
.31 lda (ZPFramePtr),y
sta DHCP.REQ.OPT.SVRIP,x
dey
dex
bpl .31
rts
.4 cmp #S.DHCP.OPTIONS.DOMAIN
bne .9
ldy #1
lda (ZPFramePtr),y Get String len
cmp #80
bcc .4
lda #79
cmp #45
bcc .6
lda #44
.4 sta IPCFG+S.IPCFG.DOMAIN store len
.6 sta IPCFG+S.IPCFG.DOMAIN store len
tax
.5 iny
.7 iny
lda (ZPFramePtr),y
sta IPCFG+S.IPCFG.DOMAIN-1,y
dex
bne .5
bne .7
.9 rts
*--------------------------------------

View File

@ -5,9 +5,10 @@ AUTO 4,1
*--------------------------------------
CFG.EtcFiles >LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ZPTmpPtr1
bcc .1
rts
.1 >STYA ZPTmpPtr1
stx CFG.hBuf1
>LDYA L.HOSTNAME
@ -31,15 +32,18 @@ CFG.EtcFiles >LDYAI 256
beq .5
lda #S.IPCFG.STATUS.OK
sta IPCFG+S.IPCFG.STATUS
sta IPCFG+S.NETCFG.STATUS
.5 >LDYA L.HOSTS
jsr CFG.Read.PrintF
jsr CFG.Read.HOSTS
>PUSHW L.IPCFG
>LIBCALL hLIBTCPIP,LIBTCPIP.SETCFG
lda CFG.hBuf1
>SYSCALL freemem
.9 rts
*--------------------------------------
CFG.Read.PrintF >PUSHYA
@ -296,19 +300,6 @@ CFG.Read.HOSTS.Scan
*--------------------------------------
CFG.DNS.ADD >STYA ZPTmpPtr1
>PUSHW ZPTmpPtr1
ldy #3
.1 lda CFG.IP,y
>PUSHA
dey
bpl .1
>PUSHBI 6
>LDYA L.MSG.DNS.ADD
>SYSCALL printf
>LDYA L.CFG.IP
>PUSHYA

View File

@ -13,6 +13,7 @@ AUTO 4,1
.INB INC/MLI.E.I
.INB INC/NIC.I
.INB INC/ETH.I
.INB INC/LIB.NET.I
.INB INC/LIBTCPIP.I
.INB INC/NET.DHCP.I
*--------------------------------------
@ -73,7 +74,6 @@ L.MSG2.HOSTNAME .DA MSG2.HOSTNAME
L.MSG.CFG .DA MSG.CFG
L.MSG.CFG.KO .DA MSG.CFG.KO
L.MSG.CFG.OK .DA MSG.CFG.OK
L.MSG.DNS.ADD .DA MSG.DNS.ADD
L.HOSTNAME .DA HOSTNAME
L.TCPIP.CONF .DA TCPIP.CONF
L.HOSTS .DA HOSTS
@ -121,7 +121,7 @@ CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG
dey
bpl .1
lda IPCFG+S.IPCFG.DevID
lda IPCFG+S.NETCFG.DevID
bne CS.RUN.SETUP
>LDYA L.MSG.NODEV
@ -163,7 +163,7 @@ CS.RUN.SETUP
sta (pData),y
bra .1
.4 lda IPCFG+S.IPCFG.STATUS
.4 lda IPCFG+S.NETCFG.STATUS
bne .5
lda #$ff no config, force all
@ -189,15 +189,12 @@ CS.RUN.SETUP
jsr DHCP.QUIT
.8 >PUSHW L.IPCFG
>LIBCALL hLIBTCPIP,LIBTCPIP.SETCFG
lda #0
.8 lda #0
sec
rts
*--------------------------------------
CS.RUN.DUMP >PUSHEA.G DIB
lda IPCFG+S.IPCFG.DevID
lda IPCFG+S.NETCFG.DevID
>SYSCALL GetDevStatus
>LEA.G DCB.NIC
@ -207,7 +204,7 @@ CS.RUN.DUMP >PUSHEA.G DIB
>PUSHEA.G IOCTL
>PUSHBI IOCTL.STATUS
lda IPCFG+S.IPCFG.DevID
lda IPCFG+S.NETCFG.DevID
>SYSCALL IOCTL
CS.RUN.DUMPNIC ldy #DCB.NIC+S.DCB.NIC.MAC+5
@ -221,7 +218,7 @@ CS.RUN.DUMPNIC ldy #DCB.NIC+S.DCB.NIC.MAC+5
>PUSHEA.G DIB+S.DIB.IDS
ldx IPCFG+S.IPCFG.DevID
ldx IPCFG+S.NETCFG.DevID
lda Dev.Table,x
clc
adc #S.FD.DEV
@ -231,7 +228,7 @@ CS.RUN.DUMPNIC ldy #DCB.NIC+S.DCB.NIC.MAC+5
>PUSHYA
lda IPCFG+S.IPCFG.DevID
lda IPCFG+S.NETCFG.DevID
>PUSHA
>PUSHBI 11
>LDYA L.MSG1.DEV
@ -299,7 +296,7 @@ CS.RUN.LINK >LDYA L.MSG1.LINK.OK
CS.RUN.DUMPIP >PUSHBI 0
>LDYA L.MSG2
>SYSCALL printf
lda IPCFG+S.IPCFG.STATUS
lda IPCFG+S.NETCFG.STATUS
and #S.IPCFG.STATUS.OK
beq .11
@ -430,10 +427,9 @@ MSG2.GW .AZ " Gateway : %d.%d.%d.%d\r\n"
MSG2.DNS .AZ " DNS : %d.%d.%d.%d,%d.%d.%d.%d\r\n"
MSG2.HOSTNAME .AZ " Hostname : %s.%s\r\n"
*--------------------------------------
MSG.CFG .AZ "Reading %s..."
MSG.CFG .AZ "IPCONFIG:Reading %s..."
MSG.CFG.KO .AZ "Not Found. [%h]\r\n"
MSG.CFG.OK .AZ "OK."
MSG.DNS.ADD .AZ " - Adding static host %d.%d.%d.%d %s..."
*--------------------------------------
HOSTNAME .AZ "${ROOT}ETC/HOSTNAME"
TCPIP.CONF .AZ "${ROOT}ETC/TCPIP.CONF"
@ -450,11 +446,11 @@ CFG.Keywords >PSTR "address"
CFG.IP.SScanF .AZ "%d.%d.%d.%d"
CFG.HOST.SScanF .AZ "%d.%d.%d.%d %s %s"
*--------------------------------------
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.NA .AZ "TCPIP Already configured, exiting."
MSG.DHCP.CFG1 .AZ "IPCONFIG:Searching for DHCP servers..."
MSG.DHCP.CFG2 .AZ "IPCONFIG:Reply from DHCP Server at %d.%d.%d.%d, requesting...\r\n"
MSG.DHCP.KO .AZ "IPCONFIG:Time Out [%h].\r\n"
MSG.DHCP.OK .AZ "IPCONFIG:Success:[IP=%d.%d.%d.%d/%d.%d.%d.%d]\r\n"
MSG.DHCP.NA .AZ "IPCONFIG:TCPIP Already configured, exiting."
*--------------------------------------
IPCFG .BS S.IPCFG
CFG.hBuf1 .BS 1
@ -498,7 +494,7 @@ DHCP.REQ.XID .BS 4
.HS 00000000 CIADDR
DHCP.REQ.YIADDR .HS 00000000
.HS 00000000 SIADDR
DHCP.REQ.GIADDR .HS 00000000
.HS 00000000 GIADDR
DHCP.REQ.CHADDR .HS 00000000.00000000.00000000.00000000
.BS 64 SNAME
.BS 128 FILE

View File

@ -23,8 +23,8 @@ OptionList >PSTR "CRYQcryq"
OptionVars .DA #bContinue,#bRecurse,#bNoConfirm,#bQuiet,#bContinue,#bRecurse,#bNoConfirm,#bQuiet
*--------------------------------------
MSG.USAGE .AZ "Usage : MV [Src File/Dir, *,? wildcards allowed]\r\n -C : Continue on error\r\n -Q : Quiet\r\n -R : Recurse subdirectories\r\n -Y : Dont't prompt for override\r\n"
MSG.DIR .AZ "MV Dir :%S to %S..."
MSG.FILE .AZ "MV File:%S to %S..."
MSG.DIR .AZ "MV Dir :%s to %s..."
MSG.FILE .AZ "MV File:%s to %s..."
MSG.OVERWRITE .AZ "Overwrite %S [Yes,No,All]?"
MSG.OK .AZ "[OK]"
MSG.ERR .AZ "[%h]\r\n"

View File

@ -172,6 +172,7 @@ CS.QUIT lda hLIBTCPIP
*--------------------------------------
CS.END
LIBTCPIP .AZ "libtcpip"
hLIBTCPIP .BS 1
MSG0 .AZ "Type Prot Local Remote Options Status"
MSG1 .AZ "%s %s %03d.%03d.%03d.%03d:%05D %03d.%03d.%03d.%03d:%05D %b %s\r\n"
MSG1.T.RAW .AZ "RAW "
@ -197,7 +198,6 @@ MSG1.S.8 .AZ "FIN-WAIT-2"
MSG1.S.9 .AZ "CLOSING"
MSG1.S.10 .AZ "TIME-WAIT"
MSG1.S.INV .AZ "???"
hLIBTCPIP .BS 1
*--------------------------------------
.DUMMY
.OR 0

View File

@ -23,8 +23,8 @@ OptionList >PSTR "CRYQcryq"
OptionVars .DA #bContinue,#bRecurse,#bNoConfirm,#bQuiet,#bContinue,#bRecurse,#bNoConfirm,#bQuiet
*--------------------------------------
MSG.USAGE .AZ "Usage : RM [File/Dir, *,? wildcards allowed]\r\n -C : Continue on error\r\n -Q : Quiet\r\n -R : Recurse subdirectories\r\n"
MSG.DIR .AZ "RM Dir :%S..."
MSG.FILE .AZ "RM File:%S..."
MSG.DIR .AZ "RM Dir :%s..."
MSG.FILE .AZ "RM File:%s..."
MSG.OK .AZ "[OK]"
MSG.ERR .AZ "[%h]\r\n"
MSG.DONE .AZ "%D File(s) Removed.\r\n"

View File

@ -12,7 +12,9 @@ LIBNET.PULSE .EQ 10
*--------------------------------------
S.NETCFG.STATUS .EQ 0
S.NETCFG.DevID .EQ 1
S.NETCFG.MAC .EQ 2
S.NETCFG.DevFlags .EQ 2
*
S.NETCFG.MAC .EQ 4
*--------------------------------------
MAN
SAVE INC/LIB.NET.I

View File

@ -72,25 +72,27 @@ ERR.ARP.PENDING .EQ $B5
UDP.PORT.DNS .EQ 53
UDP.PORT.PMAP .EQ 111
*--------------------------------------
S.IPCFG.STATUS .EQ 0
*S.IPCFG.STATUS .EQ 0
S.IPCFG.STATUS.OFF .EQ %00000000 TCPIP Unconfigured
S.IPCFG.STATUS.SDISC .EQ %00000001 DISCOVERY Sent
S.IPCFG.STATUS.ROFFER .EQ %00000010 OFFER Received
S.IPCFG.STATUS.SREQ .EQ %00000100 REQUEST Sent
S.IPCFG.STATUS.RACK .EQ %00001000 ACK Received
S.IPCFG.STATUS.OK .EQ %10000000 Fully configured (static or DHCP)
S.IPCFG.DevID .EQ 1
S.IPCFG.MAC .EQ 2
S.IPCFG.DHCPSRVR .EQ 8
S.IPCFG.IP .EQ 12
S.IPCFG.MASK .EQ 16
S.IPCFG.GW .EQ 20
S.IPCFG.DNS1 .EQ 24
S.IPCFG.DNS2 .EQ 28
S.IPCFG.HOSTNAME .EQ 32 15+\0 C String
S.IPCFG.DOMAIN .EQ 48 79+\0 C String
*S.IPCFG.DevID .EQ 1
*S.IPCFG.DevFlags .EQ 2
*
S.IPCFG .EQ 128
*S.IPCFG.MAC .EQ 4
S.IPCFG.DHCPSRVR .EQ 10
S.IPCFG.IP .EQ 14
S.IPCFG.MASK .EQ 18
S.IPCFG.GW .EQ 22
S.IPCFG.DNS1 .EQ 26
S.IPCFG.DNS2 .EQ 30
S.IPCFG.HOSTNAME .EQ 34 15+\0 C String
S.IPCFG.DOMAIN .EQ 50 45+\0 C String
*
S.IPCFG .EQ 96
*--------------------------------------
S.ARPCACHE.S .EQ 0
S.ARPCACHE.S.PENDING .EQ 1

View File

@ -41,6 +41,7 @@ S.DHCP.OPTIONS.GW .EQ 3
S.DHCP.OPTIONS.DNS .EQ 6
S.DHCP.OPTIONS.DOMAIN .EQ 15
S.DHCP.OPTIONS.MSGTYPE .EQ 53
S.DHCP.OPTIONS.SRVID .EQ 54
S.DHCP.OPTIONS.END .EQ 255
*
S.DHCP .EQ S.UDP+240

View File

@ -12,63 +12,61 @@ CFG.SET >PULLW ZPTmpPtr1 IPCFG
dey
bpl .1
CFG.SET.I >LDYA L.DCB.NIC
ldx #5
.2 lda IPCFG+S.NETCFG.MAC,x
sta ARP.REQ.SRCMAC,x
sta ARP.REQ.SHA,x
sta ARP.REP.SRCMAC,x
sta ARP.REP.SHA,x
dex
bpl .2
ldx #3
.3 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 .3
lda IPCFG+S.NETCFG.DevFlags
and #S.DCB.NIC.FLAGS.ARPOFFLOAD
beq .5
>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.DevID
lda IPCFG+S.NETCFG.DevID
>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 #11 IP/MASK/GW
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
.4 lda IPCFG+S.IPCFG.IP,x
sta DCB.NIC+S.DCB.NIC.IP,x
dex
bpl .1
bpl .4
lda S.IOCTL.CTRLCODE.SETDCB
sta S.IOCTL.CTRLCODE
>PUSHW L.IOCTL
>PUSHBI IOCTL.CONTROL
lda IPCFG+S.IPCFG.DevID
lda IPCFG+S.NETCFG.DevID
>SYSCALL IOCTL
bcs .9
.2 lda hDNSSocket
beq .3
.5 lda hDNSSocket
beq .6
jsr SKT.Shutdown
stz hDNSSocket
.3 lda IPCFG+S.IPCFG.DNS1
.6 lda IPCFG+S.IPCFG.DNS1
beq .8
>PUSHBI 0 no protocol
@ -83,7 +81,7 @@ CFG.SET.I >LDYA L.DCB.NIC
>PUSHW L.SA.LOCAL
lda hDNSSocket
jsr SKT.Bind
jmp SKT.Bind
.8 clc
.9 rts

View File

@ -98,7 +98,7 @@ FRM.NewIP stx .8+1
adc ZPFrameOutPtr+1
sta ZPDataOutPtr+1
lda DCB.NIC+S.DCB.NIC.FLAGS
lda IPCFG+S.NETCFG.DevFlags
and #S.DCB.NIC.FLAGS.IPOFFLOAD
bne .7
@ -158,7 +158,7 @@ FRM.SendIP ldx #3 Copy SRC.IP even if IP offload
dex
bpl .1
lda DCB.NIC+S.DCB.NIC.FLAGS
lda IPCFG+S.NETCFG.DevFlags
and #S.DCB.NIC.FLAGS.IPOFFLOAD
bne .21
@ -239,7 +239,7 @@ FRM.SendIP ldx #3 Copy SRC.IP even if IP offload
bne .5
jsr IP.ComputeICMPChecksum
.5 lda DCB.NIC+S.DCB.NIC.FLAGS
.5 lda IPCFG+S.NETCFG.DevFlags
and #S.DCB.NIC.FLAGS.ARPOFFLOAD
bne .6
@ -343,7 +343,7 @@ FRM.Send ldx #3
FRM.Send.IOCTL >PUSHW L.IOCTL
>PUSHBI IOCTL.WRITE
lda IPCFG+S.IPCFG.DevID
lda IPCFG+S.NETCFG.DevID
>SYSCALL IOCTL
rts
*--------------------------------------

View File

@ -34,6 +34,7 @@ IPDEBUG .EQ 0
.INB INC/MLI.E.I
.INB INC/NIC.I
.INB INC/ETH.I
.INB INC/LIB.NET.I
.INB INC/LIBTCPIP.I
*--------------------------------------
ZPFrameInPtr .EQ ZPLIB

View File

@ -1,523 +0,0 @@
NEW
PREFIX
AUTO 4,1
.LIST OFF
.OP 65C02
.OR $2000
.TF SBIN/DHCPCLNT
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/ETH.I
.INB INC/LIBTCPIP.I
.INB INC/NET.DHCP.I
*--------------------------------------
TIMEOUT.MAX .EQ 200 20 sec.
*--------------------------------------
ZPIPCfgPtr .EQ ZPBIN
ZPFrameBase .EQ ZPBIN+2
ZPFramePtr .EQ ZPBIN+4
*--------------------------------------
* 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 CS
.DA DS.END-DS.START DS
.DA #64 SS
.DA #6 ZP
.DA 0
*--------------------------------------
* 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)
and #S.IPCFG.STATUS.OK
bne .99 Already Configured, exit
ldy #S.IPCFG.hFD
lda (ZPIPCfgPtr),y
beq .98
ldy #S.IPCFG-1
.1 lda (ZPIPCfgPtr),y
sta IPCFG,y
dey
bne .1
stz IPCFG+S.IPCFG.STATUS
ldx #3
.11 lda A2osX.TIMER16,x
sta DHCP.DISC.XID,x
sta DHCP.REQ.XID,x
dex
bpl .11
ldx #5
.2 lda IPCFG+S.IPCFG.MAC,x
sta DHCP.DISC.CHADDR,x
sta DHCP.REQ.CHADDR,x
dex
bpl .2
clc
.9 rts
.98 >LDYA L.MSG.CFG.ND
bra .90
.99 >LDYA L.MSG.CFG.NA
.90 >SYSCALL puts
lda #0
sec
rts
*--------------------------------------
CS.RUN >PUSHBI 0 no protocol
lda #S.SOCKET.T.DGRAM
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
bcc .1
.9 jmp CS.RUN.KO
.1 >STA.G hSocket
pha
>PUSHW L.SA.LOCAL
pla
>LIBCALL hLIBTCPIP,LIBTCPIP.Bind
bcs .9
>PUSHWI S.SOCKET.O.BROADCAST
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.setsockopt
>PUSHW L.SA.REMOTE
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect
bcs .9
>LDYA L.MSG.CFG1
>SYSCALL puts
jsr Init.Timeout
CS.RUN.SDISC >PUSHWI DHCP.DISC.LEN
>PUSHW L.DHCP.DISC
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Send
bcc .1
jmp CS.RUN.KO
.1 lda #S.IPCFG.STATUS.SDISC
sta IPCFG
CS.RUN.ROFFER >SLEEP
jsr CS.RUN.SKT.RCVD
bcc .1
jsr Wait.Timeout
bne CS.RUN.ROFFER
lda #1
jmp CS.RUN.KO
.1 jsr CheckDHCPOffer
bcs CS.RUN.ROFFER
lda #S.IPCFG.STATUS.ROFFER
sta IPCFG
CS.RUN.SREQ ldx #3
.1 >PUSHB IPCFG+S.IPCFG.DHCPSRVR,x
dex
bpl .1
>PUSHBI 4
>LDYA L.MSG.CFG2
>SYSCALL printf
>PUSHWI DHCP.REQ.LEN
>PUSHW L.DHCP.REQ
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Send
bcs CS.RUN.KO
lda #S.IPCFG.STATUS.SREQ
sta IPCFG
CS.RUN.RACK >SLEEP
jsr CS.RUN.SKT.RCVD
bcc .1
jsr Wait.Timeout
bne CS.RUN.RACK
lda #2
bra CS.RUN.KO
.1 jsr CheckDHCPAck
bcs CS.RUN.RACK
CS.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
>SYSCALL printf
lda #0 Leave with NO ERROR
sec
rts
CS.RUN.KO pha
>PUSHA
>PUSHBI 1
>LDYA L.MSG.CFG.KO
>SYSCALL printf
pla
sec
rts
*--------------------------------------
CS.RUN.SKT.RCVD >LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Recv
bcs .9
>STA.G hFrame
>SYSCALL GetMemPtr
>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
beq .1
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
.1 lda hLIBTCPIP
beq .8
>SYSCALL UnloadLib
.8 clc
rts
*--------------------------------------
CheckDHCPOffer jsr CheckDHCPXID
bcs .9
lda ZPFrameBase
clc
adc #S.DHCP.OPTIONS
sta ZPFramePtr
lda ZPFrameBase+1
adc /S.DHCP.OPTIONS
sta ZPFramePtr+1
lda (ZPFramePtr)
cmp #S.DHCP.OPTIONS.MSGTYPE
bne .9
ldy #2
lda (ZPFramePtr),y
cmp #S.DHCP.OPTIONS.DHCPOffer
bne .9
ldy #S.DHCP.GIADDR+3
ldx #3
.1 lda (ZPFrameBase),y
sta DHCP.REQ.GIADDR,x
dey
dex
bpl .1
ldy #S.DHCP.YIADDR+3
ldx #3
.2 lda (ZPFrameBase),y
sta DHCP.REQ.OPT.REQIP,x
sta IPCFG+S.IPCFG.IP,x
dey
dex
bpl .2
ldy #S.IP.SRC+3
ldx #3
.3 lda (ZPFrameBase),y
sta DHCP.REQ.OPT.SVRIP,x
sta IPCFG+S.IPCFG.DHCPSRVR,x
dey
dex
bpl .3
.5 inc ZPFramePtr skip Option 53 (DHCPOffer:530102)
bne .6
inc ZPFramePtr+1
.6 lda (ZPFramePtr)
sec
adc ZPFramePtr add option len + 1
sta ZPFramePtr
bcc .7
inc ZPFramePtr+1
.7 lda (ZPFramePtr)
cmp #S.DHCP.OPTIONS.END
beq .8
jsr GetDHCPOption
bra .5
.8 jsr CS.RUN.DISCARD
clc
rts
.9 jsr CS.RUN.DISCARD
sec
rts
*--------------------------------------
CS.RUN.DISCARD >LDA.G hFrame
>SYSCALL FreeMem
rts
*--------------------------------------
GetDHCPOption cmp #S.DHCP.OPTIONS.MASK
bne .1
ldx #S.IPCFG.MASK
bra GetDHCPOption.CopyIP
.1 cmp #S.DHCP.OPTIONS.GW
bne .2
ldx #S.IPCFG.GW
bra GetDHCPOption.CopyIP
.2 cmp #S.DHCP.OPTIONS.DNS
bne .3
ldx #S.IPCFG.DNS1
bra GetDHCPOption.CopyIP
.3 cmp #S.DHCP.OPTIONS.DOMAIN
bne .9
ldy #1
lda (ZPFramePtr),y Get String len
cmp #80
bcc .4
lda #79
.4 sta IPCFG+S.IPCFG.DOMAIN store len
tax
.5 iny
lda (ZPFramePtr),y
sta IPCFG+S.IPCFG.DOMAIN-1,y
dex
bne .5
.9 rts
*--------------------------------------
GetDHCPOption.CopyIP
ldy #1
lda (ZPFramePtr),y Get Byte count
cmp #9
bcc .1
lda #8 max 8 bytes (2 DNS)
.1 iny
.2 pha
lda (ZPFramePtr),y
sta IPCFG,x
iny
inx
pla
dec
bne .2
rts
*--------------------------------------
CheckDHCPAck jsr CheckDHCPXID
bcs .9
lda ZPFrameBase
clc
adc #S.DHCP.OPTIONS
sta ZPFramePtr
lda ZPFrameBase+1
adc /S.DHCP.OPTIONS
sta ZPFramePtr+1
lda (ZPFramePtr)
cmp #S.DHCP.OPTIONS.MSGTYPE
bne .9
ldy #2
lda (ZPFramePtr),y
cmp #S.DHCP.OPTIONS.DHCPAck
bne .9
jsr CS.RUN.DISCARD
clc
rts
.9 jsr CS.RUN.DISCARD
sec
rts
*--------------------------------------
CheckDHCPXID ldy #S.DHCP.XID+3
ldx #3
.1 lda (ZPFrameBase),y
cmp DHCP.DISC.XID,x same XID ?
bne .9
dey
dex
bpl .1
clc
rts
.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/DHCPCLNT.S
ASM

View File

@ -130,6 +130,10 @@ CS.INIT.LIBS lda LibCnt
ldy #S.NETCFG.DevID
sta (pNETCFG),y
iny S.NETCFG.DevFlags
lda DCB.NIC+S.DCB.NIC.FLAGS
sta (pNETCFG),y
ldx #5
ldy #S.NETCFG.MAC+5

View File

@ -1,74 +0,0 @@
NEW
PREFIX
AUTO 4,1
.LIST OFF
.OP 65C02
.OR $2000
.TF SBIN/TCPIPD
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/ETH.I
.INB INC/LIBTCPIP.I
*--------------------------------------
* 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 CS
.DA DS.END-DS.START DS
.DA #64 SS
.DA #0 ZP
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBTCPIP
>SYSCALL LoadLib
bcs .9
sta hLIBTCPIP
.9 rts
*--------------------------------------
CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.POLL
clc
rts
*--------------------------------------
CS.DOEVENT lda (pEvent)
bpl .9
>LIBCALL hLIBTCPIP,LIBTCPIP.PULSE
.9 sec never discard TIME event
rts
*--------------------------------------
CS.QUIT lda hLIBTCPIP
beq .8
>SYSCALL UnloadLib
.8 clc
rts
*--------------------------------------
CS.END
*--------------------------------------
LIBTCPIP .AZ "libtcpip"
hLIBTCPIP .BS 1
*--------------------------------------
.DUMMY
.OR 0
DS.START
DS.END .ED
*--------------------------------------
MAN
SAVE USR/SRC/SBIN/TCPIPD.S
ASM