;	Figure 10-5
;
;	Testbed for Real Time Clock driver in the BIOS.
;
;	The complete source file consists of three components:
;
;		1. The testbed code shown here.
;		2. The Real Time Clock driver destined for the BIOS.
;		3. The debug package shown in Figure 10-2.
;
TRUE	EQU	0FFFFH
FALSE	EQU	NOT TRUE

DEBUG	EQU	TRUE		;For conditional assembly of RST
				;  instructions in place of IN and
				;  OUT instructions in the drivers.
RST6	EQU	30H		;Use RST 6 for fake clock tick.

	ORG	100H
START:
	LXI	SP,Test$Stack	;Use local stack
	CALL	DB$Init		;Initialize the debug package
	MVI	A,JMP		;Setup RST 6 with JMP opcode
	STA	RST6
	LXI	H,RTC$Interrupt	;Setup RST 6 JMP address
	SHLD	RST6 + 1

	JMP	Testbed$Loop	;<=== REMOVE THIS JMP WHEN READY TO
				;     TEST WATCHDOG ROUTINES

	LXI	B,50		;50 ticks before timeout
	LXI	H,WD$Timeout	;Address to transfer to
	CALL	Set$Watchdog	;Set the watchdog timer
;
;
;	Make repeated entry to RTC Interrupt routine
;	to ensure that clock is correctly updated.
;
Testbed$Loop:
	MVI	A,0AAH		;Set registers to known pattern
	LXI	B,0BBCCH
	LXI	D,0DDEEH
	LXI	H,0FF11H
	RST	6		;Fake interrupt clock

	CALL	DB$MSGI		;Display in-line message
	DB	'Clock =',0

	LXI	H,Time$In$ASCII	;Get address of clock in driver
	CALL	DB$MSG		;Display current clock value
				; (Note : Time$In$ASCII already has
				;  a Line Feed character in it)
	CALL	DB$MSGI		;Display in-line message
	DB	0DH,0		;Carriage Return

	JMP	Testbed$Loop
;
;	Control arrives here when the watchdog timer times
;	out.
WD$Timeout:
	CALL	DB$MSGI
	DB	0DH,0AH,'Watchdog timed out',0
	RET			;Return to watchdog routine
;
	DW	9999H,9999H,9999H,9999H,9999H,9999H,9999H,9999H
	DW	9999H,9999H,9999H,9999H,9999H,9999H,9999H,9999H
	DW	9999H,9999H,9999H,9999H,9999H,9999H,9999H,9999H
Test$Stack:
;
;	Dummy routines for those shown in other figures
;
;	BIOS routines (Figure 8-10)
;
RTC$Interrupt:		;Interrupt service routine for clock tick
Set$Watchdog:		;Set Watchdog timer
Time$In$ASCII:		;ASCII string of HH:MM:SS, LF, 0
;
;	Debug routines (Figure 10-2)
;
DB$Init:		;Debug initialization
DB$MSGI:		;Display message in-line
DB$MSG:			;Display message
