/***************************************************************************
*	NAME:  TIMER.C
**	COPYRIGHT:
**	"Copyright (c) 1992, by FORTE
**
**       "This software is furnished under a license and may be used,
**       copied, or disclosed only in accordance with the terms of such
**       license and with the inclusion of the above copyright notice.
**       This software or any other copies thereof may not be provided or
**       otherwise made available to any other person. No title to and
**       ownership of the software is hereby transfered."
****************************************************************************
*  CREATION DATE: 11/18/92
*--------------------------------------------------------------------------*
*     VERSION	DATE	   NAME		DESCRIPTION
*>	1.0	11/18/92		Original
***************************************************************************/

#include <dos.h>
#include <conio.h>

#include "forte.h"
#include "gf1proto.h"
#include "osproto.h"
#include "gf1hware.h"
#include "gf1os.h"

extern ULTRA_DATA _gf1_data;

void
UltraStartTimer(int timer,unsigned char time)
{
unsigned char temp;

	if (timer == 1)
		{
		_gf1_data.timer_ctrl |= 0x04;
		_gf1_data.timer_mask |= 0x01;
		temp = TIMER1;
		}
	else
		{
		_gf1_data.timer_ctrl |= 0x08;
		_gf1_data.timer_mask |= 0x02;
		temp = TIMER2;
		}

	ENTER_CRITICAL;

	time = 256 - time;
	outp(_gf1_data.reg_select,temp);
	outp(_gf1_data.data_hi,time);


	outp( _gf1_data.reg_select, TIMER_CONTROL );
	outp( _gf1_data.data_hi, _gf1_data.timer_ctrl );

	/* is this necessary ??? */
	outp( _gf1_data.timer_control, 0x04 );		
	outp( _gf1_data.timer_data, _gf1_data.timer_mask );		

	LEAVE_CRITICAL;
}

void
UltraStopTimer(int timer)
{

	if (timer == 1)
		{
		_gf1_data.timer_ctrl &= ~0x04;
		_gf1_data.timer_mask &= ~0x01;
		}
	else
		{
		_gf1_data.timer_ctrl &= ~0x08;
		_gf1_data.timer_mask &= ~0x02;
		}

	ENTER_CRITICAL;

	outp( _gf1_data.reg_select, TIMER_CONTROL );
	outp( _gf1_data.data_hi, _gf1_data.timer_ctrl);

	outp( _gf1_data.timer_control, 0x04 );		
	outp( _gf1_data.timer_data, _gf1_data.timer_mask  | 0x80 );		

	LEAVE_CRITICAL;
}

int
UltraTimerStopped(int timer)
{
unsigned char value;
unsigned char temp;

	if (timer == 1)
		temp = 0x40;
	else
		temp = 0x20;

	value = (inp(_gf1_data.timer_control)) & temp;

	return(value);
}


