diff --git a/Source/HBIOS/hdsk.asm b/Source/HBIOS/hdsk.asm index 82ed8ac2..ce70779f 100644 --- a/Source/HBIOS/hdsk.asm +++ b/Source/HBIOS/hdsk.asm @@ -79,15 +79,15 @@ HDSK_CAP: XOR A ; SIGNAL SUCCESS RET ; -; GET GEOMETRY -; RETURN HL:DE=CYLINDERS, B=HEADS, C=SECTORS -; -HDSK_GEOM: - LD DE,0 ; CYLINDER COUNT MSW - LD HL,520 ; CYLINDER COUNT LSW - LD B,16 ; HEADS / CYLINDER - LD C,16 ; SECTORS / TRACK - XOR A ; SIGNAL SUCCESS +SD_GEOM: + ; FOR LBA, WE SIMULATE CHS ACCESS USING 16 HEADS AND 16 SECTORS + ; RETURN HS:CC -> DE:HL, SET HIGH BIT OF D TO INDICATE LBA CAPABLE + CALL SD_CAP ; GET TOTAL BLOCKS IN DE:HL, BLOCK SIZE TO BC + LD L,H ; DIVIDE BY 256 FOR # TRACKS + LD H,E ; ... HIGH BYTE DISCARDED, RESULT IN HL + LD D,$80 | 16 ; HEADS / CYL = 16, SET LBA BIT + LD E,16 ; SECTORS / TRACK = 16 + XOR A ; SIGNAL SUCCESS RET ; ; diff --git a/Source/HBIOS/sd.asm b/Source/HBIOS/sd.asm index 6cc1bcd2..38782356 100644 --- a/Source/HBIOS/sd.asm +++ b/Source/HBIOS/sd.asm @@ -6,7 +6,7 @@ ; 1) TESTING ; - TRY TO TEST GOIDLE, FIND CARD THAT REQUIRES 2 REQUESTS ; - DUAL CARDS -; - CARD XC CARD TYPE DETECTION +; - TEST XC CARD TYPE DETECTION ; - TRY TO GET INIT TO FAIL, REMOVE DELAYS AT START OF GOIDLE? ; ;------------------------------------------------------------------------------ @@ -454,14 +454,18 @@ SD_MEDIA: SD_CAP: SD_DPTR(SD_CAPACITY) ; POINT HL TO CAPACITY OF CUR UNIT CALL LD32 ; GET THE CURRENT CAPACITY DO DE:HL + LD BC,512 ; 512 BYTES PER BLOCK XOR A ; SIGNAL SUCCESS RET ; AND DONE ; SD_GEOM: - LD DE,0 ; CYLINDER COUNT MSW - LD HL,520 ; CYLINDER COUNT LSW - LD B,16 ; HEADS / CYLINDER - LD C,16 ; SECTORS / TRACK + ; FOR LBA, WE SIMULATE CHS ACCESS USING 16 HEADS AND 16 SECTORS + ; RETURN HS:CC -> DE:HL, SET HIGH BIT OF D TO INDICATE LBA CAPABLE + CALL SD_CAP ; GET TOTAL BLOCKS IN DE:HL, BLOCK SIZE TO BC + LD L,H ; DIVIDE BY 256 FOR # TRACKS + LD H,E ; ... HIGH BYTE DISCARDED, RESULT IN HL + LD D,16 | $80 ; HEADS / CYL = 16, SET LBA BIT + LD E,16 ; SECTORS / TRACK = 16 XOR A ; SIGNAL SUCCESS RET ; @@ -1066,6 +1070,14 @@ SD_WAITRDY1: ; ; FINISH A TRANSACTION - PRESERVE AF ; +; PER SPEC: AFTER THE LAST SPI BUS TRANSACTION, THE HOST IS REQUIRED, TO PROVIDE +; 8 (EIGHT) CLOCK CYCLES FOR THE CARD TO COMPLETE THE OPERATION BEFORE SHUTTING +; DOWN THE CLOCK. THROUGHOUT THIS 8 CLOCKS PERIOD THE STATE OF THE CS SIGNAL IS +; IRRELEVANT. IT CAN BE ASSERTED OR DE-ASSERTED. +; +; NOTE THAT I HAVE FOUND AT LEAST ONE MMC CARD THAT FAILS UNLESS THE CS SIGNAL +; REMAINS ACTIVE DURING THE 8 CLOCKS, SO THE CLOCKS ARE SENT BEFORE DESLECTING THE CARD. +; SD_DONE: PUSH AF LD A,$FF