bioscom

 Функция            Выполняет ввод/вывод из последовательного порта.

 Синтаксис          #include
                    int bioscom(int cmd, char abyte, int port);

 Файл, содержащий   bios.h
 прототип

 Описание           Функция bioscom выполняет разнообразную связь через
                    RS232 при помощи порта ввода/вывода, указываемого
                    в аргументе port.

                    Значение 0 аргумента port соответствует COM1,
                    значение 1 соответствует COM2 и т.д.

                    Значение аргумента cmd может быть одним из следу-
                    ющих:

                    0 - устанавливает параметры связи в abyte;
                    1 - пересылает символ в abyte по линии связи;
                    2 - получает символ по линии связи;
                    3 - возвращает текущее состояние коммуникационного
                        порта.

                    abyte является комбинацией следующих битов (из
                    каждой группы выбирается одно значение):

                    0x02 - 7 битов данных            0x00    110 бод
                    0x03 - 8 битов данных            0x20    150 бод

                    0x00 - 1 стоп-бит                0x40    300 бод
                    0x04 - 2 стоп-бита               0x60    600 бод
                    0x00 - нет проверки на четность  0x80    1200 бод
                    0x08 - проверка на нечетность    0xA0    2400 бод
                    0x18 - проверка на четность      0xC0    4800 бод
                                                     0xE0    9600 бод

                    Например, если abyte имеет следующее значение
                    0xEB (0xE0|0x08|0x00|0x03), то это устанавливает
                    для коммуникационного порта скорость передачи
                    9600 бод, контроль на нечетность, 1 стоп-бит, и 8
                    битов данных. bioscom использует прерывание BIOS
                    0x14.

 Возвращаемое       Для всех значений cmd bioscom возвращает шестнадца-
 значение           тибитовое целое число, где 8 старших бит - это биты
                    состояния, а 8 младших битов варьируются в зави-
                    симости от значения cmd. Старшие биты в возвраща-
                    емом значении имеют следующие значения:

                    бит 15 - таймаут;
                    бит 14 - передающий сдвиговый регистр пуст:
                    бит 13 - передающий регистр хранения пуст;
                    бит 12 - обнаружено прерывание;
                    бит 11 - ошибка формирования кадра синхронизации;
                    бит 10 - ошибка четности;
                    бит 9  - ошибка переполнения;
                    бит 8  - готовность данных.

                    Если значение в abyte невозможно передать, то ус-
                    танавливается бит 15. В других случаях старшие и
                    младшие биты устанавливаются соответствующим об-
                    разом. К примеру, если возникла ошибка кадра син-
                    хронизации, то устанавливается бит 11.

                    Если cmd имеет значение 2, то считываемый байт
                    находится в младших битах, если не было ошибки.
                    Если же произошла ошибка, устанавливается, по
                    крайней мере, один из старших бит. Если ни один
                    из старших бит не установлен, значит байт был по-
                    лучен без ошибки.

                    Если cmd имеет значение 0 или 3, то возвращаемое
                    значение содержит старшие биты, как они были опреде-
                    лены выше, а младшие биты определяются следующим
                    образом:

                    бит 7 - прием обнаруженного линейного сигнала;
                    бит 6 - кольцевой индикатор;
                    бит 5 - набор данных готов;
                    бит 4 - готовность к передаче;
                    бит 3 - изменение в приеме детектора линейного
                            сигнала;
                    бит 2 - завершающий кольцевой детектор;
                    бит 1 - изменение в готовности набора данных;
                    бит 0 - изменение в готовности к передаче.

 Переносимость      bioscom поддерживается только на компьютерах
                    IBM PC или совместимых с ними.

 Пример:

 #include 
 #include 

 #define COM1 0
 #define DATA_READY 0x100
 #define SETTINGS (0x80|0x02|0x00|0x00)

 int main(void)
 {
     register int in, out, status;
     bioscom(0, SETTINGS, COM1);
     cprintf("... BIOSCOM [ESC] to exit ...\n");
     while (1)
     {
        status = bioscom(3, 0, COM1);
        if (status & DATA_READY)
           if ((out=bioscom(2, 0, COM1) & 0x7F) != 0)
                putch(out);
            if (kbhit())
            {
               if ( (in = getch()) == '\x1B')
                   return(0);
               bioscom(1, in, COM1);
            }
       }
 return 0;
 }