diff --git a/Doc/Hard Disk Anatomy.pdf b/Doc/Hard Disk Anatomy.pdf index fda44f88..d525eb68 100644 Binary files a/Doc/Hard Disk Anatomy.pdf and b/Doc/Hard Disk Anatomy.pdf differ diff --git a/Doc/Testing Notes.txt b/Doc/Testing Notes.txt deleted file mode 100644 index 9175409f..00000000 --- a/Doc/Testing Notes.txt +++ /dev/null @@ -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 diff --git a/Source/Doc/Graphics/Hard Disk Anatomy.vsd b/Source/Doc/Graphics/Hard Disk Anatomy.vsd index 862442e7..a9c89c08 100644 Binary files a/Source/Doc/Graphics/Hard Disk Anatomy.vsd and b/Source/Doc/Graphics/Hard Disk Anatomy.vsd differ diff --git a/Source/Doc/RomWBW Disk Layouts.xlsx b/Source/Doc/RomWBW Disk Layouts.xlsx index da72b8c6..ccfebb5f 100644 Binary files a/Source/Doc/RomWBW Disk Layouts.xlsx and b/Source/Doc/RomWBW Disk Layouts.xlsx differ diff --git a/Source/HBIOS/sd.asm b/Source/HBIOS/sd.asm index aa04b885..a0785524 100644 --- a/Source/HBIOS/sd.asm +++ b/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$" diff --git a/Source/ver.inc b/Source/ver.inc index 8a60457c..86b639b2 100644 --- a/Source/ver.inc +++ b/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 diff --git a/Source/ver.lib b/Source/ver.lib index 959577f0..716dc825 100644 --- a/Source/ver.lib +++ b/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