	.TITLE	DEMOFG
	.IDENT	/V05.00/
; FOREGROUND DEMONSTRATION PROGRAM TO PRINT MESSAGE TO BACKGROUND, THEN
; QUEUE A MESSAGE EVERY 2 SECONDS FOR THE BACKGROUND TO RING THE BELL.

	.MCALL	.SDATC,.PRINT,.MRKT,.QSET,.SPND

START::	.PRINT	#MSG			;PRINT INTRODUCTORY MESSAGE
	.QSET	#QUEUE,#100.		;SET ASIDE 100 Q ELEMENTS FOR MESSAGES
	.MRKT	#AREA,#TIME,#MKTC,#1	;SET UP MKTIM FOR 2 SECONDS FROM NOW
	.SPND				;SUSPEND THE FG TILL MKTIM SATISFIED

;	MKTIM COMPLETION ROUTINE

MKTC:	CMP	MSGCNT,#90.		;90 MESSAGES QUEUED YET?
	BGT	MKTC1			;YES-NO SENSE QUEUEING ANOTHER
	.SDATC	#AREA,#BUFFER,#1,#SDATC ;SEND MESSAGE TO BG
	INC	MSGCNT			;BUMP MESSAGE COUNTER
MKTC1:	.MRKT	#AREA,#TIME,#MKTC,#1	;SET UP ANOTHER MKTIM FOR 2 SECONDS
	RETURN				;RETURN FROM COMPLETION ROUTINE

;	SDAT COMPLETION ROUTINE

SDATC:	DEC	MSGCNT			;ONE OF THE MESSAGES HAS BEEN RECIEVED
	RETURN				;RETURN(RTS PC)

;	ASCII MESSAGES
	.NLIST BEX

MSG:	.ASCII	/FOREGROUND DEMONSTRATION PROGRAM/<15><12>
	.ASCII	/SENDS A MESSAGE TO THE BACKGROUND PROGRAM "DEMOBG"/<15><12>
	.ASCIZ	/EVERY 2 SECONDS, TELLING IT TO RING THE BELL./
	.EVEN

MSGCNT:	.WORD	0			;MESSAGE COUNTER

					;TIME CONSTANT
TIME:	.WORD	0			;HIGH ORDER
	.WORD	60.*2			;60 TICKS A SECOND,2 SECONDS

AREA:	.BLKW 6				;EMT ARGUMENT AREA

BUFFER:	.BLKW 400			;BUFFER FOR MESSAGES

					;QUEUE AREA
QUEUE:	.BLKW	100.*10.		;10. WORDS PER QUEUE ELEMENT FOR THE XM MONITOR

	.END	START
