|
|
|
@ -33,10 +33,10 @@ |
|
|
|
; BIT-0 SENDACT SENDACT |
|
|
|
; BIT-1 SD0_CD SD1_CD |
|
|
|
; BIT-2 SD1_CD RCV |
|
|
|
; BIT-3 SD0_CS GPIO3 |
|
|
|
; BIT-4 SD1_CS ERROR |
|
|
|
; BIT-5 DIAG SD1_CS |
|
|
|
; BIT-6 ERROR GPIO47 |
|
|
|
; BIT-3 /SD0_CS GPIO3 |
|
|
|
; BIT-4 /SD1_CS /ERROR |
|
|
|
; BIT-5 DIAG /SD1_CS |
|
|
|
; BIT-6 /ERROR GPIO47 |
|
|
|
; BIT-7 RCVRDY RCVRDY |
|
|
|
; |
|
|
|
; SENDACT: DATA OUTPUT TO ESP32 PENDING, XMIT REGISTER FULL |
|
|
|
@ -462,18 +462,14 @@ ESPSD_GEOM: |
|
|
|
; ON RETURN, ZF SET INDICATES HARDWARE FOUND |
|
|
|
; |
|
|
|
ESPSD_DETECT: |
|
|
|
; DO A BLIND READ TO RESET INPUT CHANNEL |
|
|
|
LD C,(IY+ESPSD_IOBASE) |
|
|
|
INC C |
|
|
|
IN A,(C) |
|
|
|
; WE USE A DUMMY SELECT COMMAND TO TEST FOR PRESENCE |
|
|
|
LD A,ESPSD_CMD_SEL0 |
|
|
|
ADD A,(IY+ESPSD_ROLE) |
|
|
|
LD E,A |
|
|
|
CALL ESPSD_CMD_SLOW |
|
|
|
RET NZ |
|
|
|
LD E,0 |
|
|
|
CALL ESPSD_PUTBYTE_SLOW |
|
|
|
RET NZ |
|
|
|
CALL ESPSD_PUTBYTE_SLOW |
|
|
|
RET NZ |
|
|
|
JP ESPSD_GETRESULT |
|
|
|
JP ESPSD_RUNCMD |
|
|
|
; |
|
|
|
; INITIALIZE DEVICE |
|
|
|
; |
|
|
|
@ -557,6 +553,11 @@ ESPSD_IO3: |
|
|
|
; INITIALIZE DEVICE |
|
|
|
; |
|
|
|
ESPSD_INITCARD: |
|
|
|
; DO A BLIND READ TO RESET INPUT CHANNEL |
|
|
|
LD C,(IY+ESPSD_IOBASE) |
|
|
|
INC C |
|
|
|
IN A,(C) |
|
|
|
; |
|
|
|
LD A,ESPSD_CMD_INIT0 ; INIT PRIMARY DEVICE |
|
|
|
ADD A,(IY+ESPSD_ROLE) ; ADJUST FOR PRI/SEC |
|
|
|
CALL ESPSD_RUNCMD ; USE COMMON CMD ROUTINE |
|
|
|
@ -672,6 +673,8 @@ ESPSD_BLKREAD: |
|
|
|
RET NZ |
|
|
|
; |
|
|
|
LD B,0 ; LOOP COUNTER |
|
|
|
|
|
|
|
#IF FALSE |
|
|
|
ESPSD_BLKREAD1: |
|
|
|
PUSH BC |
|
|
|
CALL ESPSD_GETBYTE_SLOW |
|
|
|
@ -686,6 +689,12 @@ ESPSD_BLKREAD1: |
|
|
|
LD (HL),E |
|
|
|
INC HL |
|
|
|
DJNZ ESPSD_BLKREAD1 |
|
|
|
#ELSE |
|
|
|
LD C,(IY+ESPSD_IOBASE) ; SET IO PORT |
|
|
|
INC C ; START W/ DATA PORT |
|
|
|
CALL ESPSD_BLKREAD2 ; DO FIRST 256 BYTES |
|
|
|
CALL ESPSD_BLKREAD2 ; DO SECOND 256 BYTES |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
CALL ESPSD_GETBYTE_SLOW ; GET RESULT |
|
|
|
RET NZ ; HANDLE ERROR |
|
|
|
@ -696,6 +705,22 @@ ESPSD_BLKREAD1: |
|
|
|
OR A ; SET FLAGS |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
ESPSD_BLKREAD2: |
|
|
|
; READ BYTES FAST (NO TIMEOUT CHECK) |
|
|
|
DEC C ; BACK TO STATUS PORT |
|
|
|
ESPSD_BLKREAD2A: |
|
|
|
IN A,(C) ; GET STATUS |
|
|
|
JP P,ESPSD_BLKREAD2A ; LOOP TILL DATA READY |
|
|
|
; DOUBLE CHECK STATUS, FIRST READ CAN BE BOGUS |
|
|
|
IN A,(C) ; GET STATUS |
|
|
|
JP P,ESPSD_BLKREAD2A ; LOOP TILL DATA READY |
|
|
|
; NOPS NEEDED FOR RELIABILITY |
|
|
|
NOP \ NOP \ NOP \ NOP \ NOP \ NOP |
|
|
|
INC C ; DATA PORT |
|
|
|
INI ; GET BYTE, BUMP PTR |
|
|
|
JR NZ,ESPSD_BLKREAD2 ; 256 TIMES |
|
|
|
RET |
|
|
|
; |
|
|
|
; BLOCK WRITE |
|
|
|
; |
|
|
|
ESPSD_BLKWRITE: |
|
|
|
@ -704,6 +729,8 @@ ESPSD_BLKWRITE: |
|
|
|
RET NZ |
|
|
|
; |
|
|
|
LD B,0 ; LOOP COUNTER |
|
|
|
|
|
|
|
#IF FALSE |
|
|
|
ESPSD_BLKWRITE1: |
|
|
|
LD E,(HL) |
|
|
|
INC HL |
|
|
|
@ -718,6 +745,12 @@ ESPSD_BLKWRITE1: |
|
|
|
POP BC |
|
|
|
RET NZ |
|
|
|
DJNZ ESPSD_BLKWRITE1 |
|
|
|
#ELSE |
|
|
|
LD C,(IY+ESPSD_IOBASE) ; SET IO PORT |
|
|
|
INC C ; START W/ DATA PORT |
|
|
|
CALL ESPSD_BLKWRITE2 ; DO FIRST 256 BYTES |
|
|
|
CALL ESPSD_BLKWRITE2 ; DO SECOND 256 BYTES |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
CALL ESPSD_GETBYTE_SLOW ; GET RESULT |
|
|
|
RET NZ ; HANDLE ERROR |
|
|
|
@ -728,6 +761,24 @@ ESPSD_BLKWRITE1: |
|
|
|
OR A ; SET FLAGS |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
ESPSD_BLKWRITE2: |
|
|
|
; WRITE BYTES FAST (NO TIMEOUT CHECK) |
|
|
|
DEC C ; BACK TO STATUS PORT |
|
|
|
ESPSD_BLKWRITE2A: |
|
|
|
IN A,(C) ; GET STATUS |
|
|
|
RRA ; SEND RDY BIT TO CF |
|
|
|
JR C,ESPSD_BLKWRITE2A ; LOOP WHILE XMIT FULL |
|
|
|
; DOUBLE CHECK STATUS, FIRST READ CAN BE BOGUS |
|
|
|
IN A,(C) ; GET STATUS |
|
|
|
RRA ; SEND RDY BIT TO CF |
|
|
|
JR C,ESPSD_BLKWRITE2A ; LOOP WHILE XMIT FULL |
|
|
|
; NOPS NEEDED FOR RELIABILITY |
|
|
|
NOP \ NOP \ NOP \ NOP \ NOP \ NOP |
|
|
|
INC C ; DATA PORT |
|
|
|
OUTI ; SEND BYTE, BUMP PTR |
|
|
|
JR NZ,ESPSD_BLKWRITE2 ; 256 TIMES |
|
|
|
RET |
|
|
|
; |
|
|
|
;============================================================================= |
|
|
|
; HARDWARE INTERFACE ROUTINES |
|
|
|
;============================================================================= |
|
|
|
@ -764,12 +815,20 @@ ESPSD_PUTBYTE: |
|
|
|
ESPSD_PUTBYTE1: |
|
|
|
IN A,(C) |
|
|
|
BIT 0,A |
|
|
|
JR Z,ESPSD_PUTBYTE2 |
|
|
|
JR NZ,ESPSD_PUTBYTE1A |
|
|
|
; DOUBLE CHECK STATUS, FIRST READ CAN BE BOGUS |
|
|
|
IN A,(C) |
|
|
|
BIT 0,A |
|
|
|
JR NZ,ESPSD_PUTBYTE1A |
|
|
|
JR ESPSD_PUTBYTE2 |
|
|
|
ESPSD_PUTBYTE1A: |
|
|
|
DJNZ ESPSD_PUTBYTE1 |
|
|
|
LD A,ESPSD_STTO |
|
|
|
OR A |
|
|
|
RET |
|
|
|
ESPSD_PUTBYTE2: |
|
|
|
; NOPS NEEDED FOR RELIABILITY |
|
|
|
NOP \ NOP \ NOP \ NOP \ NOP \ NOP |
|
|
|
INC C |
|
|
|
OUT (C),E |
|
|
|
; |
|
|
|
@ -785,7 +844,7 @@ ESPSD_PUTBYTE2: |
|
|
|
; |
|
|
|
ESPSD_PUTBYTE_SLOW: |
|
|
|
PUSH HL |
|
|
|
LD HL,100 * CPUMHZ ; CPU SPEED SCALED TIMEOUT |
|
|
|
LD HL,200 * CPUMHZ ; CPU SPEED SCALED TIMEOUT |
|
|
|
ESPSD_PUTBYTE_SLOW1: |
|
|
|
PUSH HL |
|
|
|
CALL ESPSD_PUTBYTE |
|
|
|
@ -815,12 +874,20 @@ ESPSD_GETBYTE: |
|
|
|
ESPSD_GETBYTE1: |
|
|
|
IN A,(C) |
|
|
|
BIT 7,A |
|
|
|
JR NZ,ESPSD_GETBYTE2 |
|
|
|
JR Z,ESPSD_GETBYTE1A |
|
|
|
; DOUBLE CHECK STATUS, FIRST READ CAN BE BOGUS |
|
|
|
IN A,(C) |
|
|
|
BIT 7,A |
|
|
|
JR Z,ESPSD_GETBYTE1A |
|
|
|
JR ESPSD_GETBYTE2 |
|
|
|
ESPSD_GETBYTE1A: |
|
|
|
DJNZ ESPSD_GETBYTE1 |
|
|
|
LD A,ESPSD_STTO |
|
|
|
OR A |
|
|
|
RET |
|
|
|
ESPSD_GETBYTE2: |
|
|
|
; NOPS NEEDED FOR RELIABILITY |
|
|
|
NOP \ NOP \ NOP \ NOP \ NOP \ NOP |
|
|
|
INC C |
|
|
|
IN E,(C) |
|
|
|
; |
|
|
|
@ -836,7 +903,7 @@ ESPSD_GETBYTE2: |
|
|
|
; |
|
|
|
ESPSD_GETBYTE_SLOW: |
|
|
|
PUSH HL |
|
|
|
LD HL,100 * CPUMHZ ; CPU SPEED SCALED TIMEOUT |
|
|
|
LD HL,200 * CPUMHZ ; CPU SPEED SCALED TIMEOUT |
|
|
|
ESPSD_GETBYTE_SLOW1: |
|
|
|
PUSH HL |
|
|
|
CALL ESPSD_GETBYTE |
|
|
|
|