diff --git a/Source/HBIOS/sd.asm b/Source/HBIOS/sd.asm index 1fefcfa7..1568942b 100644 --- a/Source/HBIOS/sd.asm +++ b/Source/HBIOS/sd.asm @@ -1335,7 +1335,19 @@ SD_EXECCMD1: ; THE FIRST FILL BYTE IS DISCARDED! THIS HACK IS REQUIRED BY ; STUPID SD CARD ADAPTERS THAT NOW OMIT THE MISO PULL-UP. SEE ; COMMENTS AT TOP OF THIS FILE. - CALL SD_GET ; GET A BYTE AND DISCARD IT +; + ;CALL SD_GET ; GET A BYTE AND DISCARD IT +; + ; THE Z180 -K REVISION CSIO DOES NOT KEEP MOSI HIGH WHEN + ; RECEIVING VIA MISO. INSTEAD MOSI IS LEFT AT WHICHEVER LOGIC + ; LEVEL IT WAS LAST SET TO. THIS CAUSES SOME SD CARDS A PROBLEM + ; BECAUSE THEY EXPECT MOSI TO BE CONSISTENTLY HIGH WHEN IDLE. + ; BY USING A PUT INSTEAD OF A GET, WE CAN FORCE MOSI TO BE + ; LEFT AT THE PROPER LOGIC LEVEL. THE SD CARD DOES NOT CARE + ; IF A PUT OR A GET IS USED TO IGNORE THE BYTE BECAUSE THE + ; CLOCK RUNS IN EITHER CASE. + LD A,$FF ; KEEP MOSI HI + CALL SD_PUT ; SEND 8 CLOCKS #ENDIF ; ; GET RESULT @@ -1661,6 +1673,11 @@ SD_SELECT2: #ENDIF LD (SD_OPRVAL),A OUT (SD_OPRREG),A +;; +;#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC)) +; CALL DLY32 ; DELAY FOR FINAL BIT +;#ENDIF +; RET ; ; DESELECT CARD