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