From 919b6919a52ef8748a66881ca4d4b0669f5b071d Mon Sep 17 00:00:00 2001
From: Oliver Schmidt
Date: Sat, 12 Jul 2014 11:27:52 +0200
Subject: [PATCH] Fixed hardware detection.
The previous chip detection was inspired by the old IP65 driver code. For some reason it didn't work as expected. The new code is simpler and based on this statement in the chip datasheet: "The upper byte always reads as 33h and can be used to help determine the I/O location of the LAN91C96."
---
cpu/6502/net/lan91c96.S | 37 ++++++++++++++++++-------------------
1 file changed, 18 insertions(+), 19 deletions(-)
diff --git a/cpu/6502/net/lan91c96.S b/cpu/6502/net/lan91c96.S
index 52a43f9f7..0bfb4e35b 100644
--- a/cpu/6502/net/lan91c96.S
+++ b/cpu/6502/net/lan91c96.S
@@ -67,7 +67,7 @@ len: .res 2 ; Frame length
.else
.include "zeropage.inc"
-reg := ptr1 ; Address of register base
+reg := ptr1 ; Address of register base
ptr := ptr2 ; Indirect addressing pointer
len := ptr3 ; Frame length
@@ -168,16 +168,24 @@ init:
inc ptr+1
bcs :- ; Always
+ ; Check bank select register upper byte to always read as $33
+: ldy #$00
+fixup01:sty ethbsr+1
+fixup02:lda ethbsr+1
+ cmp #$33
+ beq :+
+ sec
+ rts
+
; Reset ETH card
-: lda #$00 ; Bank 0
-fixup01:sta ethbsr
+: ; Bank 0
+fixup03:sty ethbsr
lda #%10000000 ; Software reset
-fixup02:sta ethrcr+1
+fixup04:sta ethrcr+1
- ldy #$00
-fixup03:sty ethrcr
-fixup04:sty ethrcr+1
+fixup05:sty ethrcr
+fixup06:sty ethrcr+1
; Delay
: cmp ($FF,x) ; 6 cycles
@@ -189,21 +197,12 @@ fixup04:sty ethrcr+1
; Enable transmit and receive
lda #%10000001 ; Enable transmit TXENA, PAD_EN
ldx #%00000011 ; Enable receive, strip CRC ???
-fixup05:sta ethtcr
-fixup06:stx ethrcr+1
+fixup07:sta ethtcr
+fixup08:stx ethrcr+1
lda #$01 ; Bank 1
-fixup07:sta ethbsr
+fixup09:sta ethbsr
- ; Check ISA mode base address register for reset values
- lda #$18^67 ; I/O base $300 + ROM $CC000
-fixup08:eor ethbar
-fixup09:eor ethbar+1
- beq :+
- sec
- rts
-
-:
fixup10:lda ethcr+1
ora #%00010000 ; No wait (IOCHRDY)
fixup11:sta ethcr+1