// FROM_MDM.C

#include "uart_reg.h"

/**
*.Name         from_modem
*
*.Title        Получает от модема один символ.
*
*.Descr        Эта функция получает от модема через
*              COM-порт один символ.
*
*.Proto        int from_modem( unsigned base_address, char *in_char )
*
*.Params       unsigned base_address - базовый адрес асинхронного адаптера,
*              на котором находится модем;
*
*              char *in_char - символ, полчаемый от модема,
*
*.Return       -1 - если нет данных от модема
*              0 - если данные считаны
*
*.Sample       to_modem.c
**/

int from_modem( unsigned base_address, char *in_char ) {

	unsigned ls_reg;
	char temp;
	int   ret_num;

	temp = 0;
	ret_num = -1;

	ls_reg = base_address + LSR_N;

	_asm {

		cli

		// проверяем есть ли у асинхронного адаптера данные,
		// готовые для чтения

		mov   dx, ls_reg
		in    al,dx
		nop
		nop
		nop
		test  al,1

		// если данных нет - возвращаем -1

		jz    no_data

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

		mov   dx,base_address
		in    al,dx
		nop
		nop
		nop
		mov   temp,al

		// возвращаем 0

		mov   ret_num,0

no_data:

		sti
	}

	*in_char = temp;

	return( ret_num );
}


