From d6aefbe613f7006e1d4e4d4641919ea7f1c5f8a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 27 Apr 2017 22:08:12 +0200 Subject: [PATCH] Kernel version 0.9 : LAN drivers, bugfix and optimization --- A2osX.STARTUP.txt | 13 +++--- DRV/LANCEGS.DRV.S.txt | 95 ++++++++++++++++++++++------------------- DRV/UTHER2.AI.DRV.S.txt | 8 ++-- DRV/UTHERNET.DRV.S.txt | 17 ++------ DRV/UTHERNET2.DRV.S.txt | 8 ++-- SBIN/INSDRV.S.txt | 2 +- SYS/KERNEL.S.MEM.txt | 2 +- 7 files changed, 67 insertions(+), 78 deletions(-) diff --git a/A2osX.STARTUP.txt b/A2osX.STARTUP.txt index b1b9afc7..97363dd0 100644 --- a/A2osX.STARTUP.txt +++ b/A2osX.STARTUP.txt @@ -4,24 +4,23 @@ NEW INC 1 AUTO 6 ECHO *** A2osX Startup Script *** -echo Working Directory:$CD SET PS1='$PWD' # Main Screen INSDRV CONSOLE.DRV -STARTPROC GETTY CON ${A2OSX}SBIN/LOGIN # Serial Login #INSDRV SSC.DRV 9600,N,8,1,X INSDRV SSC.I.DRV 9600,N,8,1,X +STARTPROC GETTY CON ${A2OSX}SBIN/LOGIN STARTPROC GETTY COM2 ${A2OSX}SBIN/LOGIN #INSDRV PIC.DRV # Network Section INSDRV UTHERNET.DRV 000E3A123456 -INSDRV UTHERNET2.DRV 0008DC123456 +#INSDRV LANCEGS.DRV #INSDRV UTHER2.AI.DRV 0008DC123456 -INSDRV LANCEGS.DRV -STARTPROC TCPIP -STARTPROC DHCPCLNT -STARTPROC TELNETD +#INSDRV UTHERNET2.DRV 0008DC123456 +#STARTPROC TCPIP +#STARTPROC DHCPCLNT +#STARTPROC TELNETD #STARTPROC HTTPD #NFSMOUNT 192.168.1.5:/A2OSX /MNT/A2OSX #CIFSMOUNT 192.168.1.5:/MSSHARE /MNT/MSSHARE diff --git a/DRV/LANCEGS.DRV.S.txt b/DRV/LANCEGS.DRV.S.txt index 18a546a0..389df1ff 100644 --- a/DRV/LANCEGS.DRV.S.txt +++ b/DRV/LANCEGS.DRV.S.txt @@ -16,6 +16,8 @@ AUTO 6 .INB /A2OSX.BUILD/INC/LIBTCPIP.I *-------------------------------------- ZPTmpPTR .EQ ZPDRV +Size .EQ ZPDRV+2 +Counter .EQ ZPDRV+4 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -42,15 +44,9 @@ Dev.Detect >STYA Args >SYSCALL CPrintFYA ldx #$70 + ldy #7 -.1 txa IO based detection, avoid scanning in Disk Controller IO!!!! - lsr - lsr - lsr - lsr - tay - - lda A2osX.SLOTS,y +.1 lda A2osX.SLOTS,y IO based detection, avoid scanning in Disk Controller IO!!!! bne .2 lda L91C96.BSR+1,x @@ -62,6 +58,7 @@ Dev.Detect >STYA Args sec sbc #$10 tax + dey bne .1 >LDYA L.MSG.DETECT.KO @@ -72,12 +69,6 @@ Dev.Detect >STYA Args rts .3 stx DEVSLOTx0 - txa - lsr - lsr - lsr - lsr - tay lda #A2osX.SLOTS.NET sta A2osX.SLOTS,y @@ -188,12 +179,18 @@ READBLOCK.RxOK lda #L91C96.2.PTR.RCVD+L91C96.2.PTR.AUTOI+L91C96.2.PTR.READ asl if odd, CS lda L91C96.2.DATA,x get lo byte count - sbc #5 compute FRAMELEN - sta FRAMELEN + sbc #5 compute Size + sta Size + eor #$ff + sta Counter tay + lda L91C96.2.DATA,x get hi byte count sbc #0 - sta FRAMELEN+1 + sta Size+1 + eor #$ff + sta Counter+1 + eor #$ff iny bne .1 @@ -212,26 +209,33 @@ READBLOCK.RxOK lda #L91C96.2.PTR.RCVD+L91C96.2.PTR.AUTOI+L91C96.2.PTR.READ sty .8+3 sta .8+5 - lda FRAMELEN + lda Size sta (ZPTmpPTR) ldy #1 - lda FRAMELEN+1 + lda Size+1 sta (ZPTmpPTR),y iny ldx DEVSLOTx0 -.2 jsr DecFrameLen +.2 inc Counter + bne .21 + inc Counter+1 beq .4 - lda L91C96.2.DATA,x + +.21 lda L91C96.2.DATA,x sta (ZPTmpPTR),y iny bne .3 inc ZPTmpPTR+1 -.3 jsr DecFrameLen + +.3 inc Counter + bne .31 + inc Counter+1 beq .4 - lda L91C96.2.DATA,x + +.31 lda L91C96.2.DATA,x sta (ZPTmpPTR),y iny bne .2 @@ -254,7 +258,11 @@ WRITEBLOCK >STYA ZPTmpPTR sta L91C96.BSR,x lda (ZPTmpPTR) - sta FRAMELEN + sta Size + eor #$ff + sta Counter + eor #$ff + clc adc #6 3 WORDs more Status, len & Control @@ -263,7 +271,11 @@ WRITEBLOCK >STYA ZPTmpPTR .10 ldy #1 lda (ZPTmpPTR),y - sta FRAMELEN+1 + sta Size+1 + eor #$ff + sta Counter+1 + eor #$ff + adc #0 .1 ora #L91C96.2.MMUCR.ALLOC @@ -301,31 +313,35 @@ WRITEBLOCK >STYA ZPTmpPTR stz L91C96.2.DATA,x write fake status word stz L91C96.2.DATA,x - lda FRAMELEN + lda Size pha eor #$01 lsr pla adc #$05 add 5 if odd, 6 if even sta L91C96.2.DATA,x - lda FRAMELEN+1 + lda Size+1 adc #$00 sta L91C96.2.DATA,x ldy #2 -.5 jsr DecFrameLen +.5 inc Counter + bne .51 + inc Counter+1 beq .70 - lda (ZPTmpPTR),y + +.51 lda (ZPTmpPTR),y iny bne .6 inc ZPTmpPTR+1 -.6 pha - jsr DecFrameLen +.6 inc Counter + bne .61 + inc Counter+1 beq .71 - pla - sta L91C96.2.DATA,x + +.61 sta L91C96.2.DATA,x lda (ZPTmpPTR),y sta L91C96.2.DATA,x iny @@ -338,8 +354,7 @@ WRITEBLOCK >STYA ZPTmpPTR sta L91C96.2.DATA,x bra .8 -.71 pla - sta L91C96.2.DATA,x +.71 sta L91C96.2.DATA,x lda #%00100000 signal an extra (odd) byte sta L91C96.2.DATA,x @@ -421,19 +436,9 @@ CLOSE ldx DEVSLOTx0 clc 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 USERMAC .BS 1 -FRAMELEN .BS 2 *-------------------------------------- DEVSTAT .DA #0 .BS 3 size diff --git a/DRV/UTHER2.AI.DRV.S.txt b/DRV/UTHER2.AI.DRV.S.txt index fb2c48b5..047dec52 100644 --- a/DRV/UTHER2.AI.DRV.S.txt +++ b/DRV/UTHER2.AI.DRV.S.txt @@ -182,14 +182,15 @@ READBLOCK.RTS rts READBLOCK.RxOK >AR.SELECT S0.RX.RD lda W5100.DR,x get the received ptr HI + sta offset+1 ldy W5100.DR,x get the received ptr LO + sty offset + and /RXTX.MASK ora /RX.BASE sta W5100.AR,x - sta offset+1 tya sta W5100.AR+1,x - sta offset ldy #0 @@ -278,9 +279,6 @@ READBLOCK.RxOK >AR.SELECT S0.RX.RD lda Offset+1 adc RXTX.Size+1 - and /RXTX.MASK - ora /RX.BASE - sta W5100.DR,x write HI pla sta W5100.DR,x write LO diff --git a/DRV/UTHERNET.DRV.S.txt b/DRV/UTHERNET.DRV.S.txt index c9b40d33..cddf7652 100644 --- a/DRV/UTHERNET.DRV.S.txt +++ b/DRV/UTHERNET.DRV.S.txt @@ -44,15 +44,9 @@ Dev.Detect >STYA ARGS >SYSCALL CPrintFYA ldx #$70 + ldy #7 -.1 txa IO based detection, avoid scanning in Disk Controller IO!!!! - lsr - lsr - lsr - lsr - tay - - lda A2osX.SLOTS,y +.1 lda A2osX.SLOTS,y IO based detection, avoid scanning in Disk Controller IO!!!! bne .2 lda /PP.ID @@ -73,6 +67,7 @@ Dev.Detect >STYA ARGS sec sbc #$10 tax + dey bne .1 >LDYA L.MSG.DETECT.KO @@ -83,12 +78,6 @@ Dev.Detect >STYA ARGS rts .3 stx DEVSLOTx0 - txa - lsr - lsr - lsr - lsr - tay lda #A2osX.SLOTS.NET sta A2osX.SLOTS,y diff --git a/DRV/UTHERNET2.DRV.S.txt b/DRV/UTHERNET2.DRV.S.txt index 29316a3e..c3d88cba 100644 --- a/DRV/UTHERNET2.DRV.S.txt +++ b/DRV/UTHERNET2.DRV.S.txt @@ -181,14 +181,15 @@ READBLOCK ldx DEVSLOTx0 READBLOCK.RxOK >AR.SELECT S0.RX.RD lda W5100.DR,x get the received ptr HI + sta offset+1 ldy W5100.DR,x get the received ptr LO + sty offset + and /RXTX.MASK ora /RX.BASE sta W5100.AR,x - sta offset+1 tya sta W5100.AR+1,x - sta offset lda W5100.DR,x get RX.Size HI sta RXTX.Size+1 @@ -247,9 +248,6 @@ READBLOCK.RxOK >AR.SELECT S0.RX.RD lda Offset+1 adc RXTX.Size+1 - and /RXTX.MASK - ora /RX.BASE - sta W5100.DR,x write HI pla sta W5100.DR,x write LO diff --git a/SBIN/INSDRV.S.txt b/SBIN/INSDRV.S.txt index 09eab6aa..92dd39a2 100644 --- a/SBIN/INSDRV.S.txt +++ b/SBIN/INSDRV.S.txt @@ -57,7 +57,7 @@ CS.INIT >SYSCALL GetArgC lda #1 get PTR to ARG[1] (Driver name) >SYSCALL GetArgA - >SYSCALL LoadDrvYA YA = PTR to ARG[1...n] + >SYSCALL LoadDrvYA YA = PTR to ARG[1...n] bcs .99 lda #0 success, but.... diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index 27314818..94614732 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -52,7 +52,7 @@ K.GetMem >PULLB MemMgr.ReqFlags store requested flags bcc .10 inx -.10 >STAX MemMgr.ReqSize +.10 >STAX MemMgr.ReqSize >LDYAI MemMgr.Table >STYA ZPMemMgrSPtr