diff --git a/trunk/Source/config_n8_2312.asm b/trunk/Source/config_n8_2312.asm index febbc466..f225a5a3 100644 --- a/trunk/Source/config_n8_2312.asm +++ b/trunk/Source/config_n8_2312.asm @@ -59,6 +59,7 @@ SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) SDCSIO .EQU TRUE ; TRUE IF USING THE CSIO PORT (N8 ONLY) SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY) PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE) +S2ISD .EQU FALSE ; TRUE IF USING SCSI2IDE BOARD (DO NOT COMBINE WITH PPISD) ; PRPENABLE .EQU FALSE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) PRPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) diff --git a/trunk/Source/config_n8_2511.asm b/trunk/Source/config_n8_2511.asm index 945f37d2..a4a0bc8c 100644 --- a/trunk/Source/config_n8_2511.asm +++ b/trunk/Source/config_n8_2511.asm @@ -59,6 +59,7 @@ SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY) SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY) PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE) +S2ISD .EQU FALSE ; TRUE IF USING SCSI2IDE BOARD (DO NOT COMBINE WITH PPISD) ; PRPENABLE .EQU FALSE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) PRPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) diff --git a/trunk/Source/config_n8vem_cvdu.asm b/trunk/Source/config_n8vem_cvdu.asm index e60ef86f..a87400e1 100644 --- a/trunk/Source/config_n8vem_cvdu.asm +++ b/trunk/Source/config_n8vem_cvdu.asm @@ -59,6 +59,7 @@ SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY) SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY) PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE) +S2ISD .EQU FALSE ; TRUE IF USING SCSI2IDE BOARD (DO NOT COMBINE WITH PPISD) ; PRPENABLE .EQU FALSE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) PRPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) diff --git a/trunk/Source/config_n8vem_dide.asm b/trunk/Source/config_n8vem_dide.asm index 217aa872..72cea522 100644 --- a/trunk/Source/config_n8vem_dide.asm +++ b/trunk/Source/config_n8vem_dide.asm @@ -59,6 +59,7 @@ SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY) SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY) PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE) +S2ISD .EQU FALSE ; TRUE IF USING SCSI2IDE BOARD (DO NOT COMBINE WITH PPISD) ; PRPENABLE .EQU FALSE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) PRPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) diff --git a/trunk/Source/config_n8vem_diskio.asm b/trunk/Source/config_n8vem_diskio.asm index fbf099fd..b8062cc8 100644 --- a/trunk/Source/config_n8vem_diskio.asm +++ b/trunk/Source/config_n8vem_diskio.asm @@ -59,6 +59,7 @@ SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY) SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY) PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE) +S2ISD .EQU FALSE ; TRUE IF USING SCSI2IDE BOARD (DO NOT COMBINE WITH PPISD) ; PRPENABLE .EQU FALSE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) PRPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) diff --git a/trunk/Source/config_n8vem_diskio3.asm b/trunk/Source/config_n8vem_diskio3.asm index 3f187a8a..cb7a0827 100644 --- a/trunk/Source/config_n8vem_diskio3.asm +++ b/trunk/Source/config_n8vem_diskio3.asm @@ -59,6 +59,7 @@ SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY) SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY) PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE) +S2ISD .EQU FALSE ; TRUE IF USING SCSI2IDE BOARD (DO NOT COMBINE WITH PPISD) ; PRPENABLE .EQU FALSE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) PRPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) diff --git a/trunk/Source/config_n8vem_ppide.asm b/trunk/Source/config_n8vem_ppide.asm index 313b1567..d77b654c 100644 --- a/trunk/Source/config_n8vem_ppide.asm +++ b/trunk/Source/config_n8vem_ppide.asm @@ -59,6 +59,7 @@ SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY) SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY) PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE) +S2ISD .EQU FALSE ; TRUE IF USING SCSI2IDE BOARD (DO NOT COMBINE WITH PPISD) ; PRPENABLE .EQU FALSE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) PRPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) diff --git a/trunk/Source/config_n8vem_ppisd.asm b/trunk/Source/config_n8vem_ppisd.asm index a3f7056f..40f6fca0 100644 --- a/trunk/Source/config_n8vem_ppisd.asm +++ b/trunk/Source/config_n8vem_ppisd.asm @@ -59,6 +59,7 @@ SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY) SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY) PPISD .EQU TRUE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE) +S2ISD .EQU FALSE ; TRUE IF USING SCSI2IDE BOARD (DO NOT COMBINE WITH PPISD) ; PRPENABLE .EQU FALSE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) PRPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) diff --git a/trunk/Source/config_n8vem_propio.asm b/trunk/Source/config_n8vem_propio.asm index bbb415c8..21abc10f 100644 --- a/trunk/Source/config_n8vem_propio.asm +++ b/trunk/Source/config_n8vem_propio.asm @@ -59,6 +59,7 @@ SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY) SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY) PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE) +S2ISD .EQU FALSE ; TRUE IF USING SCSI2IDE BOARD (DO NOT COMBINE WITH PPISD) ; PRPENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) PRPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) diff --git a/trunk/Source/config_n8vem_simh.asm b/trunk/Source/config_n8vem_simh.asm index 164c0a10..95672166 100644 --- a/trunk/Source/config_n8vem_simh.asm +++ b/trunk/Source/config_n8vem_simh.asm @@ -59,6 +59,7 @@ SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY) SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY) PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE) +S2ISD .EQU FALSE ; TRUE IF USING SCSI2IDE BOARD (DO NOT COMBINE WITH PPISD) ; PRPENABLE .EQU FALSE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) PRPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) diff --git a/trunk/Source/config_n8vem_std.asm b/trunk/Source/config_n8vem_std.asm index 8f4fb2ec..1c689e0e 100644 --- a/trunk/Source/config_n8vem_std.asm +++ b/trunk/Source/config_n8vem_std.asm @@ -59,6 +59,7 @@ SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY) SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY) PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE) +S2ISD .EQU FALSE ; TRUE IF USING SCSI2IDE BOARD (DO NOT COMBINE WITH PPISD) ; PRPENABLE .EQU FALSE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) PRPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) diff --git a/trunk/Source/config_n8vem_vdu.asm b/trunk/Source/config_n8vem_vdu.asm index 4144f358..9685d582 100644 --- a/trunk/Source/config_n8vem_vdu.asm +++ b/trunk/Source/config_n8vem_vdu.asm @@ -59,6 +59,7 @@ SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY) SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY) PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE) +S2ISD .EQU FALSE ; TRUE IF USING SCSI2IDE BOARD (DO NOT COMBINE WITH PPISD) ; PRPENABLE .EQU FALSE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) PRPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) diff --git a/trunk/Source/config_s100_std.asm b/trunk/Source/config_s100_std.asm index 23d45e6f..a5415028 100644 --- a/trunk/Source/config_s100_std.asm +++ b/trunk/Source/config_s100_std.asm @@ -64,6 +64,7 @@ SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) SDCSIO .EQU TRUE ; TRUE IF USING THE CSIO PORT (N8 ONLY) SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY) PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE) +S2ISD .EQU FALSE ; TRUE IF USING SCSI2IDE BOARD (DO NOT COMBINE WITH PPISD) ; PRPENABLE .EQU FALSE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) PRPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) diff --git a/trunk/Source/config_zeta_ppp.asm b/trunk/Source/config_zeta_ppp.asm index 78a27b2d..ce32bb17 100644 --- a/trunk/Source/config_zeta_ppp.asm +++ b/trunk/Source/config_zeta_ppp.asm @@ -59,6 +59,7 @@ SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY) SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY) PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE) +S2ISD .EQU FALSE ; TRUE IF USING SCSI2IDE BOARD (DO NOT COMBINE WITH PPISD) ; PRPENABLE .EQU FALSE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) PRPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) diff --git a/trunk/Source/config_zeta_std.asm b/trunk/Source/config_zeta_std.asm index 6bd68f55..9391f4a1 100644 --- a/trunk/Source/config_zeta_std.asm +++ b/trunk/Source/config_zeta_std.asm @@ -59,6 +59,7 @@ SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY) SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY) PPISD .EQU TRUE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE) +S2ISD .EQU FALSE ; TRUE IF USING SCSI2IDE BOARD (DO NOT COMBINE WITH PPISD) ; PRPENABLE .EQU FALSE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) PRPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) diff --git a/trunk/Source/dbgmon.asm b/trunk/Source/dbgmon.asm index 5eb60c9f..c78b0cf7 100644 --- a/trunk/Source/dbgmon.asm +++ b/trunk/Source/dbgmon.asm @@ -826,7 +826,7 @@ PHL: ; POUT: POUT1: - INC HL ; +; INC HL ; CALL HEXIN ; GET PORT LD C,A ; SAVE PORT POINTER INC HL ; @@ -842,7 +842,7 @@ OUTIT: ;_____________________________________________________________________________ ; PIN: - INC HL ; +; INC HL ; CALL HEXIN ; GET PORT LD C,A ; SAVE PORT POINTER CALL CRLF ; diff --git a/trunk/Source/sd.asm b/trunk/Source/sd.asm index 69b2b0cd..e5b99875 100644 --- a/trunk/Source/sd.asm +++ b/trunk/Source/sd.asm @@ -15,38 +15,31 @@ ; #IF (PLATFORM==PLT_N8) SD_CS .EQU $04 ; RTC BIT 2, SD CARD SELECT (ACTIVE HI) -#IF (!SDCSIO) + #IF (!SDCSIO) SD_CLK .EQU $02 ; RTC BIT 1, SD CLOCK SD_DOUT .EQU $01 ; RTC BIT 0, SD DATA OUT SD_DIN .EQU $40 ; RTC BIT 6, SD DATA IN -#ENDIF + #ENDIF #ELSE -#IF (PPISD) + #IF (PPISD) SD_CS .EQU $10 ; PC4, SD CARD SELECT (ACTIVE LO) SD_CLK .EQU $02 ; PC1, SD CLOCK SD_DOUT .EQU $01 ; PC0, SD DATA OUT SD_DIN .EQU $80 ; PB7, SD DATA IN -#ELSE + #ELSE + #IF (S2ISD) +SD_CS .EQU $08 ; MCR:3 OUT2, CD, ACT=LO=0 +SD_CLK .EQU $04 ; MCR:2 OUT1, CLK, ACT=LO=1 +SD_DOUT .EQU $20 ; MSR:5 DSR, DAT0, ACT=HI=0 (INV) +SD_DIN .EQU $01 ; MCR:0 DTR, CMD, ACT=HI=0 (INV) + #ELSE SD_CS .EQU $04 ; RTC BIT 2, SD CARD SELECT (ACTIVE HI) SD_CLK .EQU $40 ; RTC BIT 6, SD CLOCK SD_DOUT .EQU $80 ; RTC BIT 7, DATA OUT TO SD-CARD SD_DIN .EQU $40 ; RTC BIT 6, DATA IN FROM SD-CARD + #ENDIF + #ENDIF #ENDIF -#ENDIF - -;#IF (!SDCSIO) -;#IF (PLATFORM = PLT_N8) -;SD_CS .EQU $04 ; RTC BIT 2, SD CARD SELECT -;SD_CLK .EQU $02 ; RTC BIT 1, SD CLOCK -;SD_DOUT .EQU $01 ; RTC BIT 0, SD DATA OUT -;SD_DIN .EQU $40 ; RTC BIT 6, SD DATA IN -;#ELSE ; Zeta or Z80-SBC MK II -;SD_CS .EQU $04 ; RTC BIT 2, SD CARD SELECT -;SD_CLK .EQU $40 ; RTC BIT 6, SD CLOCK -;SD_DOUT .EQU $80 ; RTC BIT 7, DATA OUT TO SD-CARD -;SD_DIN .EQU $40 ; RTC BIT 6, DATA IN FROM SD-CARD -;#ENDIF -;#ENDIF ; ; SD CARD COMMANDS ; @@ -115,6 +108,13 @@ SD_INIT: OUT (PPIX),A LD A,30H ; PC4,5 /CS HIGH OUT (PPIC),A +#ENDIF +#IF (S2ISD) + IN A,(SIO_MCR) + OR SD_CS ; DEASSERT = HI = 1 + AND ~SD_DIN ; DEASSERT DIN = LO = 1 + AND ~SD_CLK ; DEASSERT CLK = LO = 1 + OUT (SIO_MCR),A #ENDIF XOR A DEC A @@ -149,8 +149,13 @@ SD_SENDCLKS: LD A,02 ;PC1=0, RESET CLOCK OUT (PPIX),A #ELSE + #IF (S2ISD) + OUT (SIO_MCR),A + XOR SD_CLK + #ELSE OUT (RTC),A XOR SD_CLK ; TOGGLE CLOCK BIT + #ENDIF #ENDIF DJNZ SD_SENDCLKS RET @@ -188,8 +193,15 @@ SD_DONE: OUT (PPIC),A ;PC4=1 /CS INACTIVE LD B,16 #ELSE + #IF (S2ISD) + IN A,(SIO_MCR) + OR SD_CS ; TURN OFF CS + OUT (SIO_MCR),A + LD B,17 + #ELSE XOR A LD B,17 + #ENDIF #ENDIF CALL SD_SENDCLKS #ELSE @@ -226,20 +238,37 @@ SD_PUT2: DJNZ SD_PUT1 ;REPEAT FOR ALL 8 BITS RET #ELSE -#IF (!SDCSIO) + #IF (S2ISD) +; CALL PRTHEXBYTE ; *DEBUG* + XOR $FF ; INVERT FOR S2ISD INTERFACE + LD C,A ; C=BYTE TO SEND + LD B,8 ; SEND 8 BITS (LOOP 8 TIMES) + IN A,(SIO_MCR) ; START WITH CURRENT MCR REG VAUE +SD_PUT1: + RRA ; PREPARE A FOR ROTATE + RL C ; ROTATE NEXT DATA BIT FROM C INTO CF + RLA ; ROTATE DATA BIT INTO A:0 + OR SD_CLK ; ASSERT CLOCK + OUT (SIO_MCR),A ; SEND IT + AND ~SD_CLK ; DEASSERT CLOCK + OUT (SIO_MCR),A ; SEND IT + DJNZ SD_PUT1 ; REPEAT FOR ALL 8 BITS + RET + #ELSE + #IF (!SDCSIO) ; CALL PRTHEXBYTE ; *DEBUG* LD C,A ; C=BYTE TO SEND LD B,8 ; SEND 8 BITS (LOOP 8 TIMES) SD_PUT1: -#IF (PLATFORM=PLT_N8) + #IF (PLATFORM==PLT_N8) LD A,2 ; SD_CS >> 1 (SD_CS WILL BE SET AFTER ROTATE) RL C ; ROTATE NEXT BIT FROM C INTO CF RLA ; ROTATE CF INTO A:0, SD_DOUT is RTC:0 -#ELSE + #ELSE LD A,8 ; SD_CS WILL BE IN BIT2 AFTER ROTATE RL C ; ROTATE NEXT BIT FROM C INTO CF RRA ; ROTATE CARRY INTO A:7, SD_DOUT is RTC:7 -#ENDIF + #ENDIF OUT (RTC),A ; CLOCK LOW (ABOUT TO SEND BIT) OR SD_CLK ; SET CLOCK BIT OUT (RTC),A ; CLOCK HIGH (SEND BIT) @@ -247,7 +276,7 @@ SD_PUT1: AND ~SD_CLK ; RESET CLOCK OUT (RTC),A ; LEAVE WITH CLOCK LOW RET -#ELSE + #ELSE CALL MIRROR ; MSB<-->LSB mirror bits, result in C CALL SD_WAITRX ; MAKE SURE WE ARE DONE SENDING OUT0 (CPU_TRDR),C ; put byte in buffer @@ -255,7 +284,8 @@ SD_PUT1: SET 4,A ; set transmit enable OUT0 (CPU_CNTR),A RET ; let it do the rest -#ENDIF + #ENDIF + #ENDIF #ENDIF ; ; RECEIVE ONE BYTE @@ -276,7 +306,33 @@ SD_GET1: ; CALL PRTHEXBYTE ; *DEBUG* RET #ELSE -#IF (!SDCSIO) + #IF (S2ISD) + LD B,8 ; SEND 8 BITS (LOOP 8 TIMES) +SD_GET1: + IN A,(SIO_MCR) ; GET CURRENT MCR TO TOGGLE CLK + OR SD_CLK ; SET CLK + OUT (SIO_MCR),A ; SEND IT + + NOP + + IN A,(SIO_MSR) ; MSR:5 HAS DATA BIT + RLA ; ROTATE DATA BIT TO A:6 + RLA ; ROTATE DATA BIT TO A:7 + RLA ; ROTATE DATA BIT TO CF + RL C ; NOW ROTATE CF INTO C:0 + + IN A,(SIO_MCR) ; GET CURRENT MCR TO TOGGLE CLK + AND ~SD_CLK ; CLEAR CLK + OUT (SIO_MCR),A ; SEND IT + + DJNZ SD_GET1 ; REPEAT FOR ALL 8 BITS + LD A,C ; GET BYTE RECEIVED INTO A + XOR $FF ; INVERT FOR S2ISD INTERFACE +; CALL PC_PERIOD ; *DEBUG* +; CALL PRTHEXBYTE ; *DEBUG* + RET + #ELSE + #IF (!SDCSIO) LD B,8 ; RECEIVE 8 BITS (LOOP 8 TIMES) SD_GET1: IN A,(RTC) ; GET RTC BITS @@ -291,7 +347,7 @@ SD_GET1: LD A,C ; GET BYTE RECEIVED INTO A ; CALL PRTHEXBYTE ; *DEBUG* RET -#ELSE + #ELSE CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING IN0 A,(CPU_CNTR) ; get CSIO status SET 5,A ; start receiver @@ -301,19 +357,20 @@ SD_GET1: CALL MIRROR ; MSB<-->LSB mirror bits LD A,C ; keep result RET -#ENDIF + #ENDIF + #ENDIF #ENDIF #IF (SDCSIO) MIRROR: ; MSB<-->LSB mirror bits in A, result in C -#IF (!SDCSIOFAST) ; slow speed, least code space + #IF (!SDCSIOFAST) ; slow speed, least 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 RET -#ELSE ; fastest but uses most code space + #ELSE ; fastest but uses most code space LD BC,MIRTAB ; 256 byte mirror table ADD A,C ; add offset LD C,A @@ -323,7 +380,7 @@ MIRROR2: LD A,(BC) ; get result LD C,A ; return result in C RET -#ENDIF + #ENDIF #ENDIF ; @@ -334,14 +391,20 @@ SD_WAITRDY: LD A,21H ;/CS ACTIVE (PC4), DOUT=1 (PC0) OUT (PPIC),A #ELSE + #IF (S2ISD) + IN A,(SIO_MCR) + AND ~SD_CS ; ASSERT CS (1) + OUT (SIO_MCR),A + #ELSE IN A,(RTC) -#IF (!SDCSIO) + #IF (!SDCSIO) OR SD_CS | SD_DOUT ; SET SD_CS (CHIP SELECT) -#ELSE + #ELSE CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING OR SD_CS ; SET SD_CS (CHIP SELECT) -#ENDIF + #ENDIF OUT (RTC),A + #ENDIF #ENDIF LD DE,0 ; LOOP MAX (TIMEOUT) SD_WAITRDY1: @@ -474,6 +537,11 @@ SD_EXEC1: IN A,(RTC) OR SD_CS ; SET CS OUT (RTC),A +#ENDIF +#IF (S2ISD) + IN A,(SIO_MCR) + AND ~SD_CS ; ASSERT = LO = 0 + OUT (SIO_MCR),A #ENDIF LD A,(HL) CALL SD_PUT @@ -544,14 +612,22 @@ SD_INITCARD: CALL SD_DONE ; SEEMS TO HELP SOME CARDS... #IF (!SDCSIO) -#IF (PPISD) + #IF (PPISD) LD A,21H ; /CS=0, DOUT=1, CLK=0 OUT (PPIC),A LD B,07FH ; 127 CLOCKS (255 TRANSITIONS STARTING WITH LO) -#ELSE + #ELSE + #IF (S2ISD) + IN A,(SIO_MCR) + OR SD_CS ; DEASSERT CS = HI = 1 + AND ~SD_DIN ; ASSERT DIN = HI = 0 + AND ~SD_CLK ; DEASSERT CLK = HI = 0 + LD B,0FFH ; 127 CLOCKS (255 TRANSITIONS STARTING WITH LO) + #ELSE LD A,SD_CS | SD_DOUT ; CS=HI, DOUT=HI LD B,0FFH ; 127 CLOCKS (255 TRANSITIONS STARTING WITH LO) -#ENDIF + #ENDIF + #ENDIF #ELSE CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING IN A,(RTC)