diff --git a/Source/CBIOS/cbios.asm b/Source/CBIOS/cbios.asm index fd9cbd4e..9f30a48a 100644 --- a/Source/CBIOS/cbios.asm +++ b/Source/CBIOS/cbios.asm @@ -3427,7 +3427,7 @@ DEV12 .DB "SYQ$" DEV13 .DB "CHUSB$" DEV14 .DB "CHSD$" DEV15 .DB "USB$" -DEV16 .DB "S100SD$" +DEV16 .DB "ESPSD$" DEV17 .EQU DEVUNK ; #ENDIF diff --git a/Source/Doc/Catalog.md b/Source/Doc/Catalog.md index c8ea1a2b..6941c1eb 100644 --- a/Source/Doc/Catalog.md +++ b/Source/Doc/Catalog.md @@ -1238,6 +1238,7 @@ The following files are found in | `DRTCPM.OBJ` | Startup Object File (???) | | `EXEC.H` | Language include file (see manual) | | `FLOAT.H` | Language include file (see manual) | +| `HELLO.C` | Sample C source file | | `HITECH.H` | Language include file (see manual) | | `LIBC.LIB` | Standard C Runtime Library | | `LIBF.LIB` | Floating Point Library | diff --git a/Source/HBIOS/Config/FZ80_std.asm b/Source/HBIOS/Config/FZ80_std.asm index 1b80d5e2..9523b761 100644 --- a/Source/HBIOS/Config/FZ80_std.asm +++ b/Source/HBIOS/Config/FZ80_std.asm @@ -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) diff --git a/Source/HBIOS/Config/S100_std.asm b/Source/HBIOS/Config/S100_std.asm index 83d7756d..9148156b 100644 --- a/Source/HBIOS/Config/S100_std.asm +++ b/Source/HBIOS/Config/S100_std.asm @@ -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) diff --git a/Source/HBIOS/espsd.asm b/Source/HBIOS/espsd.asm index b43da1a6..e99ef950 100644 --- a/Source/HBIOS/espsd.asm +++ b/Source/HBIOS/espsd.asm @@ -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 diff --git a/Source/ver.inc b/Source/ver.inc index c44c4263..01ff111e 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 6 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.6.0-dev.17" +#DEFINE BIOSVER "3.6.0-dev.18" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 6ab08361..de03258f 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 6 rup equ 0 rtp equ 0 biosver macro - db "3.6.0-dev.17" + db "3.6.0-dev.18" endm