;**********************************************************************
;
; B3C-XERO.INS  A TIME insert for BYE335 and up
;
; Adapted from:
; MBC-XERO.ASM -- Version 1.0 -- 05/24/84 -- by Isaac Salzman
;
;       This insert is for a Xerox 820-II running BYE3. This
;       routine will only work on a Xerox 820-II, not an 820. It
;       will also (most likely) work on the 16/8 as well.
;
;       When called this routine will check the RTCBUF. If a '99H'
;       is in the first byte, the clock is initialized. Next the
;       seconds are checked, and if changed since last update of
;       RTC buffer, the clock is stopped, data copied to RTCBUF and
;       the clock is restarted. (If no change in seconds, the
;       routine returns immediately.)
;
;**********************************************************************
;
;
;Xerox clock initialization
;
XERCLK  EQU     0F039H          ; Location of Xerox 820-II time vector
                               ; Monitor routine. When called, it returns
                               ; The addr of the 820's clock in high mem.
        IF     RTC
TIME:   LXI     H,0             ; Clear HL
       CALL    XERCLK          ; Get pointer to TOD in HL
       MOV     A,M
       CALL    MOVETM
       STA     RTCBUF+6        ; Get day
;
       INX     H
       MOV     A,M
       CALL    MOVETM
       STA     RTCBUF+5        ; Get month
;
       INX     H
       MOV     A,M
       CALL    MOVETM
       STA     RTCBUF+4        ; Get year
;
       INX     H
       MOV     A,M
       CALL    MOVETM
       STA     RTCBUF          ; Update hours
;
       INX     H
       MOV     A,M
       CALL    MOVETM
       STA     RTCBUF+1        ; Update minutes
;
       INX     H
       MOV     A,M
       CALL    MOVETM
       STA     RTCBUF+2        ; Update seconds
;
       LDA     RTCBUF          ; Get BCD HH
       CALL    BCDBIN          ; And convert to binary
       STA     CCHOUR          ; For BYE3
       LDA     RTCBUF+1        ; Get BCD MM
       CALL    BCDBIN
       STA     CCMIN           ; Binary for BYE3
       RET                     ; And return (for now..)
;
MOVETM: MVI     B,0             ; Clear reg B
CONV:   CPI     10              ; Are we >= 10 ?
       JC      ADDREST         ; No, add the rest
       SUI     10              ; Subtract 10 from A
       MOV     C,A             ; Put A in C (store it for a sec)
       MOV     A,B             ; Put B in A
       ADI     16              ; Add 16
       MOV     B,A             ; Store it back in B
       MOV     A,C             ; Get our original value back in A
       JMP     CONV
ADDREST:
       ADD     B               ; Add the rest to what's in A
       RET                     ; Return
        ENDIF  ;RTC
;
;**********************************************************************