// (C) Фролов Г.В., 1995
// Адрес E-mail: frolov@glas.apc.org


#include "sysp.h"

/**
*.Name         test_com
*
*.Title        Определяет наличие последовательного порта.
*
*.Descr        Эта функция определяет наличие последовательного
*              асинхронного порта по заданному базовому адресу.
*
*.Proto        int  test_com( unsigned base_adr );
*
*.Params       unsigned base_adr - базовый адрес предполагаемого
*              асинхронного адаптера.
*
*.Return       Если порт не установлен, возвращается 1,
*              если порт отсутствует, то возвращается 0.
*
*.Sample       test_com.c
**/

int test_com( unsigned base_adr ) {

	unsigned  save_reg;

	// определяем наличие асинхронного порта по заданному базовому
	// адресу путем записи с последующим чтением и сравнением
	// содержимого управляющего регистра

	// сохраняем содержимое управляющего регистра

	save_reg = inp( base_adr + LCR_N );

	// производим запись с последующим сравнением числа 0xA5
	// в управляющий регистр

	outp( base_adr + LCR_N, 0xA5 );
	if( 0xA5 != inp( base_adr + LCR_N ) )
		return( 0 );

	// производим запись с последующим сравнением числа 0x5A
	// в управляющий регистр

	outp( base_adr +  LCR_N, 0x5A );
	if( 0x5A != inp( base_adr + LCR_N ) )
		return( 0 );

	// восстанавливаем содержимое управляющего регистра

	outp( base_adr + LCR_N, save_reg );

	return( 1 );
}


