A2osX/DRV/UTHERNET.DRV.S.txt

560 lines
10 KiB
Plaintext
Raw Normal View History

2017-12-22 21:24:30 +00:00
NEW
2019-05-02 09:52:32 +00:00
AUTO 3,1
2016-04-18 20:15:34 +00:00
.LIST OFF
2015-03-14 21:48:35 +00:00
.OP 65C02
.OR $2000
2018-07-23 06:28:47 +00:00
.TF DRV/UTHERNET.DRV
2015-03-14 21:48:35 +00:00
*--------------------------------------
2018-07-23 06:28:47 +00:00
.INB INC/MACROS.I
.INB INC/A2OSX.I
2018-10-02 15:52:30 +00:00
.INB INC/MLI.E.I
2018-07-23 06:28:47 +00:00
.INB INC/NIC.I
.INB INC/NIC.8900A.I
.INB INC/ETH.I
2015-03-14 21:48:35 +00:00
*--------------------------------------
2019-09-07 06:41:17 +00:00
ZPArgPtr .EQ ZPBIN
DEVSLOT0x .EQ ZPBIN+2
2015-03-14 21:48:35 +00:00
*--------------------------------------
2015-06-03 18:30:57 +00:00
* File Header (16 Bytes)
2015-03-14 21:48:35 +00:00
*--------------------------------------
CS.START cld
2015-06-03 18:30:57 +00:00
jmp Dev.Detect cld,jmp abs=DRV
.DA #$61 6502,Level 1 (65c02)
.DA #1 DRV Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length
2018-07-23 06:28:47 +00:00
.DA 0
.DA 0
.DA 0
2015-03-14 21:48:35 +00:00
*--------------------------------------
2015-06-03 18:30:57 +00:00
* Relocation Table
*--------------------------------------
L.MSG.DETECT .DA MSG.DETECT
L.MSG.DETECT.OK .DA MSG.DETECT.OK
L.MSG.DETECT.KO .DA MSG.DETECT.KO
2018-07-23 06:28:47 +00:00
L.DRV.CS.START .DA DRV.CS.START
L.FD.DEV .DA FD.DEV
L.FD.DEV.NAME .DA FD.DEV.NAME
L.SSCANF.MAC .DA SSCANF.MAC
L.MAC0 .DA DCB+S.DCB.NIC.MAC
L.MAC1 .DA DCB+S.DCB.NIC.MAC+1
L.MAC2 .DA DCB+S.DCB.NIC.MAC+2
L.MAC3 .DA DCB+S.DCB.NIC.MAC+3
L.MAC4 .DA DCB+S.DCB.NIC.MAC+4
L.MAC5 .DA DCB+S.DCB.NIC.MAC+5
2015-06-03 18:30:57 +00:00
.DA 0 End Of Reloc Table
*--------------------------------------
2016-08-17 06:25:58 +00:00
Dev.Detect >STYA ARGS
2018-07-23 06:28:47 +00:00
2015-06-03 18:30:57 +00:00
>LDYA L.MSG.DETECT
2018-08-23 15:16:20 +00:00
>SYSCALL puts
2015-06-03 18:30:57 +00:00
ldx #$70
ldy #7
2019-01-04 13:17:31 +00:00
.1 lda A2osX.S,y IO based detection, avoid scanning in Disk Controller IO!!!!
bne .2
lda /PP.ID
sta PacketPagePTR+1,x
lda #PP.ID
sta PacketPagePTR,x
lda PacketPageDATA+1,x
2015-03-14 21:48:35 +00:00
cmp /DEVID
bne .2
lda PacketPageDATA,x
cmp #DEVID
2015-03-14 21:48:35 +00:00
beq .3
2015-06-03 18:30:57 +00:00
2018-07-23 06:28:47 +00:00
.2 dec FD.DEV.NAME+3
2015-03-14 21:48:35 +00:00
txa
sec
sbc #$10
2015-03-14 21:48:35 +00:00
tax
dey
2015-03-14 21:48:35 +00:00
bne .1
2015-06-03 18:30:57 +00:00
>LDYA L.MSG.DETECT.KO
2018-08-22 15:23:27 +00:00
>SYSCALL puts
lda #MLI.E.NODEV
2015-03-14 21:48:35 +00:00
sec
2019-07-28 20:39:30 +00:00
.99 rts
2015-06-03 18:30:57 +00:00
2016-01-10 22:16:07 +00:00
.3 stx DEVSLOTx0
2019-07-28 20:39:30 +00:00
sty DEVSLOT0x
2016-01-10 22:16:07 +00:00
lda /PP.REVISION Get Revision# of ths chip...
sta PacketPagePTR+1,x
lda #PP.REVISION
sta PacketPagePTR,x
lda PacketPageDATA+1,x
2018-07-23 06:28:47 +00:00
sta DIB+S.DIB.VERSION+1 set Hardware version
lda PacketPageDATA,x
2018-07-23 06:28:47 +00:00
sta DIB+S.DIB.VERSION
jsr Dev.ParseArgs
2019-07-28 20:39:30 +00:00
bcs .99
2018-07-23 06:28:47 +00:00
.8 >PUSHW L.FD.DEV.NAME
2018-08-22 15:23:27 +00:00
>PUSHBI 2
2018-07-23 06:28:47 +00:00
>LDYA L.MSG.DETECT.OK
2018-08-22 15:23:27 +00:00
>SYSCALL printf
2018-07-23 06:28:47 +00:00
>PUSHWI DRV.END
2019-07-22 06:31:01 +00:00
>PUSHWI DRV.CS.END-DRV.CS.START
2018-07-23 06:28:47 +00:00
>PUSHWI DRV.CS.START
>LDYA L.DRV.CS.START
>SYSCALL InsDrv
bcs .9
>STYA FD.DEV+S.FD.DEV.DRVPTR
2018-12-11 16:41:25 +00:00
>PUSHW L.FD.DEV.NAME
2018-07-23 06:28:47 +00:00
>LDYA L.FD.DEV
>SYSCALL MKDEV
2019-07-28 20:39:30 +00:00
bcs .9
2019-07-28 20:39:30 +00:00
ldx DEVSLOT0x
lda #A2osX.S.NIC
sta A2osX.S,x
* clc
2018-07-23 06:28:47 +00:00
.9 rts
*--------------------------------------
Dev.ParseArgs >LDYA ARGS
>STYA ZPArgPTR
lda (ZPArgPTR)
bne .1
2016-08-17 06:25:58 +00:00
2016-04-18 20:15:34 +00:00
lda A2osX.RANDOM16
eor A2osX.TIMER16
2018-07-23 06:28:47 +00:00
sta DCB+S.DCB.NIC.MAC+3
2016-04-18 20:15:34 +00:00
eor A2osX.RANDOM16+1
2018-07-23 06:28:47 +00:00
sta DCB+S.DCB.NIC.MAC+4
2016-04-18 20:15:34 +00:00
eor A2osX.TIMER16+1
2018-07-23 06:28:47 +00:00
sta DCB+S.DCB.NIC.MAC+5
clc
rts
2015-06-03 18:30:57 +00:00
2018-07-23 06:28:47 +00:00
.1 >PUSHW L.MAC5
>PUSHW L.MAC4
>PUSHW L.MAC3
>PUSHW L.MAC2
>PUSHW L.MAC1
>PUSHW L.MAC0
>PUSHBI 12 6 x byte PTRs
>PUSHW L.SSCANF.MAC
>LDYA ZPArgPtr
>SYSCALL sscanf
2016-04-18 20:15:34 +00:00
bcc .8
2018-07-23 06:28:47 +00:00
2018-10-21 20:54:07 +00:00
lda #E.SYN
2015-03-14 21:48:35 +00:00
sec
2018-07-23 06:28:47 +00:00
.8 rts
2015-06-03 18:30:57 +00:00
*--------------------------------------
CS.END
2018-07-23 06:28:47 +00:00
ARGS .BS 2
2018-08-22 15:23:27 +00:00
MSG.DETECT .AZ "UtherNet/CS8900A Driver."
MSG.DETECT.OK .AZ "UtherNet/CS8900A Installed As Device : %s\r\n"
2018-08-22 15:23:27 +00:00
MSG.DETECT.KO .AZ "Hardware Not Found."
2018-07-23 06:28:47 +00:00
SSCANF.MAC .AZ "%h:%h:%h:%h:%h:%h"
2015-06-03 18:30:57 +00:00
*--------------------------------------
2018-07-23 06:28:47 +00:00
FD.DEV .DA #S.FD.T.CDEV
.DA #0 HANDLER
.DA #0 BUSID
.DA #0 DEVID
.DA 0 BUSPTR
.BS 2 DRVPTR
2018-12-13 16:39:24 +00:00
.DA 0 DCBPTR
2018-12-11 16:41:25 +00:00
.DA 0 BUFPTR
FD.DEV.NAME .AZ "ETH7"
2015-06-03 18:30:57 +00:00
*--------------------------------------
* Driver Code
*--------------------------------------
2018-07-23 06:28:47 +00:00
ZPIOCTL .EQ ZPDRV
ZPBufPtr .EQ ZPDRV+2
2018-08-08 15:13:37 +00:00
Counter .EQ ZPDRV+4
2018-07-23 06:28:47 +00:00
*--------------------------------------
DRV.CS.START cld
jmp (.1,x)
.1 .DA STATUS
.DA A2osX.BADCALL
.DA A2osX.BADCALL
.DA A2osX.BADCALL
2018-08-27 05:39:42 +00:00
.DA A2osX.BADCALL
2018-07-23 06:28:47 +00:00
.DA A2osX.BADCALL
2017-01-12 17:43:45 +00:00
.DA OPEN
2015-06-03 18:30:57 +00:00
.DA CLOSE
2018-07-23 06:28:47 +00:00
.DA READ
.DA WRITE
2015-06-03 18:30:57 +00:00
.DA 0 end or relocation
*--------------------------------------
2018-07-23 06:28:47 +00:00
STATUS >STYA ZPIOCTL
ldy #S.IOCTL.STATCODE
lda (ZPIOCTL),y
beq .1
cmp #S.IOCTL.STATCODE.GETDIB
bne STATUS.DCB
ldx #S.DIB-1
.HS 2C bit abs
.1 ldx #3
ldy #S.IOCTL.BUFPTR
lda (ZPIOCTL),y
sta .3+1
iny
lda (ZPIOCTL),y
sta .3+2
.2 lda DIB,x
.3 sta $ffff,x SELF MODIFIED
dex
bpl .2
clc
rts
2015-03-14 21:48:35 +00:00
2018-07-23 06:28:47 +00:00
STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB
bne STATUS.9
2018-08-27 05:39:42 +00:00
2018-07-23 06:28:47 +00:00
stz DCB+S.DCB.NIC.LINK
2017-01-12 17:43:45 +00:00
ldx DEVSLOTx0
lda /PP.LineST
sta PacketPagePTR+1,x
lda #PP.LineST
sta PacketPagePTR,x
lda PacketPageDATA+1,x
lda PacketPageDATA,x
2017-01-12 17:43:45 +00:00
and #PP.LineST.LinkOK
beq .1
2018-07-23 06:28:47 +00:00
lda #S.DCB.NIC.LINK.OK
tsb DCB+S.DCB.NIC.LINK
2017-01-12 17:43:45 +00:00
2018-07-23 06:28:47 +00:00
lda /PP.TestCTL
sta PacketPagePTR+1,x
lda #PP.TestCTL
sta PacketPagePTR,x
lda PacketPageDATA+1,x
ldy PacketPageDATA,x
2017-01-12 17:43:45 +00:00
and /PP.TestCTL.FDX
2018-07-23 06:28:47 +00:00
beq .1
lda #S.DCB.NIC.LINK.FD
tsb DCB+S.DCB.NIC.LINK
.1 ldy #S.IOCTL.BUFPTR
lda (ZPIOCTL),y
sta .3+1
iny
lda (ZPIOCTL),y
sta .3+2
ldx #S.DCB.NIC-1
.2 lda DCB,x
.3 sta $ffff,x SELF MODIFIED
dex
bpl .2
clc
rts
STATUS.9 lda #MLI.E.BADCTL
sec
rts
*--------------------------------------
2019-02-23 22:01:58 +00:00
OPEN lda #S.DIB.S.OPENED
bit DIB+S.DIB.S
bne .9
jsr CLOSE
2018-07-23 06:28:47 +00:00
2018-08-27 05:39:42 +00:00
* ldx DEVSLOTx0 Done by CLOSE
2018-07-23 06:28:47 +00:00
lda /PP.RxCTL
sta PacketPagePTR+1,x
lda #PP.RxCTL
sta PacketPagePTR,x
lda /PP.RxCTL.LID+PP.RxCTL.RxOKA+PP.RxCTL.IA+PP.RxCTL.BroadcastA+PP.RxCTL.RuntA
sta PacketPageDATA+1,x
lda #PP.RxCTL.LID+PP.RxCTL.RxOKA+PP.RxCTL.IA+PP.RxCTL.BroadcastA+PP.RxCTL.RuntA
sta PacketPageDATA,x
lda /PP.MAC
sta PacketPagePTR+1,x
lda #PP.MAC
sta PacketPagePTR,x
>LDYA DCB+S.DCB.NIC.MAC
>STYA PacketPageDATA,x
>LDYAI PP.MAC+2
>STYA PacketPagePTR,x
>LDYA DCB+S.DCB.NIC.MAC+2
>STYA PacketPageDATA,x
>LDYAI PP.MAC+4
>STYA PacketPagePTR,x
>LDYA DCB+S.DCB.NIC.MAC+4
>STYA PacketPageDATA,x
lda /PP.LineCTL
sta PacketPagePTR+1,x
lda #PP.LineCTL
sta PacketPagePTR,x
lda /PP.LineCTL.LID+PP.LineCTL.SerRxOn+PP.LineCTL.SerTxOn+PP.LineCTL.10BaseT
sta PacketPageDATA+1,x
lda #PP.LineCTL.LID+PP.LineCTL.SerRxOn+PP.LineCTL.SerTxOn+PP.LineCTL.10BaseT
sta PacketPageDATA,x
lda #S.DIB.S.OPENED
tsb DIB+S.DIB.S
clc
rts
2019-02-23 22:01:58 +00:00
.9 lda #MLI.E.OPEN
sec
rts
2018-07-23 06:28:47 +00:00
*--------------------------------------
CLOSE ldx DEVSLOTx0
lda /PP.SelfCTL
sta PacketPagePTR+1,x
lda #PP.SelfCTL
sta PacketPagePTR,x
lda /PP.SelfCTL.LID+PP.SelfCTL.RESET
sta PacketPageDATA+1,x
lda #PP.SelfCTL.LID+PP.SelfCTL.RESET
sta PacketPageDATA,x
2018-07-23 06:28:47 +00:00
lda /PP.SelfST
sta PacketPagePTR+1,x
lda #PP.SelfST
sta PacketPagePTR,x
ldy #0
.1 lda PacketPageDATA+1,x
lda PacketPageDATA,x
and #PP.SelfST.InitDone
bne .8
iny
bne .1
.8 lda #S.DIB.S.OPENED
trb DIB+S.DIB.S
2015-03-14 21:48:35 +00:00
2015-06-03 18:30:57 +00:00
clc
2015-03-14 21:48:35 +00:00
rts
*--------------------------------------
2018-08-25 11:23:59 +00:00
READ php
sei
2016-03-13 22:07:01 +00:00
2018-08-25 11:23:59 +00:00
>STYA ZPIOCTL
ldx DEVSLOTx0
2017-01-26 21:57:35 +00:00
2019-06-21 06:33:46 +00:00
lda /PP.RxEvent
sta PacketPagePTR+1,x
2019-06-21 06:33:46 +00:00
lda #PP.RxEvent
sta PacketPagePTR,x
lda PacketPageDATA+1,x
ldy PacketPageDATA,x
and /PP.RxEvent.RxOK+PP.RxEvent.IA+PP.RxEvent.Brdcast+PP.RxEvent.Runt
2019-06-20 06:39:28 +00:00
beq READWRITE.9
2017-01-26 21:57:35 +00:00
2019-06-21 06:33:46 +00:00
lda RTDATA+1,x discard RxStatus
lda RTDATA,x
2016-03-13 22:07:01 +00:00
2019-06-21 06:33:46 +00:00
lda RTDATA+1,x get RxLength
2018-08-08 15:13:37 +00:00
ldy #S.IOCTL.BYTECNT+1
sta (ZPIOCTL),y
pha
2019-05-20 15:42:20 +00:00
lsr
2019-05-20 19:10:35 +00:00
pha
2018-08-08 15:13:37 +00:00
2019-06-21 06:33:46 +00:00
lda RTDATA,x
2018-08-08 15:13:37 +00:00
dey
sta (ZPIOCTL),y
tay
2019-05-20 15:42:20 +00:00
ror
adc #0
2019-05-20 19:10:35 +00:00
eor #$ff
2018-08-08 15:13:37 +00:00
sta Counter
2019-05-20 19:10:35 +00:00
pla
adc #0
2019-05-20 15:42:20 +00:00
eor #$ff
sta Counter+1
2018-08-08 15:13:37 +00:00
pla
2019-05-12 20:45:11 +00:00
>SYSCALL2 getmem
2019-06-21 06:33:46 +00:00
bcs READWRITE.99
2018-07-23 06:28:47 +00:00
>STYA ZPBufPtr
2019-01-05 20:33:08 +00:00
phx
2017-01-29 21:47:19 +00:00
2018-08-08 15:13:37 +00:00
phy
ldy #S.IOCTL.BUFPTR+1
2018-07-24 06:24:23 +00:00
sta (ZPIOCTL),y
2018-08-08 15:13:37 +00:00
dey
pla
2018-07-24 06:24:23 +00:00
sta (ZPIOCTL),y
2015-06-03 18:30:57 +00:00
2016-03-13 22:07:01 +00:00
ldx DEVSLOTx0
2018-08-08 15:13:37 +00:00
ldy #0
.2 inc Counter
bne .3
2016-04-07 06:13:41 +00:00
inc Counter+1
2016-03-13 22:07:01 +00:00
beq .8
2016-04-07 06:13:41 +00:00
2019-06-21 06:33:46 +00:00
.3 lda RTDATA,x
2018-07-23 06:28:47 +00:00
sta (ZPBufPtr),y
2015-03-14 21:48:35 +00:00
iny
2019-05-20 12:49:48 +00:00
2019-06-21 06:33:46 +00:00
lda RTDATA+1,x
2018-07-23 06:28:47 +00:00
sta (ZPBufPtr),y
2015-03-14 21:48:35 +00:00
iny
bne .2
2018-07-23 06:28:47 +00:00
inc ZPBufPtr+1
2019-05-20 15:42:20 +00:00
bra .2
2016-03-13 22:07:01 +00:00
2019-01-05 20:33:08 +00:00
.8 pla hMem
2018-07-23 06:28:47 +00:00
plp
2017-01-26 21:57:35 +00:00
clc
2019-06-21 06:33:46 +00:00
rts
*--------------------------------------
2019-06-20 06:39:28 +00:00
READWRITE.9 lda #E.NODATA
2019-06-21 06:33:46 +00:00
READWRITE.99 plp
2019-06-20 06:39:28 +00:00
sec
2019-06-21 06:33:46 +00:00
rts
2015-06-03 18:30:57 +00:00
*--------------------------------------
2018-08-25 11:23:59 +00:00
WRITE php
2018-07-23 06:28:47 +00:00
sei
2018-08-25 11:23:59 +00:00
>STYA ZPIOCTL
2015-03-14 21:48:35 +00:00
ldx DEVSLOTx0
2019-06-18 06:43:58 +00:00
lda /PP.TxCMD.LID+PP.TxCMD.TxStartFULL
sta TxCMD+1,x
lda #PP.TxCMD.LID+PP.TxCMD.TxStartFULL
sta TxCMD,x
2018-07-23 06:28:47 +00:00
ldy #S.IOCTL.BYTECNT+1
lda (ZPIOCTL),y
sta TxLength+1,x
2019-06-18 12:21:25 +00:00
lsr
pha
2018-07-23 06:28:47 +00:00
dey
lda (ZPIOCTL),y
sta TxLength,x
2019-06-18 12:21:25 +00:00
ror
adc #0
eor #$ff
sta Counter
2019-06-18 12:21:25 +00:00
pla
adc #0
eor #$ff
sta Counter+1
lda /PP.BusST
sta PacketPagePTR+1,x
lda #PP.BusST
sta PacketPagePTR,x
2019-06-18 12:21:25 +00:00
lda PacketPageDATA+1,x
ldy PacketPageDATA,x
2019-07-07 20:48:57 +00:00
bit /PP.BusST.Rdy4TxNOW
2019-06-20 06:39:28 +00:00
beq READWRITE.9
2019-06-18 12:21:25 +00:00
ldy #S.IOCTL.BUFPTR
2018-08-25 11:23:59 +00:00
lda (ZPIOCTL),y
sta ZPBufPtr
iny
lda (ZPIOCTL),y
sta ZPBufPtr+1
ldx #5
ldy #S.ETH.SRCMAC+5
.10 lda DCB+S.DCB.NIC.MAC,x
sta (ZPBufPtr),y
dey
dex
bpl .10
ldx DEVSLOTx0
ldy #0
2016-03-13 22:07:01 +00:00
2016-04-07 06:13:41 +00:00
.1 inc Counter
bne .2
2016-04-07 06:13:41 +00:00
inc Counter+1
2016-03-13 22:07:01 +00:00
beq .8
2016-04-07 06:13:41 +00:00
2018-07-23 06:28:47 +00:00
.2 lda (ZPBufPtr),y
2015-03-14 21:48:35 +00:00
sta RTDATA,x
iny
bne .3
2018-07-23 06:28:47 +00:00
inc ZPBufPtr+1
2016-03-13 22:07:01 +00:00
2019-06-18 12:21:25 +00:00
.3 lda (ZPBufPtr),y
2015-03-14 21:48:35 +00:00
sta RTDATA+1,x
iny
2016-03-13 22:07:01 +00:00
bne .1
2018-07-23 06:28:47 +00:00
inc ZPBufPtr+1
2015-03-14 21:48:35 +00:00
bne .1
2016-03-13 22:07:01 +00:00
.8 plp
clc
2019-06-21 06:33:46 +00:00
rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
2017-01-26 21:57:35 +00:00
DRV.CS.END
2015-03-14 21:48:35 +00:00
DEVSLOTx0 .BS 1
*--------------------------------------
2018-07-23 06:28:47 +00:00
DIB .DA #0
.DA #0,#0,#0 size
>PSTR "Uthernet/CS8900A"
2018-07-23 06:28:47 +00:00
.DA #S.DIB.T.NIC
.BS 1 Subtype
.BS 2 Version
*--------------------------------------
2018-07-23 06:28:47 +00:00
DCB .DA #S.DCB.T.NIC
.BS 1 FLAGS
.BS 1 LINK
2018-08-27 05:39:42 +00:00
.DA #S.DCB.NIC.SPEED.10
2018-07-23 06:28:47 +00:00
.HS 000E3A123456 MAC
2018-08-25 11:23:59 +00:00
.BS 12 IP/MASK/GW
2018-07-23 06:28:47 +00:00
*--------------------------------------
DRV.END
2015-03-14 21:48:35 +00:00
MAN
2018-12-11 16:41:25 +00:00
SAVE USR/SRC/DRV/UTHERNET.DRV.S
2015-03-14 21:48:35 +00:00
ASM