|
|
|
@ -4,15 +4,15 @@ |
|
|
|
;============================================================================= |
|
|
|
; |
|
|
|
; 1) TESTING |
|
|
|
; - TRY TO TEST GOIDLE, FIND CARD THAT REQUIRES 2 REQUESTS |
|
|
|
; - DUAL CARDS |
|
|
|
; - TEST XC CARD TYPE DETECTION |
|
|
|
; - TRY TO GET INIT TO FAIL, REMOVE DELAYS AT START OF GOIDLE? |
|
|
|
; - TRY TO TEST GOIDLE, FIND CARD THAT REQUIRES 2 REQUESTS |
|
|
|
; - DUAL CARDS |
|
|
|
; - TEST XC CARD TYPE DETECTION |
|
|
|
; - TRY TO GET INIT TO FAIL, REMOVE DELAYS AT START OF GOIDLE? |
|
|
|
; |
|
|
|
;---------------------------------------------------------------------------------------------- |
|
|
|
; SD Signal Active JUHA N8 CSIO PPI UART DSD MK4 SC MT |
|
|
|
; ------------ ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- |
|
|
|
; CS (DAT3) LO -> RTC:2 RTC:2 RTC:2 ~PC:4 ~MCR:3 OPR:2 SD:2 ~RTC:2/3OPR:4/5 |
|
|
|
; ------------ ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- |
|
|
|
; CS (DAT3) LO -> RTC:2 RTC:2 RTC:2 ~PC:4 ~MCR:3 OPR:2 SD:2 ~RTC:2/3OPR:4/5 |
|
|
|
; CLK HI -> RTC:1 RTC:1 CSIO PC:1 ~MCR:2 OPR:1 CSIO CSIO SPI |
|
|
|
; DI (CMD) HI -> RTC:0 RTC:0 CSIO PC:0 ~MCR:0 OPR:0 CSIO CSIO SPI |
|
|
|
; DO (DAT0) HI -> RTC:7 RTC:6 CSIO PB:7 ~MSR:5 OPR:0 CSIO CSIO SPI |
|
|
|
@ -58,14 +58,14 @@ |
|
|
|
; +---+---+---+---+---+---+---+---+ |
|
|
|
; | 0 | X | X | X | X | X | X | X | |
|
|
|
; +---+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
|
|
; | | | | | | | |
|
|
|
; | | | | | | +--- IDLE |
|
|
|
; | | | | | +------- ERASE RESET |
|
|
|
; | | | | +----------- ILLEGAL COMMAND |
|
|
|
; | | | +--------------- COM CRC ERROR |
|
|
|
; | | +------------------- ERASE SEQUENCE ERROR |
|
|
|
; | +----------------------- ADDRESS ERROR |
|
|
|
; +--------------------------- PARAMETER ERROR |
|
|
|
; | | | | | | | |
|
|
|
; | | | | | | +--- IDLE |
|
|
|
; | | | | | +------- ERASE RESET |
|
|
|
; | | | | +----------- ILLEGAL COMMAND |
|
|
|
; | | | +--------------- COM CRC ERROR |
|
|
|
; | | +------------------- ERASE SEQUENCE ERROR |
|
|
|
; | +----------------------- ADDRESS ERROR |
|
|
|
; +--------------------------- PARAMETER ERROR |
|
|
|
; |
|
|
|
; === DATA ERROR TOKEN === |
|
|
|
; |
|
|
|
@ -1281,7 +1281,7 @@ SD_EXECCMD: |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
CALL SD_SELECT |
|
|
|
; |
|
|
|
; |
|
|
|
#IF (SD_NOPULLUP) |
|
|
|
; DO NOT WAIT FOR READY PRIOR TO CMD0! THIS HACK IS REQUIRED BY |
|
|
|
; STUPID SD CARD ADAPTERS THAT NOW OMIT THE MISO PULL-UP. SEE |
|
|
|
@ -1290,11 +1290,11 @@ SD_EXECCMD: |
|
|
|
CP SD_CMD_GO_IDLE_STATE |
|
|
|
JR Z,SD_EXECCMD0 |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; |
|
|
|
; WAIT FOR CARD TO BE READY |
|
|
|
CALL SD_WAITRDY ; WAIT FOR CARD TO BE READY FOR A COMMAND |
|
|
|
JP NZ,SD_ERRRDYTO ; HANDLE TIMEOUT ERROR |
|
|
|
; |
|
|
|
; |
|
|
|
SD_EXECCMD0: |
|
|
|
; SEND THE COMMAND |
|
|
|
LD HL,SD_CMDBUF ; POINT TO COMMAND BUFFER |
|
|
|
@ -1422,7 +1422,7 @@ SD_PUTDATA: |
|
|
|
#IF (SDMODE == SDMODE_MT) |
|
|
|
LD D,B ; length to DB |
|
|
|
LD B,C |
|
|
|
LD A,$FE ; PACKET START |
|
|
|
LD A,$FE ; PACKET START |
|
|
|
OUT (SD_WRTR),A ; SEND IT |
|
|
|
|
|
|
|
LD C,SD_WRTR |
|
|
|
@ -1438,7 +1438,7 @@ SD_PUTDATA1: |
|
|
|
JR NZ,SD_PUTDATA1 ; LOOP FOR ALL BYTES |
|
|
|
|
|
|
|
LD A,$FF ; DUMMY CRC BYTE |
|
|
|
OUT (SD_WRTR),A |
|
|
|
OUT (SD_WRTR),A |
|
|
|
OUT (SD_WRTR),A ; SEND IT TWICE |
|
|
|
|
|
|
|
LD DE,$7FFF ; LOOP MAX (TIMEOUT) |
|
|
|
@ -1471,7 +1471,7 @@ SD_PUTDATA2: |
|
|
|
#ENDIF |
|
|
|
CP $FF ; WANT BYTE != $FF |
|
|
|
JR NZ,SD_PUTDATA3 ; NOT $FF, MOVE ON |
|
|
|
DEC DE |
|
|
|
DEC DE |
|
|
|
BIT 7,D |
|
|
|
JR Z,SD_PUTDATA2 ; KEEP TRYING UNTIL TIMEOUT |
|
|
|
SD_PUTDATA3: |
|
|
|
@ -1691,9 +1691,9 @@ SD_PUT: |
|
|
|
SET 4,A ; SET TRANSMIT ENABLE |
|
|
|
OUT0 (SD_CNTR),A |
|
|
|
#ELSE |
|
|
|
#IF (SDMODE == SDMODE_UART) |
|
|
|
#IF (SDMODE == SDMODE_UART) |
|
|
|
XOR $FF ; DI IS INVERTED ON UART |
|
|
|
#ENDIF |
|
|
|
#ENDIF |
|
|
|
LD C,A ; C=BYTE TO SEND |
|
|
|
LD B,8 ; SEND 8 BITS (LOOP 8 TIMES) |
|
|
|
LD A,(SD_OPRVAL) ; LOAD CURRENT OPR VALUE |
|
|
|
@ -1737,29 +1737,29 @@ SD_GET1: |
|
|
|
XOR SD_CLK ; TOGGLE CLOCK |
|
|
|
OUT (SD_OPRREG),A ; UPDATE CLOCK |
|
|
|
IN A,(SD_INPREG) ; READ THE DATA WHILE CLOCK IS ACTIVE |
|
|
|
#IF ((SDMODE == SDMODE_JUHA) | (SDMODE == SDMODE_PPI)) |
|
|
|
#IF ((SDMODE == SDMODE_JUHA) | (SDMODE == SDMODE_PPI)) |
|
|
|
RLA ; ROTATE INP:7 INTO CF |
|
|
|
#ENDIF |
|
|
|
#IF (SDMODE == SDMODE_N8) |
|
|
|
#ENDIF |
|
|
|
#IF (SDMODE == SDMODE_N8) |
|
|
|
RLA ; ROTATE INP:6 INTO CF |
|
|
|
RLA ; " |
|
|
|
#ENDIF |
|
|
|
#IF (SDMODE == SDMODE_UART) |
|
|
|
#ENDIF |
|
|
|
#IF (SDMODE == SDMODE_UART) |
|
|
|
RLA ; ROTATE INP:5 INTO CF |
|
|
|
RLA ; " |
|
|
|
RLA ; " |
|
|
|
#ENDIF |
|
|
|
#IF (SDMODE == SDMODE_DSD) |
|
|
|
#ENDIF |
|
|
|
#IF (SDMODE == SDMODE_DSD) |
|
|
|
RRA ; ROTATE INP:0 INTO CF |
|
|
|
#ENDIF |
|
|
|
#ENDIF |
|
|
|
RL C ; ROTATE CF INTO C:0 |
|
|
|
LD A,(SD_OPRVAL) ; BACK TO INITIAL VALUES (TOGGLE CLOCK) |
|
|
|
OUT (SD_OPRREG),A ; DO IT |
|
|
|
DJNZ SD_GET1 ; REPEAT FOR ALL 8 BITS |
|
|
|
LD A,C ; GET BYTE RECEIVED INTO A |
|
|
|
#IF (SDMODE == SDMODE_UART) |
|
|
|
#IF (SDMODE == SDMODE_UART) |
|
|
|
XOR $FF ; DO IS INVERTED ON UART |
|
|
|
#ENDIF |
|
|
|
#ENDIF |
|
|
|
#ENDIF |
|
|
|
#ENDIF |
|
|
|
RET |
|
|
|
@ -2025,21 +2025,33 @@ SD_DSKBUF .DW 0 ; ADR OF ACTIVE DISK BUFFER |
|
|
|
; |
|
|
|
MIRROR: |
|
|
|
#IF (((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC)) & SDCSIOFAST) |
|
|
|
; FASTEST BUT USES MOST CODE SPACE |
|
|
|
LD BC,MIRTAB ; 256 BYTE MIRROR TABLE |
|
|
|
ADD A,C ; ADD OFFSET |
|
|
|
ADD A,C ; ADD OFFSET |
|
|
|
LD C,A |
|
|
|
JR NC,MIRROR2 |
|
|
|
INC B |
|
|
|
MIRROR2: |
|
|
|
LD A,(BC) ; GET RESULT |
|
|
|
LD C,A ; RETURN RESULT IN C |
|
|
|
LD C,A ; RETURN RESULT IN C |
|
|
|
RET |
|
|
|
#ELSE ; FASTEST BUT USES MOST CODE SPACE |
|
|
|
LD B,8 ; BIT COUNTER |
|
|
|
MIRROR1: |
|
|
|
RLA ; ROTATE BIT 7 INTO CARRY |
|
|
|
RR C ; ROTATE CARRY INTO RESULT |
|
|
|
DJNZ MIRROR1 ; DO ALL 8 BITS |
|
|
|
#ELSE |
|
|
|
; SLOWER BUT LESS CODE SPACE |
|
|
|
LD C,A ; A = 76543210 |
|
|
|
RLCA |
|
|
|
RLCA ; A = 54321076 |
|
|
|
XOR C |
|
|
|
AND 0AAH |
|
|
|
XOR C ; A = 56341270 |
|
|
|
LD C,A |
|
|
|
RLCA |
|
|
|
RLCA |
|
|
|
RLCA ; A = 41270563 |
|
|
|
RRC C ; C = 05634127 |
|
|
|
XOR C |
|
|
|
AND 066H |
|
|
|
XOR C ; A = 01234567 |
|
|
|
LD C,A ; RETURN RESULT IN C |
|
|
|
RET |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
|