mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:33:12 -06:00
S100 ESP SD Driver Tweaks
- Tune timeout - Implement card detect
This commit is contained in:
@@ -57,3 +57,4 @@ LPTENABLE .SET TRUE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
|
||||
;
|
||||
ESPSDENABLE .SET TRUE ; ESPSD: ENABLE S100 ESP32 SD DISK DRIVER (ESPSD.ASM)
|
||||
ESPSDCNT .SET 1 ; ESPSD: NUMBER OF BOARDS TO DETECT (1-2), 1-2 DEVICES PER BOARD
|
||||
ESPSD0DUAL .SET TRUE ; ESPSD 0: DUAL INTERFACE BOARD (DUAL SD)
|
||||
|
||||
@@ -74,4 +74,4 @@ SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY
|
||||
;
|
||||
ESPSDENABLE .SET TRUE ; ESPSD: ENABLE S100 ESP32 SD DISK DRIVER (ESPSD.ASM)
|
||||
ESPSDCNT .SET 1 ; ESPSD: NUMBER OF BOARDS TO DETECT (1-2), 1-2 DEVICES PER BOARD
|
||||
|
||||
ESPSD0DUAL .SET TRUE ; ESPSD 0: DUAL INTERFACE BOARD (DUAL SD)
|
||||
|
||||
@@ -12,8 +12,7 @@
|
||||
;
|
||||
;
|
||||
; TODO:
|
||||
; - ADD TIMEOUT TO DETECTION!!!
|
||||
; - ADD CARD DETECT FUNCTIONALITY
|
||||
; - AVOID RESELECTING PRI/SEC ON EVERY I/O CALL
|
||||
;
|
||||
; NOTES:
|
||||
;
|
||||
@@ -22,7 +21,6 @@
|
||||
; COMMAND/RESPONSE PROTOCOL. THE DUAL SD BOARD SUPPORTS TWO SD CARD
|
||||
; DEVICES. SEPARATE INIT AND SELECT COMMANDS ARE PROVIDED TO HANDLE
|
||||
; THIS AS NEEDED. THE 2CF+1SD SUPPORTS ONLY A SINGLE SD CARD DEVICE.
|
||||
; ONLY THE INIT/SELECT COMMANDS WITH A "0" SUFFIX CAN BE USED.
|
||||
;
|
||||
; TWO SEQUENTIAL I/O ADDRESSES ARE IMPLEMENTED. THE FIRST IS
|
||||
; FOR STATUS AND THE SECOND IS FOR COMMAND & DATA EXCHANGE.
|
||||
@@ -53,35 +51,30 @@
|
||||
; XIN: UNUSED???
|
||||
; XOUT: ACTIVATE WRITE TO ESP32
|
||||
;
|
||||
ESPSD_IO_STATUS .EQU 0 ; OFFSET OF STATUS PORT FROM BASE I/O ADDRESS
|
||||
ESPSD_IO_STATUS .EQU 0 ; OFFSET OF STATUS PORT FROM BASE I/O ADDRESS
|
||||
ESPSD_IO_DATA .EQU 1 ; OFFSET OF DATA PORT FROM BASE I/O ADDRESS
|
||||
;
|
||||
ESPSD_CMD_INIT0 .EQU $80 ; Initialize primary SD Card
|
||||
ESPSD_CMD_INIT1 .EQU $81 ; INITIALIZE SECONDARY SD CARD
|
||||
ESPSD_CMD_INIT0 .EQU $80 ; Initialize primary SD Card
|
||||
ESPSD_CMD_INIT1 .EQU $81 ; INITIALIZE SECONDARY SD CARD
|
||||
ESPSD_CMD_SEL0 .EQU $82 ; (RE)SELECT PRIMARY SD CARD
|
||||
ESPSD_CMD_SEL1 .EQU $83 ; (RE)SELECT SECONDARY SD CARD
|
||||
ESPSD_CMD_SETLBA .EQU $84 ; SET LBA FOR SUBSEQUENT I/O
|
||||
ESPSD_CMD_READ .EQU $85 ; READ SECTOR FROM SELECTED SD CARD AT CURRENT LBA
|
||||
ESPSD_CMD_WRITE .EQU $86 ; WRITE SECTOR TO SELECTED SD CARD AT CURRENT LBA
|
||||
ESPSD_CMD_WRITE .EQU $86 ; WRITE SECTOR TO SELECTED SD CARD AT CURRENT LBA
|
||||
ESPSD_CMD_FORMAT .EQU $87 ; FORMAT SECTOR ON SELECTED SD CARD AT CURRENT LBA
|
||||
ESPSD_CMD_RESET .EQU $88 ; RESET ESP32 MODULE
|
||||
ESPSD_CMD_RESET .EQU $88 ; RESET ESP32 MODULE
|
||||
;
|
||||
; ESPSD DEVICE STATUS CODES
|
||||
;
|
||||
ESPSD_STOK .EQU 0
|
||||
ESPSD_STINVUNIT .EQU -1
|
||||
ESPSD_STNOMEDIA .EQU -2
|
||||
ESPSD_STCMDERR .EQU -3
|
||||
ESPSD_STIOERR .EQU -4
|
||||
ESPSD_STRDYTO .EQU -5
|
||||
ESPSD_STDRQTO .EQU -6
|
||||
ESPSD_STBSYTO .EQU -7
|
||||
ESPSD_STNOTSUP .EQU -8
|
||||
ESPSD_STNOTRDY .EQU -9
|
||||
ESPSD_STNOMEDIA .EQU -1
|
||||
ESPSD_STIOERR .EQU -2
|
||||
ESPSD_STTO .EQU -3
|
||||
ESPSD_STNOTRDY .EQU -4
|
||||
;
|
||||
; IDE DEVICE CONFIGURATION
|
||||
;
|
||||
ESPSD_CFGSIZ .EQU 12 ; SIZE OF CFG TBL ENTRIES
|
||||
ESPSD_CFGSIZ .EQU 12 ; SIZE OF CFG TBL ENTRIES
|
||||
;
|
||||
; PER DEVICE DATA OFFSETS
|
||||
;
|
||||
@@ -414,6 +407,18 @@ ESPSD_DETECT:
|
||||
; INITIALIZE DEVICE
|
||||
;
|
||||
ESPSD_INITDEV:
|
||||
; CHECK CARD DETECT
|
||||
LD A,(IY+ESPSD_ROLE) ; GET ROLE
|
||||
LD B,%00000010 ; MASK FOR PRIMARY
|
||||
OR A ; TEST ROLE
|
||||
JR Z,ESPSD_INITDEV1 ; IF PRIMARY, JUMP AHEAD
|
||||
LD B,%00000100 ; MASK FOR SECONDARY
|
||||
ESPSD_INITDEV1:
|
||||
LD C,(IY+ESPSD_IOBASE) ; STATUS PORT
|
||||
IN A,(C) ; GET STATUS
|
||||
AND B ; APPLY MASK
|
||||
JP Z,ESPSD_NOMEDIA ; IF NO CARD, HANDLE AS NO MEDIA
|
||||
;
|
||||
CALL ESPSD_INITCARD ; PERFORM DEVICE INIT
|
||||
JP NZ,ESPSD_NOMEDIA ; CONVERT TO NO MEDIA ERROR
|
||||
;
|
||||
@@ -638,7 +643,7 @@ ESPSD_PUTBYTE1:
|
||||
JR Z,ESPSD_PUTBYTE2
|
||||
;JR ESPSD_PUTBYTE1 ; *DEBUG*
|
||||
DJNZ ESPSD_PUTBYTE1
|
||||
LD A,ESPSD_STBSYTO
|
||||
LD A,ESPSD_STTO
|
||||
OR A
|
||||
RET
|
||||
ESPSD_PUTBYTE2:
|
||||
@@ -657,7 +662,7 @@ ESPSD_PUTBYTE2:
|
||||
;
|
||||
ESPSD_PUTBYTE_SLOW:
|
||||
PUSH HL
|
||||
LD HL,$1000 ; *TODO* TUNE THIS VALUE!!!
|
||||
LD HL,50 * CPUMHZ ; CPU SPEED SCALED TIMEOUT
|
||||
ESPSD_PUTBYTE_SLOW1:
|
||||
PUSH HL
|
||||
CALL ESPSD_PUTBYTE
|
||||
@@ -667,7 +672,7 @@ ESPSD_PUTBYTE_SLOW1:
|
||||
LD A,H
|
||||
OR L
|
||||
JR NZ,ESPSD_PUTBYTE_SLOW1
|
||||
LD A,ESPSD_STBSYTO
|
||||
LD A,ESPSD_STTO
|
||||
ESPSD_PUTBYTE_SLOW_Z:
|
||||
;CALL PC_SPACE ; *DEBUG*
|
||||
;CALL PRTHEXWORDHL ; *DEBUG*
|
||||
@@ -689,7 +694,7 @@ ESPSD_GETBYTE1:
|
||||
BIT 7,A
|
||||
JR NZ,ESPSD_GETBYTE2
|
||||
DJNZ ESPSD_GETBYTE1
|
||||
LD A,ESPSD_STBSYTO
|
||||
LD A,ESPSD_STTO
|
||||
OR A
|
||||
RET
|
||||
ESPSD_GETBYTE2:
|
||||
@@ -708,7 +713,7 @@ ESPSD_GETBYTE2:
|
||||
;
|
||||
ESPSD_GETBYTE_SLOW:
|
||||
PUSH HL
|
||||
LD HL,$1000 ; *TODO* TUNE THIS VALUE???
|
||||
LD HL,50 * CPUMHZ ; CPU SPEED SCALED TIMEOUT
|
||||
ESPSD_GETBYTE_SLOW1:
|
||||
PUSH HL
|
||||
CALL ESPSD_GETBYTE
|
||||
@@ -718,7 +723,7 @@ ESPSD_GETBYTE_SLOW1:
|
||||
LD A,H
|
||||
OR L
|
||||
JR NZ,ESPSD_GETBYTE_SLOW1
|
||||
LD A,ESPSD_STBSYTO
|
||||
LD A,ESPSD_STTO
|
||||
ESPSD_GETBYTE_SLOW_Z:
|
||||
;CALL PC_SPACE ; *DEBUG*
|
||||
;CALL PRTHEXWORDHL ; *DEBUG*
|
||||
@@ -732,36 +737,16 @@ ESPSD_GETBYTE_SLOW_Z:
|
||||
;
|
||||
; ERROR HANDLERS
|
||||
;
|
||||
ESPSD_INVUNIT:
|
||||
LD A,ESPSD_STINVUNIT
|
||||
JR ESPSD_ERR2 ; SPECIAL CASE FOR INVALID UNIT
|
||||
;
|
||||
ESPSD_NOMEDIA:
|
||||
LD A,ESPSD_STNOMEDIA
|
||||
JR ESPSD_ERR
|
||||
;
|
||||
ESPSD_CMDERR:
|
||||
LD A,ESPSD_STCMDERR
|
||||
JR ESPSD_ERR
|
||||
;
|
||||
ESPSD_IOERR:
|
||||
LD A,ESPSD_STIOERR
|
||||
JR ESPSD_ERR
|
||||
;
|
||||
ESPSD_RDYTO:
|
||||
LD A,ESPSD_STRDYTO
|
||||
JR ESPSD_ERR
|
||||
;
|
||||
ESPSD_DRQTO:
|
||||
LD A,ESPSD_STDRQTO
|
||||
JR ESPSD_ERR
|
||||
;
|
||||
ESPSD_BSYTO:
|
||||
LD A,ESPSD_STBSYTO
|
||||
JR ESPSD_ERR
|
||||
;
|
||||
ESPSD_NOTSUP:
|
||||
LD A,ESPSD_STNOTSUP
|
||||
ESPSD_TO:
|
||||
LD A,ESPSD_STTO
|
||||
JR ESPSD_ERR
|
||||
;
|
||||
ESPSD_NOTRDY:
|
||||
@@ -771,7 +756,6 @@ ESPSD_NOTRDY:
|
||||
ESPSD_ERR:
|
||||
LD (IY+ESPSD_STAT),A ; SAVE NEW STATUS
|
||||
;
|
||||
ESPSD_ERR2:
|
||||
#IF (ESPSDTRACE >= 2)
|
||||
CALL ESPSD_PRTSTAT
|
||||
#ENDIF
|
||||
@@ -791,8 +775,6 @@ ESPSD_PRTSTAT:
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
LD A,(IY+ESPSD_STAT)
|
||||
CP ESPSD_STINVUNIT
|
||||
JR Z,ESPSD_PRTSTAT2 ; INVALID UNIT IS SPECIAL CASE
|
||||
CALL ESPSD_PRTPREFIX ; PRINT UNIT PREFIX
|
||||
JR ESPSD_PRTSTAT3
|
||||
ESPSD_PRTSTAT2:
|
||||
@@ -816,28 +798,13 @@ ESPSD_PRTSTATSTR:
|
||||
LD DE,ESPSD_STR_STOK
|
||||
JR Z,ESPSD_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,ESPSD_STR_STINVUNIT
|
||||
JR Z,ESPSD_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,ESPSD_STR_STNOMEDIA
|
||||
JR Z,ESPSD_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,ESPSD_STR_STCMDERR
|
||||
JR Z,ESPSD_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,ESPSD_STR_STIOERR
|
||||
JR Z,ESPSD_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,ESPSD_STR_STRDYTO
|
||||
JR Z,ESPSD_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,ESPSD_STR_STDRQTO
|
||||
JR Z,ESPSD_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,ESPSD_STR_STBSYTO
|
||||
JR Z,ESPSD_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,ESPSD_STR_STNOTSUP
|
||||
LD DE,ESPSD_STR_STTO
|
||||
JR Z,ESPSD_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,ESPSD_STR_STNOTRDY
|
||||
@@ -869,16 +836,11 @@ ESPSD_PRTPREFIX1:
|
||||
;=============================================================================
|
||||
;
|
||||
ESPSD_STR_STOK .TEXT "OK$"
|
||||
ESPSD_STR_STINVUNIT .TEXT "INVALID UNIT$"
|
||||
ESPSD_STR_STNOMEDIA .TEXT "NO MEDIA$"
|
||||
ESPSD_STR_STCMDERR .TEXT "COMMAND ERROR$"
|
||||
ESPSD_STR_STIOERR .TEXT "IO ERROR$"
|
||||
ESPSD_STR_STRDYTO .TEXT "READY TIMEOUT$"
|
||||
ESPSD_STR_STDRQTO .TEXT "DRQ TIMEOUT$"
|
||||
ESPSD_STR_STBSYTO .TEXT "BUSY TIMEOUT$"
|
||||
ESPSD_STR_STNOTSUP .TEXT "NOT SUPPORTED$"
|
||||
ESPSD_STR_STTO .TEXT "TIMEOUT$"
|
||||
ESPSD_STR_STNOTRDY .TEXT "NOT READY$"
|
||||
ESPSD_STR_STUNK .TEXT "UNKNOWN ERROR$"
|
||||
ESPSD_STR_STUNK .TEXT "UNKNOWN ERROR$"
|
||||
;
|
||||
;=============================================================================
|
||||
; DATA STORAGE
|
||||
|
||||
Reference in New Issue
Block a user