Browse Source

Update CF Card Detection

In the IDE and PPIDE drivers, a CF Card is differentiated from a Hard Disk using the first word of the result of the IDENTIFY DEVICE command.  The value 0x045A was recently added because it was seen from a CF<->SD Card adapter.  However, the value has now been seen from a spinning hard disk.  Since the value is ambiguous and not defined in the CF Card specs, I am removing it from the list of CF Card signatures.

Credit to Mark Elkin for identifying this and helping me track it down.
pull/331/head v3.1.1-pre.195
Wayne Warthen 3 years ago
parent
commit
cd161067db
  1. 39
      Source/HBIOS/ide.asm
  2. 41
      Source/HBIOS/ppide.asm
  3. 2
      Source/ver.inc
  4. 2
      Source/ver.lib

39
Source/HBIOS/ide.asm

@ -192,7 +192,7 @@ IDE_CFGTBL:
#IF (IDECNT >= 1)
;
IDE_DEV0M: ; DEVICE 0, MASTER
.DB 0 ; DRIVER DEVICE NUMBER
.DB $FE ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
.DB IDE0MODE ; DRIVER DEVICE MODE
.DB 0 ; DEVICE STATUS
.DB 0 ; DEVICE TYPE
@ -206,7 +206,7 @@ IDE_DEV0M: ; DEVICE 0, MASTER
.DW IDE_DEV0S ; PARTNER
;
IDE_DEV0S: ; DEVICE 0, SLAVE
.DB 0 ; DRIVER DEVICE NUMBER
.DB $FE ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
.DB IDE0MODE ; DRIVER DEVICE MODE
.DB 0 ; DEVICE STATUS
.DB 0 ; DEVICE TYPE
@ -223,7 +223,7 @@ IDE_DEV0S: ; DEVICE 0, SLAVE
#IF (IDECNT >= 2)
;
IDE_DEV1M: ; DEVICE 1, MASTER
.DB 0 ; DRIVER DEVICE NUMBER
.DB $FE ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
.DB IDE1MODE ; DRIVER DEVICE MODE
.DB 0 ; DEVICE STATUS
.DB 0 ; DEVICE TYPE
@ -237,7 +237,7 @@ IDE_DEV1M: ; DEVICE 1, MASTER
.DW IDE_DEV1S ; PARTNER
;
IDE_DEV1S: ; DEVICE 1, SLAVE
.DB 0 ; DRIVER DEVICE NUMBER
.DB $FE ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
.DB IDE1MODE ; DRIVER DEVICE MODE
.DB 0 ; DEVICE STATUS
.DB 0 ; DEVICE TYPE
@ -254,7 +254,7 @@ IDE_DEV1S: ; DEVICE 1, SLAVE
#IF (IDECNT >= 3)
;
IDE_DEV2M: ; DEVICE 2, MASTER
.DB 0 ; DRIVER DEVICE NUMBER
.DB $FE ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
.DB IDE2MODE ; DRIVER DEVICE MODE
.DB 0 ; DEVICE STATUS
.DB 0 ; DEVICE TYPE
@ -268,7 +268,7 @@ IDE_DEV2M: ; DEVICE 2, MASTER
.DW IDE_DEV2S ; PARTNER
;
IDE_DEV2S: ; DEVICE 2, SLAVE
.DB 0 ; DRIVER DEVICE NUMBER
.DB $FE ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
.DB IDE2MODE ; DRIVER DEVICE MODE
.DB 0 ; DEVICE STATUS
.DB 0 ; DEVICE TYPE
@ -1256,18 +1256,27 @@ IDE_INITDEV00:
;
#IF (IDETRACE >= 3)
CALL IDE_PRTPREFIX
PRTS("SIG=0x$")
PRTS(" SIG=0x$")
LD BC,(HB_WRKBUF)
CALL PRTHEXWORD
#ENDIF
;
LD BC,$848A ; STANDARD CF CARD SIGNATURE
CALL IDE_INITDEV000 ; TEST & SET
LD BC,$044A ; ALT SIG FOR CF
; SEE PAGE 114 OF CF+ & CF SPECIFICATION REV. 3.0 FOR CF CARD
; SIGNATURE VALUES. ALL OF THE BELOW ARE DOCUMENTED THERE EXCEPT
; $045A WHICH IS A VALUE DISCOVERED ON A CF<->SD CARD ADAPTER.
;
; SIGNATURE $045A IS NOT LISTED IN THE CF SPEC. IT WAS ADDED BECAUSE
; IT WAS SEEN IN THE WILD ON A CF-SD ADAPTER. HOWEVER IT HAS NOW
; ALSO BEEN SEEN ON A SPINNING HARD DISK. SINCE IT IS AMBIGUOUS, I
; WILL CONSIDER IT TO BE A HARD DISK.
;
LD BC,$848A ; STANDARD CF CARD SIGNATURE %1000 1111 1000 1010
CALL IDE_INITDEV000 ; TEST & SET
LD BC,$045A ; ALT SIG FOR CF
LD BC,$044A ; ALT SIG FOR CF NON-REMOVABLE %0000 0100 0100 1010
CALL IDE_INITDEV000 ; TEST & SET
LD BC,$0040 ; ALT SIG FOR CF NON-REMOVABLE
;LD BC,$045A ; ?ALT SIG FOR CF NON-REMOVABLE %0000 0100 0101 1010
;CALL IDE_INITDEV000 ; TEST & SET
LD BC,$0040 ; ALT SIG FOR CF NON-REMOVABLE %0000 0000 0100 0000
CALL IDE_INITDEV000 ; TEST & SET
JR IDE_INITDEV1 ; CONTINUE INIT
;
@ -1552,8 +1561,10 @@ IDE_PRTPREFIX:
CALL NEWLINE
PRTS("IDE$")
LD A,(IY+IDE_DEV) ; GET CURRENT DEVICE NUM
ADD A,'0'
CALL COUT
CP $FE ; NOT YET ASSIGNED?
JR Z,IDE_PRTPREFIX1 ; SKIP DEV NUM IF SO
CALL PRTDECB
IDE_PRTPREFIX1:
CALL PC_COLON
POP AF
RET

