;
;                       BYE3 CLOCK INSERT
;                              for
;                  Zilog Z80A CTC Binary Clock
;                         by Don Brown
;
; This routine is for a clock that is maintained in low memory, CP/M page 0.
; Channel 3 of a Zilog Z80A CTC (60 hertz) clock is preprogrammed to interrupt
; every 1/60th of a second so that the BIOS can maintain the current date &
; time in locations 40h - 46h, represented in Binary.
;
; This is in insert (not an overly) to implement the BYE3 'RTC' and must be
; inserted into BYE3 at the appropriately marked location in that code.
;
;=============================================================================
;
; 07/27/85      Initial Release.  Compatible with BYE337        - Don Brown
;
;=============================================================================
;
; The Real-Time clock buffer 'RTCBUF', is organized: 'HH:MM:SS YYYY/MM/DD'.
;
; RTCBUF: DB 99h,99h,99h        ; HH:MM:SS (BCD 24 Hr. Time)
;         DB 19h,84h,01h,31h    ; YYYY/MM/DD (BCD ISO Date) 1984/01/31
;
;         BCD 24 Hr. Time:  HH = 0-23
;                           MM = 0-59
;                           SS = 0-59
;
; The BIOS stores the current Date and time, in Binary, as follows:
;
;       40h = Fractions of a Second (1/62nds)
;       41h = Seconds (0-59)
;       42h = Minutes (0-59)
;       43h = Hours   (0-23)
;       44h = Months  (1-12)
;       45h = Days    (1-31)
;       46h = Years   (1-99)
;
; This insert requires the 'BINBCD:', (BIN2BCD EQU YES), routine in BYE3 to
; convert the binary date and time to BCD date and time.
;
;=============================================================================
;
; CONFIGURATION SECTION
; ---------------------
;
        IF     RTC
CLKBASE EQU     40h             ; Base address of time & date in page 0
CENTURY EQU     19h             ; Century (BCD) our clock doesn't have it
;
;=============================================================================
;
TIME:   LDA     CLKBASE+3       ; Read the Clock - Binary Hours
       STA     CCHOUR          ; Store Binary Hours
       CALL    BINBCD          ; Convert Hours from Binary to BCD
       STA     RTCBUF+0        ; Store BCD Hours
;
       LDA     CLKBASE+2       ; Read the Clock - Binary Minutes
       STA     CCMIN           ; Store Binary Minutes
       CALL    BINBCD          ; Convert Minutes from Binary to BCD
       STA     RTCBUF+1        ; Store BCD Minutes
;
       LDA     CLKBASE+1       ; Read the Clock - Binary Seconds
       CALL    BINBCD          ; Convert Seconds from Binary to BCD
       STA     RTCBUF+2        ; Store BCD Seconds
;
       LDA     CLKBASE+4       ; Read the Clock - Binary Months
       CALL    BINBCD          ; Convert Months from Binary to BCD
       STA     RTCBUF+5        ; Store BCD Months
;
       LDA     CLKBASE+5       ; Read the Clock - Binary Days
       CALL    BINBCD          ; Convert Days from Binary to BCD
       STA     RTCBUF+6        ; Store the BCD Days
;
       LDA     CLKBASE+6       ; Read the Clock - Binary Years
       CALL    BINBCD          ; Convert Years from Binary to BCD
       STA     RTCBUF+4        ; Store the BCD Years
;
       LDA     CENTURY         ; Get the Century Configured in this insert
       STA     RTCBUF+3        ; Store the BCD Century
;
       RET                     ; Return to Bye
        ENDIF                  ; RTC
;
;=============================================================================