Browse Source

More ESPSD Driver Tweaks

pull/609/head v3.6.0-dev.19
Wayne Warthen 6 months ago
parent
commit
072774a147
No known key found for this signature in database GPG Key ID: 8B34ED29C07EEB0A
  1. 71
      Source/HBIOS/espsd.asm
  2. 2
      Source/ver.inc
  3. 2
      Source/ver.lib

71
Source/HBIOS/espsd.asm

@ -13,6 +13,7 @@
;
; TODO:
; - AVOID RESELECTING PRI/SEC ON EVERY I/O CALL
; - REDUCE PUSH/POP CALLS IN GET/PUTBYTE, BLKREAD/WRITE
;
; NOTES:
;
@ -34,7 +35,7 @@
;
; XIN: DATA READ FROM ESP32 PENDING
; ERR: ERROR ACTIVE
; DSW: OLED DISPLAY ACTIVATION
; DSW: OLED DISPLAY ACTIVATION SWITCH
; CS1: SD CARD 1 CHIP SELECT
; CS0: SD CARD 0 CHIP SELECT
; CD1: SD CARD 1 MEDIA PRESENT (CARD DETECT)
@ -51,18 +52,53 @@
; XIN: UNUSED???
; XOUT: ACTIVATE WRITE TO ESP32
;
; COMMAND/DATA EXCHANGES
; ----------------------
;
; ->CMD_INIT1, <-STATUS
; ->CMD_INIT2, <-STATUS
; ->CMD_SEL1, <-STATUS
; ->CMD_SEL2, <-STATUS
; ->CMD_SETTRKSEC, ->[Track (byte), Sector (byte)], <-STATUS
; ->CMD_READ, <-[Sector Data (512 bytes)], <-STATUS
; ->CMD_WRITE, ->[Sector Data (512 bytes)], <-STATUS
; ->CMD_FORMAT, <-STATUS
; ->CMD_RESET
;
; NEW/PROPOSED:
;
; ->CMD_FWVER, <-[Version: Major (byte), Minor (byte)], <-STATUS
; ->CMD_SETLBA, ->[LBA value (4 bytes, MS first)], <-STATUS
; ->CMD_TYPE, <-[SD Card Type (1 byte)], <-STATUS
; ->CMD_CAP, <-[Sector Count (4 bytes, MS first)], <-STATUS
; ->CMD_CID, <-[CID Data (16 bytes), <-STATUS
; ->CMD_CSD, <-[CSD Data (16 bytes), <-STATUS
;
; IF AN ERROR OCCURS IN ANY COMMAND THAT RETURNS DATA BEFORE THE
; STATUS BYTE, THEN DUMMY PADDING DATA MUST BE SENT BEFORE THE
; ERROR STATUS.
;
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_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_SETTRKSEC .EQU $84 ; SET TRACK/SECTOR 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_FORMAT .EQU $87 ; FORMAT SECTOR ON SELECTED SD CARD AT CURRENT LBA
ESPSD_CMD_RESET .EQU $88 ; RESET ESP32 MODULE
ESPSD_CMD_FWVER .EQU $90 ; REPORT ESP32 FIRMWARE VERSION
ESPSD_CMD_SETLBA .EQU $91 ; SET NEW CURRENT LBA (32-BIT)
ESPSD_CMD_TYPE .EQU $92 ; REPORT CARD TYPE OF SELECTED SD CARD
ESPSD_CMD_CAP .EQU $93 ; REPORT CAPACITY (SECTORS) OF SELECTED SD CARD
ESPSD_CMD_CID .EQU $94 ; REPORT CID DATA OF SELECTED SD CARD
ESPSD_CMD_CSD .EQU $95 ; REPORT CSD DATA OF SELECTED SD CARD
;
ESPSD_STAT_OK .EQU $00 ; OPERATION COMPLETED OK
ESPSD_STAT_ERR .EQU $1A ; OPERATION FAILED
;
; ESPSD DEVICE STATUS CODES
;
@ -74,9 +110,7 @@ ESPSD_STNOTRDY .EQU -4
;
; IDE DEVICE CONFIGURATION
;
ESPSD_CFGSIZ .EQU 12 ; SIZE OF CFG TBL ENTRIES
;
; PER DEVICE DATA OFFSETS
; PER DEVICE DATA OFFSETS IN CFG BLOCK
;
ESPSD_DEV .EQU 0 ; OFFSET OF DEVICE NUMBER (BYTE)
ESPSD_ROLE .EQU 1 ; 0=PRIMARY, 1=SECONDARY
@ -85,6 +119,8 @@ ESPSD_STAT .EQU 3 ; LAST STATUS (BYTE)
ESPSD_MEDCAP .EQU 4 ; MEDIA CAPACITY (DWORD)
ESPSD_LBA .EQU 8 ; OFFSET OF LBA (DWORD)
;
ESPSD_CFGSIZ .EQU 12 ; SIZE OF CFG TBL ENTRIES
;
ESPSD_CFGTBL:
;
#IF (ESPSDCNT >= 1)
@ -275,12 +311,10 @@ ESPSD_DEFMED:
;
ESPSD_READ:
CALL HB_DSKREAD ; HOOK HBIOS DISK READ SUPERVISOR
;;;CALL NEWLINE
;;;LD A,'R'
;;;CALL COUT
;;;CALL PRTHEXWORDHL
LD A,ESPSD_CMD_READ ; SETUP FOR BLOCK READ CMD
JP ESPSD_IO ; CONTINUE TO GENERIC IO ROUTINE
;
@ -288,12 +322,10 @@ ESPSD_READ:
;
ESPSD_WRITE:
CALL HB_DSKWRITE ; HOOK HBIOS DISK WRITE SUPERVISOR
;;;CALL NEWLINE
;;;LD A,'W'
;;;CALL COUT
;;;CALL PRTHEXWORDHL
LD A,ESPSD_CMD_WRITE ; SETUP FOR BLOCK WRITE CMD
JP ESPSD_IO ; CONTINUE TO GENERIC IO ROUTINE
;
@ -526,7 +558,7 @@ ESPSD_RUNCMD:
; A 16-BIT LBA.
;
ESPSD_SETLBA:
LD E,ESPSD_CMD_SETLBA
LD E,ESPSD_CMD_SETTRKSEC
CALL ESPSD_CMD_SLOW
RET NZ
LD E,H
@ -540,7 +572,7 @@ ESPSD_SETLBA:
LD A,E ; RESULT TO ACCUM
OR A ; SET FLAGS
RET Z ; GOOD RETURN
LD A,ESPSD_STIOERR ; CALL THIS AN IO ERROR
LD A,ESPSD_STIOERR ; CALL THIS AN IO ERROR
OR A
RET
;
@ -555,22 +587,25 @@ ESPSD_BLKREAD:
ESPSD_BLKREAD1:
PUSH BC
CALL ESPSD_GETBYTE_SLOW
POP BC
RET NZ
LD (HL),E
INC HL
PUSH BC
CALL ESPSD_GETBYTE_SLOW
POP BC
RET NZ
LD (HL),E
INC HL
POP BC
DJNZ ESPSD_BLKREAD1
;
CALL ESPSD_GETBYTE_SLOW ; GET RESULT
RET NZ ; HANDLE ERROR
LD A,E ; RESULT TO ACCUM
;;;CALL PRTHEXBYTE ; *DEBUG*
OR A ; SET FLAGS
RET Z ; GOOD RETURN
LD A,ESPSD_STIOERR ; CALL THIS AN IO ERROR
LD A,ESPSD_STIOERR ; CALL THIS AN IO ERROR
OR A ; SET FLAGS
RET ; DONE
;
@ -583,16 +618,18 @@ ESPSD_BLKWRITE:
;
LD B,0 ; LOOP COUNTER
ESPSD_BLKWRITE1:
PUSH BC
LD E,(HL)
INC HL
PUSH BC
CALL ESPSD_PUTBYTE_SLOW
POP BC
RET NZ
LD E,(HL)
INC HL
PUSH BC
CALL ESPSD_PUTBYTE_SLOW
RET NZ
POP BC
RET NZ
DJNZ ESPSD_BLKWRITE1
;
CALL ESPSD_GETBYTE_SLOW ; GET RESULT
@ -663,6 +700,7 @@ ESPSD_PUTBYTE2:
ESPSD_PUTBYTE_SLOW:
PUSH HL
LD HL,50 * CPUMHZ ; CPU SPEED SCALED TIMEOUT
;;;LD HL,0 ; *DEBUG*
ESPSD_PUTBYTE_SLOW1:
PUSH HL
CALL ESPSD_PUTBYTE
@ -714,6 +752,7 @@ ESPSD_GETBYTE2:
ESPSD_GETBYTE_SLOW:
PUSH HL
LD HL,50 * CPUMHZ ; CPU SPEED SCALED TIMEOUT
;;;LD HL,0 ; *DEBUG*
ESPSD_GETBYTE_SLOW1:
PUSH HL
CALL ESPSD_GETBYTE

2
Source/ver.inc

@ -2,7 +2,7 @@
#DEFINE RMN 6
#DEFINE RUP 0
#DEFINE RTP 0
#DEFINE BIOSVER "3.6.0-dev.18"
#DEFINE BIOSVER "3.6.0-dev.19"
#define rmj RMJ
#define rmn RMN
#define rup RUP

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 6
rup equ 0
rtp equ 0
biosver macro
db "3.6.0-dev.18"
db "3.6.0-dev.19"
endm

Loading…
Cancel
Save