Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

Программирование модемов

© Александр Фролов, Григорий Фролов
Том 4, М.: Диалог-МИФИ, 1993, 236 стр.

[Назад] [Содеожание] [Дальше]

2.7. Поддержка асинхронного адаптера в BIOS

Мы опишем функции BIOS, облегчающие обслуживание асинхронного последовательного адаптера. Эти функции доступны через прерывание INT 14h.

Первая функция предназначена для инициализации портов асинхронного адаптера:

На входе:   AH = 00h;

   DX = номер порта:   0 - COM1, 1 - COM2, 2 - COM3,
               3 - COM4;

   AL = параметры инициализации (см. ниже).

На выходе: AH = состояние порта асинхронного адаптера;

   AL = состояние модема.

При вызове этой функции регистр AL должен содержать параметры инициализации (x - состояние бита безразлично):

 7 6 5 4 3 2 1 0
--T-T-T-T-T-T-T-¬
¦     ¦   ¦ ¦   ¦
LT+-+T+T+T+T+T+T-
 L=T=- L=¦ ¦ L=¦= Длина слова в битах:
   ¦     ¦ ¦        00 - 5 бит;
   ¦     ¦ ¦        01 - 6 бит;
   ¦     ¦ ¦        10 - 7 бит;
   ¦     ¦ ¦        11 - 8 бит
   ¦     ¦ ¦
   ¦     ¦ L===== Количество стоповых бит:
   ¦     ¦          0 - 1 бит;
   ¦     ¦          1 - 2 бита
   ¦     ¦
   ¦     L======= Четность:
   ¦                x0 - контроль на четность не
   ¦                     используется;
   ¦                01 - контроль на нечетность;
   ¦                11 - контроль на четность
   ¦
   L============= Скорость передачи данных в бодах:

                    000 - 110
                    001 - 150
                    010 - 300
                    011 - 600
                    100 - 1200
                    101 - 2400
                    110 - 4800
                    111 - 9600

После вызова функции в регистр AH записывается состояние порта асинхронного адаптера:

 7 6 5 4 3 2 1 0
--T-T-T-T-T-T-T-¬
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
LT+T+T+T+T+T+T+T-
 ¦ ¦ ¦ ¦ ¦ ¦ ¦ L= Таймаут, если установлен этот бит,
 ¦ ¦ ¦ ¦ ¦ ¦ ¦    другие биты не имеют значения;
 ¦ ¦ ¦ ¦ ¦ ¦ ¦
 ¦ ¦ ¦ ¦ ¦ ¦ L=== Регистр сдвига передатчика пуст;
 ¦ ¦ ¦ ¦ ¦ ¦
 ¦ ¦ ¦ ¦ ¦ L===== Буферный регистр передатчика пуст;
 ¦ ¦ ¦ ¦ ¦
 ¦ ¦ ¦ ¦ L======= Обнаружено состояние BREAK;
 ¦ ¦ ¦ ¦
 ¦ ¦ ¦ L========= Ошибка синхронизации;
 ¦ ¦ ¦
 ¦ ¦ L=========== Ошибка четности;
 ¦ ¦
 ¦ L============= Ошибка переполнения входного регистра;
 ¦
 L=============== Данные готовы.

Регистр AL содержит байт состояния модема:

 7 6 5 4 3 2 1 0
--T-T-T-T-T-T-T-¬
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
LT+T+T+T+T+T+T+T-
 ¦ ¦ ¦ ¦ ¦ ¦ ¦ L= Линия CTS изменила состояние
 ¦ ¦ ¦ ¦ ¦ ¦ ¦
 ¦ ¦ ¦ ¦ ¦ ¦ L=== Линия DSR изменила состояние
 ¦ ¦ ¦ ¦ ¦ ¦
 ¦ ¦ ¦ ¦ ¦ L===== Линия RI изменила состояние
 ¦ ¦ ¦ ¦ ¦
 ¦ ¦ ¦ ¦ L======= Линия DCD изменила состояние
 ¦ ¦ ¦ ¦
 ¦ ¦ ¦ L========= Состояние линии CTS
 ¦ ¦ ¦
 ¦ ¦ L=========== Состояние линии DSR
 ¦ ¦
 ¦ L============= Состояние линии RI
 ¦
 L=============== Состояние линии DCD

Для передачи байта используется следующая функция:

На входе:   AH = 01h;

   DX = номер порта:   0 - COM1, 1 - COM2, 2 - COM3,
               3 - COM4;

   AL = передаваемый байт.

На выходе: AL сохраняется;

   AH = состояние порта асинхронного адаптера,
      если бит 7 регистра AH установлен в 1,
      произошла ошибка.

Функция 02h предназначена для приема байта:

На входе:   AH = 02h;

   DX = номер порта:   0 - COM1, 1 - COM2, 2 - COM3,
               3 - COM4;

На выходе:   AL = принятый байт;

   AH = состояние порта асинхронного адаптера,
      если регистр AH не равен 0,
      произошла ошибка.

Состояние порта асинхронного адаптера можно узнать с помощью функции 03h:

На входе:   AH = 03h;

   DX = номер порта:   0 - COM1, 1 - COM2, 2 - COM3,
               3 - COM4;

На выходе: AH = состояние порта асинхронного адаптера;

   AL = состояние модема.

[Назад] [Содеожание] [Дальше]