|
|
@ -12,8 +12,7 @@ |
|
|
; |
|
|
; |
|
|
; |
|
|
; |
|
|
; TODO: |
|
|
; TODO: |
|
|
; - ADD TIMEOUT TO DETECTION!!! |
|
|
|
|
|
; - ADD CARD DETECT FUNCTIONALITY |
|
|
|
|
|
|
|
|
; - AVOID RESELECTING PRI/SEC ON EVERY I/O CALL |
|
|
; |
|
|
; |
|
|
; NOTES: |
|
|
; NOTES: |
|
|
; |
|
|
; |
|
|
@ -22,7 +21,6 @@ |
|
|
; COMMAND/RESPONSE PROTOCOL. THE DUAL SD BOARD SUPPORTS TWO SD CARD |
|
|
; COMMAND/RESPONSE PROTOCOL. THE DUAL SD BOARD SUPPORTS TWO SD CARD |
|
|
; DEVICES. SEPARATE INIT AND SELECT COMMANDS ARE PROVIDED TO HANDLE |
|
|
; DEVICES. SEPARATE INIT AND SELECT COMMANDS ARE PROVIDED TO HANDLE |
|
|
; THIS AS NEEDED. THE 2CF+1SD SUPPORTS ONLY A SINGLE SD CARD DEVICE. |
|
|
; 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 |
|
|
; TWO SEQUENTIAL I/O ADDRESSES ARE IMPLEMENTED. THE FIRST IS |
|
|
; FOR STATUS AND THE SECOND IS FOR COMMAND & DATA EXCHANGE. |
|
|
; FOR STATUS AND THE SECOND IS FOR COMMAND & DATA EXCHANGE. |
|
|
@ -53,35 +51,30 @@ |
|
|
; XIN: UNUSED??? |
|
|
; XIN: UNUSED??? |
|
|
; XOUT: ACTIVATE WRITE TO ESP32 |
|
|
; 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_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_SEL0 .EQU $82 ; (RE)SELECT PRIMARY SD CARD |
|
|
ESPSD_CMD_SEL1 .EQU $83 ; (RE)SELECT SECONDARY 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_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_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_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 DEVICE STATUS CODES |
|
|
; |
|
|
; |
|
|
ESPSD_STOK .EQU 0 |
|
|
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 |
|
|
; 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 |
|
|
; PER DEVICE DATA OFFSETS |
|
|
; |
|
|
; |
|
|
@ -414,6 +407,18 @@ ESPSD_DETECT: |
|
|
; INITIALIZE DEVICE |
|
|
; INITIALIZE DEVICE |
|
|
; |
|
|
; |
|
|
ESPSD_INITDEV: |
|
|
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 |
|
|
CALL ESPSD_INITCARD ; PERFORM DEVICE INIT |
|
|
JP NZ,ESPSD_NOMEDIA ; CONVERT TO NO MEDIA ERROR |
|
|
JP NZ,ESPSD_NOMEDIA ; CONVERT TO NO MEDIA ERROR |
|
|
; |
|
|
; |
|
|
@ -638,7 +643,7 @@ ESPSD_PUTBYTE1: |
|
|
JR Z,ESPSD_PUTBYTE2 |
|
|
JR Z,ESPSD_PUTBYTE2 |
|
|
;JR ESPSD_PUTBYTE1 ; *DEBUG* |
|
|
;JR ESPSD_PUTBYTE1 ; *DEBUG* |
|
|
DJNZ ESPSD_PUTBYTE1 |
|
|
DJNZ ESPSD_PUTBYTE1 |
|
|
LD A,ESPSD_STBSYTO |
|
|
|
|
|
|
|
|
LD A,ESPSD_STTO |
|
|
OR A |
|
|
OR A |
|
|
RET |
|
|
RET |
|
|
ESPSD_PUTBYTE2: |
|
|
ESPSD_PUTBYTE2: |
|
|
@ -657,7 +662,7 @@ ESPSD_PUTBYTE2: |
|
|
; |
|
|
; |
|
|
ESPSD_PUTBYTE_SLOW: |
|
|
ESPSD_PUTBYTE_SLOW: |
|
|
PUSH HL |
|
|
PUSH HL |
|
|
LD HL,$1000 ; *TODO* TUNE THIS VALUE!!! |
|
|
|
|
|
|
|
|
LD HL,50 * CPUMHZ ; CPU SPEED SCALED TIMEOUT |
|
|
ESPSD_PUTBYTE_SLOW1: |
|
|
ESPSD_PUTBYTE_SLOW1: |
|
|
PUSH HL |
|
|
PUSH HL |
|
|
CALL ESPSD_PUTBYTE |
|
|
CALL ESPSD_PUTBYTE |
|
|
@ -667,7 +672,7 @@ ESPSD_PUTBYTE_SLOW1: |
|
|
LD A,H |
|
|
LD A,H |
|
|
OR L |
|
|
OR L |
|
|
JR NZ,ESPSD_PUTBYTE_SLOW1 |
|
|
JR NZ,ESPSD_PUTBYTE_SLOW1 |
|
|
LD A,ESPSD_STBSYTO |
|
|
|
|
|
|
|
|
LD A,ESPSD_STTO |
|
|
ESPSD_PUTBYTE_SLOW_Z: |
|
|
ESPSD_PUTBYTE_SLOW_Z: |
|
|
;CALL PC_SPACE ; *DEBUG* |
|
|
;CALL PC_SPACE ; *DEBUG* |
|
|
;CALL PRTHEXWORDHL ; *DEBUG* |
|
|
;CALL PRTHEXWORDHL ; *DEBUG* |
|
|
@ -689,7 +694,7 @@ ESPSD_GETBYTE1: |
|
|
BIT 7,A |
|
|
BIT 7,A |
|
|
JR NZ,ESPSD_GETBYTE2 |
|
|
JR NZ,ESPSD_GETBYTE2 |
|
|
DJNZ ESPSD_GETBYTE1 |
|
|
DJNZ ESPSD_GETBYTE1 |
|
|
LD A,ESPSD_STBSYTO |
|
|
|
|
|
|
|
|
LD A,ESPSD_STTO |
|
|
OR A |
|
|
OR A |
|
|
RET |
|
|
RET |
|
|
ESPSD_GETBYTE2: |
|
|
ESPSD_GETBYTE2: |
|
|
@ -708,7 +713,7 @@ ESPSD_GETBYTE2: |
|
|
; |
|
|
; |
|
|
ESPSD_GETBYTE_SLOW: |
|
|
ESPSD_GETBYTE_SLOW: |
|
|
PUSH HL |
|
|
PUSH HL |
|
|
LD HL,$1000 ; *TODO* TUNE THIS VALUE??? |
|
|
|
|
|
|
|
|
LD HL,50 * CPUMHZ ; CPU SPEED SCALED TIMEOUT |
|
|
ESPSD_GETBYTE_SLOW1: |
|
|
ESPSD_GETBYTE_SLOW1: |
|
|
PUSH HL |
|
|
PUSH HL |
|
|
CALL ESPSD_GETBYTE |
|
|
CALL ESPSD_GETBYTE |
|
|
@ -718,7 +723,7 @@ ESPSD_GETBYTE_SLOW1: |
|
|
LD A,H |
|
|
LD A,H |
|
|
OR L |
|
|
OR L |
|
|
JR NZ,ESPSD_GETBYTE_SLOW1 |
|
|
JR NZ,ESPSD_GETBYTE_SLOW1 |
|
|
LD A,ESPSD_STBSYTO |
|
|
|
|
|
|
|
|
LD A,ESPSD_STTO |
|
|
ESPSD_GETBYTE_SLOW_Z: |
|
|
ESPSD_GETBYTE_SLOW_Z: |
|
|
;CALL PC_SPACE ; *DEBUG* |
|
|
;CALL PC_SPACE ; *DEBUG* |
|
|
;CALL PRTHEXWORDHL ; *DEBUG* |
|
|
;CALL PRTHEXWORDHL ; *DEBUG* |
|
|
@ -732,36 +737,16 @@ ESPSD_GETBYTE_SLOW_Z: |
|
|
; |
|
|
; |
|
|
; ERROR HANDLERS |
|
|
; ERROR HANDLERS |
|
|
; |
|
|
; |
|
|
ESPSD_INVUNIT: |
|
|
|
|
|
LD A,ESPSD_STINVUNIT |
|
|
|
|
|
JR ESPSD_ERR2 ; SPECIAL CASE FOR INVALID UNIT |
|
|
|
|
|
; |
|
|
|
|
|
ESPSD_NOMEDIA: |
|
|
ESPSD_NOMEDIA: |
|
|
LD A,ESPSD_STNOMEDIA |
|
|
LD A,ESPSD_STNOMEDIA |
|
|
JR ESPSD_ERR |
|
|
JR ESPSD_ERR |
|
|
; |
|
|
; |
|
|
ESPSD_CMDERR: |
|
|
|
|
|
LD A,ESPSD_STCMDERR |
|
|
|
|
|
JR ESPSD_ERR |
|
|
|
|
|
; |
|
|
|
|
|
ESPSD_IOERR: |
|
|
ESPSD_IOERR: |
|
|
LD A,ESPSD_STIOERR |
|
|
LD A,ESPSD_STIOERR |
|
|
JR ESPSD_ERR |
|
|
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 |
|
|
JR ESPSD_ERR |
|
|
; |
|
|
; |
|
|
ESPSD_NOTRDY: |
|
|
ESPSD_NOTRDY: |
|
|
@ -771,7 +756,6 @@ ESPSD_NOTRDY: |
|
|
ESPSD_ERR: |
|
|
ESPSD_ERR: |
|
|
LD (IY+ESPSD_STAT),A ; SAVE NEW STATUS |
|
|
LD (IY+ESPSD_STAT),A ; SAVE NEW STATUS |
|
|
; |
|
|
; |
|
|
ESPSD_ERR2: |
|
|
|
|
|
#IF (ESPSDTRACE >= 2) |
|
|
#IF (ESPSDTRACE >= 2) |
|
|
CALL ESPSD_PRTSTAT |
|
|
CALL ESPSD_PRTSTAT |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
@ -791,8 +775,6 @@ ESPSD_PRTSTAT: |
|
|
PUSH DE |
|
|
PUSH DE |
|
|
PUSH HL |
|
|
PUSH HL |
|
|
LD A,(IY+ESPSD_STAT) |
|
|
LD A,(IY+ESPSD_STAT) |
|
|
CP ESPSD_STINVUNIT |
|
|
|
|
|
JR Z,ESPSD_PRTSTAT2 ; INVALID UNIT IS SPECIAL CASE |
|
|
|
|
|
CALL ESPSD_PRTPREFIX ; PRINT UNIT PREFIX |
|
|
CALL ESPSD_PRTPREFIX ; PRINT UNIT PREFIX |
|
|
JR ESPSD_PRTSTAT3 |
|
|
JR ESPSD_PRTSTAT3 |
|
|
ESPSD_PRTSTAT2: |
|
|
ESPSD_PRTSTAT2: |
|
|
@ -816,28 +798,13 @@ ESPSD_PRTSTATSTR: |
|
|
LD DE,ESPSD_STR_STOK |
|
|
LD DE,ESPSD_STR_STOK |
|
|
JR Z,ESPSD_PRTSTATSTR1 |
|
|
JR Z,ESPSD_PRTSTATSTR1 |
|
|
INC A |
|
|
INC A |
|
|
LD DE,ESPSD_STR_STINVUNIT |
|
|
|
|
|
JR Z,ESPSD_PRTSTATSTR1 |
|
|
|
|
|
INC A |
|
|
|
|
|
LD DE,ESPSD_STR_STNOMEDIA |
|
|
LD DE,ESPSD_STR_STNOMEDIA |
|
|
JR Z,ESPSD_PRTSTATSTR1 |
|
|
JR Z,ESPSD_PRTSTATSTR1 |
|
|
INC A |
|
|
INC A |
|
|
LD DE,ESPSD_STR_STCMDERR |
|
|
|
|
|
JR Z,ESPSD_PRTSTATSTR1 |
|
|
|
|
|
INC A |
|
|
|
|
|
LD DE,ESPSD_STR_STIOERR |
|
|
LD DE,ESPSD_STR_STIOERR |
|
|
JR Z,ESPSD_PRTSTATSTR1 |
|
|
JR Z,ESPSD_PRTSTATSTR1 |
|
|
INC A |
|
|
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 |
|
|
JR Z,ESPSD_PRTSTATSTR1 |
|
|
INC A |
|
|
INC A |
|
|
LD DE,ESPSD_STR_STNOTRDY |
|
|
LD DE,ESPSD_STR_STNOTRDY |
|
|
@ -869,16 +836,11 @@ ESPSD_PRTPREFIX1: |
|
|
;============================================================================= |
|
|
;============================================================================= |
|
|
; |
|
|
; |
|
|
ESPSD_STR_STOK .TEXT "OK$" |
|
|
ESPSD_STR_STOK .TEXT "OK$" |
|
|
ESPSD_STR_STINVUNIT .TEXT "INVALID UNIT$" |
|
|
|
|
|
ESPSD_STR_STNOMEDIA .TEXT "NO MEDIA$" |
|
|
ESPSD_STR_STNOMEDIA .TEXT "NO MEDIA$" |
|
|
ESPSD_STR_STCMDERR .TEXT "COMMAND ERROR$" |
|
|
|
|
|
ESPSD_STR_STIOERR .TEXT "IO 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_STNOTRDY .TEXT "NOT READY$" |
|
|
ESPSD_STR_STUNK .TEXT "UNKNOWN ERROR$" |
|
|
|
|
|
|
|
|
ESPSD_STR_STUNK .TEXT "UNKNOWN ERROR$" |
|
|
; |
|
|
; |
|
|
;============================================================================= |
|
|
;============================================================================= |
|
|
; DATA STORAGE |
|
|
; DATA STORAGE |
|
|
|