UTHERNE drivers! optimisation

This commit is contained in:
Rémy GIBERT 2016-04-07 08:13:41 +02:00
parent e1a8061997
commit 64cf656ba5
2 changed files with 93 additions and 86 deletions

View File

@ -195,12 +195,12 @@ DEV.HEADER.NAME >PSTRING "ETH1" NAME
*-------------------------------------- *--------------------------------------
DRV.CS.START .DA OPEN DRV.CS.START .DA OPEN
.DA GETEVENT .DA GETEVENT
.DA $FFFF no COUT .DA COUT
.DA CLOSE .DA CLOSE
.DA GETINFO .DA GETINFO
.DA $FFFF no IRQ .DA IRQ
.DA SEND .DA SEND
.DA $FFFF no SETIPCFG .DA SETIPCFG
L.DEVINFO .DA DEVINFO L.DEVINFO .DA DEVINFO
.DA 0 end or relocation .DA 0 end or relocation
*-------------------------------------- *--------------------------------------
@ -238,7 +238,11 @@ GETEVENT ldx DEVSLOTx0
and /PP.RxEvent.RxOK+PP.RxEvent.Brdcast+PP.RxEvent.IA and /PP.RxEvent.RxOK+PP.RxEvent.Brdcast+PP.RxEvent.IA
bne GETEVENT.RxOK bne GETEVENT.RxOK
lda #ERR.DEV.NOFRAME lda #ERR.DEV.NOFRAME
sec
COUT
IRQ
SETIPCFG
GETEVENT.Err sec
rts rts
GETEVENT.RxOK and /PP.RxEvent.Brdcast GETEVENT.RxOK and /PP.RxEvent.Brdcast
@ -249,10 +253,10 @@ GETEVENT.RxOK and /PP.RxEvent.Brdcast
>LDYA RTDATA,x discard RxStatus >LDYA RTDATA,x discard RxStatus
lda RTDATA+1,x get RxLength lda RTDATA+1,x get RxLength
sta FRAMELEN+1 sta Size+1
pha pha
lda RTDATA,x lda RTDATA,x
sta FRAMELEN sta Size
clc clc
adc #2 adc #2
tay tay
@ -260,10 +264,10 @@ GETEVENT.RxOK and /PP.RxEvent.Brdcast
bcc .11 bcc .11
inc inc
.11 >PUSHYA FRAMLEN+2 .11 >PUSHYA Size+2
>PUSHBI 0 >PUSHBI 0
>SYSCALL SYS.GetMem >SYSCALL SYS.GetMem
bcs .99 bcs GETEVENT.Err
>STYA ZPTmpPTR >STYA ZPTmpPTR
txa txa
ldy #S.EVT.DATALO ldy #S.EVT.DATALO
@ -272,27 +276,37 @@ GETEVENT.RxOK and /PP.RxEvent.Brdcast
lda #S.EVT.F.NET+S.EVT.F.hMEM1 lda #S.EVT.F.NET+S.EVT.F.hMEM1
sta (pEvent) sta (pEvent)
lda FRAMELEN lda Size
sta (ZPTmpPTR) sta (ZPTmpPTR)
eor #$ff
sta Counter
ldy #1 ldy #1
lda FRAMELEN+1 lda Size+1
sta (ZPTmpPTR),y sta (ZPTmpPTR),y
eor #$ff
sta Counter+1
iny iny
ldx DEVSLOTx0 ldx DEVSLOTx0
.1 jsr DecFrameLen .1 inc Counter
bne .12
inc Counter+1
beq .8 beq .8
lda RTDATA,x
.12 lda RTDATA,x
sta (ZPTmpPTR),y sta (ZPTmpPTR),y
iny iny
bne .2 bne .2
inc ZPTmpPTR+1 inc ZPTmpPTR+1
.2 jsr DecFrameLen .2 inc Counter
bne .21
inc Counter+1
beq .8 beq .8
lda RTDATA+1,x
.21 lda RTDATA+1,x
sta (ZPTmpPTR),y sta (ZPTmpPTR),y
iny iny
bne .1 bne .1
@ -301,9 +315,6 @@ GETEVENT.RxOK and /PP.RxEvent.Brdcast
.8 clc .8 clc
rts rts
.99 sec
rts
*-------------------------------------- *--------------------------------------
CLOSE jsr Reset CLOSE jsr Reset
clc clc
@ -339,10 +350,14 @@ GETINFO lda #S.DEVINFO.NET.STATUS.10
SEND >PULLW ZPTmpPTR SEND >PULLW ZPTmpPTR
lda (ZPTmpPTR) lda (ZPTmpPTR)
sta FRAMELEN sta Size
eor #$ff
sta Counter
ldy #1 ldy #1
lda (ZPTmpPTR),y lda (ZPTmpPTR),y
sta FRAMELEN+1 sta Size+1
eor #$ff
sta Counter+1
ldy #S.ETH.SRCMAC+5 ldy #S.ETH.SRCMAC+5
ldx #5 ldx #5
@ -355,7 +370,7 @@ SEND >PULLW ZPTmpPTR
ldx DEVSLOTx0 ldx DEVSLOTx0
>LDYAI PP.TxCMD.LID+PP.TxCMD.TxStartFULL >LDYAI PP.TxCMD.LID+PP.TxCMD.TxStartFULL
>STYA TxCMD,x >STYA TxCMD,x
>LDYA FRAMELEN >LDYA Size
>STYA TxLength,x >STYA TxLength,x
>LDYAI PP.BusST >LDYAI PP.BusST
>STYA PacketPagePTR,x >STYA PacketPagePTR,x
@ -375,27 +390,29 @@ SEND >PULLW ZPTmpPTR
dey dey
bne .1 bne .1
lda #ERR.DEV.TIMEOUT
sec
rts
.9 lda #ERR.DEV.NOBUFFER .9 lda #ERR.DEV.NOBUFFER
sec sec
rts rts
SENDPREADY ldy #2 SENDPREADY ldy #2
.1 jsr DecFrameLen .1 inc Counter
bne .11
inc Counter+1
beq .8 beq .8
lda (ZPTmpPTR),y
.11 lda (ZPTmpPTR),y
sta RTDATA,x sta RTDATA,x
iny iny
bne .2 bne .2
inc ZPTmpPTR+1 inc ZPTmpPTR+1
.2 jsr DecFrameLen .2 inc Counter
bne .21
inc Counter+1
beq .8 beq .8
.3 lda (ZPTmpPTR),y
.21 lda (ZPTmpPTR),y
sta RTDATA+1,x sta RTDATA+1,x
iny iny
bne .1 bne .1
@ -412,19 +429,11 @@ Reset ldx DEVSLOTx0
>STYA PacketPageDATA,x >STYA PacketPageDATA,x
rts rts
*-------------------------------------- *--------------------------------------
DecFrameLen lda FRAMELEN
bne .1
lda FRAMELEN+1
beq .8
dec FRAMELEN+1
.1 dec FRAMELEN
lda #1 Make something NZ
.8 rts
*--------------------------------------
DRV.CS.END DRV.CS.END
*-------------------------------------- *--------------------------------------
DEVSLOTx0 .BS 1 DEVSLOTx0 .BS 1
FRAMELEN .BS 2 Size .BS 2
Counter .BS 2
*-------------------------------------- *--------------------------------------
DEVINFO .DA #S.DEVINFO.TYPE.NET DEVINFO .DA #S.DEVINFO.TYPE.NET
DEVFLAGS .DA #0 DEVFLAGS .DA #0

