// COM_ADR.C

#include "sysp.h"

/**
*.Name         com_address
*
*.Title        Определяет адрес заданного COM-порта.
*
*.Descr        Эта функция определяет адрес базового регистра
*              COM-порта. Адрес берется из области переменных
*              BIOS.
*
*.Proto        unsigned  com_address( int port );
*
*.Params       int port - номер асинхронного адаптера:
*              0 - COM1, 1 - COM2,  2 - COM3,  3 - COM4.
*
*.Return       Адрес базового регистра асинхронного порта.
*              Если порт не установлен, возвращается 0,
*              если неправильно задан параметр, то -1.
*
*.Sample       com_adr.c
**/

unsigned  com_address( int port ) {

	unsigned base_address;

	// возвращаем -1, если заданный асинхронный порт
	// не COM1, не COM2, не COM3 и не COM4

	if(( port > 4 ) || ( port < 0 )) return( -1 );

	// считываем из области переменных BIOS базовый адрес данного порта

	base_address = *(( unsigned _far * ) FP_MAKE( 0x40, port * 2 ));

	return( base_address );
}

