Поддержка асинхронного адаптера в BIOS
В этом разделе мы опишем функции BIOS, облегчающие обслуживание асинхронного последовательного адаптера. Эти функции доступны через прерывание INT 14h.
Первая функция предназначена для инициализации портов асинхронного адаптера:
На входе: AH = 00h;
DX = номер порта: 0 - COM1, 1 - COM2, 2 - COM3, 3 - COM4;
AL = параметры инициализации (см. ниже).
На выходе: AH = состояние порта асинхронного адаптера;
AL = состояние модема.
При вызове этой функции регистр AL должен содержать параметры инициализации (x - состояние бита безразлично):
Биты | Смысл | ||
D1 D0 | Длина слова в битах:
00 - 5 бит; 01 - 6 бит; 10 - 7 бит; 11 - 8 бит | ||
D2 | Количество стоповых бит:
0 - 1 бит; 1 - 2 бита | ||
D4 D3 | Четность:
x0 - контроль на четность не используется; 01 - контроль на нечетность; 11 - контроль на четность | ||
D7-D5 | Скорость передачи данных:
000 - 110 бит/с 001 - 150 бит/с 010 - 300 бит/с 011 - 600 бит/с 100 - 1200 бит/с 101 - 2400 бит/с 110 - 4800 бит/с 111 - 9600 бит/с |
После вызова функции в регистр AH записывается состояние порта асинхронного адаптера:
Бит | Смысл | ||
D0 | Тайм-аут, если установлен этот бит, другие биты не имеют значения | ||
D1 | Регистр сдвига передатчика пуст | ||
D2 | Буферный регистр передатчика пуст | ||
D3 | Обнаружено состояние BREAK | ||
D4 | Ошибка синхронизации | ||
D5 | Ошибка четности | ||
D6 | Ошибка переполнения входного регистра | ||
D7 | Данные готовы |
Регистр AL содержит байт состояния модема:
Бит | Смысл | ||
D0 | Линия CTS изменила состояние | ||
D1 | Линия DSR изменила состояние | ||
D2 | Линия RI изменила состояние | ||
D3 | Линия DCD изменила состояние | ||
D4 | Состояние линии CTS | ||
D5 | Состояние линии DSR | ||
D6 | Состояние линии RI | ||
D7 | Состояние линии 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 = состояние модема.