Чтобы достичь хотя бы интерфейсного ограничения BIOS (8,4 Гбайт), стали применять трансляцию параметров вызова функций Int 13h
, которые будем теперь называть логическими, в физические[6] параметры, передаваемые контроллерам ATA-дисков. В функции, которая сообщает параметры диска (функция 8), производится обратная трансляция, так что на стороне вызова программного интерфейса Int 13h
присутствуют только логические параметры. Естественно, логический объем диска не может превышать физического: (С × H × S)ЛОГ ≤ (С × H × S)ФИЗ.
Подробнее о преодолении барьеров и способах трансляции (LBA, Large Disk, ECHS) см. в [1, 4, 9]
Чтобы получить возможность работы через BIOS с дисками объема более 8,4 Гбайт, потребовалось ввести новые функции дискового сервиса.
Расширенный дисковый сервис BIOS, Enhanced Disk Drive Services (EDD), продвигаемый фирмой Phoenix Technologies LTD, реализуется многими разработчиками BIOS и устройств массовой памяти. Он позволяет работать с устройствами, имеющими объем до 264 секторов, эффективно используя архитектуру процессоров IA-32 и IA-64. Сервис оперирует линейным логическим адресом сектора (LBA). Вместо традиционных таблиц параметров дисков в нем используются новые, дающие исчерпывающую информацию об устройствах, их физической организации и интерфейсе. Устройства могут иметь сменные носители и сами быть съемными в процессе работы компьютера (например, подключенные к шине USB или IEEE 1394), так что понятие «сменяемость носителя» несколько размывается. Такие устройства должны поддерживать механизм уведомления о смене носителя и программное блокирование смены носителя. По прогнозам емкости данного интерфейса должно хватить на 15–20 лет.
Расширения BIOS Int 13h
используют ОС Windows 95, Windows 98, Windows 2000. Правда, это использование ограничено лишь начальной загрузкой и процессом установки (FDISK, FORMAT), поскольку в регулярной работе применяются собственные 32-разрядные драйверы. Расширения BIOS Int 13h
не используют DOS (все версии), Windows 3.1x, Windows NT, Novell NetWare, OS/2 Warp, Linux, Unix.
В настоящее время определены три набора функций:
♦ доступ к фиксированным дискам (fixed disk access subset) — функции 41-44h, 47h и 48h;
♦ блокировка и смена носителя (device locking and ejecting subset) — функции 41h, 45h, 46h, 48h и 49h;
♦ поддержка расширенных дисков (enhanced disk drive (EDD) support subset) — функции 41h и 48h.
Расширенный сервис, как и традиционный, вызывается программным прерыванием Int 13h
с номерами функций свыше 3Fh (регистр АН
); номер устройства (регистр DL
) допустим в диапазоне 80h-FFh. Основные параметры вызова — начальный адрес блока, число секторов для передачи и адрес буфера — передаются через адресный пакет (device address packet). Формат пакета в сравнении с передачей параметров традиционного сервиса через регистры процессора довольно просторный.
Поскольку расширение BIOS может и отсутствовать, имеется функция проверки его наличия (номер 41h). Расширение может действовать избирательно (не для всех устройств), так что проверку надо производить для конкретного устройства, интересующего программу. Проверка дает номер версии расширения и карту поддерживаемых наборов функций. Функции расширенного чтения, записи, верификации и поиска (42h, 43h, 44h и 47h) по смыслу не отличаются от их аналогов из традиционного сервиса. Для работы со сменными носителями введены функции отпирания/запирания, извлечения и проверки факта смены носителя (45h, 46h и 49h). От идеологии традиционного сервиса сильно отличается функция получения параметров устройства (48h). Она возвращает в ОЗУ буфер с набором параметров и детальным описанием устройства, позволяющим ОС и приложениям работать с ним, минуя BIOS. Функция установка аппаратной конфигурации (4Eh) позволяет управлять режимом передачи (PIO, DMA), а также предварительной выборкой (поиском).
Для эмуляции дисков на загружаемых CD-ROM к сервисам BIOS Int 13h
добавляется несколько новых функций:
♦ начать/завершить эмуляцию диска (4Ah/4Bh), начать эмуляцию диска и выполнить загрузку (4Ch);
♦ прочитать секторы загрузочного каталога (4Dh); функции 41-48h позволяют обращаться к любым логическим секторам CD-ROM (в режиме LBA с размером сектора 2048 байт), когда для данного привода включена эмуляция.
Подробнее расширенный сервис рассмотрен в [4].
12.8.4. Int 14h — поддержка СОМ-портов
СОМ-порты поддерживаются сервисом BIOS Int 14h
, который обеспечивает описанные ниже функции.
♦ 00h — инициализация (установка скорости обмена и формата посылок, заданных регистром AL
; запрет источников прерываний). На сигналы DTR
и RTS
влияния не оказывает (после аппаратного сброса они пассивны).
♦ 01h — вывод символа из регистра AL
(без аппаратных прерываний). Активируются сигналы DTR
и RTS
, и после освобождения регистра THR
в него помещается выводимый символ. Если за заданное время регистр не освобождается, фиксируется ошибка тайм-аута и функция завершается.
♦ 02h — ввод символа (без аппаратных прерываний). Активируется только сигнал DTR
(RTS
переходит в пассивное состояние), и ожидается готовность принятых данных, принятый символ помещается в регистр AL
. Если за заданное время данные не получены, функция завершается с ошибкой тайм-аута.
♦ 03h — опрос состояния модема и линии (чтение регистров МSR
и LSR
). Эту гарантированно быструю функцию обычно вызывают перед функциями ввода-вывода во избежание риска ожидания тайм-аута.
При вызове Int 14h
номер функции задается в регистре АН
, номер порта (0–3) — в регистре DX
(0 — COM1
, 1 — COM2
…). При возврате из функций 0, 1 и 3 регистр АН
содержит байт состояния линии (регистр LSR), AL
— байт состояния модема (MSR). При возврате из функции 2 нулевое значение бита 7 регистра АН
указывает на наличие принятого символа в регистре AL
; ненулевое значение бита 7 — на ошибку приема, которую можно уточнить функцией 3.
Байт состояния линии (регистр АН
) имеет следующий формат:
♦ бит 7 — ошибка тайм-аута (после вызова функции 2 — признак любой ошибки);
♦ бит 6 — регистр сдвига передатчика пуст (пауза передачи);
♦ бит 5 — промежуточный регистр передатчика пуст (готов принять символ для передачи);
♦ бит 4 — обнаружен обрыв линии;
♦ бит 3 — ошибка кадра (отсутствие стоп-бита);
♦ бит 2 — ошибка паритета принятого символа;
♦ бит 1 — переполнение (потеря символа);
♦ бит 0 — регистр данных содержит принятый символ.
Байт состояния модема (регистр AL
при возврате из функций 0, 1, 3) имеет следующий формат:
♦ бит 7 — состояние линии DCD
;
♦ бит 6 — состояние линии RI
;
♦ бит 5 — состояние линии DSR
;
♦ бит 4 — состояние линии CTS
;
♦ бит 3 — изменение состояния DCD
;
♦ бит 2 — изменение огибающей RI
;
♦ бит 1 — изменение состояния DSR
;
♦ бит 0 — изменение состояния CTS
.
6
Зная устройство современных винчестеров, здесь и далее не будем добираться до истинно физических параметров — реального номера цилиндра, головки и сектора.