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

Поддержка асинхронного адаптера в 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 = состояние модема.



Содержание раздела