mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:33:12 -06:00
Fixes for MT011 in SD driver
Credit to Douglas Miller for these.
This commit is contained in:
@@ -233,6 +233,15 @@ RTCDEF .SET SD_OPRDEF ; SET DEFAULT IN HBIOS MAINLINE
|
||||
; WIZNET W5500 AND IS NOT USED HERE. CHANNEL 1 (CD0 & CS0) & 2 (CD1 & CS1)
|
||||
; ARE ASSUMED TO BE CONNECTED TO SD CARDS.
|
||||
;
|
||||
; NOTE THAT DOING AN "IN RDTR" WILL RETURN THE *EXISTING* CONTENTS
|
||||
; OF THE SHIFT REGISTER, THEN INITIATE AN SPI READ. SO THE "IN" WILL BE
|
||||
; RETURNING THE DATA RECEIVED FROM THE PRIOR "IN RDTR", OR "OUT WRTR".
|
||||
; "IN RDNTR" WILL RETURN THE EXISTING SHIFT REGISTER CONTENTS WITHOUT
|
||||
; INITIATING A NEW SPI READ.
|
||||
;
|
||||
; THANKS TO DOUGLAS MILLER FOR BRINGING THIS BEHAVIOR TO MY ATTENTION
|
||||
; AND SUPPLYING ASSOCIATED FIXES.
|
||||
;
|
||||
SD_BASE .EQU $5C ; Module base address
|
||||
SD_DEVMAX .EQU 2 ; NUMBER OF PHYSICAL UNITS (SOCKETS)
|
||||
SD_WRTR .EQU SD_BASE + 0 ; Write data and transfer
|
||||
@@ -1428,6 +1437,10 @@ SD_EXECCMD1:
|
||||
;
|
||||
; GET RESULT
|
||||
LD E,0 ; INIT TIMEOUT LOOP COUNTER
|
||||
#IF (SDMODE == SDMODE_MT)
|
||||
CALL SD_GET ; DISCARD STALE DATA FROM PUT
|
||||
#ENDIF
|
||||
;
|
||||
SD_EXECCMD2:
|
||||
CALL SD_GET ; GET A BYTE FROM THE CARD
|
||||
OR A ; SET FLAGS
|
||||
@@ -1555,6 +1568,7 @@ SD_PUTDATA1:
|
||||
OUT (SD_WRTR),A ; SEND IT TWICE
|
||||
|
||||
LD DE,$7FFF ; LOOP MAX (TIMEOUT)
|
||||
IN A,(SD_RDTR) ; DISCARD STALE DATA FROM OUT
|
||||
SD_PUTDATA2:
|
||||
IN A,(SD_RDTR)
|
||||
#ELSE
|
||||
@@ -1604,6 +1618,9 @@ SD_PUTDATA3:
|
||||
;
|
||||
SD_WAITRDY:
|
||||
LD DE,$FFFF ; LOOP MAX (TIMEOUT)
|
||||
#IF (SDMODE == SDMODE_MT)
|
||||
CALL SD_GET ; DISCARD STALE DATA - UNKNOWN CONTEXT
|
||||
#ENDIF
|
||||
SD_WAITRDY1:
|
||||
CALL SD_GET
|
||||
INC A ; $FF -> $00
|
||||
|
||||
Reference in New Issue
Block a user