diff --git a/DRV/UTHERNET.DRV.S.txt b/DRV/UTHERNET.DRV.S.txt index 9168ea6c..0d9dddba 100644 --- a/DRV/UTHERNET.DRV.S.txt +++ b/DRV/UTHERNET.DRV.S.txt @@ -195,12 +195,12 @@ DEV.HEADER.NAME >PSTRING "ETH1" NAME *-------------------------------------- DRV.CS.START .DA OPEN .DA GETEVENT - .DA $FFFF no COUT + .DA COUT .DA CLOSE .DA GETINFO - .DA $FFFF no IRQ + .DA IRQ .DA SEND - .DA $FFFF no SETIPCFG + .DA SETIPCFG L.DEVINFO .DA DEVINFO .DA 0 end or relocation *-------------------------------------- @@ -238,7 +238,11 @@ GETEVENT ldx DEVSLOTx0 and /PP.RxEvent.RxOK+PP.RxEvent.Brdcast+PP.RxEvent.IA bne GETEVENT.RxOK lda #ERR.DEV.NOFRAME - sec + +COUT +IRQ +SETIPCFG +GETEVENT.Err sec rts GETEVENT.RxOK and /PP.RxEvent.Brdcast @@ -249,10 +253,10 @@ GETEVENT.RxOK and /PP.RxEvent.Brdcast >LDYA RTDATA,x discard RxStatus lda RTDATA+1,x get RxLength - sta FRAMELEN+1 + sta Size+1 pha lda RTDATA,x - sta FRAMELEN + sta Size clc adc #2 tay @@ -260,10 +264,10 @@ GETEVENT.RxOK and /PP.RxEvent.Brdcast bcc .11 inc -.11 >PUSHYA FRAMLEN+2 +.11 >PUSHYA Size+2 >PUSHBI 0 >SYSCALL SYS.GetMem - bcs .99 + bcs GETEVENT.Err >STYA ZPTmpPTR txa ldy #S.EVT.DATALO @@ -272,27 +276,37 @@ GETEVENT.RxOK and /PP.RxEvent.Brdcast lda #S.EVT.F.NET+S.EVT.F.hMEM1 sta (pEvent) - lda FRAMELEN + lda Size sta (ZPTmpPTR) + eor #$ff + sta Counter ldy #1 - lda FRAMELEN+1 + lda Size+1 sta (ZPTmpPTR),y + eor #$ff + sta Counter+1 iny ldx DEVSLOTx0 -.1 jsr DecFrameLen +.1 inc Counter + bne .12 + inc Counter+1 beq .8 - lda RTDATA,x + +.12 lda RTDATA,x sta (ZPTmpPTR),y iny bne .2 inc ZPTmpPTR+1 -.2 jsr DecFrameLen +.2 inc Counter + bne .21 + inc Counter+1 beq .8 - lda RTDATA+1,x + +.21 lda RTDATA+1,x sta (ZPTmpPTR),y iny bne .1 @@ -301,9 +315,6 @@ GETEVENT.RxOK and /PP.RxEvent.Brdcast .8 clc rts - -.99 sec - rts *-------------------------------------- CLOSE jsr Reset clc @@ -339,10 +350,14 @@ GETINFO lda #S.DEVINFO.NET.STATUS.10 SEND >PULLW ZPTmpPTR lda (ZPTmpPTR) - sta FRAMELEN + sta Size + eor #$ff + sta Counter ldy #1 lda (ZPTmpPTR),y - sta FRAMELEN+1 + sta Size+1 + eor #$ff + sta Counter+1 ldy #S.ETH.SRCMAC+5 ldx #5 @@ -355,7 +370,7 @@ SEND >PULLW ZPTmpPTR ldx DEVSLOTx0 >LDYAI PP.TxCMD.LID+PP.TxCMD.TxStartFULL >STYA TxCMD,x - >LDYA FRAMELEN + >LDYA Size >STYA TxLength,x >LDYAI PP.BusST >STYA PacketPagePTR,x @@ -375,27 +390,29 @@ SEND >PULLW ZPTmpPTR dey bne .1 - lda #ERR.DEV.TIMEOUT - sec - rts - .9 lda #ERR.DEV.NOBUFFER sec rts SENDPREADY ldy #2 -.1 jsr DecFrameLen +.1 inc Counter + bne .11 + inc Counter+1 beq .8 - lda (ZPTmpPTR),y + +.11 lda (ZPTmpPTR),y sta RTDATA,x iny bne .2 inc ZPTmpPTR+1 -.2 jsr DecFrameLen +.2 inc Counter + bne .21 + inc Counter+1 beq .8 -.3 lda (ZPTmpPTR),y + +.21 lda (ZPTmpPTR),y sta RTDATA+1,x iny bne .1 @@ -412,19 +429,11 @@ Reset ldx DEVSLOTx0 >STYA PacketPageDATA,x 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 *-------------------------------------- DEVSLOTx0 .BS 1 -FRAMELEN .BS 2 +Size .BS 2 +Counter .BS 2 *-------------------------------------- DEVINFO .DA #S.DEVINFO.TYPE.NET DEVFLAGS .DA #0 diff --git a/DRV/UTHERNET2.DRV.S.txt b/DRV/UTHERNET2.DRV.S.txt index 418a2129..1a393724 100644 --- a/DRV/UTHERNET2.DRV.S.txt +++ b/DRV/UTHERNET2.DRV.S.txt @@ -23,13 +23,13 @@ ZPTmpPTR .EQ ZPDRV *-------------------------------------- * WIZnet W5100 IO Registers *-------------------------------------- -W5100.MR .EQ $C084 Mode Register +W5100.MR .EQ $C084-$88 Mode Register W5100.MR.RST .EQ %10000000 W5100.MR.PB .EQ %00010000 W5100.MR.PPPOE .EQ %00001000 W5100.MR.AI .EQ %00000010 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.SUBR .EQ $0005 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.RX.RSR .EQ $0426 W5100.AR.S0.RX.RD .EQ $0428 -W5100.DR .EQ $C087 +W5100.DR .EQ $C087-$88 *-------------------------------------- TX.BASE .EQ $4000 RX.BASE .EQ $6000 @@ -92,7 +92,7 @@ Dev.Detect sta hArgs >LDYA L.MSG.DETECT >SYSCALL SYS.PSTROutYA - ldx #$10 + ldx #$10+$88 .1 lda #W5100.MR.RST sta W5100.MR,x @@ -117,7 +117,7 @@ Dev.Detect sta hArgs clc adc #$10 tax - bpl .1 #$80 ? + bcc .1 #$108 ? >LDYA L.MSG.DETECT.KO >SYSCALL SYS.PSTROutYA @@ -126,7 +126,7 @@ Dev.Detect sta hArgs sec rts -.3 stx DEVSLOTx0 +.3 stx DEVSLOTx8 lda hARGS bne .4 @@ -184,12 +184,12 @@ DEV.HEADER.NAME >PSTRING "ETH1" NAME *-------------------------------------- DRV.CS.START .DA OPEN .DA GETEVENT - .DA $FFFF no COUT + .DA COUT .DA CLOSE .DA GETINFO - .DA $FFFF no IRQ + .DA IRQ .DA SEND - .DA $FFFF no SETIPCFG + .DA SETIPCFG L.DEVINFO .DA DEVINFO .DA 0 end or relocation *-------------------------------------- @@ -223,7 +223,7 @@ OPEN jsr Reset clc rts *-------------------------------------- -GETEVENT ldx DEVSLOTx0 +GETEVENT ldx DEVSLOTx8 >AR.SELECT S0.RX.RSR lda W5100.DR,x get the received size HI @@ -231,6 +231,9 @@ GETEVENT ldx DEVSLOTx0 bne GETEVENT.RxOK lda #ERR.DEV.NOFRAME +COUT +IRQ +SETIPCFG GETEVENT.Err sec rts @@ -264,36 +267,34 @@ GETEVENT.RxOK >AR.SELECT S0.RX.RD ldy #S.EVT.DATALO sta (pEvent),y + lda #S.EVT.F.NET+S.EVT.F.hMEM1 + sta (pEvent) + lda RXTX.Size sta (ZPTmpPTR) + eor #$ff + sta Counter ldy #1 lda RXTX.Size+1 sta (ZPTmpPTR),y - - 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 + eor #$ff sta Counter+1 - ldx DEVSLOTx0 + ldx DEVSLOTx8 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 iny - bne .3 - inc ZPTmpPTR+1 - -.3 inc Counter bne .2 - inc Counter+1 + inc ZPTmpPTR+1 bne .2 .8 >AR.SELECT S0.RX.RD @@ -332,11 +333,16 @@ SEND >PULLW ZPTmpPTR lda (ZPTmpPTR) sta RXTX.Size + eor #$ff + sta Counter + ldy #1 lda (ZPTmpPTR),y sta RXTX.Size+1 + eor #$ff + sta Counter+1 - ldx DEVSLOTx0 + ldx DEVSLOTx8 >AR.SELECT S0.TX.FSR 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 Offset - sec - lda #0 - sbc RXTX.Size - sta Counter - - lda #0 - sbc RXTX.Size+1 - sta Counter+1 - ldy #2 -.2 lda (ZPTmpPTR),y - sta W5100.DR,x - iny +.2 inc Counter bne .3 - inc ZPTmpPTR+1 - -.3 inc Counter - bne .2 inc Counter+1 + beq .8 + +.3 lda (ZPTmpPTR),y + sta W5100.DR,x + iny + bne .2 + inc ZPTmpPTR+1 bne .2 - >AR.SELECT S0.TX.WR +.8 >AR.SELECT S0.TX.WR clc lda Offset @@ -398,19 +396,19 @@ SEND.READY >AR.SELECT S0.TX.WR pla sta W5100.DR,x write LO -.8 >AR.SELECT S0.CR + >AR.SELECT S0.CR lda #$20 SEND sta W5100.DR,x clc rts *-------------------------------------- -Reset ldx DEVSLOTx0 +Reset ldx DEVSLOTx8 lda #W5100.MR.RST sta W5100.MR,x rts *-------------------------------------- DRV.CS.END -DEVSLOTx0 .BS 1 +DEVSLOTx8 .BS 1 RXTX.Size .BS 2 Counter .BS 2 Offset .BS 2