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


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

Первая функция предназначена для инициализации портов асинхронного адаптера: На входе: 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 = состояние модема.



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