Browse Source

Correct capacity and geometry functions in sd and hsdk drivers

pull/3/head
Wayne Warthen 10 years ago
parent
commit
d90c4dfed2
  1. 18
      Source/HBIOS/hdsk.asm
  2. 22
      Source/HBIOS/sd.asm

18
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
;
;

22
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

Loading…
Cancel
Save