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

Аппаратное обеспечение IBM PC

© Александр Фролов, Григорий Фролов
Том 2, книга 1, М.: Диалог-МИФИ, 1992.

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

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

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

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

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

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

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

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

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


При вызове этой функции регистр AL должен содержать параметры инициализации:

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;

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

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

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


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

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

                DX = номер порта: 0 - COM1, 1 - COM2.

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

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


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

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

                DX = номер порта: 0 - COM1, 1 - COM2.

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

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


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