|
|
|
@ -163,16 +163,18 @@ DSRTC_INIT: |
|
|
|
PRTS("MFPIC$") |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
LD A,(DSRTC_STAT) |
|
|
|
OR A |
|
|
|
JR Z,DSRTC_INIT0 |
|
|
|
; PRINT RTC LATCH PORT ADDRESS |
|
|
|
PRTS(" IO=0x$") ; LABEL FOR IO ADDRESS |
|
|
|
LD A,DSRTC_BASE ; GET IO ADDRESS |
|
|
|
CALL PRTHEXBYTE ; PRINT IT |
|
|
|
; |
|
|
|
; HARDWARE NOT PRESENT |
|
|
|
PRTS(" NOT PRESENT$") |
|
|
|
; CHECK PRESENCE STATUS |
|
|
|
LD A,(DSRTC_STAT) ; GET DEVICE STATUS |
|
|
|
OR A ; SET FLAGS |
|
|
|
JR Z,DSRTC_INIT1 ; IF ZERO, ALL GOOD |
|
|
|
PRTS(" NOT PRESENT$") ; NOT ZERO, H/W NOT PRESENT |
|
|
|
OR $FF ; SIGNAL FAILURE |
|
|
|
RET |
|
|
|
; |
|
|
|
DSRTC_INIT0: |
|
|
|
RET ; BAIL OUT |
|
|
|
; |
|
|
|
DSRTC_INIT1: |
|
|
|
; DISPLAY CURRENT TIME |
|
|
|
@ -183,27 +185,13 @@ DSRTC_INIT1: |
|
|
|
CALL DSRTC_CLK2TIM |
|
|
|
LD HL,DSRTC_TIMBUF |
|
|
|
CALL PRTDT |
|
|
|
|
|
|
|
; |
|
|
|
#IF DSRTCCHG ; FORCE_RTC_CHARGE_ENABLE |
|
|
|
LD E,$8E ; ACCESS WRITE PROT REG |
|
|
|
CALL DSRTC_CMD ; |
|
|
|
LD E,$00 ; WRITE PROTECT OFF |
|
|
|
CALL DSRTC_PUT ; |
|
|
|
CALL DSRTC_END ; FINISH CMD |
|
|
|
|
|
|
|
LD E,$90 ; ACCESS CHARGE REGISTER |
|
|
|
CALL DSRTC_CMD ; |
|
|
|
LD C,$90 ; ACCESS CHARGE REGISTER |
|
|
|
LD E,DS1d2k ; STD CHARGE VALUES |
|
|
|
CALL DSRTC_PUT ; |
|
|
|
CALL DSRTC_END ; FINISH REG WRITE |
|
|
|
|
|
|
|
LD E,$8E ; ACCESS WRITE PROT REG |
|
|
|
CALL DSRTC_CMD ; |
|
|
|
LD E,$80 ; WRITE PROTECT ON |
|
|
|
CALL DSRTC_PUT ; |
|
|
|
CALL DSRTC_END ; FINISH CMD |
|
|
|
CALL DSRTC_WRBYTWP |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
; |
|
|
|
PRTS(" CHARGE=$") ; DISPLAY |
|
|
|
CALL DSRTC_TSTCHG ; CHARGING |
|
|
|
JR NZ,NOCHG1 ; STATUS |
|
|
|
@ -318,47 +306,23 @@ DSRTC_GETBYT: |
|
|
|
LD A,C ; INDEX |
|
|
|
SLA A ; SHIFT TO INDEX BITS |
|
|
|
ADD A,$C1 ; CMD OFFSET |
|
|
|
LD E,A |
|
|
|
CALL DSRTC_CMD |
|
|
|
CALL DSRTC_GET |
|
|
|
CALL DSRTC_END |
|
|
|
XOR A |
|
|
|
RET |
|
|
|
LD C,A ; SAVE READ CMD BYTE |
|
|
|
CALL DSRTC_RDBYT ; DO IT |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
; RTC SET NVRAM BYTE |
|
|
|
; C: INDEX |
|
|
|
; E: VALUE |
|
|
|
; |
|
|
|
DSRTC_SETBYT: |
|
|
|
PUSH DE ; SAVE INCOMING INDEX |
|
|
|
; |
|
|
|
; TURN OFF WRITE PROTECT |
|
|
|
LD E,$8E ; ACCESS WRITE PROT REG |
|
|
|
CALL DSRTC_CMD ; |
|
|
|
LD E,$00 ; WRITE PROTECT OFF |
|
|
|
CALL DSRTC_PUT ; |
|
|
|
CALL DSRTC_END ; FINISH CMD |
|
|
|
; |
|
|
|
; SET REGISTER VALUE |
|
|
|
LD A,C ; INDEX |
|
|
|
SLA A ; SHIFT TO INDEX BITS |
|
|
|
ADD A,$C0 ; CMD OFFSET |
|
|
|
LD E,A ; INTO E |
|
|
|
CALL DSRTC_CMD |
|
|
|
POP DE |
|
|
|
CALL DSRTC_PUT |
|
|
|
CALL DSRTC_END |
|
|
|
; |
|
|
|
; TURN ON WRITE PROTECT |
|
|
|
LD E,$8E ; ACCESS WRITE PROT REG |
|
|
|
CALL DSRTC_CMD ; |
|
|
|
LD E,$80 ; WRITE PROTECT ON |
|
|
|
CALL DSRTC_PUT ; |
|
|
|
CALL DSRTC_END ; FINISH CMD |
|
|
|
; |
|
|
|
; SIGNAL SUCCESS |
|
|
|
XOR A |
|
|
|
RET |
|
|
|
LD C,A ; SAVE WRITE CMD BYTE |
|
|
|
CALL DSRTC_WRBYTWP ; DO IT |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
; CONVERT DATA IN CLOCK BUFFER TO TIME BUFFER AT HL |
|
|
|
; |
|
|
|
@ -412,13 +376,11 @@ DSRTC_TIM2CLK: |
|
|
|
; TEST CLOCK FOR CHARGE DATA |
|
|
|
; |
|
|
|
DSRTC_TSTCHG: |
|
|
|
LD E,$91 ; CHARGE RESISTOR & DIODE VALUES |
|
|
|
CALL DSRTC_CMD ; SEND THE COMMAND |
|
|
|
CALL DSRTC_GET ; READ THE REGISTER |
|
|
|
CALL DSRTC_END ; FINISH IT |
|
|
|
LD C,$91 ; CHARGE RESISTOR & DIODE VALUES |
|
|
|
CALL DSRTC_RDBYT ; GET VALUE |
|
|
|
LD A,E ; VALUE TO A |
|
|
|
AND %11110000 ; CHECK FOR |
|
|
|
CP %10100000 ; ENABLED FLAG |
|
|
|
CP %10100000 ; ... ENABLED FLAG |
|
|
|
RET |
|
|
|
; |
|
|
|
; DETECT RTC HARDWARE PRESENCE |
|
|
|
@ -455,14 +417,61 @@ DSRTC_DETECT1: |
|
|
|
; 1 = HALTED |
|
|
|
; |
|
|
|
DSRTC_TSTCLK: |
|
|
|
LD E,$81 ; SECONDS REGISTER HAS CLOCK HALT FLAG |
|
|
|
CALL DSRTC_CMD ; SEND THE COMMAND |
|
|
|
CALL DSRTC_GET ; READ THE REGISTER |
|
|
|
CALL DSRTC_END ; FINISH IT |
|
|
|
LD C,$81 ; SECONDS REGISTER HAS CLOCK HALT FLAG |
|
|
|
CALL DSRTC_RDBYT ; GET REGISTER VALUE |
|
|
|
LD A,E ; VALUE TO A |
|
|
|
AND %10000000 ; HIGH ORDER BIT IS CLOCK HALT |
|
|
|
RET |
|
|
|
; |
|
|
|
; READ RAW BYTE |
|
|
|
; C=READ CMD BYTE |
|
|
|
; E=VALUE (OUTPUT) |
|
|
|
; |
|
|
|
DSRTC_RDBYT: |
|
|
|
LD E,C |
|
|
|
CALL DSRTC_CMD |
|
|
|
CALL DSRTC_GET |
|
|
|
CALL DSRTC_END |
|
|
|
RET |
|
|
|
; |
|
|
|
; WRITE RAW BYTE |
|
|
|
; C=WRITE CMD BYTE |
|
|
|
; E=VALUE |
|
|
|
; |
|
|
|
DSRTC_WRBYT: |
|
|
|
PUSH DE ; SAVE VALUE TO WRITE |
|
|
|
LD E,C ; CMD TO E |
|
|
|
CALL DSRTC_CMD |
|
|
|
POP DE ; RESTORE VALUE |
|
|
|
CALL DSRTC_PUT |
|
|
|
CALL DSRTC_END |
|
|
|
RET |
|
|
|
; |
|
|
|
; WRITE RAW BYTE W/ WRITE PROTECT BRACKETING |
|
|
|
; C=WRITE CMD BYTE |
|
|
|
; E=VALUE |
|
|
|
; |
|
|
|
DSRTC_WRBYTWP: |
|
|
|
LD D,C ; WRITE CMD TO D |
|
|
|
PUSH DE ; SAVE PARMS |
|
|
|
; |
|
|
|
; TURN OFF WRITE PROTECT |
|
|
|
LD C,$8E ; CMD |
|
|
|
LD E,0 ; WRITE PROTECT OFF |
|
|
|
CALL DSRTC_WRBYT ; DO IT |
|
|
|
; |
|
|
|
; WRITE THE VALUE |
|
|
|
POP DE ; RESTORE INPUTS |
|
|
|
LD C,D ; WRITE CMD BACK TO C |
|
|
|
CALL DSRTC_WRBYT ; DO IT |
|
|
|
; |
|
|
|
; TURN WRITE PROTECT BACK ON |
|
|
|
LD C,$8E ; WRITE CMD TO D |
|
|
|
LD E,$80 ; WRITE PROTECT ON |
|
|
|
CALL DSRTC_WRBYT ; DO IT |
|
|
|
; |
|
|
|
RET |
|
|
|
; |
|
|
|
; BURST READ CLOCK DATA INTO BUFFER AT HL |
|
|
|
; |
|
|
|
DSRTC_RDCLK: |
|
|
|
|