CF Card compatibility improvement

Older CF Cards did not reset IDE registers to defaults values when reset.  Implemented a work around.
This commit is contained in:
Wayne Warthen
2020-04-18 15:19:10 -07:00
parent fd8a9195fb
commit 7d022f709b
11 changed files with 109 additions and 55 deletions

View File

@@ -922,36 +922,15 @@ IDE_RESET:
PRTS(" RESET$")
#ENDIF
;
;#IF (IDEMODE == IDEMODE_MK4)
;
LD A,(IY+IDE_MODE) ; GET MODE
CP IDEMODE_MK4 ; MK4?
JR NZ,IDE_RESET1 ; IF NOT, BYPASS
;
; USE HARDWARE RESET LINE
#IF (IDETRACE >= 3)
PRTS(" HARD$")
#ENDIF
LD A,$80 ; HIGH BIT OF XAR IS IDE RESET
;OUT (IDE_IO_XAR),A
CALL IDE_OUT
.DB IDE_REG_XAR
LD DE,2 ; DELAY 32US (SPEC IS >= 25US)
CALL VDELAY
XOR A ; CLEAR RESET BIT
;OUT (IDE_IO_XAR),A
CALL IDE_OUT
.DB IDE_REG_XAR
;
IDE_RESET1:
;
;#ENDIF
;
;#IF (IDEMODE == IDEMODE_RC)
;
LD A,(IY+IDE_MODE) ; GET MODE
CP IDEMODE_RC ; RC2014?
JR NZ,IDE_RESET2 ; IF NOT, BYPASS
; OLDER CF CARDS DO NOT SEEM TO SET THE
; REGISTERS ON RESET, SO HERE WE FAKE THINGS BY
; SETTING THEM AS A RESET WOULD. SO WE ALWAYS
; DO THE FAKE.
;LD A,(IY+IDE_MODE) ; GET MODE
;CP IDEMODE_RC ; RC2014?
;JR NZ,IDE_RESET2 ; IF NOT, BYPASS
;
; RC2014 CANNOT ADDRESS THE DEVICE CONTROL PORT AND
; HAS NO WAY TO PERFORM A HARD RESET FROM SOFTWARE,
@@ -979,6 +958,33 @@ IDE_RESET2:
;
;#ENDIF
;
;#IF (IDEMODE == IDEMODE_MK4)
;
LD A,(IY+IDE_MODE) ; GET MODE
CP IDEMODE_MK4 ; MK4?
JR NZ,IDE_RESET1 ; IF NOT, BYPASS
;
; USE HARDWARE RESET LINE
#IF (IDETRACE >= 3)
PRTS(" HARD$")
#ENDIF
LD A,$80 ; HIGH BIT OF XAR IS IDE RESET
;OUT (IDE_IO_XAR),A
CALL IDE_OUT
.DB IDE_REG_XAR
LD DE,20 ; DELAY 32US (SPEC IS >= 25US)
CALL VDELAY
XOR A ; CLEAR RESET BIT
;OUT (IDE_IO_XAR),A
CALL IDE_OUT
.DB IDE_REG_XAR
LD DE,20
CALL VDELAY
;
IDE_RESET1:
;
;#ENDIF
;
;#IF ((IDEMODE != IDEMODE_MK4) & (IDEMODE != IDEMODE_RC))
;
LD A,(IY+IDE_MODE) ; GET MODE

View File

@@ -974,6 +974,27 @@ PPIDE_RESET:
CALL PPIDE_PRTPREFIX
PRTS(" RESET$")
#ENDIF
;
; OLDER CF CARDS DO NOT SEEM TO SET THE
; REGISTERS ON RESET, SO HERE WE FAKE THINGS BY
; SETTING THEM AS A RESET WOULD
#IF (IDETRACE >= 3)
PRTS(" FAKE$")
#ENDIF
XOR A
;OUT (IDE_IO_CYLLO),A
CALL PPIDE_OUT
.DB PPIDE_REG_CYLLO
;OUT (IDE_IO_CYLHI),A
CALL PPIDE_OUT
.DB PPIDE_REG_CYLHI
INC A
;OUT (IDE_IO_COUNT),A
CALL PPIDE_OUT
.DB PPIDE_REG_COUNT
;OUT (IDE_IO_SECT),A
CALL PPIDE_OUT
.DB PPIDE_REG_SECT
;
; SETUP PPI TO READ
LD A,PPIDE_DIR_READ ; SET DATA BUS DIRECTION TO READ

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -2,4 +2,4 @@
#DEFINE RMN 1
#DEFINE RUP 0
#DEFINE RTP 0
#DEFINE BIOSVER "3.1-pre.4"
#DEFINE BIOSVER "3.1-pre.5"

View File

@@ -3,5 +3,5 @@ rmn equ 1
rup equ 0
rtp equ 0
biosver macro
db "3.1-pre.4"
db "3.1-pre.5"
endm