diff --git a/Source/HBIOS/ide.asm b/Source/HBIOS/ide.asm index 9c05c54c..f43e4468 100644 --- a/Source/HBIOS/ide.asm +++ b/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 diff --git a/Source/HBIOS/ppide.asm b/Source/HBIOS/ppide.asm index 13c536f1..2b18f519 100644 --- a/Source/HBIOS/ppide.asm +++ b/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 diff --git a/Source/ver.inc b/Source/ver.inc index f92228a4..90b2cbf3 100644 --- a/Source/ver.inc +++ b/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" diff --git a/Source/ver.lib b/Source/ver.lib index e720a560..0814c961 100644 --- a/Source/ver.lib +++ b/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