Browse Source

SD Card Compatibility Improvement

- Modified SD driver to keep SD card clock consistently fast after card init.  This only seemed to effect a Lexar 32GB uSD Card on CSIO interface.  Thanks and credit to Richard Deane for reporting this.
- Improved hard disk layout documentation.
pull/411/head v3.5.0-dev.66
Wayne Warthen 1 year ago
parent
commit
457aa44832
  1. BIN
      Doc/Hard Disk Anatomy.pdf
  2. 144
      Doc/Testing Notes.txt
  3. BIN
      Source/Doc/Graphics/Hard Disk Anatomy.vsd
  4. BIN
      Source/Doc/RomWBW Disk Layouts.xlsx
  5. 98
      Source/HBIOS/sd.asm
  6. 2
      Source/ver.inc
  7. 2
      Source/ver.lib

BIN
Doc/Hard Disk Anatomy.pdf

Binary file not shown.

144
Doc/Testing Notes.txt

@ -1,144 +0,0 @@
SIMH (X)
----
- Test UART driver
- Test HDSK driver
Zeta 1 (X)
------
- Test UART driver
- Test PPP detection (startup w/ and w/o PPP)
- Test boot to CRT
- Test PPPSD driver
- Test PPPCON driver (video & kbd)
- Test FD driver
- Test FDU app
Zeta 2 (X)
------
- Test UART driver
- Test PPP detection (startup w/ and w/o PPP)
- Test boot to CRT
- Test PPPSD driver
- Test PPPCON driver (video & kbd)
- Test FD driver
- Test FDU app
RCBus (X)
------
- Test SIO driver (Serial Module)
- Test ACIA driver (Dual Serial Module)
- Test IDE driver (Compact Flash Module)
- Test PPIDE driver (IDE Module)
- Test FD driver (SMC and WDC)
- Test FDU app (SMC and WDC)
N8-2312 (X)
-------
- Test ASCI driver
- Test SD driver (CSIO mode)
- Test FD driver
- Test FDU app
- Test TMS driver (video & kbd)
N8-2511 (X)
-------
- Test ASCI driver
- Test SD driver (Juha mode)
- Test FD driver
- Test FDU app
- Test TMS driver (video & kbd)
SBC (X)
---
- Test UART driver
- Test PPIDE driver
- Test PPISD driver
- Test PRP detection
- Test boot to CRT console
MK4 (X)
---
- Test ASCI driver
- Test IDE driver
- Test SD driver
- Test PRP detection
RAMF (X)
----
- Test RAMF driver
PRP (X)
---
- Test PRPSD driver
- Test PRPCON driver (video & kbd)
SCG (X)
---
- Test TMS driver (video)
VDU (X)
---
- Test CVDU driver (video & kbd)
CVDU (X)
----
- Test CVDU driver (video & kbd)
VGA (X)
---
- Test VGA driver (video & kbd)
DIO (X)
---
- Test FD driver
- Test FDU app
- Test IDE driver
DIO3 (X)
----
- Test FD driver
- Test FDU app
- Test PPIDE driver
DIDE (X)
----
- Test FD driver
- Test FDU app
- Test IDE driver
DSD (X)
---
- Test SD driver
4UART (X)
-----
- Test UART driver
UNA (X)
---
- General Startup
- Boot from disk functionality
- Image loading
- Monitor
- XM app
- ASSIGN app
- MODE app
- SYSCOPY app
- OSLDR app
- FDU app
- FDISK80 app
GENERAL (X)
-------
- Boot to ROM
- Boot to Disk
- Boot to Monitor
- XM app
- XM port auto-detect
- ASSIGN app
- MODE app
- SYSCOPY app
- FDU app
- FDISK80 app
- TUNE app

BIN
Source/Doc/Graphics/Hard Disk Anatomy.vsd

Binary file not shown.

BIN
Source/Doc/RomWBW Disk Layouts.xlsx

Binary file not shown.

98
Source/HBIOS/sd.asm

