Browse Source

Enhance CSIO handling in sd.asm

Enhance CSIO to play nice(r) with other users of Z180 CSIO by restoring the CSIO speed to default upon function return.
pull/173/head
Wayne Warthen 5 years ago
parent
commit
af2639ef42
  1. 2
      Source/HBIOS/hbios.asm
  2. 58
      Source/HBIOS/sd.asm
  3. 4
      Source/HBIOS/std.asm
  4. 2
      Source/ver.inc
  5. 2
      Source/ver.lib

2
Source/HBIOS/hbios.asm

@ -919,7 +919,7 @@ HB_START:
; SET DEFAULT CSIO SPEED (INTERNAL CLOCK, SLOW AS POSSIBLE)
LD A,Z180_CNTR_DEF ; DIV 1280, 14KHZ @ 18MHZ CLK
OUT0 (SD_CNTR),A
OUT0 (Z180_CNTR),A
#ENDIF
;
#ENDIF

58
Source/HBIOS/sd.asm

@ -708,10 +708,26 @@ SD_IO:
LD (SD_BLKCNT),A ; ... AND SAVE IT
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))
; 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
; HOOK RETURN TO RESTORE CSIO TO DEFAULT SPEED
LD HL,SD_CSIO_DEF ; ROUTE RETURN
PUSH HL ; ... THRU CSIO RESTORE
#ENDIF
;
#IF (SDTRACE == 1)
LD HL,SD_PRTERR ; SET UP SD_PRTERR
PUSH HL ; ... TO FILTER ALL EXITS
#ENDIF
;
CALL SD_SELUNIT ; HARDWARE SELECTION OF TARGET UNIT
RET NZ ; ABORT ON ERROR
LD A,(SD_CMDVAL) ; GET COMMAND VALUE
@ -871,6 +887,10 @@ 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))
CALL SD_CSIO_DEF ; ENSURE CSIO AT DEFAULT SPEED
#ENDIF
;
; WAKE UP THE CARD, KEEP DIN HI (ASSERTED) AND /CS HI (DEASSERTED)
LD B,$10 ; MIN 74 CLOCKS REQUIRED, WE USE 128 ($10 * 8)
@ -916,9 +936,6 @@ SD_INITCARD3:
CALL VDELAY ; CPU SPEED NORMALIZED DELAY
; SEND APP CMD INTRODUCER
CALL SD_EXECACMD ; SEND APP COMMAND INTRODUCER
;#IF (SDMODE == SDMODE_MT)
; CALL NZ,SD_EXECACMD ; retry any fail
;#ENDIF
CP SD_STCMDERR ; COMMAND ERROR?
JR Z,SD_INITCARD3A ; IF SO, TRY MMC CARD INIT
OR A ; SET FLAGS
@ -1039,14 +1056,16 @@ SD_INITCARD5:
CALL SD_EXECCMDND ; EXEC COMMAND W/ NO DATA
RET NZ ; ABORT ON ERROR
#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC))
; PER SPEC, THE CARD SHOULD NOW BE ABLE TO HANDLE FULL SPEED OPERATION
; SO, FOR CSIO OPERATION, WE SET CSIO TO MAXIMUM SPEED
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
#ENDIF
; HIGH SPEED CSIO OPERATION IS NOW SET AT THE START OF SD_IO
;
;#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC))
; ; PER SPEC, THE CARD SHOULD NOW BE ABLE TO HANDLE FULL SPEED OPERATION
; ; SO, FOR CSIO OPERATION, WE SET CSIO TO MAXIMUM SPEED
; 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
;#ENDIF
;
; ISSUE SEND_CSD (TO DERIVE CARD CAPACITY)
LD A,SD_CMD_SEND_CSD ; SEND_CSD
@ -1849,6 +1868,23 @@ SD_GET1:
#ENDIF
RET
;
; SET CSIO TO DEFAULT SPEED
;
#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC))
;
SD_CSIO_DEF:
; 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
RET
;
#ENDIF
;
;
;=============================================================================
; ERROR HANDLING AND DIAGNOSTICS
;=============================================================================

4
Source/HBIOS/std.asm

@ -547,8 +547,10 @@ INT_PIO1B .EQU 12 ; ZILOG PIO 1, CHANNEL B
; SET DEFAULT CSIO SPEED (INTERNAL CLOCK, SLOW AS POSSIBLE)
; DIV 1280, 14KHZ @ 18MHZ CLK
#IF (CPUFAM == CPU_Z180)
#IF (BIOS == BIOS_WBW)
#IF (CPUFAM == CPU_Z180)
Z180_CNTR_DEF .EQU $06 ; DEFAULT VALUE FOR Z180 CSIO CONFIG
#ENDIF
#ENDIF
;

2
Source/ver.inc

@ -2,4 +2,4 @@
#DEFINE RMN 1
#DEFINE RUP 1
#DEFINE RTP 0
#DEFINE BIOSVER "3.1.1-pre.23"
#DEFINE BIOSVER "3.1.1-pre.24"

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 1
rup equ 1
rtp equ 0
biosver macro
db "3.1.1-pre.23"
db "3.1.1-pre.24"
endm

Loading…
Cancel
Save