View File

@ -23,13 +23,13 @@ ZPTmpPTR .EQ ZPDRV
*-------------------------------------- *--------------------------------------
* WIZnet W5100 IO Registers * WIZnet W5100 IO Registers
*-------------------------------------- *--------------------------------------
W5100.MR .EQ $C084 Mode Register W5100.MR .EQ $C084-$88 Mode Register
W5100.MR.RST .EQ %10000000 W5100.MR.RST .EQ %10000000
W5100.MR.PB .EQ %00010000 W5100.MR.PB .EQ %00010000
W5100.MR.PPPOE .EQ %00001000 W5100.MR.PPPOE .EQ %00001000
W5100.MR.AI .EQ %00000010 W5100.MR.AI .EQ %00000010
W5100.MR.IND .EQ %00000001 W5100.MR.IND .EQ %00000001
W5100.AR .EQ $C085 Memory Pointer W5100.AR .EQ $C085-$88 Memory Pointer
W5100.AR.GAR .EQ $0001 W5100.AR.GAR .EQ $0001
W5100.AR.SUBR .EQ $0005 W5100.AR.SUBR .EQ $0005
W5100.AR.SHAR .EQ $0009 W5100.AR.SHAR .EQ $0009
@ -62,7 +62,7 @@ W5100.AR.S0.TX.RD .EQ $0422
W5100.AR.S0.TX.WR .EQ $0424 W5100.AR.S0.TX.WR .EQ $0424
W5100.AR.S0.RX.RSR .EQ $0426 W5100.AR.S0.RX.RSR .EQ $0426
W5100.AR.S0.RX.RD .EQ $0428 W5100.AR.S0.RX.RD .EQ $0428
W5100.DR .EQ $C087 W5100.DR .EQ $C087-$88
*-------------------------------------- *--------------------------------------
TX.BASE .EQ $4000 TX.BASE .EQ $4000
RX.BASE .EQ $6000 RX.BASE .EQ $6000
@ -92,7 +92,7 @@ Dev.Detect sta hArgs
>LDYA L.MSG.DETECT >LDYA L.MSG.DETECT
>SYSCALL SYS.PSTROutYA >SYSCALL SYS.PSTROutYA
ldx #$10 ldx #$10+$88
.1 lda #W5100.MR.RST .1 lda #W5100.MR.RST
sta W5100.MR,x sta W5100.MR,x
@ -117,7 +117,7 @@ Dev.Detect sta hArgs
clc clc
adc #$10 adc #$10
tax tax
bpl .1 #$80 ? bcc .1 #$108 ?
>LDYA L.MSG.DETECT.KO >LDYA L.MSG.DETECT.KO
>SYSCALL SYS.PSTROutYA >SYSCALL SYS.PSTROutYA
@ -126,7 +126,7 @@ Dev.Detect sta hArgs
sec sec
rts rts
.3 stx DEVSLOTx0 .3 stx DEVSLOTx8
lda hARGS lda hARGS
bne .4 bne .4
@ -184,12 +184,12 @@ DEV.HEADER.NAME >PSTRING "ETH1" NAME
*-------------------------------------- *--------------------------------------
DRV.CS.START .DA OPEN DRV.CS.START .DA OPEN
.DA GETEVENT .DA GETEVENT
.DA $FFFF no COUT .DA COUT
.DA CLOSE .DA CLOSE
.DA GETINFO .DA GETINFO
.DA $FFFF no IRQ .DA IRQ
.DA SEND .DA SEND
.DA $FFFF no SETIPCFG .DA SETIPCFG
L.DEVINFO .DA DEVINFO L.DEVINFO .DA DEVINFO
.DA 0 end or relocation .DA 0 end or relocation
*-------------------------------------- *--------------------------------------
@ -223,7 +223,7 @@ OPEN jsr Reset
clc clc
rts rts
*-------------------------------------- *--------------------------------------
GETEVENT ldx DEVSLOTx0 GETEVENT ldx DEVSLOTx8
>AR.SELECT S0.RX.RSR >AR.SELECT S0.RX.RSR
lda W5100.DR,x get the received size HI lda W5100.DR,x get the received size HI
@ -231,6 +231,9 @@ GETEVENT ldx DEVSLOTx0
bne GETEVENT.RxOK bne GETEVENT.RxOK
lda #ERR.DEV.NOFRAME lda #ERR.DEV.NOFRAME
COUT
IRQ
SETIPCFG
GETEVENT.Err sec GETEVENT.Err sec
rts rts
@ -264,36 +267,34 @@ GETEVENT.RxOK >AR.SELECT S0.RX.RD
ldy #S.EVT.DATALO ldy #S.EVT.DATALO
sta (pEvent),y sta (pEvent),y
lda #S.EVT.F.NET+S.EVT.F.hMEM1
sta (pEvent)
lda RXTX.Size lda RXTX.Size
sta (ZPTmpPTR) sta (ZPTmpPTR)
eor #$ff
sta Counter
ldy #1 ldy #1
lda RXTX.Size+1 lda RXTX.Size+1
sta (ZPTmpPTR),y sta (ZPTmpPTR),y
eor #$ff
lda #S.EVT.F.NET+S.EVT.F.hMEM1
sta (pEvent)
sec
lda #0
sbc RXTX.Size
sta Counter
lda #0
sbc RXTX.Size+1
sta Counter+1 sta Counter+1
ldx DEVSLOTx0 ldx DEVSLOTx8
ldy #2 ldy #2
.2 lda W5100.DR,x
.2 inc Counter
bne .3
inc Counter+1
beq .8
.3 lda W5100.DR,x
sta (ZPTmpPTR),y sta (ZPTmpPTR),y
iny iny
bne .3
inc ZPTmpPTR+1
.3 inc Counter
bne .2 bne .2
inc Counter+1 inc ZPTmpPTR+1
bne .2 bne .2
.8 >AR.SELECT S0.RX.RD .8 >AR.SELECT S0.RX.RD
@ -332,11 +333,16 @@ SEND >PULLW ZPTmpPTR
lda (ZPTmpPTR) lda (ZPTmpPTR)
sta RXTX.Size sta RXTX.Size
eor #$ff
sta Counter
ldy #1 ldy #1
lda (ZPTmpPTR),y lda (ZPTmpPTR),y
sta RXTX.Size+1 sta RXTX.Size+1
eor #$ff
sta Counter+1
ldx DEVSLOTx0 ldx DEVSLOTx8
>AR.SELECT S0.TX.FSR >AR.SELECT S0.TX.FSR
lda W5100.DR,x get send size HI lda W5100.DR,x get send size HI
@ -360,30 +366,22 @@ SEND.READY >AR.SELECT S0.TX.WR
sta W5100.AR+1,x Write LO sta W5100.AR+1,x Write LO
sta Offset sta Offset
sec
lda #0
sbc RXTX.Size
sta Counter
lda #0
sbc RXTX.Size+1
sta Counter+1
ldy #2 ldy #2
.2 lda (ZPTmpPTR),y .2 inc Counter
sta W5100.DR,x
iny
bne .3 bne .3
inc ZPTmpPTR+1
.3 inc Counter
bne .2
inc Counter+1 inc Counter+1
beq .8
.3 lda (ZPTmpPTR),y
sta W5100.DR,x
iny
bne .2
inc ZPTmpPTR+1
bne .2 bne .2
>AR.SELECT S0.TX.WR .8 >AR.SELECT S0.TX.WR
clc clc
lda Offset lda Offset
@ -398,19 +396,19 @@ SEND.READY >AR.SELECT S0.TX.WR
pla pla
sta W5100.DR,x write LO sta W5100.DR,x write LO
.8 >AR.SELECT S0.CR >AR.SELECT S0.CR
lda #$20 SEND lda #$20 SEND
sta W5100.DR,x sta W5100.DR,x
clc clc
rts rts
*-------------------------------------- *--------------------------------------
Reset ldx DEVSLOTx0 Reset ldx DEVSLOTx8
lda #W5100.MR.RST lda #W5100.MR.RST
sta W5100.MR,x sta W5100.MR,x
rts rts
*-------------------------------------- *--------------------------------------
DRV.CS.END DRV.CS.END
DEVSLOTx0 .BS 1 DEVSLOTx8 .BS 1
RXTX.Size .BS 2 RXTX.Size .BS 2
Counter .BS 2 Counter .BS 2
Offset .BS 2 Offset .BS 2