diff --git a/Source/HBIOS/sd.asm b/Source/HBIOS/sd.asm index 30851796..94724bf2 100644 --- a/Source/HBIOS/sd.asm +++ b/Source/HBIOS/sd.asm @@ -434,11 +434,23 @@ SD_INITUNIT2: SD_PROBE: ; #IF (SDMODE == SDMODE_DSD) - LD A,$03 ; SET BIT 0 & 1 - OUT (SD_SELREG),A ; WRITE TO SELECT REG - IN A,(SD_SELREG) ; READ BACK, BIT 1 IS ALWAYS 0 - CP $01 ; ... SO SHOULD READ BACK AS $01 - RET + ; ON DSD, SELREG, BIT 0 IS READ BACK AS WRITTEN, BIT 1 + ; IS ALWAYS READ AS ZERO. TO TEST FOR EXISTENCE, WE + ; WRITE 00 AND MAKE SURE IT READS BACK AS 00, THEN WE + ; WRITE 11 AND MAKE SURE IT READS BACK AS 01. + LD C,SD_SELREG ; USE C TO ADDRESS PORT + XOR A ; A := 0 + OUT (C),A ; SELREG := 0 + IN A,(C) ; READ SELREG BACK + AND $03 ; ISOLATE 2 LOWEST BITS + CP $00 ; BOTH BITS SHOULD BE 0 + RET NZ ; FAIL IF NOT + LD A,$03 ; SET 2 LOWEST BITS + OUT (C),A ; DO IT + IN A,(C) ; READ SELREG BACK + AND $03 ; ISOLATE 2 LOWEST BITS + CP $01 ; SHOULD READ BACK AS $01 + RET ; RETURN W/ ZF SET AS NEEDED #ENDIF ; XOR A ; SIGNAL SUCCESS @@ -1728,7 +1740,7 @@ SD_DPTRIMP: ; MSB<-->LSB MIRROR BITS IN A, RESULT IN C ; MIRROR: -#IF (SDCSIOFAST) ; SLOW SPEED, LEAST CODE SPACE +#IF (((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4)) & SDCSIOFAST) LD BC,MIRTAB ; 256 BYTE MIRROR TABLE ADD A,C ; ADD OFFSET LD C,A