|
|
|
@ -63,6 +63,26 @@ |
|
|
|
; |
|
|
|
; CONSTANTS |
|
|
|
; |
|
|
|
; RTC SBC SBC-004 N8 N8-CSIO SC126 |
|
|
|
; ----- ------- ------- ------- ------- ------- |
|
|
|
; D7 WR RTC_OUT RTC_OUT RTC_OUT RTC_OUT RTC_OUT, I2C_SDA |
|
|
|
; D6 WR RTC_CLK RTC_CLK RTC_CLK RTC_CLK RTC_CLK |
|
|
|
; D5 WR /RTC_WE /RTC_WE /RTC_WE /RTC_WE /RTC_WE |
|
|
|
; D4 WR RTC_CE RTC_CE RTC_CE RTC_CE RTC_CE |
|
|
|
; D3 WR NC SPK NC NC /SPI_CS1 |
|
|
|
; D2 WR NC CLKHI SPI_CS SPI_CS /SPI_CS2 |
|
|
|
; D1 WR -- -- SPI_CLK NC FS |
|
|
|
; D0 WR -- -- SPI_DI NC I2C_SCL |
|
|
|
; |
|
|
|
; D7 RD -- -- -- -- I2C_SDA |
|
|
|
; D6 RD CFG CFG SPI_DO CFG -- |
|
|
|
; D5 RD -- -- -- -- -- |
|
|
|
; D4 RD -- -- -- -- -- |
|
|
|
; D3 RD -- -- -- -- -- |
|
|
|
; D2 RD -- -- -- -- -- |
|
|
|
; D1 RD -- -- -- -- -- |
|
|
|
; D0 RD RTC_IN RTC_IN RTC_IN RTC_IN RTC_IN |
|
|
|
; |
|
|
|
#IF (DSRTCMODE == DSRTCMODE_STD) |
|
|
|
; |
|
|
|
DSRTC_BASE .EQU RTC ; RTC PORT ON ALL SBC SERIES Z80 PLATFORMS |
|
|
|
@ -75,6 +95,21 @@ DSRTC_CE .EQU %00010000 ; BIT 4 CONTROLS RTC CE LINE, 1 = HIGH (ENABLED) |
|
|
|
DSRTC_RESET .EQU %00000000 ; ALL LOW |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (DSRTCMODE == DSRTCMODE_SC126) |
|
|
|
; |
|
|
|
DSRTC_BASE .EQU RTC ; RTC PORT |
|
|
|
; |
|
|
|
DSRTC_DATA .EQU %10000000 ; BIT 7 CONTROLS RTC DATA (I/O) LINE |
|
|
|
DSRTC_CLK .EQU %01000000 ; BIT 6 CONTROLS RTC CLOCK LINE, 1 = HIGH |
|
|
|
DSRTC_RD .EQU %00100000 ; BIT 5 CONTROLS DATA DIRECTION, 1 = READ |
|
|
|
DSRTC_CE .EQU %00010000 ; BIT 4 CONTROLS RTC CE LINE, 1 = HIGH (ENABLED) |
|
|
|
; |
|
|
|
DSRTC_RESET .EQU %00001101 ; /SPI_CS1, /SPI_CS2, & I2C_SCL HIGH |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
|
|
|
|
; |
|
|
|
#IF (DSRTCMODE == DSRTCMODE_MFPIC) |
|
|
|
; |
|
|
|
@ -103,6 +138,9 @@ DSRTC_INIT: |
|
|
|
#IF (DSRTCMODE == DSRTCMODE_MFPIC) |
|
|
|
PRTS("MFPIC$") |
|
|
|
#ENDIF |
|
|
|
#IF (DSRTCMODE == DSRTCMODE_SC126) |
|
|
|
PRTS("SC126$") |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; CHECK FOR CLOCK HALTED |
|
|
|
CALL DSRTC_TSTCLK |
|
|
|
@ -123,22 +161,22 @@ DSRTC_INIT1: |
|
|
|
LD HL,DSRTC_TIMBUF |
|
|
|
CALL PRTDT |
|
|
|
|
|
|
|
#IF DSRTCCHG ; FORCE_RTC_CHARGE_ENABLE |
|
|
|
LD C,$8E ; ACCESS WRITE PROT REG |
|
|
|
#IF DSRTCCHG ; FORCE_RTC_CHARGE_ENABLE |
|
|
|
LD C,$8E ; ACCESS WRITE PROT REG |
|
|
|
CALL DSRTC_CMD ; |
|
|
|
LD A,$00 ; WRITE PROTECT OFF |
|
|
|
LD A,$00 ; WRITE PROTECT OFF |
|
|
|
CALL DSRTC_PUT ; |
|
|
|
CALL DSRTC_END ; FINISH CMD |
|
|
|
|
|
|
|
LD C,$90 ; ACCESS CHARGE REGISTER |
|
|
|
LD C,$90 ; ACCESS CHARGE REGISTER |
|
|
|
CALL DSRTC_CMD ; |
|
|
|
LD A,$A5 ; STD CHARGE VALUES |
|
|
|
LD A,$A5 ; STD CHARGE VALUES |
|
|
|
CALL DSRTC_PUT ; |
|
|
|
CALL DSRTC_END ; FINISH REG WRITE |
|
|
|
|
|
|
|
LD C,$8E ; ACCESS WRITE PROT REG |
|
|
|
LD C,$8E ; ACCESS WRITE PROT REG |
|
|
|
CALL DSRTC_CMD ; |
|
|
|
LD A,$80 ; WRITE PROTECT ON |
|
|
|
LD A,$80 ; WRITE PROTECT ON |
|
|
|
CALL DSRTC_PUT ; |
|
|
|
CALL DSRTC_END ; FINISH CMD |
|
|
|
#ENDIF |
|
|
|
@ -362,7 +400,7 @@ DSRTC_WRCLK1: |
|
|
|
CALL DSRTC_PUT ; WRITE REQUIRED 8TH BYTE |
|
|
|
JP DSRTC_END ; FINISH IT |
|
|
|
; |
|
|
|
#IF (DSRTCMODE == DSRTCMODE_STD) |
|
|
|
#IF ((DSRTCMODE == DSRTCMODE_STD) | (DSRTCMODE == DSRTCMODE_SC126)) |
|
|
|
; |
|
|
|
; SEND COMMAND IN C TO RTC |
|
|
|
; ALL RTC SEQUENCES MUST CALL THIS FIRST TO SEND THE RTC COMMAND. |
|
|
|
@ -378,7 +416,7 @@ DSRTC_WRCLK1: |
|
|
|
; 5) PUT COMMAND |
|
|
|
; |
|
|
|
DSRTC_CMD: |
|
|
|
XOR A ; ALL LINES LOW TO RESET |
|
|
|
LD A,DSRTC_RESET ; QUIESCENT STATE |
|
|
|
OUT (DSRTC_BASE),A ; WRITE TO RTC PORT |
|
|
|
CALL DLY2 ; DELAY 2 * 27 T-STATES |
|
|
|
XOR DSRTC_CE ; NOW SET CE HIGH |
|
|
|
@ -406,14 +444,14 @@ DSRTC_PUT: |
|
|
|
LD B,8 ; LOOP FOR 8 BITS |
|
|
|
LD C,A ; SAVE THE WORKING VALUE |
|
|
|
DSRTC_PUT1: |
|
|
|
LD A,DSRTC_CE ; SET CLOCK LOW |
|
|
|
LD A,DSRTC_RESET | DSRTC_CE ; SET CLOCK LOW |
|
|
|
OUT (DSRTC_BASE),A ; DO IT |
|
|
|
CALL DLY1 ; DELAY 27 T-STATES |
|
|
|
LD A,C ; RECOVER WORKING VALUE |
|
|
|
RRCA ; ROTATE NEXT BIT TO SEND INTO BIT 7 |
|
|
|
LD C,A ; SAVE WORKING VALUE |
|
|
|
AND %10000000 ; ISOLATE THE DATA BIT |
|
|
|
OR DSRTC_CE ; KEEP CE HIGH |
|
|
|
OR DSRTC_RESET | DSRTC_CE ; KEEP CE HIGH |
|
|
|
OUT (DSRTC_BASE),A ; ASSERT DATA BIT ON BUS |
|
|
|
OR DSRTC_CLK ; SET CLOCK HI |
|
|
|
OUT (DSRTC_BASE),A ; DO IT |
|
|
|
@ -439,7 +477,7 @@ DSRTC_GET: |
|
|
|
LD C,0 ; INITIALIZE WORKING VALUE TO 0 |
|
|
|
LD B,8 ; LOOP FOR 8 BITS |
|
|
|
DSRTC_GET1: |
|
|
|
LD A,DSRTC_CE | DSRTC_RD ; SET CLK LO |
|
|
|
LD A,DSRTC_RESET | DSRTC_CE | DSRTC_RD ; SET CLK LO |
|
|
|
OUT (DSRTC_BASE),A ; WRITE TO RTC PORT |
|
|
|
CALL DLY2 ; DELAY 2 * 27 T-STATES |
|
|
|
IN A,(DSRTC_BASE) ; READ THE RTC PORT |
|
|
|
@ -447,7 +485,7 @@ DSRTC_GET1: |
|
|
|
OR C ; COMBINE WITH WORKING VALUE |
|
|
|
RRCA ; ROTATE FOR NEXT BIT |
|
|
|
LD C,A ; SAVE WORKING VALUE |
|
|
|
LD A,DSRTC_CE | DSRTC_CLK | DSRTC_RD ; CLOCK BACK TO HI |
|
|
|
LD A,DSRTC_RESET | DSRTC_CE | DSRTC_CLK | DSRTC_RD ; CLOCK BACK TO HI |
|
|
|
OUT (DSRTC_BASE),A ; WRITE TO RTC PORT |
|
|
|
CALL DLY1 ; DELAY 27 T-STATES |
|
|
|
DJNZ DSRTC_GET1 ; LOOP IF NOT DONE (13) |
|
|
|
@ -462,7 +500,7 @@ DSRTC_GET1: |
|
|
|
; |
|
|
|
DSRTC_END: |
|
|
|
PUSH AF ; SAVE AF |
|
|
|
XOR A ; ALL LINES OFF TO CLEAN UP |
|
|
|
LD A,DSRTC_RESET ; QUIESCENT STATE |
|
|
|
OUT (DSRTC_BASE),A ; WRITE TO RTC PORT |
|
|
|
POP AF ; RESTORE AF |
|
|
|
RET |
|
|
|
@ -514,7 +552,7 @@ DSRTC_CMD: |
|
|
|
DSRTC_PUT: |
|
|
|
LD B,8 ; LOOP FOR 8 BITS |
|
|
|
LD C,A ; SAVE THE WORKING VALUE |
|
|
|
LD A,DSRTC_WR | DSRTC_CLK ; MODE=WRITE, CLOCK ON, CE ACTIVE (0) |
|
|
|
LD A,DSRTC_RESET | DSRTC_WR | DSRTC_CLK ; MODE=WRITE, CLOCK ON, CE ACTIVE (0) |
|
|
|
DSRTC_PUT1: |
|
|
|
XOR DSRTC_CLK ; FLIP CLOCK OFF |
|
|
|
OUT (DSRTC_BASE),A ; DO IT |
|
|
|
@ -546,7 +584,7 @@ DSRTC_PUT1: |
|
|
|
DSRTC_GET: |
|
|
|
LD C,0 ; INITIALIZE WORKING VALUE TO 0 |
|
|
|
LD B,8 ; LOOP FOR 8 BITS |
|
|
|
LD A,DSRTC_CLK ; MODE=READ, CLOCK ON, CE ACTIVE (0) |
|
|
|
LD A,DSRTC_RESET | DSRTC_CLK ; MODE=READ, CLOCK ON, CE ACTIVE (0) |
|
|
|
DSRTC_GET1: |
|
|
|
XOR DSRTC_CLK ; FLIP CLOCK OFF |
|
|
|
OUT (DSRTC_BASE),A ; DO IT |
|
|
|
@ -554,7 +592,7 @@ DSRTC_GET1: |
|
|
|
IN A,(DSRTC_BASE) ; READ THE RTC PORT |
|
|
|
RRA ; DATA BIT TO CARRY |
|
|
|
RR C ; SHIFT INTO WORKING VALUE |
|
|
|
LD A,DSRTC_CLK ; CLOCK ON |
|
|
|
LD A,DSRTC_RESET | DSRTC_CLK ; CLOCK ON |
|
|
|
OUT (DSRTC_BASE),A ; WRITE TO RTC PORT |
|
|
|
CALL DLY1 ; DELAY 27 T-STATES |
|
|
|
DJNZ DSRTC_GET1 ; LOOP IF NOT DONE |
|
|
|
|