mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
Reintegrate wbw -> trunk
This commit is contained in:
@@ -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!)
|
||||
|
||||
@@ -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!)
|
||||
|
||||
@@ -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!)
|
||||
|
||||
@@ -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!)
|
||||
|
||||
@@ -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!)
|
||||
|
||||
@@ -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!)
|
||||
|
||||
@@ -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!)
|
||||
|
||||
@@ -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!)
|
||||
|
||||
@@ -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!)
|
||||
|
||||
@@ -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!)
|
||||
|
||||
@@ -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!)
|
||||
|
||||
@@ -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!)
|
||||
|
||||
@@ -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!)
|
||||
|
||||
@@ -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!)
|
||||
|
||||
@@ -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!)
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
150
Source/sd.asm
150
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)
|
||||
|
||||
Reference in New Issue
Block a user