Browse Source

Update sd.asm

MT011 updates
pull/54/head
Wayne Warthen 6 years ago
parent
commit
7290a52cf7
  1. 25
      Source/HBIOS/sd.asm

25
Source/HBIOS/sd.asm

@ -212,9 +212,9 @@ SD_OPRDEF .EQU %00100000 ; QUIESCENT STATE
SD_CD0 .EQU %00000001 ; IN/OUT:SD_OPREG:0 = CD0, PMOD pull CD0 low SD_CD0 .EQU %00000001 ; IN/OUT:SD_OPREG:0 = CD0, PMOD pull CD0 low
SD_CD1 .EQU %00000010 ; IN:SD_OPREG:1 = CD1, IN=0 Card detect switch SD_CD1 .EQU %00000010 ; IN:SD_OPREG:1 = CD1, IN=0 Card detect switch
SD_CD2 .EQU %00000100 ; IN:SD_OPREG:2 = CD2, IN=0 Card detect switch SD_CD2 .EQU %00000100 ; IN:SD_OPREG:2 = CD2, IN=0 Card detect switch
SD_CS0 .EQU %00010000 ; IN/OUT:SD_OPREG:3 = CS0, PMOD SPI CS
SD_CS1 .EQU %00010000 ; IN/OUT:SD_OPREG:4 = CS1, SDCARD1 CS, IN=1 Card present
SD_CS2 .EQU %00010000 ; IN/OUT:SD_OPREG:5 = CS2, SDCARD2 CS, IN=1 Card present
ENETCS0 .EQU %00001000 ; IN/OUT:SD_OPREG:3 = CS0, PMOD SPI CS
SDCS1 .EQU %00010000 ; IN/OUT:SD_OPREG:4 = CS1, SDCARD1 CS, IN=1 Card present
PARK .EQU %00100000 ; IN/OUT:SD_OPREG:5 = CS2, SDCARD2 CS, IN=1 Card present
SD_WRTR .EQU %01011100 ; Write data and transfer SD_WRTR .EQU %01011100 ; Write data and transfer
SD_RDTR .EQU %01011101 ; Read data and transfer SD_RDTR .EQU %01011101 ; Read data and transfer
SD_RDNTR .EQU %01011100 ; Read data and NO transfer SD_RDNTR .EQU %01011100 ; Read data and NO transfer
@ -1337,15 +1337,11 @@ SD_EXECCMD1:
#IF (SDMODE == SDMODE_MT) #IF (SDMODE == SDMODE_MT)
; 256 loops might not be long enough timeout ; 256 loops might not be long enough timeout
; when only IN is required to read data ; when only IN is required to read data
; LD DE,$7FFF ; INIT TIMEOUT LOOP COUNTER
LD E,0 ; INIT TIMEOUT LOOP COUNTER LD E,0 ; INIT TIMEOUT LOOP COUNTER
SD_EXECCMD2: SD_EXECCMD2:
IN A,(SD_RDTR) ; GET A BYTE FROM THE CARD IN A,(SD_RDTR) ; GET A BYTE FROM THE CARD
OR A ; SET FLAGS OR A ; SET FLAGS
JP P,SD_EXECCMD3 ; IF HIGH BIT IS 0, WE HAVE RESULT JP P,SD_EXECCMD3 ; IF HIGH BIT IS 0, WE HAVE RESULT
; DEC DE
; BIT 7,D
; JR Z,SD_EXECCMD2 ; KEEP TRYING UNTIL TIMEOUT
DEC E ; OTHERWISE DECREMENT LOOP COUNTER DEC E ; OTHERWISE DECREMENT LOOP COUNTER
JR NZ,SD_EXECCMD2 ; AND LOOP UNTIL TIMEOUT JR NZ,SD_EXECCMD2 ; AND LOOP UNTIL TIMEOUT
#ELSE #ELSE
@ -1670,18 +1666,7 @@ SD_SELECT2:
#ENDIF #ENDIF
#ELSE #ELSE
#IF (SDMODE == SDMODE_MT) #IF (SDMODE == SDMODE_MT)
IN A,(SD_OPRREG)
BIT 0,(IY+SD_DEV) ; DEVICE 0 OR 1
JR NZ,SD_SELECT1
AND SD_CS1 ; DEVICE 0
JR SD_SELECT2
SD_SELECT1:
AND SD_CS2 ; DEVICE 1
SD_SELECT2:
JR NZ,SD_SELECT3 ; NZ if CS input high
POP DE ; return address of call to SD_SELECT
POP DE ; return address of call to SD_WAITRDY
JR SD_NOMEDIA
LD A,SDCS1
SD_SELECT3: SD_SELECT3:
LD D,A LD D,A
LD A,(SD_OPRVAL) LD A,(SD_OPRVAL)
@ -1707,7 +1692,7 @@ SD_DESELECT:
#ENDIF #ENDIF
#ELSE #ELSE
#IF (SDMODE == SDMODE_MT) #IF (SDMODE == SDMODE_MT)
AND ~(SD_CS1 + SD_CS2) ; RESET SD_CS1 and SD_CS2 (CHIP SELECT)
LD A,PARK ; WHY IS PARK (CS2) BEING ASSERTED HERE???
#ELSE #ELSE
AND ~SD_CS ; RESET SD_CS (CHIP SELECT) AND ~SD_CS ; RESET SD_CS (CHIP SELECT)
#ENDIF #ENDIF

Loading…
Cancel
Save