mirror of
https://github.com/A2osX/A2osX.git
synced 2024-10-31 23:09:33 +00:00
614 lines
13 KiB
Plaintext
614 lines
13 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
.LIST OFF
|
||
.OP 65C02
|
||
.OR $2000
|
||
.TF bin/etconfig
|
||
*--------------------------------------
|
||
.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/lib.net.i
|
||
.INB inc/libetalk.i
|
||
*--------------------------------------
|
||
TIMEOUT.MAX .EQ 200 20 sec.
|
||
PROBE.MAX .EQ 10
|
||
*--------------------------------------
|
||
.DUMMY
|
||
.OR ZPBIN
|
||
ZS.START
|
||
pETKCFG .BS 2
|
||
ZPFrameBase .BS 2
|
||
ZPFramePtr .BS 2
|
||
BufPtr .BS 2
|
||
|
||
ProbeCnt .BS 1
|
||
TimeOut .BS 1
|
||
hFrame .BS 1
|
||
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 #64 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.LIBETALK .DA LIBETALK
|
||
L.MSG.USAGE .DA MSG.USAGE
|
||
L.MSG.NODEV .DA MSG.NODEV
|
||
L.MSG1.DEV .DA MSG1.DEV
|
||
L.MSG1.DEV.ARP .DA MSG1.DEV.ARP
|
||
L.MSG1.DEV.IP .DA MSG1.DEV.IP
|
||
L.MSG1.LINK.OK .DA MSG1.LINK.OK
|
||
L.MSG1.LINK.KO .DA MSG1.LINK.KO
|
||
L.MSG1.LINKSPEED .DA MSG1.LINKSPEED
|
||
L.MSG1.DPLX.FD .DA MSG1.DPLX.FD
|
||
L.MSG1.DPLX.HD .DA MSG1.DPLX.HD
|
||
L.MSG2 .DA MSG2
|
||
L.MSG2.C .DA MSG2.C
|
||
L.MSG2.U .DA MSG2.U
|
||
L.MSG2.ADDR .DA MSG2.ADDR
|
||
L.MSG2.ROUTER .DA MSG2.ROUTER
|
||
L.MSG2.OBJECT .DA MSG2.OBJECT
|
||
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.CFG.DefaultHost .DA CFG.DefaultHost
|
||
L.ETKCFG .DA ETKCFG
|
||
L.ETKCFG.OBJECT .DA ETKCFG+S.ETKCFG.OBJECT
|
||
*--------------------------------------
|
||
L.MSG.PROBE .DA MSG.PROBE
|
||
L.MSG.PROBE.KO .DA MSG.PROBE.KO
|
||
L.MSG.PROBE.OK .DA MSG.PROBE.OK
|
||
L.AARP.PRB .DA AARP.PRB
|
||
L.DDP.GetNetInfo .DA DDP.GetNetInfo
|
||
.DA 0
|
||
*--------------------------------------
|
||
CS.INIT >LDYA L.LIBETALK
|
||
>SYSCALL LoadLib
|
||
bcs .9
|
||
sta hLIBETALK
|
||
|
||
.9 rts
|
||
*--------------------------------------
|
||
CS.RUN >LIBCALL hLIBETALK,LIBETALK.GETCFG
|
||
>STYA pETKCFG
|
||
|
||
ldy #S.ETKCFG-1
|
||
.1 lda (pETKCFG),y
|
||
sta ETKCFG,y
|
||
dey
|
||
bpl .1
|
||
|
||
lda ETKCFG+S.NETCFG.DevID
|
||
bne CS.RUN.SETUP
|
||
>LDYA L.MSG.NODEV
|
||
>SYSCALL PutS
|
||
lda #MLI.E.NODEV
|
||
sec
|
||
rts
|
||
|
||
CS.RUN.SETUP lda ETKCFG+S.NETCFG.STATUS
|
||
bne .7
|
||
|
||
jsr CFG.EtcFiles
|
||
|
||
jsr CS.RUN.PROBE
|
||
|
||
jsr CS.RUN.GETNETINFO
|
||
|
||
lda #$80
|
||
sta ETKCFG+S.NETCFG.STATUS
|
||
>PUSHW L.ETKCFG
|
||
>LIBCALL hLIBETALK,LIBETALK.SETCFG
|
||
|
||
.7 jsr CS.RUN.DUMP
|
||
|
||
.8 lda #0
|
||
sec
|
||
CS.RUN.SETUP.RTS
|
||
rts
|
||
*--------------------------------------
|
||
CS.RUN.DUMP >LEA.G DCB.NIC
|
||
|
||
ldx #S.IOCTL.S.GETDCB
|
||
jsr CS.RUN.IOCTL
|
||
bcs CS.RUN.SETUP.RTS
|
||
|
||
>LEA.G DIB
|
||
|
||
ldx #S.IOCTL.S.GETDIB
|
||
jsr CS.RUN.IOCTL
|
||
bcs CS.RUN.SETUP.RTS
|
||
|
||
CS.RUN.DUMPNIC >PUSHW L.MSG1.DEV
|
||
|
||
lda ETKCFG+S.NETCFG.DevID
|
||
>PUSHA
|
||
|
||
>SYSCALL GetMemPtr
|
||
|
||
pha
|
||
tya
|
||
clc
|
||
adc #S.FD.DEV
|
||
tay
|
||
pla
|
||
adc /S.FD.DEV
|
||
>PUSHYA
|
||
|
||
>PUSHEA.G DIB+S.DIB.IDS
|
||
|
||
ldy #DCB.NIC+S.DCB.NIC.MAC
|
||
ldx #6
|
||
|
||
.1 lda (pData),y
|
||
>PUSHA
|
||
iny
|
||
dex
|
||
bne .1
|
||
|
||
>PUSHBI 11
|
||
|
||
>SYSCALL PrintF
|
||
|
||
>PUSHW L.MSG1.DEV.ARP
|
||
|
||
>LDA.G DCB.NIC+S.DCB.NIC.FLAGS
|
||
and #S.DCB.NIC.FLAGS.ARPOFFLOAD
|
||
beq .2
|
||
|
||
lda #1
|
||
|
||
.2 >PUSHA
|
||
>PUSHBI 1
|
||
|
||
>SYSCALL PrintF
|
||
|
||
>PUSHW L.MSG1.DEV.IP
|
||
|
||
>LDA.G DCB.NIC+S.DCB.NIC.FLAGS
|
||
and #S.DCB.NIC.FLAGS.IPOFFLOAD
|
||
|
||
beq .3
|
||
|
||
lda #1
|
||
|
||
.3 >PUSHA
|
||
>PUSHBI 1
|
||
|
||
>SYSCALL PrintF
|
||
|
||
>LDA.G DCB.NIC+S.DCB.NIC.LINK
|
||
and #S.DCB.NIC.LINK.OK
|
||
bne CS.RUN.LINK
|
||
>LDYA L.MSG1.LINK.KO
|
||
>SYSCALL PutS
|
||
bra CS.RUN.DUMPNET
|
||
|
||
CS.RUN.LINK >LDYA L.MSG1.LINK.OK
|
||
>SYSCALL PutS
|
||
|
||
>PUSHW L.MSG1.LINKSPEED
|
||
>PUSHBI 0
|
||
>SYSCALL PrintF
|
||
|
||
>LDA.G DCB.NIC+S.DCB.NIC.SPEED
|
||
and #$0F
|
||
tax
|
||
.4 phx
|
||
lda #'0'
|
||
>SYSCALL PutChar
|
||
plx
|
||
dex
|
||
bne .4
|
||
>LDA.G DCB.NIC+S.DCB.NIC.LINK
|
||
and #S.DCB.NIC.LINK.FD
|
||
bne .5
|
||
>LDYA L.MSG1.DPLX.HD
|
||
bra .6
|
||
.5 >LDYA L.MSG1.DPLX.FD
|
||
.6 >SYSCALL PutS
|
||
|
||
CS.RUN.DUMPNET >PUSHW L.MSG2
|
||
>PUSHBI 0
|
||
>SYSCALL PrintF
|
||
|
||
lda ETKCFG+S.ETKCFG.NodID
|
||
beq .11
|
||
>LDYA L.MSG2.C
|
||
bra .10
|
||
.11 >LDYA L.MSG2.U
|
||
.10 >SYSCALL PutS
|
||
|
||
>PUSHW L.MSG2.ADDR
|
||
>PUSHW ETKCFG+S.ETKCFG.NetID
|
||
>PUSHB ETKCFG+S.ETKCFG.NodID
|
||
>PUSHBI 3
|
||
>SYSCALL PrintF
|
||
|
||
>PUSHW L.MSG2.ROUTER
|
||
>PUSHW ETKCFG+S.ETKCFG.NetID
|
||
>PUSHB ETKCFG+S.ETKCFG.Router
|
||
>PUSHBI 3
|
||
>SYSCALL PrintF
|
||
|
||
>PUSHW L.MSG2.OBJECT
|
||
>PUSHW L.ETKCFG.OBJECT
|
||
>PUSHBI 2
|
||
>SYSCALL PrintF
|
||
lda #0 tell TSKMGR that all done ok, but
|
||
sec we do not want to stay in memory
|
||
rts
|
||
*--------------------------------------
|
||
CS.RUN.PROBE >LDYA L.MSG.PROBE
|
||
>SYSCALL PutS
|
||
|
||
ldx #5
|
||
|
||
.20 lda ETKCFG+S.NETCFG.MAC,x
|
||
sta AARP.PRB.SHA,x
|
||
dex
|
||
bpl .20
|
||
|
||
lda #$FF
|
||
sta AARP.PRB.SPA+2
|
||
sta AARP.PRB.TPA+2
|
||
|
||
lda #$FE
|
||
sta AARP.PRB.SPA+1
|
||
sta AARP.PRB.TPA+1
|
||
|
||
lda A2osX.TIMER16
|
||
eor A2osX.TIMER16+1
|
||
bne .1
|
||
|
||
inc
|
||
.1 cmp #$FE
|
||
bcc .2
|
||
|
||
eor #$80
|
||
|
||
.2 sta AARP.PRB.SPA+3
|
||
sta AARP.PRB.TPA+3
|
||
|
||
lda #PROBE.MAX
|
||
sta ProbeCnt
|
||
|
||
.3 >LDYA L.AARP.PRB
|
||
>STYA.G DEV.IOCTL+S.IOCTL.BUFPTR
|
||
>LDYAI AARP.PRB.LEN
|
||
>STYA.G DEV.IOCTL+S.IOCTL.BYTECNT
|
||
|
||
>PUSHB ETKCFG+S.NETCFG.DevID
|
||
lda #IOCTL.WRITE
|
||
jsr CS.RUN.IOCTL.A
|
||
|
||
>SLEEP
|
||
dec ProbeCnt
|
||
bne .3
|
||
|
||
lda AARP.PRB.SPA+2
|
||
sta ETKCFG+S.ETKCFG.NetID
|
||
sta DDP.GetNetInfo+S.DDP2.SRC.NET
|
||
|
||
lda AARP.PRB.SPA+1
|
||
sta ETKCFG+S.ETKCFG.NetID+1
|
||
sta DDP.GetNetInfo+S.DDP2.SRC.NET+1
|
||
|
||
lda AARP.PRB.SPA+3
|
||
sta ETKCFG+S.ETKCFG.NodID
|
||
sta DDP.GetNetInfo+S.DDP2.SRC.NOD
|
||
|
||
* clc
|
||
|
||
rts
|
||
*--------------------------------------
|
||
CS.RUN.GETNETINFO
|
||
>LDYA L.DDP.GetNetInfo
|
||
>STYA.G DEV.IOCTL+S.IOCTL.BUFPTR
|
||
>LDYAI DDP.GetNetInfo.LEN
|
||
>STYA.G DEV.IOCTL+S.IOCTL.BYTECNT
|
||
|
||
>PUSHW ETKCFG+S.NETCFG.DevID
|
||
lda #IOCTL.WRITE
|
||
jsr CS.RUN.IOCTL.A
|
||
|
||
lda #TIMEOUT.MAX
|
||
sta TimeOut
|
||
|
||
.1 >SLEEP
|
||
|
||
dec TimeOut
|
||
beq .9
|
||
|
||
>PUSHW ETKCFG+S.NETCFG.DevID
|
||
lda #IOCTL.READ
|
||
jsr CS.RUN.IOCTL.A
|
||
bcs .1
|
||
|
||
sta hFrame
|
||
>SYSCALL GetMemPtr
|
||
>STYA ZPFrameBase
|
||
|
||
|
||
|
||
lda hFrame
|
||
>SYSCALL FreeMem
|
||
|
||
>LDYA L.MSG.PROBE.OK
|
||
>SYSCALL PutS
|
||
rts
|
||
|
||
.9 sec
|
||
rts
|
||
*--------------------------------------
|
||
CS.RUN.IOCTL >STYA.G DEV.IOCTL+S.IOCTL.BUFPTR
|
||
|
||
txa
|
||
>STA.G DEV.IOCTL+S.IOCTL.S
|
||
|
||
>PUSHB ETKCFG+S.NETCFG.DevID
|
||
lda #IOCTL.STATUS
|
||
|
||
CS.RUN.IOCTL.A >PUSHA
|
||
|
||
>PUSHEA.G DEV.IOCTL
|
||
>SYSCALL IOCTL
|
||
rts
|
||
*--------------------------------------
|
||
CFG.EtcFiles >LDYAI 256
|
||
>SYSCALL GetMem
|
||
bcs .9
|
||
|
||
>STYA BufPtr
|
||
stx CFG.hBuf1
|
||
>LDYA L.HOSTNAME
|
||
jsr CFG.Read.PrintF
|
||
jsr CFG.Read.HOSTNAME
|
||
|
||
lda ETKCFG+S.ETKCFG.OBJECT
|
||
bne .2
|
||
|
||
>LDYA L.ETKCFG.OBJECT
|
||
iny
|
||
bne .1
|
||
inc
|
||
|
||
.1 >PUSHYA
|
||
>PUSHW L.CFG.DefaultHost
|
||
>PUSHW A2osX.TIMER16
|
||
>PUSHBI 2
|
||
>SYSCALL SPrintF
|
||
|
||
lda #10
|
||
sta ETKCFG+S.ETKCFG.OBJECT
|
||
|
||
.2 lda CFG.hBuf1
|
||
>SYSCALL FreeMem
|
||
|
||
.9 rts
|
||
*--------------------------------------
|
||
CFG.Read.PrintF pha
|
||
>PUSHW L.MSG.CFG
|
||
pla
|
||
>PUSHYA
|
||
>PUSHBI 2
|
||
>SYSCALL PrintF
|
||
rts
|
||
*--------------------------------------
|
||
CFG.Read.HOSTNAME
|
||
>LDYA L.HOSTNAME
|
||
jsr CFG.Read.Open
|
||
bcs .9
|
||
|
||
jsr CFG.Read.Result
|
||
bcs .9
|
||
|
||
.1 jsr CFG.Read.GetS
|
||
bcs .8
|
||
|
||
lda (BufPtr)
|
||
beq .1 empty line...
|
||
cmp #'#
|
||
beq .1 comment...
|
||
|
||
ldy #0
|
||
|
||
.2 lda (BufPtr),y
|
||
beq .8 end of name
|
||
|
||
sta ETKCFG+S.ETKCFG.OBJECT+1,y
|
||
iny
|
||
cpy #32
|
||
bne .2
|
||
|
||
.8 sty ETKCFG+S.ETKCFG.OBJECT
|
||
|
||
clc
|
||
.HS B0 BCS
|
||
.9 sec
|
||
jmp CFG.Read.Close
|
||
*--------------------------------------
|
||
CFG.Read.Result bcc .1
|
||
pha
|
||
>PUSHW L.MSG.CFG.KO
|
||
pla
|
||
>PUSHA
|
||
>PUSHBI 1
|
||
>SYSCALL PrintF
|
||
sec
|
||
rts
|
||
|
||
.1 >LDYA L.MSG.CFG.OK
|
||
>SYSCALL PutS
|
||
rts
|
||
*--------------------------------------
|
||
CFG.Read.Open stz CFG.hCfgFile
|
||
>PUSHYA
|
||
>PUSHBI O.RDONLY
|
||
>PUSHBI S.FI.T.TXT
|
||
>PUSHWZ
|
||
>SYSCALL FOpen
|
||
bcs .9
|
||
|
||
sta CFG.hCfgFile
|
||
* clc
|
||
.9 rts
|
||
*--------------------------------------
|
||
CFG.Read.Close php
|
||
pha
|
||
|
||
CFG.Read.Close2 lda CFG.hCfgFile
|
||
beq .8
|
||
|
||
>SYSCALL FClose
|
||
|
||
.8 pla
|
||
plp
|
||
rts
|
||
*--------------------------------------
|
||
CFG.Read.GetS >PUSHB CFG.hCfgFile
|
||
>PUSHW BufPtr
|
||
>PUSHWI 255
|
||
>SYSCALL FGetS
|
||
rts
|
||
*--------------------------------------
|
||
CS.DOEVENT lda (pEvent)
|
||
bpl .9 is it a TIMER event?
|
||
|
||
lda TimeOut
|
||
beq .9
|
||
|
||
dec TimeOut
|
||
|
||
.9 sec do not discard TIMER event
|
||
rts
|
||
*--------------------------------------
|
||
CS.QUIT lda hLIBETALK
|
||
beq .8
|
||
>SYSCALL UnloadLib
|
||
.8 clc
|
||
rts
|
||
*--------------------------------------
|
||
CS.END
|
||
LIBETALK .AZ "libetalk"
|
||
hLIBETALK .BS 1
|
||
*--------------------------------------
|
||
MSG.USAGE .AZ "Usage : ETCONFIG\r\n"
|
||
*--------------------------------------
|
||
MSG.NODEV .AZ "EtherTalk not bound to any device."
|
||
*--------------------------------------
|
||
MSG1.DEV .AS "NIC Device Configuration :\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"
|
||
MSG1.DEV.ARP .AZ " ARP Offload : %d\r\n"
|
||
MSG1.DEV.IP .AS " IP Offload : %d\r\n"
|
||
.AZ " Link Status : "
|
||
MSG1.LINK.OK .AZ "OK"
|
||
MSG1.LINK.KO .AZ "Media Disconnected"
|
||
MSG1.LINKSPEED .AZ " Link Speed : 1"
|
||
MSG1.DPLX.FD .AZ " Mbit/s,Full Duplex"
|
||
MSG1.DPLX.HD .AZ " Mbit/s,Half Duplex"
|
||
*--------------------------------------
|
||
MSG2 .AZ "EtherTalk Configuration : "
|
||
MSG2.C .AZ "Configured"
|
||
MSG2.U .AZ "Not Configured"
|
||
MSG2.ADDR .AZ " Network/Node : %D/%d\r\n"
|
||
MSG2.ROUTER .AZ " Router : %D/%d\r\n"
|
||
MSG2.OBJECT .AZ " Object Name : %S\r\n"
|
||
*--------------------------------------
|
||
MSG.CFG .AZ "ETCONFIG:Reading %s..."
|
||
MSG.CFG.KO .AZ "Not Found. [%h]\r\n"
|
||
MSG.CFG.OK .AZ "OK."
|
||
*--------------------------------------
|
||
HOSTNAME .AZ "${ROOT}etc/hostname"
|
||
*--------------------------------------
|
||
CFG.DefaultHost .AZ "a2osx-%H"
|
||
*--------------------------------------
|
||
MSG.PROBE .AZ "ETCONFIG:Acquiring NODE..."
|
||
MSG.PROBE.KO .AZ "ETCONFIG:Time Out [%h].\r\n"
|
||
MSG.PROBE.OK .AZ "ETCONFIG:Success."
|
||
*--------------------------------------
|
||
ETKCFG .BS S.ETKCFG
|
||
CFG.hCfgFile .BS 1
|
||
CFG.hBuf1 .BS 1
|
||
*--------------------------------------
|
||
AARP.PRB .HS 090007FFFFFF S.ETH.DSTMAC
|
||
AARP.PRB.SRCMAC .BS 6
|
||
.DA #0,#36 S.ETH.802.3.LENGTH
|
||
.HS AA S.ETH.802.2.DSTSAP
|
||
.HS AA S.ETH.802.2.SRCSAP
|
||
.HS 03 S.ETH.802.2.CTRL
|
||
.HS 00.00.00.80.F3 S.ETH.SNAP.PROTO
|
||
.HS 00.01.80.9B.06.04
|
||
.HS 0003 Probe
|
||
AARP.PRB.SHA .BS 6
|
||
AARP.PRB.SPA .BS 4
|
||
AARP.PRB.THA .BS 6
|
||
AARP.PRB.TPA .BS 4
|
||
.BS AARP.PRB+60-*
|
||
AARP.PRB.LEN .EQ 60
|
||
*--------------------------------------
|
||
DDP.GetNetInfo .HS 090007FFFFFF S.ETH.DSTMAC
|
||
.BS 6
|
||
.DA #0,#DDP.GetNetInfo.DEND-DDP.GetNetInfo.LLC
|
||
*--------------------------------------
|
||
DDP.GetNetInfo.LLC
|
||
.HS AA
|
||
.HS AA
|
||
.HS 03
|
||
.HS 08.00.07.80.9B
|
||
*--------------------------------------
|
||
DDP.GetNetInfo.DDP
|
||
.DA #0,#DDP.GetNetInfo.DEND-DDP.GetNetInfo.DDP
|
||
.DA 0 S.DDP2.CHECKSUM
|
||
.DA 0 S.DDP2.DST.NET
|
||
.DA 0 S.DDP2.SRC.NET
|
||
.DA #$FF S.DDP2.DST.NOD
|
||
.DA #0 S.DDP2.SRC.NOD
|
||
.DA #6 S.DDP2.DST.SKT
|
||
.DA #6 S.DDP2.SRC.SKT
|
||
.DA #6 S.DDP2.TYPE
|
||
*--------------------------------------
|
||
.DA #5 ZIP.GetNetInfoReq
|
||
.HS 00
|
||
.HS 00.00.00.00
|
||
.HS 00 Zone Len
|
||
DDP.GetNetInfo.DEND .EQ *
|
||
.BS DDP.GetNetInfo+60-*
|
||
DDP.GetNetInfo.LEN .EQ 60
|
||
*--------------------------------------
|
||
.DUMMY
|
||
.OR 0
|
||
DS.START
|
||
DIB .BS S.DIB
|
||
DEV.IOCTL .BS S.IOCTL
|
||
DCB.NIC .BS S.DCB.NIC
|
||
DS.END .ED
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE usr/src/bin/etconfig.s
|
||
ASM
|