	TITLE	QT CLOCK/CALENDAR READ UTILITY
	LIST	NOCOND
;****************************************************************************
;
;	THIS UTILITY DISPLAYS THE TIME INFORMATION FROM THE QT COMPUTER
;  SYSTEMS CLOCK/CALENDAR BOARD.
;
;  DISPLAY IS IN THE FORM:
;	DAY_OF_WEEK  MONTH DAY,YEAR   HH:MM:SS
;
;****************************************************************************
;
;	REVISIONS:
;
; X.X -	6 MAR 83  GRH
;	INITIAL RELEASE
;
VERS	EQU	'00'
;
;****************************************************************************

FALSE	EQU	0
TRUE	EQU	NOT FALSE
LSTINC	EQU	FALSE
*INCLUDE	SYSPARAM.INC
	LIST	ON
	SUBTTL	DEFINITIONS
BDOS	EQU	0005H

LF	EQU	0AH
CR	EQU	0DH


	SUBTTL	MAIN
	ORG	100H

	JP	START

START:	LD	SP,(BDOS + 1)
	DEC	SP
	DEC	SP
	LD	E,CR
	CALL	CONOUT
	LD	E,LF
	CALL	CONOUT
	LD	A,[1 SHL CLKRD] + CLKSECL	;READ SECONDS UNTIL CHANGE
	OUT	(CLKCMD),A
	EX	(SP),HL			;DELAY FOR CHIP
	EX	(SP),HL
	IN	A,(CLKDAT)		;GET 1ST READING THEN SAVE
	AND	CLKDMSK			;MASK OFF UPPER NIBBLE
	LD	C,A
WAITL:	IN	A,(CLKDAT)		;NOW WAIT FOR CHANGE
	AND	CLKDMSK
	CP	C
	JR	Z,WAITL

	LD	(SEC),A			;SAVE SECONDS
	LD	HL,SEC + 1		;SET PTR
	LD	B,12			;NUMBER OF READS
	LD	C,CLKSECH		;FETCH REMAINING DATA

GETLP:	CALL	GETD
	LD	(HL),A
	INC	C			;NEXT CLK REGISTER
	INC	HL			;NEXT SAVE LOC
	DJNZ	GETLP			;DO UNTIL GOT ALL

;  GOT DATA, RELEASE CLOCK & DISPLAY DATA

	LD	IX,SEC			;SET PTR TO DATA

	LD	A,(IX + CLKWEEK)	;DISPLAY DAY OF WEEK
	AND	7
	LD	HL,DAYTBL
	CALL	TXTOUT

;  DISPLAY MONTH NAME

	CALL	SPACE
	CALL	SPACE
	LD	A,(IX + CLKMONL)
	AND	CLKDMSK			;MASK OFF UPPER NIBBLE

	BIT	0,(IX + CLKMONH)	;IF > 9 THEN ADD 10
	JR	Z,MONOK
	ADD	A,10
MONOK:	CP	13			;IF MONTH 0..12 THEN OK
	JR	C,MSET
	XOR	A			;ELSE MONTH = NOT SET
MSET:	LD	HL,MONTBL
	CALL	TXTOUT

;  DISPLAY DAY OF MONTH

	CALL	SPACE
	LD	A,(IX + CLKDAYH)
	AND	3			;MASK OFF CONTROL BITS
	CALL	NUMOUT
	LD	A,(IX + CLKDAYL)
	CALL	NUMOUT

;  DISPLAY YEAR

	LD	E,','
	CALL	CONOUT
	LD	E,'1'
	CALL	CONOUT
	LD	E,'9'
	CALL	CONOUT
	LD	A,(IX + CLKYRH)
	CALL	NUMOUT
	LD	A,(IX + CLKYRL)
	CALL	NUMOUT

;  DISPLAY TIME

	CALL	SPACE
	CALL	SPACE
	CALL	SPACE

	LD	A,(IX + CLKHRSH)
	AND	3			;MASK OFF CONTROL BITS
	CALL	NUMOUT
	LD	A,(IX + CLKHRSL)
	CALL	NUMOUT
	LD	E,':'
	CALL	CONOUT

	LD	A,(IX + CLKMINH)
	CALL	NUMOUT
	LD	A,(IX + CLKMINL)
	CALL	NUMOUT
	LD	E,':'
	CALL	CONOUT

	LD	A,(IX + CLKSECH)
	CALL	NUMOUT
	LD	A,(IX + CLKSECL)
	CALL	NUMOUT

	LD	E,CR
	CALL	CONOUT
	LD	E,LF
	CALL	CONOUT
	JP	0


	SUBTTL	SUBROUTINES
;
;	SPACE OUTPUT SUBR
;
SPACE:	LD	E,' '


;
;	CONSOLE OUTPUT SUBR
;
CONOUT:	LD	C,2
	JP	BDOS


;
;	TEXT OUTPUT SUBR OUTPUTS TEXT STRINGS FROM TABLE
;	ENTRY-	A= TABLE OFFSET
;		HL= TABLE PTR
;
TXTOUT:	LD	C,A		;COMPUTE TABLE PTR
	LD	B,0
	ADD	HL,BC
	ADD	HL,BC
	LD	A,(HL)		;GET MESSAGE PTR FROM TABLE
	INC	HL
	LD	H,(HL)
	LD	L,A

NXTCH:	LD	E,(HL)		;GET CHAR FROM MESSAGE
	PUSH	HL
	PUSH	DE		;OUTPUT CHAR
	CALL	CONOUT
	POP	DE
	POP	HL
	INC	HL		;NEXT CHAR
	BIT	7,E		;IF BIT 7 SET THEN DONE
	RET	NZ
	JR	NXTCH


;
;	GET CLOCK DATA SUBR
;	ENTRY-	C= CLOCK REGISTER #
;	EXIT -	A= REGISTER DATA
;
GETD:	LD	A,C			;SET UP READ
	SET	CLKRD,A			;SET READ BIT
	OUT	(CLKCMD),A
	EX	(SP),HL			;DELAY
	EX	(SP),HL
	IN	A,(CLKDAT)
	RET

;
;	NUMBER OUTPUT SUBR
;	ENTRY-	A= BINARY NUBER 0..9
;
NUMOUT:	AND	CLKDMSK		;MASK OFF STRAY BITS
	ADD	'0'		;CONVERT TO ASCII
	LD	E,A		;OUTPUT IT
	JP	CONOUT


	SUBTTL	DATA AREA
;
;	TIME DATA SAVE AREA
;
SEC:	DW	0		;SECONDS
	DS	15		;RESERVED FOR OTHER DATA

;
;	MONTH TABLE
;
MONTBL:	DW	NTSET,JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC

JAN	DM	'January'
FEB	DM	'February'
MAR	DM	'March'
APR	DM	'April'
MAY	DM	'May'
JUN	DM	'June'
JUL	DM	'July'
AUG	DM	'August'
SEP	DM	'September'
OCT	DM	'October'
NOV	DM	'November'
DEC	DM	'December'

;
;	DAY OF WEEK TABLE
;
DAYTBL:	DW	SUN,MON,TUE,WED,THU,FRI,SAT,NTSET

SUN	DM	'Sunday'
MON	DM	'Monday'
TUE	DM	'Tuesday'
WED	DM	'Wednesday'
THU	DM	'Thursday'
FRI	DM	'Friday'
SAT	DM	'Saturday'
NTSET	DM	'CLOCK NOT SET '

	END
