Browse Source

Fix DSD Detection

pull/5/head
Wayne Warthen 8 years ago
parent
commit
584c3b0aa3
  1. 24
      Source/HBIOS/sd.asm

24
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

Loading…
Cancel
Save