Программирование модемов© Александр Фролов, Григорий ФроловТом 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 = состояние модема.
|

