mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
Correct capacity and geometry functions in sd and hsdk drivers
This commit is contained in:
@@ -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
|
||||
;
|
||||
;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user