Программы входящие в BIOS обслуживающие печатающее устройство и последовательный канал очень похожи. Основная разница - возможность чтения символов из асинхронного адаптера. Обе программы имеют функции инициализации адаптера, вывода символа, и чтения состояния адаптера. На Фиг.9.2 приведен список функций, реализуемых этими программами BIOS.
Как видно из рисунка, эти две программы BIOS не совпадают. Значение регистра AH, необходимое для задания конкретного действия, разное для обеих программ и нам приходится с этим мириться.
Иден.(Значение AH) Функция печати Функция коммуникаций
-------------------------------------------------------------
0 Печать символа Инициализация адаптера
1 Инициализация Посылка символа
2 Чтение состояния Получение символа
3 - Чтение состояния
-------------------------------------------------------------
Фиг. 9.2 Печать и асинхронные коммуникации без использования абсолютных значений. Все ссылки ввода-вывода делаются относительно первоначального адреса, взятого из таблицы базовых адресов.Функции инициализации печати не требуется от пользователя никаких входных параметров. Программа инициализации сбрасывает печатающее устройство и подготавливает порт управления адаптера печатающего устройства для дальнейшей работы. Но с другой стороны, инициализация интерфейса RS232 требует от пользователя информации о параметрах линии связи. Детали кода инициализации, передаваемого программе с помощью регистра AL, показаны в прологе к программе обслуживания последовательного канала.
Другие функции BIOS поддержки печати и последовательного канала дают возможность записывать (для последовательной связи также читать) данные в устройство. Особенно важно то, что ввод-вывод делается синхронно. Это означает, что когда программа передает управление BIOS, чтобы она выполнила нужную функцию, управление не возвращается до тех пор, пока работа не будет завершена. Когда символ печатается, управление остается в программе печати до тех пор, пока она не передаст символ в устройство печати. Если печатающее устройство занято, BIOS образует цикл, ожидая конца работы печатающего устройства. Когда символ передается по каналу асинхронной связи, программа BIOS ждет, пока аппаратура разрешит передачу следующего символа. Аналогично программа приема последовательного канала ждет до тех пор, пока адаптер не принял символ. Если внешнее устройство никогда не пришлет символ, программа, вызвавшая функцию BIOS, никогда не получит управление назад.
По этой причине обе программы содержат функцию состояния. Она позволяет программе решить, может ли BIOS выполнить операцию в текущий момент времени. Функция состояния печати сообщает, занято ли печатающее устройство в данный момент. Программа состояния последовательного канала показывает, может ли символ быть передан или принят в данный момент. Программа может использовать эти программы состояния, чтобы определить, можно ли непосредственно выполнить операцию. Вы можете решить сделать в вашей программе что-либо еще в то время, пока операция ввода-вывода не может выполняться. Если вы проверяете появление некоторого внешнего события, например приема символа адаптером, программа состояния позволит не останавливать программу до тех пор, пока символ не принят. Проверка появления символа позволит вам продолжить работу с ним при условии, что до этого программа выполняла другие действия.
Важно отметить также способ обработки ошибок программ BIOS. Используя программы BIOS, очень трудно "подвесить" систему. За исключением того случая, когда вы ожидаете символ из последовательного канала, BIOS всегда возвращают управление вызвавшей программе, даже если возникла ошибка внешнего устройства. В каждом цикле, который ожидает выполнения некоторого действия внешним устройством, BIOS использует счетчик. Например, когда программа печати ожидает завершения работы печатающего устройства, в регистрах BL и CX находится счетчик. Если значение счетчика в этих регистрах становится нулевым до того, как печатающее устройство освободится, BIOS возвращает управление с ошибкой исчерпания времени. Это означает, что выключение печатающего устройства до того, как оно закончило печать, не вызовет "зависания" системы. BIOS в конце концов вернет управление программе, указывая, что произошла ошибка устройства печати.
В BIOS возникают небольшие трудности в связи с исчерпанием времени. Когда в печатающее устройство попадает символ перевода страницы 0CH, бумага пропускается до начала очередной страницы. Если на текущей странице более 51 строки, печатающее устройство будет двигать бумагу долго, и возникнет ошибка по исчерпанию времени. То есть можно получить индикацию ошибки даже тогда, когда печать работает правильно. Величина, задающая интервал времени, в течение которого контролируется печатающее устройство, скорректировано во второй версии программы BIOS и устраняет эту проблему. Если вы имеете первую версию, вы можете заново повторить операцию печати, вызвавшую ошибку исчерпания времени. Получение ошибки вновь гарантирует, что это не ошибка программы BIOS.