41
Source/HBIOS/ppide.asm

@ -209,7 +209,7 @@ PPIDE_CFGTBL:
#IF (PPIDECNT >= 1)
;
PPIDE_DEV0M: ; DEVICE 0, MASTER
.DB 0 ; DRIVER RELATIVE DEVICE NUMBER (ASSIGNED DURING INIT)
.DB $FE ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
.DB 0 ; DEVICE STATUS
.DB 0 ; DEVICE TYPE
.DB PPIDE_ACC_MAS | (PPIDE0A8BIT & PPIDE_ACC_8BIT) ; UNIT ACCESS FLAGS
@ -222,7 +222,7 @@ PPIDE_DEV0M: ; DEVICE 0, MASTER
.DW PPIDE_DEV0S ; PARTNER
;
PPIDE_DEV0S: ; DEVICE 0, SLAVE
.DB 0 ; DRIVER RELATIVE DEVICE NUMBER (ASSIGNED DURING INIT)
.DB $FE ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
.DB 0 ; DEVICE STATUS
.DB 0 ; DEVICE TYPE
.DB (PPIDE0B8BIT & PPIDE_ACC_8BIT) ; UNIT ACCESS FLAGS
@ -239,7 +239,7 @@ PPIDE_DEV0S: ; DEVICE 0, SLAVE
#IF (PPIDECNT >= 2)
;
PPIDE_DEV1M: ; DEVICE 1, MASTER
.DB 0 ; DRIVER RELATIVE DEVICE NUMBER (ASSIGNED DURING INIT)
.DB $FE ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
.DB 0 ; DEVICE STATUS
.DB 0 ; DEVICE TYPE
.DB PPIDE_ACC_MAS | (PPIDE1A8BIT & PPIDE_ACC_8BIT) ; UNIT ACCESS FLAGS
@ -252,7 +252,7 @@ PPIDE_DEV1M: ; DEVICE 1, MASTER
.DW PPIDE_DEV1S ; PARTNER
;
PPIDE_DEV1S: ; DEVICE 1, SLAVE
.DB 0 ; DRIVER RELATIVE DEVICE NUMBER (ASSIGNED DURING INIT)
.DB $FE ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
.DB 0 ; DEVICE STATUS
.DB 0 ; DEVICE TYPE
.DB (PPIDE1B8BIT & PPIDE_ACC_8BIT) ; UNIT ACCESS FLAGS
@ -269,7 +269,7 @@ PPIDE_DEV1S: ; DEVICE 1, SLAVE
#IF (PPIDECNT >= 3)
;
PPIDE_DEV2M: ; DEVICE 2, MASTER
.DB 0 ; DRIVER RELATIVE DEVICE NUMBER (ASSIGNED DURING INIT)
.DB $FE ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
.DB 0 ; DEVICE STATUS
.DB 0 ; DEVICE TYPE
.DB PPIDE_ACC_MAS | (PPIDE2A8BIT & PPIDE_ACC_8BIT) ; UNIT ACCESS FLAGS
@ -282,7 +282,7 @@ PPIDE_DEV2M: ; DEVICE 2, MASTER
.DW PPIDE_DEV2S ; PARTNER
;
PPIDE_DEV2S: ; DEVICE 2, SLAVE
.DB 0 ; DRIVER RELATIVE DEVICE NUMBER (ASSIGNED DURING INIT)
.DB $FE ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
.DB 0 ; DEVICE STATUS
.DB 0 ; DEVICE TYPE
.DB (PPIDE2B8BIT & PPIDE_ACC_8BIT) ; UNIT ACCESS FLAGS
@ -1280,19 +1280,28 @@ PPIDE_INITDEV00:
; CREDIT TO LASZLO SZOLNOKI
;
#IF (PPIDETRACE >= 3)
CALL IDE_PRTPREFIX
PRTS("SIG=0x$")
CALL PPIDE_PRTPREFIX
PRTS(" SIG=0x$")
LD BC,(HB_WRKBUF)
CALL PRTHEXWORD
#ENDIF
;
LD BC,$848A ; STANDARD CF CARD SIGNATURE
CALL PPIDE_INITDEV000 ; TEST & SET
LD BC,$044A ; ALT SIG FOR CF
; SEE PAGE 114 OF CF+ & CF SPECIFICATION REV. 3.0 FOR CF CARD
; SIGNATURE VALUES. ALL OF THE BELOW ARE DOCUMENTED THERE EXCEPT
; $045A WHICH IS A VALUE DISCOVERED ON A CF<->SD CARD ADAPTER.
;
; SIGNATURE $045A IS NOT LISTED IN THE CF SPEC. IT WAS ADDED BECAUSE
; IT WAS SEEN IN THE WILD ON A CF-SD ADAPTER. HOWEVER IT HAS NOW
; ALSO BEEN SEEN ON A SPINNING HARD DISK. SINCE IT IS AMBIGUOUS, I
; WILL CONSIDER IT TO BE A HARD DISK.
;
LD BC,$848A ; STANDARD CF CARD SIGNATURE %1000 1111 1000 1010
CALL PPIDE_INITDEV000 ; TEST & SET
LD BC,$045A ; ALT SIG FOR CF
LD BC,$044A ; ALT SIG FOR CF NON-REMOVABLE %0000 0100 0100 1010
CALL PPIDE_INITDEV000 ; TEST & SET
LD BC,$0040 ; ALT SIG FOR CF NON-REMOVABLE
;LD BC,$045A ; ?ALT SIG FOR CF NON-REMOVABLE %0000 0100 0101 1010
;CALL PPIDE_INITDEV000 ; TEST & SET
LD BC,$0040 ; ALT SIG FOR CF NON-REMOVABLE %0000 0000 0100 0000
CALL PPIDE_INITDEV000 ; TEST & SET
JR PPIDE_INITDEV1 ; CONTINUE INIT
;
@ -1631,8 +1640,10 @@ PPIDE_PRTPREFIX:
CALL NEWLINE
PRTS("PPIDE$")
LD A,(IY+PPIDE_DEV) ; GET CURRENT DEVICE NUM
ADD A,'0'
CALL COUT
CP $FE ; NOT YET ASSIGNED?
JR Z,PPIDE_PRTPREFIX1 ; SKIP DEV NUM IF SO
CALL PRTDECB
PPIDE_PRTPREFIX1:
CALL PC_COLON
POP AF
RET

2
Source/ver.inc

@ -2,4 +2,4 @@
#DEFINE RMN 1
#DEFINE RUP 1
#DEFINE RTP 0
#DEFINE BIOSVER "3.1.1-pre.194"
#DEFINE BIOSVER "3.1.1-pre.195"

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 1
rup equ 1
rtp equ 0
biosver macro
db "3.1.1-pre.194"
db "3.1.1-pre.195"
endm

Loading…
Cancel
Save