|
|
|
@ -252,64 +252,70 @@ DS12RTC_DETECT: |
|
|
|
; READ CLOCK DATA INTO BUFFER AT HL (YYMMDDHHMMSS) |
|
|
|
; |
|
|
|
DS12RTC_RDCLK: |
|
|
|
LD D,H ; RESET DE |
|
|
|
LD E,L ; ... IN CASE OF RESTART |
|
|
|
LD E,0 ; CLEAR UIP FLAG |
|
|
|
PUSH HL ; SAVE IN CASE OF RESTART |
|
|
|
LD C,$09 ; START WITH YEAR REG |
|
|
|
CALL DS12RTC_RDCLK1 ; DO YEAR (REG $09) |
|
|
|
JR NZ,DS12RTC_RDCLK ; RESTART IF UIP DETECTED |
|
|
|
CALL DS12RTC_RDCLK1 ; DO MONTH (REG $08) |
|
|
|
JR NZ,DS12RTC_RDCLK ; RESTART IF UIP DETECTED |
|
|
|
CALL DS12RTC_RDCLK1 ; DO DAY OF MONTH (REG $07) |
|
|
|
JR NZ,DS12RTC_RDCLK ; RESTART IF UIP DETECTED |
|
|
|
DEC C ; SKIP DAY OF WEEK (REG $06) |
|
|
|
DEC C ; SKIP HOURS ALARM (REG $05) |
|
|
|
CALL DS12RTC_RDCLK1 ; DO HOUR (REG $04) |
|
|
|
JR NZ,DS12RTC_RDCLK ; RESTART IF UIP DETECTED |
|
|
|
DEC C ; SKIP MINUTES ALARM (REG $03) |
|
|
|
CALL DS12RTC_RDCLK1 ; DO MINUTES (REG $02) |
|
|
|
JR NZ,DS12RTC_RDCLK ; RESTART IF UIP DETECTED |
|
|
|
DEC C ; SKIP SECONDS ALARM (REG $01) |
|
|
|
CALL DS12RTC_RDCLK1 ; DO SECONDS (REG $00) |
|
|
|
POP HL ; RESTORE BUF PTR |
|
|
|
LD A,E ; UIP FLAG TO ACCUM |
|
|
|
OR A ; TEST IT |
|
|
|
JR NZ,DS12RTC_RDCLK ; IF UIP WAS FLAGGED, TRY AGAIN |
|
|
|
; |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
DS12RTC_RDCLK1: |
|
|
|
CALL DS12RTC_UIP ; CHECK FOR UPDATE IN PROGRESS |
|
|
|
JR Z,DS12RTC_RDCLK2 ; IF NO UIP, SKIP AHEAD |
|
|
|
INC E ; FLAG UIP OCCURRED |
|
|
|
DS12RTC_RDCLK2: |
|
|
|
CALL DS12RTC_RDREG ; GET IT |
|
|
|
LD (DE),A ; STORE IN BUF |
|
|
|
INC DE ; BUMP BUF PTR |
|
|
|
LD (HL),A ; STORE IN BUF |
|
|
|
INC HL ; BUMP BUF PTR |
|
|
|
DEC C ; DEC REGISTER |
|
|
|
JR DS12RTC_UIP ; RETURN VIA CHECK FOR UPDATE IN PROGRESS |
|
|
|
RET |
|
|
|
; |
|
|
|
; WRITE CLOCK DATA FROM BUFFER AT HL |
|
|
|
; |
|
|
|
DS12RTC_WRCLK: |
|
|
|
LD D,H ; RESET DE |
|
|
|
LD E,L ; ... IN CASE OF RESTART |
|
|
|
LD E,0 ; CLEAR UIP FLAG |
|
|
|
PUSH HL ; SAVE IN CASE OF RESTART |
|
|
|
LD C,$09 ; START WITH YEAR REG |
|
|
|
CALL DS12RTC_WRCLK1 ; DO YEAR (REG $09) |
|
|
|
JR NZ,DS12RTC_WRCLK ; RESTART IF UIP DETECTED |
|
|
|
CALL DS12RTC_WRCLK1 ; DO MONTH (REG $08) |
|
|
|
JR NZ,DS12RTC_WRCLK ; RESTART IF UIP DETECTED |
|
|
|
CALL DS12RTC_WRCLK1 ; DO DAY OF MONTH (REG $07) |
|
|
|
JR NZ,DS12RTC_WRCLK ; RESTART IF UIP DETECTED |
|
|
|
DEC C ; SKIP DAY OF WEEK (REG $06) |
|
|
|
DEC C ; SKIP HOURS ALARM (REG $05) |
|
|
|
CALL DS12RTC_WRCLK1 ; DO HOUR (REG $04) |
|
|
|
JR NZ,DS12RTC_WRCLK ; RESTART IF UIP DETECTED |
|
|
|
DEC C ; SKIP MINUTES ALARM (REG $03) |
|
|
|
CALL DS12RTC_WRCLK1 ; DO MINUTES (REG $02) |
|
|
|
JR NZ,DS12RTC_WRCLK ; RESTART IF UIP DETECTED |
|
|
|
DEC C ; SKIP SECONDS ALARM (REG $01) |
|
|
|
CALL DS12RTC_WRCLK1 ; DO SECONDS (REG $00) |
|
|
|
POP HL ; RESTORE BUF PTR |
|
|
|
LD A,E ; UIP FLAG TO ACCUM |
|
|
|
OR A ; TEST IT |
|
|
|
JR NZ,DS12RTC_WRCLK ; IF UIP WAS FLAGGED, TRY AGAIN |
|
|
|
; |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
DS12RTC_WRCLK1: |
|
|
|
LD A,(DE) ; GET VALUE |
|
|
|
CALL DS12RTC_UIP ; CHECK FOR UPDATE IN PROGRESS |
|
|
|
JR Z,DS12RTC_WRCLK2 ; IF NO UIP, SKIP AHEAD |
|
|
|
INC E ; FLAG UIP OCCURRED |
|
|
|
DS12RTC_WRCLK2: |
|
|
|
LD A,(HL) ; GET VALUE |
|
|
|
CALL DS12RTC_WRREG ; WRITE IT |
|
|
|
INC DE ; BUMP BUF PTR |
|
|
|
INC HL ; BUMP BUF PTR |
|
|
|
DEC C ; DEC REGISTER |
|
|
|
JR DS12RTC_UIP ; RETURN VIA CHECK FOR UPDATE IN PROGRESS |
|
|
|
; |
|
|
|
|