780
; NUC-XERO.INS - Xerox 820-II, 16/8 - 04/21/86
;
; Note: This is an insert, not an overlay.
;
; ========
; 04/21/86  Modified for NUBYE
; 07/15/85  Adapted from MBC-XERO.ASM (I. Salzman)	- Wayne Masters
; ========
;
; This routine will not work on the Xerox 820.
;
; 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).
;
; 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.
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 NUBYE
	LDA	RTCBUF+1	; Get BCD MM
	CALL	BCDBIN
	STA	CCMIN		; Binary for NUBYE
	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
;
; end of insert
; -------------

0

