Browse Source

Improve CF Card Identification

Added additional CF Card signatures.  Credit to
Laszlo Szolnoki.
pull/331/head v3.1.1-pre.178
Wayne Warthen 4 years ago
parent
commit
9a503696c8
  1. 36
      Source/HBIOS/ide.asm
  2. 33
      Source/HBIOS/ppide.asm
  3. 2
      Source/ver.inc
  4. 2
      Source/ver.lib

36
Source/HBIOS/ide.asm

@ -1246,19 +1246,31 @@ IDE_INITDEV00:
CALL DUMP_BUFFER ; DUMP IT IF DEBUGGING
#ENDIF
;
XOR A
LD (IY+IDE_MED),0 ; CLEAR FLAGS
; DETERMINE IF CF DEVICE
LD HL,HB_WRKBUF ; FIRST WORD OF IDENTIFY DATA HAS CF FLAG
LD A,$8A ; FIRST BYTE OF MARKER IS $8A
CP (HL) ; COMPARE
JR NZ,IDE_INITDEV1 ; IF NO MATCH, NOT CF
INC HL
LD A,$84 ; SECOND BYTE OF MARKER IS $84
CP (HL) ; COMPARE
JR NZ,IDE_INITDEV1 ; IF NOT MATCH, NOT CF
SET 0,(IY+IDE_MED) ; SET FLAGS BIT FOR CF MEDIA
;
; DETERMINE IF CF DEVICE BY TESTING FOR CF CARD SIGNATURES
; IN THEORY, THERE ARE SOME OTHER POSSIBLE VARIATIONS, BUT
; THEY ARE NOT RECOMMENDED BY THE CF CARD SPEC AND MIGHT
; OVERLAP WITH "REAL" HARD DISK SIGNATURES. I HAVE NEVER
; SEEN A CF CARD THAT DID NOT USE ONE OF THE BELOW.
; CREDIT TO LASZLO SZOLNOKI
LD BC,$848A ; STANDARD CF CARD SIGNATURE
CALL IDE_INITDEV000 ; TEST & SET
LD BC,$044A ; ALT SIG FOR NON-REMOVABLE
CALL IDE_INITDEV000 ; TEST & SET
LD BC,$0040 ; ALT SIG FOR NON-REMOVABLE
CALL IDE_INITDEV000 ; TEST & SET
JR IDE_INITDEV1 ; CONTINUE INIT
;
IDE_INITDEV000:
; CHECK IF FIRST WORD OF IDENTIFY DATA MATCHES VALUE IN BC
; AND SET CF FLAG IF SO
LD HL,(HB_WRKBUF) ; FIRST WORD OF IDENTIFY DATA
OR A ; CLEAR CARRY
SBC HL,BC ; COMPARE
RET NZ ; ABORT IF NOT EQUAL
SET 0,(IY+IDE_MED) ; ELSE SET FLAGS BIT FOR CF MEDIA
RET ; AND RETURN
;
IDE_INITDEV1:
; DETERMINE IF LBA CAPABLE

33
Source/HBIOS/ppide.asm

@ -1273,16 +1273,29 @@ PPIDE_INITDEV00:
;
LD (IY+PPIDE_MED),0 ; CLEAR MEDIA FLAGS
;
; DETERMINE IF CF DEVICE
LD HL,HB_WRKBUF ; FIRST WORD OF IDENTIFY DATA HAS CF FLAG
LD A,$8A ; FIRST BYTE OF MARKER IS $8A
CP (HL) ; COMPARE
JR NZ,PPIDE_INITDEV1 ; IF NO MATCH, NOT CF
INC HL
LD A,$84 ; SECOND BYTE OF MARKER IS $84
CP (HL) ; COMPARE
JR NZ,PPIDE_INITDEV1 ; IF NOT MATCH, NOT CF
SET 0,(IY+PPIDE_MED) ; SET FLAGS BIT FOR CF MEDIA
; DETERMINE IF CF DEVICE BY TESTING FOR CF CARD SIGNATURES
; IN THEORY, THERE ARE SOME OTHER POSSIBLE VARIATIONS, BUT
; THEY ARE NOT RECOMMENDED BY THE CF CARD SPEC AND MIGHT
; OVERLAP WITH "REAL" HARD DISK SIGNATURES. I HAVE NEVER
; SEEN A CF CARD THAT DID NOT USE ONE OF THE BELOW.
; CREDIT TO LASZLO SZOLNOKI
LD BC,$848A ; STANDARD CF CARD SIGNATURE
CALL PPIDE_INITDEV000 ; TEST & SET
LD BC,$044A ; ALT SIG FOR NON-REMOVABLE
CALL PPIDE_INITDEV000 ; TEST & SET
LD BC,$0040 ; ALT SIG FOR NON-REMOVABLE
CALL PPIDE_INITDEV000 ; TEST & SET
JR PPIDE_INITDEV1 ; CONTINUE INIT
;
PPIDE_INITDEV000:
; CHECK IF FIRST WORD OF IDENTIFY DATA MATCHES VALUE IN BC
; AND SET CF FLAG IF SO
LD HL,(HB_WRKBUF) ; FIRST WORD OF IDENTIFY DATA
OR A ; CLEAR CARRY
SBC HL,BC ; COMPARE
RET NZ ; ABORT IF NOT EQUAL
SET 0,(IY+PPIDE_MED) ; ELSE SET FLAGS BIT FOR CF MEDIA
RET ; AND RETURN
;
PPIDE_INITDEV1:
; DETERMINE IF LBA CAPABLE

2
Source/ver.inc

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

2
Source/ver.lib

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

Loading…
Cancel
Save