From 83bf1b31ab63b13355f7cc94e42407e6d2803ab2 Mon Sep 17 00:00:00 2001 From: wayne Date: Tue, 19 Feb 2013 05:14:46 +0000 Subject: [PATCH] Merge trunk -> dgg --- branches/dgg/Source/config_n8_2312.asm | 1 + branches/dgg/Source/config_n8_2511.asm | 1 + branches/dgg/Source/config_n8vem_cvdu.asm | 1 + branches/dgg/Source/config_n8vem_dide.asm | 1 + branches/dgg/Source/config_n8vem_diskio.asm | 1 + branches/dgg/Source/config_n8vem_diskio3.asm | 1 + branches/dgg/Source/config_n8vem_ppide.asm | 1 + branches/dgg/Source/config_n8vem_ppisd.asm | 1 + branches/dgg/Source/config_n8vem_propio.asm | 1 + branches/dgg/Source/config_n8vem_simh.asm | 1 + branches/dgg/Source/config_n8vem_std.asm | 1 + branches/dgg/Source/config_n8vem_vdu.asm | 1 + branches/dgg/Source/config_s100_std.asm | 1 + branches/dgg/Source/config_zeta_ppp.asm | 1 + branches/dgg/Source/config_zeta_std.asm | 1 + branches/dgg/Source/dbgmon.asm | 4 +- branches/dgg/Source/sd.asm | 150 ++++++++++++++----- 17 files changed, 130 insertions(+), 39 deletions(-) diff --git a/branches/dgg/Source/config_n8_2312.asm b/branches/dgg/Source/config_n8_2312.asm index 437ffaad..e5b9a72b 100644 --- a/branches/dgg/Source/config_n8_2312.asm +++ b/branches/dgg/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/branches/dgg/Source/config_n8_2511.asm b/branches/dgg/Source/config_n8_2511.asm index def54fb4..897ea97d 100644 --- a/branches/dgg/Source/config_n8_2511.asm +++ b/branches/dgg/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/branches/dgg/Source/config_n8vem_cvdu.asm b/branches/dgg/Source/config_n8vem_cvdu.asm index e60ef86f..a87400e1 100644 --- a/branches/dgg/Source/config_n8vem_cvdu.asm +++ b/branches/dgg/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/branches/dgg/Source/config_n8vem_dide.asm b/branches/dgg/Source/config_n8vem_dide.asm index 72c8a84f..ce9d36cf 100644 --- a/branches/dgg/Source/config_n8vem_dide.asm +++ b/branches/dgg/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/branches/dgg/Source/config_n8vem_diskio.asm b/branches/dgg/Source/config_n8vem_diskio.asm index 555a0845..89cc71b6 100644 --- a/branches/dgg/Source/config_n8vem_diskio.asm +++ b/branches/dgg/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/branches/dgg/Source/config_n8vem_diskio3.asm b/branches/dgg/Source/config_n8vem_diskio3.asm index b38233a2..8f39dba6 100644 --- a/branches/dgg/Source/config_n8vem_diskio3.asm +++ b/branches/dgg/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/branches/dgg/Source/config_n8vem_ppide.asm b/branches/dgg/Source/config_n8vem_ppide.asm index 4d52a1ad..a204a7d5 100644 --- a/branches/dgg/Source/config_n8vem_ppide.asm +++ b/branches/dgg/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/branches/dgg/Source/config_n8vem_ppisd.asm b/branches/dgg/Source/config_n8vem_ppisd.asm index 60db2482..37ae307b 100644 --- a/branches/dgg/Source/config_n8vem_ppisd.asm +++ b/branches/dgg/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/branches/dgg/Source/config_n8vem_propio.asm b/branches/dgg/Source/config_n8vem_propio.asm index 9bfee0d2..1f7293d9 100644 --- a/branches/dgg/Source/config_n8vem_propio.asm +++ b/branches/dgg/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/branches/dgg/Source/config_n8vem_simh.asm b/branches/dgg/Source/config_n8vem_simh.asm index 164c0a10..95672166 100644 --- a/branches/dgg/Source/config_n8vem_simh.asm +++ b/branches/dgg/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/branches/dgg/Source/config_n8vem_std.asm b/branches/dgg/Source/config_n8vem_std.asm index 8f4fb2ec..1c689e0e 100644 --- a/branches/dgg/Source/config_n8vem_std.asm +++ b/branches/dgg/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/branches/dgg/Source/config_n8vem_vdu.asm b/branches/dgg/Source/config_n8vem_vdu.asm index bc42e479..c5b31fd9 100644 --- a/branches/dgg/Source/config_n8vem_vdu.asm +++ b/branches/dgg/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/branches/dgg/Source/config_s100_std.asm b/branches/dgg/Source/config_s100_std.asm index 23d45e6f..a5415028 100644 --- a/branches/dgg/Source/config_s100_std.asm +++ b/branches/dgg/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/branches/dgg/Source/config_zeta_ppp.asm b/branches/dgg/Source/config_zeta_ppp.asm index 2acb362f..c9a4224a 100644 --- a/branches/dgg/Source/config_zeta_ppp.asm +++ b/branches/dgg/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/branches/dgg/Source/config_zeta_std.asm b/branches/dgg/Source/config_zeta_std.asm index 6bd68f55..9391f4a1 100644 --- a/branches/dgg/Source/config_zeta_std.asm +++ b/branches/dgg/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/branches/dgg/Source/dbgmon.asm b/branches/dgg/Source/dbgmon.asm index 5eb60c9f..c78b0cf7 100644 --- a/branches/dgg/Source/dbgmon.asm +++ b/branches/dgg/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/branches/dgg/Source/sd.asm b/branches/dgg/Source/sd.asm index 281acabf..3aa3fe3b 100644 --- a/branches/dgg/Source/sd.asm +++ b/branches/dgg/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 ; @@ -123,6 +116,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 @@ -157,8 +157,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 @@ -196,8 +201,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 @@ -234,20 +246,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) @@ -255,7 +284,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 @@ -263,7 +292,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 @@ -284,7 +314,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 @@ -299,7 +355,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 @@ -309,19 +365,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 @@ -331,7 +388,7 @@ MIRROR2: LD A,(BC) ; get result LD C,A ; return result in C RET -#ENDIF + #ENDIF #ENDIF ; @@ -342,14 +399,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: @@ -482,6 +545,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 @@ -552,14 +620,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)