/*
 * Copyright(C) Paul und Scherer (mct.de/mct.net)
 *
 * This example demonstrates how to...
 *
 *  ... use the PIT to generate periodic interrupts.
 */

#include <stdio.h>
#include <sys/m68k.h>
#include <target.h>
#include "../tty.h"

static long ticks;				/* tick counter */

/*
 * PIT interrupt service
 */
#pragma interrupt				/* handle as ISR! */
static void
pit_isr(void)
{
	ticks++;				/* up tick count */
}
#pragma endinterrupt

/*
 * The PIT is setup to generate an interrupt every 1s/128 (=tick).
 * The tick count may be monitored anytime by pressing any key.
 */
int
main(void)
{
	INTERN.sim.picr = 0x100|VEC_PIT;	/* set vector, IRQ level 1 */
	INTERN.sim.pitr = 0x40;			/* period =1s/128 =ca.8ms */

	EXCEPT_VEC(VEC_PIT) = pit_isr;		/* set ISR addr */
	ENABLE_CPU_INTERRUPTS;

	puts("Hit any key to display tick count...");
	while (1) {
		getch();
		printf("ticks: %10lu [1s/128]\n", ticks);
	}
}

