A2osX/SBIN/NETWORKD.S.txt
2019-01-17 15:05:48 +00:00

284 lines
5.0 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
PREFIX
AUTO 4,1
.LIST OFF
.OP 65C02
.OR $2000
.TF SBIN/NETWORKD
*--------------------------------------
LIB.MAX .EQ 4
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/MLI.I
.INB INC/MLI.E.I
.INB INC/NIC.I
.INB INC/ETH.I
.INB INC/LIB.NET.I
*--------------------------------------
* Zero Page Segment, up to 32 bytes
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
pNETCFG .BS 2
pBuf .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.MSG.LIB .DA MSG.LIB
L.IOCTL .DA IOCTL
L.DCB.NIC .DA DCB.NIC
L.ETCNETWORK .DA ETCNETWORK
.DA 0
*--------------------------------------
CS.INIT jsr CS.INIT.DEV
bcs .9
jsr CS.INIT.LIBS
bcs .9
jsr CS.INIT.CONF
.9 rts
*--------------------------------------
CS.INIT.DEV >PUSHBI 0
>LDYA L.DEVNAME
>SYSCALL open
bcc .8
inc DEVNAME+8
lda DEVNAME+8
cmp #'8'
bne CS.INIT.DEV
>LDYA L.MSG.DEV.KO
>SYSCALL puts
lda #MLI.E.NODEV
sec
rts
.8 sta DevID
>PUSHW L.DEVNAME
>PUSHBI 2
>LDYA L.MSG.DEV.OK
>SYSCALL printf
>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 DevID
>SYSCALL IOCTL
rts
*--------------------------------------
CS.INIT.LIBS lda LibCnt
.1 inc
>SYSCALL ArgV
bcs .8
phy
pha
>PUSHYA
>PUSHBI 2
>LDYA L.MSG.LIB
>SYSCALL printf
pla
ply
>SYSCALL LoadLib
bcs .9
ldy LibCnt
sta hLIBs,y
inc LibCnt
tay
ldx #LIBNET.GETCFG
jsr A2osX.LIBCALL
>STYA pNETCFG
lda DevID
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
.2 lda DCB.NIC+S.DCB.NIC.MAC,x
sta (pNETCFG),y
dey
dex
bpl .2
lda LibCnt
cmp #LIB.MAX
bne .1
.8 clc
.9 rts
*--------------------------------------
CS.INIT.CONF >LDYAI 64
>SYSCALL GetMem
bcs .9
>STYA pBuf
stx hLineBuf
>PUSHWI 0
>PUSHBI S.FI.T.TXT
>PUSHBI O.RDONLY
>LDYA L.ETCNETWORK
>SYSCALL fopen
bcs .9
sta hNetworkFile
.1 >PUSHWI 63
>PUSHW pBuf
lda hNetworkFile
>SYSCALL fgets
bcs .8
>PUSHBI 0 PS Flags
>LDYA pBuf
>SYSCALL execL
bra .1
.8 lda hNetworkFile
>SYSCALL fclose
clc
.9 rts
*--------------------------------------
CS.RUN >PUSHW L.IOCTL
>PUSHBI IOCTL.READ
lda DevID
>SYSCALL IOCTL
bcs .8 No Frame
sta hFrameIn
ldx #0
.1 ldy hLIBs,x
beq .7
>PUSHW L.IOCTL
lda hFrameIn
phx
ldx #LIBNET.INCOMING
jsr A2osX.LIBCALL
plx
bcc .8
inx
bra .1
.7 lda hFrameIn
>SYSCALL freemem
.8 clc
rts
*--------------------------------------
CS.DOEVENT lda (pEvent)
bpl .9
ldx #0
.1 ldy hLIBs,x
beq .9
phx
ldx #LIBNET.PULSE
lda (pEvent)
jsr A2osX.LIBCALL
plx
inx
bra .1
.9 sec never discard TIME event
rts
*--------------------------------------
CS.QUIT ldx #0
.1 lda hLIBs,x
beq .7
phx
>SYSCALL UnLoadLib
plx
inx
bra .1
.7 >PUSHWI 0
>PUSHBI IOCTL.CLOSE
lda DevID
>SYSCALL IOCTL
clc
rts
*--------------------------------------
CS.END
*--------------------------------------
DEVNAME .AZ "/DEV/ETH1"
MSG.DEV.KO .AZ "NETWORKD:No Device Found, exiting."
MSG.DEV.OK .AZ "NETWORKD:Bound To Device : %s\r\n"
MSG.LIB .AZ "NETWORKD:Loading %s ...\r\n"
DevID .BS 1
LibCnt .BS 1
hLIBs .BS LIB.MAX+1 for ending 0 if MAX libs
IOCTL .BS S.IOCTL
DCB.NIC .BS S.DCB.NIC
*ETCNETWORK .AZ "${ROOT}ETC/NETWORK"
ETCNETWORK .AZ "../ETC/NETWORK"
hNetworkFile .BS 1
hLineBuf .BS 1
hFrameIn .BS 1
*--------------------------------------
.DUMMY
.OR 0
DS.START
DS.END .ED
*--------------------------------------
MAN
SAVE USR/SRC/SBIN/NETWORKD.S
ASM