|
|
|
@ -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 |
|
|
|
|