@ -446,6 +446,7 @@ SD_CMD_READ_SNGL_BLK .EQU $40 + 17 ; $51, CMD17 -> R1
SD_CMD_WRITE_BLOCK .EQU $40 + 24 ; $58, CMD24 -> R1
SD_CMD_APP_CMD .EQU $40 + 55 ; $77, CMD55 -> R1
SD_CMD_READ_OCR .EQU $40 + 58 ; $7A, CMD58 -> R3
SD_CMD_CRC_ON_OFF .EQU $40 + 59 ; $7B, CMD59 -> R1
;
; SD CARD APPLICATION COMMANDS (PRECEDED BY APP_CMD COMMAND)
;
@ -941,19 +942,12 @@ SD_IO:
OR A ; SET FLAGS
RET Z ; ZERO SECTOR I/O, RETURN W/ E=0 & A=0
;
#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX))
; CONSIDER CAPTURING CURRENT CNTR VALUE HERE AND USE IT
; IN SD_CSIO_DEF
; SET CSIO FOR HIGH SPEED OPERATION
CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING
CALL DLY32 ; WAIT A BIT MORE FOR FINAL BIT
XOR A ; ZERO MEANS MAX SPEED
OUT0 (SD_CNTR),A ; NOW SET CSIO PORT
CALL SD_SPD_FAST
;
; HOOK RETURN TO RESTORE CSIO TO DEFAULT SPEED
LD HL,SD_CSIO_DEF ; ROUTE RETURN
LD HL,SD_SPD_STD ; ROUTE RETURN
PUSH HL ; ... THRU CSIO RESTORE
#ENDIF
;
#IF (SDTRACE == 1)
LD HL,SD_PRTERR ; SET UP SD_PRTERR
@ -1045,6 +1039,9 @@ SD_MEDIA:
JR NZ,SD_MEDIA1 ; ERROR ACTIVE, GO RIGHT TO RESET
;
; USE SEND_CSD TO CHECK CARD
;;;LD A,'C' ;;;
;;;CALL COUT ;;;
CALL SD_SPD_FAST ; GO FAST FOR COMPATIBILITY
CALL SD_SELUNIT ; SET CUR UNIT
LD A,SD_CMD_SEND_CSD ; SEND_CSD
CALL SD_INITCMD ; SETUP COMMAND BUFFER
@ -1057,9 +1054,14 @@ SD_MEDIA:
JR Z,SD_MEDIA2 ; IF SUCCESS, BYPASS RESET
;
SD_MEDIA1:
;;;LD A,'R' ;;;
;;;CALL COUT ;;;
CALL SD_RESET ; RESET CARD
;
SD_MEDIA2:
;;;LD A,'D' ;;;
;;;CALL COUT ;;;
CALL SD_SPD_STD ; BACK TO STD SPEED
LD A,(IY+SD_STAT) ; GET STATUS
OR A ; SET FLAGS
LD D,0 ; NO MEDIA CHANGE DETECTED
@ -1072,7 +1074,6 @@ SD_MEDIA2:
;
;
;
;
SD_SEEK:
BIT 7,D ; CHECK FOR LBA FLAG
CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA
@ -1120,14 +1121,7 @@ SD_INITCARD:
CALL SD_CHKCD ; CHECK CARD DETECT
JP Z,SD_NOMEDIA ; Z=NO MEDIA, HANDLE IF SO
;
#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX))
CALL SD_CSIO_DEF ; ENSURE CSIO AT DEFAULT SPEED
#ENDIF
;
#IF (SDMODE == SDMODE_FZ80)
;;; FORCE SLOW SPEED HERE?
;;; CALL SD_SELECT?
#ENDIF
CALL SD_SPD_SLOW ; SET SLOW SPEED FOR INIT
;
; WAKE UP THE CARD, KEEP DIN HI (ASSERTED) AND /CS HI (DEASSERTED)
LD B,$10 ; MIN 74 CLOCKS REQUIRED, WE USE 128 ($10 * 8)
@ -1138,8 +1132,8 @@ SD_INITCARD1:
POP BC ; RESTORE LOOP CONTROL
DJNZ SD_INITCARD1 ; LOOP AS NEEDED
;
; MAKE SURE WE FINISH SENDING
#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX))
; MAKE SURE CSIO IS DONE SENDING DATA
CALL SD_WAITTX ; WAIT FOR TE TO CLEAR
CALL DLY32 ; WAIT A BIT MORE FOR FINAL BIT
#ENDIF
@ -1234,9 +1228,25 @@ SD_INITCARD4:
CALL SD_INITCMD ; SETUP COMMAND BUFFER
CALL SD_EXECCMD ; EXECUTE COMMAND
RET NZ ; ABORT ON ERROR
; CMD58 WORKED, GET OCR DATA AND SET CARD TYPE
CALL SD_GET ; BITS 31-24
CALL SD_DONE ; FINISH THE TRANSACTION
; CMD58 WORKED, GET OCR DATA
LD B,4 ; 4 BYTES OF OCR
LD HL,SD_BUF ; PUT IN OUR PRIVATE BUFFER
SD_INITCARD4B:
CALL SD_GET ; GET NEXT BYTE
LD (HL),A ; SAVE IT
INC HL ; BUMP BUF PTR
DJNZ SD_INITCARD4B ; LOOP AS NEEDED
;
#IF (SDTRACE >= 3)
; IF TRACING, DUMP THE OCR CONTENTS
CALL SD_PRTPREFIX
LD DE,SD_STR_OCR
CALL WRITESTR
LD DE,SD_BUF
LD A,4
CALL PRTHEXBUF
#ENDIF
LD A,(SD_BUF) ; FIRST BYTE OF BUF (BITS 31-24 OF OCR)
AND $40 ; ISOLATE BIT 30 (CCS)
LD C,SD_TYPESDSC ; ASSUME V1 CARD
JR Z,SD_INITCARD5 ; IF BIT NOT SET, THIS IS SDSC CARD
@ -1746,8 +1756,11 @@ SD_GETDATA3:
LD A,D
OR E
JR NZ,SD_GETDATA3 ; LOOP FOR ALL BYTES
;;;CALL PC_SPACE
CALL SD_GET ; DISCARD CRC BYTE 1
;;;CALL PRTHEXBYTE
CALL SD_GET ; DISCARD CRC BYTE 2
;;;CALL PRTHEXBYTE
#ENDIF
XOR A ; RESULT IS ZERO
SD_GETDATA4:
@ -1858,6 +1871,11 @@ SD_DONE:
PUSH AF
LD A,$FF
CALL SD_PUT
#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX))
; MAKE SURE CSIO IS DONE SENDING DATA
CALL SD_WAITTX ; WAIT FOR TE TO CLEAR
CALL DLY32 ; WAIT A BIT MORE FOR FINAL BIT
#ENDIF
CALL SD_DESELECT
POP AF
RET
@ -2306,11 +2324,26 @@ SD_GET1:
#ENDIF
RET
;
; SET CSIO TO DEFAULT SPEED
; SET STANDARD SPEED (RESTORE SPI INTERFACE TO DEFAULTS)
;
SD_SPD_STD:
;
#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX))
; SET CSIO FOR DEFAULT OPERATION
PUSH AF ; PRESERVE AF
CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING
CALL DLY32 ; WAIT A BIT MORE FOR FINAL BIT
LD A,Z180_CNTR_DEF ; DIV 1280, 14KHZ @ 18MHZ CLK
OUT0 (SD_CNTR),A ; DO IT
POP AF ; RESTORE AF
#ENDIF
RET
;
; SET SLOW SPEED
;
SD_SPD_SLOW:
;
SD_CSIO_DEF:
#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX))
; SET CSIO FOR DEFAULT OPERATION
PUSH AF ; PRESERVE AF
CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING
@ -2318,9 +2351,23 @@ SD_CSIO_DEF:
LD A,Z180_CNTR_DEF ; DIV 1280, 14KHZ @ 18MHZ CLK
OUT0 (SD_CNTR),A ; DO IT
POP AF ; RESTORE AF
#ENDIF
RET
;
; SET FAST SPEED
;
SD_SPD_FAST:
;
#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX))
; SET CSIO FOR HIGH SPEED OPERATION
PUSH AF ; PRESERVE AF
CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING
CALL DLY32 ; WAIT A BIT MORE FOR FINAL BIT
XOR A ; 0 IS HIGHEST CLOCK SPEED
OUT0 (SD_CNTR),A ; DO IT
POP AF ; RESTORE AF
#ENDIF
RET
;
;
;=============================================================================
@ -2510,6 +2557,7 @@ SD_STR_TOK .TEXT " TOK=$"
SD_STR_CSD .TEXT " CSD =$"
SD_STR_CID .TEXT " CID =$"
SD_STR_SCR .TEXT " SCR =$"
SD_STR_OCR .TEXT " OCR =$"
SD_STR_SDTYPE .TEXT " SD CARD TYPE ID=$"
;
SD_STR_STOK .TEXT "OK$"

2
Source/ver.inc

@ -2,7 +2,7 @@
#DEFINE RMN 5
#DEFINE RUP 0
#DEFINE RTP 0
#DEFINE BIOSVER "3.5.0-dev.65"
#DEFINE BIOSVER "3.5.0-dev.66"
#define rmj RMJ
#define rmn RMN
#define rup RUP

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 5
rup equ 0
rtp equ 0
biosver macro
db "3.5.0-dev.65"
db "3.5.0-dev.66"
endm

Loading…
Cancel
Save