Browse Source

Minor Improvement in DS12RTC Driver

- Refactored the Update-In-Progress checks to reduce code size and improve checking accuracy.
pull/634/head
Wayne Warthen 2 months ago
parent
commit
b9a251bb1f
No known key found for this signature in database GPG Key ID: 8B34ED29C07EEB0A
  1. 44
      Source/HBIOS/ds12rtc.asm

44
Source/HBIOS/ds12rtc.asm

@ -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
;

Loading…
Cancel
Save