// COM_PORT.C

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


#include "sysp.h"

void main(void) {

	unsigned adr;
	int port;

	printf(" Программа определения  адресов  асинхронных  портов.\n\n");

	printf(" Определяем адреса портов по области переменных BIOS:\n\n");

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

	for( port = 0; port < 4; port++ ) {

		// определяем адрес порта port

		adr = com_address( port );

		if( adr != 0 )
			printf("\n    COM%d - базовый адрес %Xh", port + 1, adr );

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

		else
				printf("\n    COM%d - отсутствует", port + 1);
	}


	// проверяем все зарезервированные базовые адреса
	// последовательных портов - 3F8h, 2F8h, 3E8h, 2E8h.

	printf("\n\n Тестируем зарезервированные адреса для регистров COM портов:\n\n");

	for( port = 0; port < 4; port++ ) {

		int port_address[] = { 0x3F8, 0x2F8, 0x3E8, 0x2E8 };

		// определяем адрес порта port

		adr = port_address[port];

		printf("    COM порт с базовым адресом %Xh %s\n", adr,
				( test_com( adr ) == 0 )? "отсутствует": "обнаружен");
	}
}
