В пределах возможностей установленного видеорежима видеосервис предоставляет возможности отображения информации на различных уровнях. Простейший для программиста телетайпный режим позволяет посылать поток символов, которые будут построчно отображаться на экране с отработкой символов возврата каретки, перевода строки, обеспечивая «прокрутку» изображения при заполнении экрана. Есть функции и для полноэкранной работы с текстом, при которой доступны и атрибуты символа. В графическом режиме имеется возможность чтения и записи пиксела с указанными координатами. Однако видеосервисом Int 10h
Int 10h
(0Eh). При вызове AH
=0Eh, в AL
— код выводимого символа, в BL
— цвет (только для графического режима). Символ выводится в текущую позицию курсора, и курсор сдвигается на следующую, переходя на новую строку после конца предыдущей и прокручивая экран при его заполнении. Специальные символы вызывают возврат на начало строки (CR
, код 0Dh), перевод строки (LF
, 0Ah) и короткий гудок (BEL
, 07h). Этой функцией часто пользуются для вывода сообщений программами, работающими на нижнем уровне (например, модули инициализации ПЗУ расширений BIOS, загрузчики и другие, не имеющие еще доступа к сервисам операционных систем). Программа вывода получается простейшей, работает на всех адаптерах и во всех режимах, но довольно медленно.12.8.3. Int 13h — поддержка дисков
Функции дискового сервиса вызываются программным прерыванием Int 13h
Традиционно дисковый сервис подразделяет физические диски на
Контроллеры дисковых интерфейсов, имеющие в своем составе дополнительные модули BIOS, перехватывают вектор Int 13h
Int 13h
, а указатель на исходный обработчик дискового сервиса (драйвер НГМД из системной BIOS) сохранялся на месте Int 40h
. Хотя поддержка жестких дисков давно уже включена в системную BIOS, ради совместимости возможность использования прерывания Int 40h
для вызова драйвера гибких дисков сохраняется. Интерфейс этого вызова совпадает с Int 13h
, но номер устройства (в регистре DL
) не должен превышать 7Fh.Кроме функций дискового сервиса (Int 13h
Int 0Eh
(линия IRQ 6
) и от контроллера жестких дисков — Int 76h
(линия IRQ 14
). При наличии двухканального порта ATA второй канал обычно задействует линию IRQ 15
(вектор 77h). В XT контроллер жестких дисков занимал линию IRQ 5
(вектор 0Dh). Дополнительные контроллеры дисков могут использовать и другие прерывания. Аппаратные прерывания вырабатываются контроллерами по завершении (нормальному и аварийному) внутренних операций. На эти прерывания BIOS не реагирует, а при инициализации их векторы направляются на программную заглушку (инструкцию IRET
).Стандартные драйверы дисковых функций BIOS (включая и расширенный сервис) имеют однозадачное происхождение. Во время выполнения функции значительное процессорное время может затрачиваться на ожидание завершения операции устройством. Драйверы многозадачного режима построены иначе: у них есть вызывающая часть, инициализирующая начало операции, и обработчик аппаратного прерывания от контроллера, сообщающий операционной системе о выполнении операции и результате.
Традиционный дисковый сервис работает в 16-разрядном режиме процессора, все параметры вызова передаются через регистры процессора. Адрес сектора задается в системе CHS и размещен весьма специфично. Сервис вызывается
Int 13h
, при вызове принимаются следующие соглашения:♦
АН
и не должен превышать 3Fh;♦
DL
(бит 7 = 0 — признак обращения к НГМД);♦
СН
(младшие 8 бит) и CL[7:6]
(старшие 2 бита);♦
DH
;♦
CL[5:0]
;♦
AL
(0-255);