/* SYSP_COM.H - include-файл для примеров, приведенных в книге */



/**
*.Name      FP_MAKE
*
*.Title     Макро для составления FAR-указателя
*
*.Descr     Макро составляет FAR-указатель, пользуясь
*           значениями сегмента и смещения
*
*.Params    FP_MAKE(seg,off)
*              seg - сегмент;
*              off - смещение
*
*.Return    FAR-указатель seg:off
**/


#define FP_MAKE(seg,off) ((void far *)                         \
					((((unsigned long) (unsigned)(seg)) << 16L) |   \
					((unsigned long) (unsigned) (off))))



/* Идентификатор BIOS */

#pragma pack(1)

typedef struct _BIOS_ID_ {

	char date[8];
	unsigned reserve;
	char pc_type;

} BIOS_ID;

#pragma pack()



typedef struct _AUX_MODE_ {

	union {

		struct {
			unsigned char  len : 2, // длина символа
					stop         : 1, // число стоп-битов
					parity       : 2, // контроль четности
					stuck_parity : 1, // фиксация четности
					en_break_ctl : 1, // установка перерыва
					dlab         : 1; // загрузка регистра делителя
		} ctl_word;

		char ctl;

	} ctl_aux;

	unsigned long baud;            // скорость передачи данных

} AUX_MODE;

int aux_init(AUX_MODE *, int, int); // инициализация
									// асинхронного адаптера

void aux_stat(AUX_MODE *, int); // определение режима
									// асинхронного адаптера
void aux_outp(char, int);  // вывод символа в
									// асинхронный адаптер
char aux_inp(int); // ввод символа из асинхронного
						 // адаптера

