Для работы с HDD-дисками большого объема возможности адресации CHS стали «тормозом»и не позволяли работать с полным объемом дисков. Поэтому для обеспечения поддержки новых возможностей HDD в набор функций BIOS Int 13h фирмой Phoenix Technologies были введены дополнительные функции (BIOS Extensions). Дополнительные функции имеют номера 41h - 49h и 4Eh. Порядок работы с этими функциями отличается от принятого для стандартных функций прерывания Int 13h:
- вся адресная информация передается через буфер в оперативной памяти, а не через регистры;
- соглашения об использовании регистров изменены (для обеспечения передачи новых структур данных);
- для определения дополнительных возможностей аппаратуры (параметров) используются флаги.
Основной структурой данных для дополнительных функций прерывания Int I3h является «Пакет дискового адреса» (Disk Address Packet). Получив пакет дискового адреса, программа BIOS, (например, Int 13h, функция 44h: проверка секторов на диске по их контрольным суммам), запущенная через прерывание Int 13h преобразует содержащиеся в нем данные в физические параметры, соответствующие используемому носителю информации. Формат пакета дискового адреса описан в табл. 1.
Функция Int 13h, 44h осуществляет проверку секторов на диске по их контрольным суммам (без передачи информации между диском и оперативной памятью). Для запуска этой функции требуется записать в регистры процессора следующие значения:
• в АН — значение 44h (номер вызываемой функции);
• в DL — номер дисковода;
• в DS : SI — адрес буфера, содержащего пакет дискового адреса;
• и выполнить команду Int 13h.
После завершения операции, функция возвращает в регистре АН состояние дисковой системы (статус возврата). В случае аварийного завершения выполнения функции поле счетчика блоков (в пакете дискового адреса) содержит число блоков, которые были успешно верифицированы (проверены до того, как произошла ошибка).
Таблица 1. Формат пакета дискового адреса.
|
Смещение |
Размер поля |
Назначение поля |
|
00h |
BYTE |
Размер пакета в байтах |
|
01h |
BYTE |
Зарезервировано (имеет значение 0) |
|
02h |
BYTE |
Число передаваемых блоков (0-7Fh) или признак передачи большого массива данных (FFh) |
|
03h |
BYTE |
Зарезервировано (имеет значение 0) |
|
04h |
DWORD |
Адрес буфера данных в оперативной памяти в режиме «сегмент:смещение» или признак линейной адресации памяти (FFFF: FFFFh) |
|
08h |
QWORD |
Абсолютный номер начального блока (LBA-адрес) данных на диске |
|
10h |
QWORD |
64-разрядный линейный адрес буфера передачи |
|
18h |
DWORD |
Число передаваемых блоков при передаче большого массива данных |
|
1Ch |
DWORD |
Зарезервировано (имеет значение 0) |
Дополнительные функции BIOS предназначены только для жестких дисков и дисководов сменных дисков большой емкости, причем функции рассчитаны на использование не более четырех устройств (номер диска в диапазоне 80h-83h).