Главная » Ассемблер, Железо » Улучшенный дисковый сервис BIOS

0

Дополнительный набор функций для работы с жесткими дисками, в документации [64] именуемый как Enhanced Disk Drive Service (сокращенно EDD) или Extended Fixed Disk Service, предложен фирмой Phoenix Technologies, которая является ведущим разработчиком BIOS для АТ-совместимых компьютеров. Этот набор был согласован с изготовителями оборудования и в настоящее время стал международным стандартом — входит в набор стандартов AT А/ ATAPI комитета Т13 ANSI.

ПРИМЕЧАНИЕ

Черновики различных версий спецификаций EDD и ATA/ATAPI можно свободно скачивать с Интернет-страницы комитета Т13 ANSI www.tl З.огд.

Дополнительные функции позволяют решить ряд проблем, связанных с появлением новых моделей дисков, и обеспечить новые возможности BIOS:

•           работу с дисками объемом более 528 Мбайт;

•           работу более чем с двумя устройствами;

•       новый метод доступа к данным, независимый от физической геометрии диска (то есть от реального числа цилиндров, головок и секторов на дорожках);

•       поддержку новых методов передачи данных (Fast РЮ, DMA и режима мультисекторной передачи).

Преодоление барьера в 528 Мбайт

Первоначально в режиме адресации CHS информация о физическом адресе сектора данных передавалась от контроллера к исполнительным устройствам дисковода напрямую, без каких-либо модификаций. Однако в результате быстрого увеличения емкости дисководов изготовители персональных компьютеров неожиданно столкнулись с рядом проблем. Например, барьер в 528 Мбайт возник из-за несоответствия диапазонов значений номеров цилиндра, головки и сектора, которые используются для адресации секторов в интерфейсе IDE (ATA) и в стандартных функциях BIOS (табл. 6.16).

Таблица 6.16. Ограничения на диапазоны значений номеров цилиндра, головки и сектора

Параметр

Ограничение

 

 

BIOS

IDE

Общее

Максимальное число секторов на дорожке

63

255

63

Максимальное число головок

256

16

16

Максимальное число цилиндров

1024

65536

1024

Емкость диска

8,4 GB

136,9 GB

528 MB

ПРИМЕЧАНИЕ

Рассматривая табл. 6.16, следует учитывать, что вместо общепринятого в вычислительной технике определения понятий «килобайт», «мегабайт» и «гигабайт»(1 Кбайт = 1024 байт, 1 Мбайт = 1024 Кбайт, 1 Гбайт = 1024 Мбайт) изготовители дисков в рекламных целях стали использовать так называемые «десятичные мегабайты» (1 МВ= 1 млн байт, 1 GB= 1 млрд байт). В «десятичных мегабайтах» объем диска, естественно, получается больше.

Чтобы решить проблему адресации секторов и согласовать между собой диапазоны значений параметров BIOS и IDE, изготовители оборудования стали использовать метод «измененной геометрии диска». В этом случае, во-первых, контроллер диска выдает не реальные, а преобразованные координаты сектора на диске, а во-вторых, функции BIOS также могут выполнять преобразование координат. Такое решение, однако, породило новые проблемы: некоторые прикладные программы работают с дисками напрямую, и при использовании «измененной геометрии» может возникнуть путаница, приводящая к потере информации на диске.

Фирма Phoenix Technologies предложила использовать для создания измененной геометрии диска метод битового сдвига. Это простой метод трансляции адресов секторов, при котором BIOS манипулирует только двумя параметрами геометрии диска: числом цилиндров и числом головок. Режим трансляции, устанавливаемый для диска при использовании алгоритма Phoenix, определяется числом цилиндров в реальной (физической) геометрии (табл. 6.17). Преимущество метода Phoenix состоит в том, что он позволяет работать с любыми дисками, в том числе со старыми моделями, в которых не реализован режим линейной адресации секторов. Недостатком метода является наличие определенных ограничений на физическую геометрию диска: как видно из таблицы, у дисков с большим числом цилиндров должно быть больше четырех головок.

Таблица 6.17. Трансляция адресов секторов методом битового сдвига фирмы Phoenix

Физические параметры диска

Преобразование

Максимальный

 

 

координат

объем диска

Количество

Количество

Номер

Номер

 

цилиндров

головок

цилиндра

головки

 

1 < С < 1024

Н < 16

С’= С

Н’ = Н

528 MB

1024 < С < 2048

Н< 16

С’ = С/2

Н’ = 2Н

1 GB

2048 < С < 4096

Н<1б

С’ = С/4

Н’ = 4Н

2,1 GB

4096<С<8192

Н< 16

С’ = С/8

Н’= 8Н

4,2 GB

8192<С< 16384

Н < 16

С’= С/16

Н’ = 16Н

8,4 GB

16384 <С<32768

Н<8

С’ = С/32

Н’ = 32Н

8,4 GB

32768 < С J 65536

Н <4

С’ = С/64

Н’ = 64Н

8,4 GB

ВНИМАНИЕ

В современных моделях дисков вместо режима CHS с измененной геометрией используется режим линейной адресации секторов LBA, полностью скрывающий от пользователя реальную (физическую) геометрию диска. Преобразование линейного адреса в мнимый CHS-адрес в этом случае полностью возлагается на BIOS.

Для дисков, поддерживающих LBA, разработчики BIOS часто используют алгоритм трансляции с фиксированным числом секторов в измененной конфигурации диска. При этом считается, что при любом объеме диска на дорожке 63 сектора, а число головок и цилиндров определяется по правилам, приведенным в табл. 6.18.

Таблица 6.18. Трансляция адресов при фиксированном числе сектороа в измененной геометрии диска


Объем диска

Параметры измененной геометрии

 

 

Число секторов Число на дорожке головок

Число цилиндров

 

X<528MB 528 MB< Х< 1 GB

63 16 63 32

X / (63 * 16* X/ (63 * 32 *

512) 512)

Объем диска

Параметры измененной геометрии

 

 

Число секторов Число на дорожке головок

Число цилиндров

 

1 GB<X<2,1 GB

2.1     GB<X<4,2GB

4.2     GB<X< 8,4 GB

63 ,64 63 128 63 256

X / (63 * 64 * Х/(63* 128 X/(63* 256

512)

*   512)

*   512)

В том случае, если при выполнении процедуры самотестирования системы (после сброса или включения питания) диск при опросе выдает для режима CHS значение 63 сектора на дорожке, результаты трансляции при использовании обоих описанных методов совпадают. Если число секторов, сообщаемое диском, меньше 63, возникают различия: при использовании метода Phoenix в процедурах BIOS используется значение, полученное от диска, а алгоритм, ориентированный на режим LBA, всегда устанавливает в измененной геометрии 63 сектора на дорожке.

ВНИМАНИЕ =

Если перенос информации с одного компьютера на другой осуществляется при помощи жесткого диска, в BIOS обоих компьютеров следует устанавливать для этого диска режим LBA.

Таблицы параметров диска

В таблице векторов прерываний имеются указатели на таблицы параметров для дисков 0 (вектор 41h, адрес 0000:0104h) и 1 (вектор 46h, адрес 0000:0124h). Значения в этих таблицах устанавливаются функциями BIOS в процессе начального тестирования системы после включения питания или сброса.

Структура стандартной таблицы параметров жесткого диска (Fixed Disk Parameter Table, сокращенно FDPT) описана в табл. 6.19.

Таблица 6.19. формат стандартной таблицы параметров жесткого диска FDPT


Смещение

Размер поля

Назначение поля

OOh

WORD

Физическое количество цилиндров

02h

BYTE

Физическое количество головок

03 h

BYTE

Признак нетранслированной таблицы

 

 

(имеет значение 0)

Таблица 6.19 (продолжение)

Смещение

Размер поля

Назначение поля

04h

BYTE

Зарезервировано (имеет значение 0)

05h

WORD

Номер начального цилиндра предкомпенсации (устаревший параметр; имеет значение 0)

07h

BYTE

Зарезервировано (имеет значение 0)

08 h

BYTE

Байт управления;

биты 0-2 — не используются (имеют значение 0);

бит 3 — установлен, если число головок больше 8;

бит 4 — не используются (имеет значение 0),

бит 5 — установлен, если изготовитель разместил карту дефектов на цилиндре с номером «максимальный рабочий цилиндр + 1»;

бит 6,— запрет повторного контроля ЕСС;

бит 7 — запрет контроля ЕСС

09h

WORD

Зарезервировано (имеет значение б)

OBh

BYTE

Зарезервировано (имеет значение 0)

OCh

WORD

Номер цилиндра зоны парковки головок (устаревший параметр: обычно не используется и имеет значение 0)

OEh

BYTE

Число секторов на дорожке

OFh

BYTE

Зарезервировано

ВНИМАНИЕ

Информацию из таблиц FDPT можно только читать— во избежание разрушения информации на дисках категорически не рекомендуется что-либо в них изменять.

Таблица параметров жесткого диска, полученная после преобразования геометрии диска, называется транслированной (Translated Fixed Disk Parameter Table, сокращенно TFDPT). Она имеет такой же размер и такое же количество полей, как и стандартная таблица FDPT, но назначение некоторых полей отличается (табл. 6.20).

Таблица 6.20. Формат транслированной таблицы параметров жесткого диска TFDPT

Смещение

Размер поля

Назначение поля

OOh

WORD

Логическое количество цилиндров (не более 1024)

02h

BYTE

Логическое количество головок (не более 256)

03 h

BYTE

Сигнатура транслированной таблицы (имеет значение Axh)

04h

BYTE

Физическое количество секторов на дорожке (не более 63)

05h

WORD

Номер начального цилиндра предкомпенсации (устаревший параметр, имеет значение 0)

07h

BYTE

Зарезервировано (имеет значение 0)

08h

BYTE

Байт управления:

биты 0-2 — не используются (имеют значение 0);

бит 3 — установлен, если число головок больше 8;

бит 4 — не используются (имеет значение 0);

бит 5 — установлен, если изготовитель разместил карту дефектов на цилиндре с номером «максимальный рабочий цилиндр + 1 »;бит 6 — запрет повторного контроля ЕСС;

бит 7 — запрет контроля ЕСС

09h

WORD

Физическое количество цилиндров (не более 65536)

OBh

BYTE

Физическое количество головок (не более 16)

OCh

WORD

Номер цилиндра зоны парковки (устаревший параметр: обычно не используется и имеет значение 0)

OEh

BYTE

Логическое количество секторов на дорожке

OFh

BYTE

Контрольная сумма

Тип таблицы, который используется для диска, определяется физическим количеством имеющихся на нем цилиндров: если число цилиндров меньше либо равно 1024, используется стандартная FDPT,

а если больше — TFDPT. Как уже было указано выше, прикладным программам доступны только таблицы дисков 0 и 1 (то есть устройств с номерами 80h и 81h).

Физические значения параметров в таблицах FDPT и TFDPT устанавливаются BIOS в соответствии со значениями, возвращаемыми дисками в ответ на команду идентификации ID DRIVE, которую мы будем подробно рассматривать в главе, посвященной интерфейсу ATA/ATAPI. Предельные значения физических параметров в стандартной FDPT: 1024 цилиндра, 16 головок, 63 сектора; В TFDPT предельные значения физических параметров несколько иные: 65536 цилиндров, 16 головок, 63 сектора. Логические значения параметров используются только в режиме трансляции адресов секторов и встречаются только в TFDPT; предельные значения логических параметров: 1024 цилиндра, 256 головок, 63 сектора.

Поля «Номер начального цилиндра предкомпенсации» и «Номер цилиндра зоны парковки» устарели и были внесены в стандарт Phoenix только с целью совместимости с самыми старыми моделями дисков, которые в настоящий момент уже вообще вышли из употребления. Эти поля всегда содержат значение 0.

ВНИМАНИЕ

Термин «физическое/логическое количество цилиндров/головок» используется в таблицах FDPT и TFDPT некорректно: на самом деле соответствующие поля таблицы содержат максимальный номер цилиндра или головки, причем счет номеров ведется с нуля.

Для обслуживания прикладных программ, работающих с жесткими дисками напрямую (в обход прерывания Int 13h), стандарт Phoenix предусматривает специальную функцию (функцию 48h прерывания Int 13h), которая выдает более детальную информацию о дисках 0- 3 (то есть устройствах с номерами 80h-83h). Информация об устройстве выдается в виде таблицы, которая называется дополнением FDPT и обозначается в документации как Device Parameter Table Extension (DPTE). Формат DPTE показан в табл. 6.21.

Таблица 6.21. Формат таблицы DPTE


Смещение

Размер поля

Назначение поля

 

00h

WORD

Базовый адрес блока регистров команды

 

02h

WORD

Базовый адрес блока регистров

 

 

 

управления

 

Смещение

Размер поля

Назначение поля

04h

BYTE^

Старший полубайт регистра номера головки:

биты 0-3 — не используются (имеют значение 0);

бит 4 — бит номера устройства АТА (0 — ведущий диск, 1 — ведомый диск); бит 5 — зарезервирован (имеет значение 1);

бит 6 — режим адресации (0 — CHS, 1 – LBA);

бит 7 — зарезервирован (имеет значение 1)

05h

BYTE

Используется для нужд BIOS

06 h

BYTE

Информация об IRQ:

биты 0-3 — номер IRQ для данного диска; биты 4-7 — не используются (имеют значение 0)

07h

BYTE

Счетчик секторов для режима мультисекторной передачи

08 h

BYTE

Информация о DMA:

биты 0-3 — номер канала DMA

для данного диска;

биты 4-7 — номер используемого

режима DMA

09 h

BYTE

Информация об IRQ:

биты 0-3 — номер используемого

режима РЮ;

биты 4-7 — не используются (имеют значение 0)

OAh

WORD

Флаги параметров аппаратного обеспечения (свойство присутствует, если соответствующий флаг имеет значение 1):

бит 0 — система сконфигурирована

для режима Fast РЮ;

бит 1 — система сконфигурирована

для режима Fast DMA;

бит 2 — разрешены мультисекторные

операции;

бит 3 — в режиме CHS используется трансляция адресов; бит 4 — система сконфигурирована для режима LBA;

16-231

Таблица 6.21 (продолжение)

Смещение

Размер поля

Назначение поля

 

 

бит 5 — устройство работает со сменными носителями;

 

 

бит 6 — устройство использует интерфейс ATAPI;

 

 

бит 7 — используется 32-разрядный режим передачи данных;

 

 

бит 8 — устройство ATAPI использует DRQ по прерыванию;

 

 

биты 9-10 — код метода трансляции адресов в режиме CHS;

 

 

бит 11 — система сконфигурирована для режима Ultra DMA;

 

 

биты 12-15 — зарезервированы (имеют значение 0)

OCh

WORD

Зарезервировано (имеет значение 0)

OEh

BYTE

Номер версии «расширения» FDPT (имеет значение 11h)

OFh

BYTE

Контрольная сумма (двоичное дополнение суммы байтов 00h-0Eh)

ВНИМАНИЕ

Данные из DPTE можно только считывать (информация в таблице защищена контрольной суммой, попытка перезаписи значения в одном из полей приведет к перезагрузке компьютера). Последствия перезаписи всей таблицы (с перерасчетом контрольной суммы) могут быть более печальными: информация на диске окажется разрушенной вследствие неправильной адресации секторов.

Рассмотрим поля таблицы DPTE более подробно. Слово со смещением OOh содержит физический базовый адрес блока регистров команды интерфейса АТА (ATA Command Block Registers), который в документации может также именоваться базой портов ввода-вы- вода (I/O Port Base). Слово со смещением 02h содержит физический базовый адрес блока регистров управления интерфейса АТА (AT A Control Block Registers), который в документации может также именоваться базой управляющих портов (Control Port Base). Сведения о физических адресах регистров контроллера АТА необходимы прикладным программам, которые непосредственно (в обход прерываний операционной системы) работают с контроллером дисков.

Байт со смещением 04h содержит так называемый «Префикс головки» (Head Prefix) — старший полубайт для регистра номера головки контроллера АТА. Префикс головки определяет, к какому диску канала относится данная таблица (если бит 4 равен 0 — ведущий диск, если 1 — ведомый), а также какой способ адресации секторов используется при работе с этим диском (если бит 6 равен 0 — используется режим CHS, если 1 — LBA). Перед записью в регистр номера головки АТА прикладная программа должна выполнить операцию логического сложения (логического ИЛИ) содержимого данного байта со значением номера головки.

Байт со смещением 05h предназначен для «внутренних нужд» BIOS. Он хранит значение количества сдвигов, необходимых для преобразования физического числа цилиндров в логическое. Байт со смещением 06h хранит номер IRQ канала АТА, к которому подключен диск, описываемый данной таблицей. Данная информация необходима программам, непосредственно работающим с жесткими дисками.

Байт со смещением 07h содержит значение размера блока данных в секторах, который используется BIOS в режиме мультисекторной передачи данных, если диск запрограммирован на подобный режим работы. Если режим мультисекторной передачи не используется для данного диска, то значение байта равно нулю. Байт со смещением 08h содержит в младшем полубайте номер канала DMA, используемого каналом АТА, к которому подключен диск, а в старшем полубайте — номер заданного для диска режима DMA. Содержимое данного байта имеет значение только в том случае, если используется Fast или Ultra DMA, то есть если установлен бит 1 или бит 11 слова опций аппаратного обеспечения; в случае, если диск запрограммирован на работу в режиме РЮ, значение данного байта следует игнорировать. Учтите, что при работе с диском используется самый быстрый из возможных для него режимов DMA: номер DMA не ограничен значением 2, возвращаемым диском по команде идентификации устройства.

Байт со смещением 09h содержит номер режима Fast РЮ, на который запрограммирован данный диск, если подобный режим используется вместо обычного РЮ; в противном случае значение байта равно нулю.

Слово со смещением OAh содержит флаги опций аппаратного обеспечения: если какой-либо флаг установлен в 1, то у диска имеется соответствующее данному флагу свойство. Если слово флагов имеет значение 0 (все флаги в «сброшенном» состоянии), то диск относится к устаревшему типу, имеет число цилиндров менее 1024 и работает в стандартном (самом медленном) режиме РЮ. Рассмотрим подробно отдельные разряды слова флагов.

•     Бит 0 принимает значение 1, если система сконфигурирована для работы в режиме Fast РЮ. Если флаг имеет значение I, то для конфигурирования системы используется байт 9 DPTE; если флаг сброшен в 0, то байт 9 DPTE игнорируется.

•     Бит 1 принимает значение 1, если система сконфигурирована для работы в режиме Fast DMA. Если флаг имеет значение 1, то для конфигурирования системы используется байт 8 DPTE.

•     Бит 2 принимает значение 1, если система сконфигурирована для работы в режиме мультисекторной передачи (Block РЮ). Если флаг имеет значение 1, то число секторов, передаваемых в мультисекторном режиме, задается счетчиком секторов — байтом 7 DPTE; если флаг сброшен в 0, то байт 7 DPTE игнорируется.

•     Бит 3 принимает значение 1, если диск содержит более 1024 цилиндров, то есть если в режиме CHS используется трансляция адресов. Когда данный флаг установлен, BIOS использует значение байт 5 DPTE при трансляции адресов секторов.

•     Бит 4 принимает значение 1, если диск сконфигурирован для работы в режиме LBA. Режим LBA может быть задан даже в том случае, если диск имеет менее 1024 цилиндров, то есть значение данного флага устанавливается независимо от значения бита 3. Следует учитывать, что режим LBA используется только «дополнительными» функциями прерывания Int 13h с номерами 41h-48h, а стандартные функции всегда работают в режиме CHS.

•     Бит 5 принимает значение 1, если устройство работает со сменными носителями информации.

•     Бит 6 принимает значение 1, если устройство использует пакетный интерфейс AT API.

•     Бит 7 принимает значение 1, если система использует при работе с диском 32-разрядный режим передачи данных.

•     Бит 8 принимает значение 1, если устройство AT API вырабатывает сигнал прерывания, когда готово к передаче пакета; если флаг сброшен в ноль, то готовность устройства к передаче пакета определяется по состоянию сигнала DRQ. Состояние данного флага имеет значение только в том случае, если установлен бит 6

(устройство использует интерфейс AT API); если бит 6 сброшен, значение бита 8 игнорируется.

•       Биты 9-10 содержат код метода трансляции адресов, используемого в режиме CHS: ООЬ — метод битового сдвига фирмы Phoenix, 01b — LBA-совместимый режим, 10b — зарезервированное значение, lib — собственный алгоритм трансляции разработчика BIOS. Если бит 3 сброшен в ноль, значение данного поля игнорируется.

•       Бит 11 принимает значение 1, если система сконфигурирована для работы в режиме Ultra DMA. Если флаг имеет значение 1, то для конфигурирования системы используется байт 8 DPTE.

•           Биты 12-15 — зарезервированы и должны иметь значение 0.

Слово со смещением ОСИ зарезервировано. Оно должно содержать значение 0.

Байт со смещением OEh содержит номер версии стандарта Phoenix, которому соответствует формат таблицы дополнения FDPT, записанный в двоично-десятичном коде BCD. Значение данного байта должно быть равно llh.

Байт со смещением OFh содержит контрольную сумму — двоичное дополнение суммы байтов OOh-OEh. Таким образом, сумма всех 16 байт таблицы дополнения FDPT должна быть равна нулю.

Дополнительные дисковые функции

Для обеспечения поддержки новых возможностей интерфейса AT А/ ATAPI (подключение до четырех устройств, новые высокоскоростные режимы передачи данных) в набор функций Int 13h фирмой Phoenix Technologies были введены дополнительные функции (BIOS Extensions).

Дополнительные функции имеют номера 41h-49h и 4Eh. Порядок работы с этими функциями существенно отличается от принятого для стандартных функций прерывания Int 13h.:

•       вся адресная информация передается через буфер в оперативной памяти, а не через регистры;

•       соглашения об использовании регистров изменены (для обеспечения передачи новых структур данных);

•       для определения дополнительных возможностей аппаратуры (параметров) используются флаги.

ПРИМЕЧАНИЕ

Как и «классические» дисковые функции BIOS, дополнительные функции допускают использование режима линейной адресации оперативной памяти.

Пакет дискового адреса

Фундаментальной структурой данных для дополнительных функций прерывания Int I3h является так называемый «Пакет дискового адреса» (Disk Address Packet). Получив пакет дискового адреса, прерывание Int 13h преобразует содержащиеся в нем данные в физические параметры, соответствующие используемому носителю информации.

Формат пакета дискового адреса описан в табл. 6.22.

Таблица 6.22. Формат пакета дискового адреса

Смещение

Размер поля

Назначение поля

OOh

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)

Рассмотрим назначение отдельных полей пакета дискового адреса более подробно.

Байт со смещением OOh содержит размер пакета дискового адреса в байтах. Размер должен составлять 16 и более байт: если значение данного поля меньше 16, то функция завершается аварийно (устанавливается CF = 1, АН = Olh).

Байт со смещением Olh зарезервирован для последующих версий стандарта и должен содержать значение 0.

Байт со смещением 02h содержит число блоков (секторов) данных, подлежащих передаче. Значение числа передаваемых блоков не должно превышать 127 (7Fh), в противном случае функция завершается аварийно (устанавливается CF = 1, АН = Olh).

Если поле содержит значение 0, то при выполнении функции передача данных не производится. Если поле содержит значение FFh, то используется 64-разрядная адресация данных: адрес буфера задается не двойным словом со смещением 04h, а квадрасловом со смещением 10h; число передаваемых блоков задается двойным словом со смещением 18h.

Байт со смещением 03h зарезервирован для последующих версий стандарта и должен содержать значение 0.

Двойное слово со смещением 04h содержит адрес буфера в оперативной памяти, который используется при работе с диском. Адрес должен быть представлен в формате «сегмент/смещение», то есть буфер должен находиться в пределах первого мегабайта адресного пространства процессора. Если данное поле содержит значение FFFF: FFFFh, то для обращения к буферу применяется линейный адрес, который задается квадрасловом со смещением 10h. Квадраслово со смещением 08h содержит абсолютный 64-разрядный номер начального блока (LBA-адрес) данных на диске. Если устройство поддерживает режим LBA, то данный адрес передается ему непосредственно, без каких-либо модификаций. Если устройство не может работать в режиме LBA, то производится преобразование линейного адреса в формат CHS.

Все перечисленные поля пакета дискового адреса присутствуют в стандарте с момента появления его первой версии. В новых версиях размер пакета был увеличен вдвое (32 байта вместо 16), так как возникла необходимость в поддержке 64-разрядной адресации данных, которая будет применяться в компьютерах с новыми (64-разрядными) моделями процессоров.

Квадраслово со смещением 10h содержит 64-разрядный линейный адрес буфера передачи, то есть буфера в оперативной памяти, который используется при выполнении операций записи и считывания. Данное поле имеет значение только в том случае, если байт со смещением 02h содержит значение FFh или двойное слово со смещением 04h содержит значение FFFF: FFFFh.

Двойное слово со смещением 18h задает число передаваемых блоков, но используется только в том случае, если байт со смещением 02h содержит значение FFh.

Двойное слово со смещением ICh зарезервировано для последующих версий стандарта (должно содержать значение 0).

Правила передачи параметров дополнительным функциям

При вызове прерывания дополнительным функциям BIOS передаются через регистры процессора следующие данные:

•           в АН — номер вызываемой функции;

•           в DL — номер диска;

•            в DS: SI — адрес буфера, содержащего пакет дискового адреса. Передача остальных параметров, как было уже указано выше, производится через пакет дискового адреса.

Дополнительные функции BIOS предназначены только для жестких дисков и дисководов сменных дисков большой емкости, причем функции рассчитаны на использование не более четырех устройств. Передаваемый функции номер диска, таким образом, должен находиться в диапазоне 80h-83h.

После выполнения функции в регистре АН выдается код состояния (статус возврата). Кроме принятого для классических функций BIOS стандартного набора кодов возврата, которые перечислены в табл. 6.23, для дополнительных функций введено еще несколько кодов, перечисленных в табл. 6.24.

Таблица 6.23. Стандаптные коды состояния (для жестких дисков)


Код

Состояние дисковода

 

00h

Успешное завершение операции, ошибок нет

 

01h

Недопустимый номер функции или параметр

 

02h

Не найден адресный маркер

 

04h

Сектор не найден

 

05h

Сброс в исходное состояние не выполнен

 

07h

Повреждена таблица параметров дисковода

 

OAh

Обнаружен дефектный сектор

 

lOh

При чтении по контрольному коду обнаружена неисправимая ошибка

 

Код

Состояние дисководе

11h

При чтении по контрольному коду была обнаружена и исправлена

 

ошибка

20 h

Отказ контроллера

40 h

Сбой при выполнении поиска

80h

Диск не отвечает (тайм-аут)

AAh

Дисковод не готов

BBh

Неизвестная ошибка

CCh

Ошибка при записи

EOh

Ошибка регистра состояния

Таблица 6.24. Дополнительные коды состояния дисковода

Код

Состояние дисководе

BOh

Том не заперт

Blh

Том заперт в дисководе

B2h

Том является неперемещаемым

B3h

Том используется

B4h

Счетчик запирания переполнен

B5h

Команда извлечения носителя не выполнена

B6h

Носитель присутствует, но защищен от записи

Подгруппы функций

Дополнительные функции условно разделены на три подгруппы:

•       функции для доступа к диску;

•       функции для блокировки доступа и смены носителей;

•       функции внутреннего назначения.

Функции первой группы применяются при работе с дисками всех типов, функции второй группы — при работе со сменными носителями информации, функции третьей группы используются для внутренних нужд BIOS. В группу функций доступа к диску входят:

•       функция 41h — проверка наличия поддержки дополнительных функций;

•       функция 42h — расширенное чтение;

•       функция 43h — расширенная запись;

•        функция 44h — верификация секторов;

•        функция 47h — расширенный поиск;

•        функция 48h — чтение параметров диска.

В группу функций блокировки доступа и смены носителей входят:

•       функция 41h — проверка наличия поддержки дополнительных функций;

•        функция 45h — блокировка/разблокирование диска;

•        функция 46h — извлечение диска;

•        функция 48h — чтение параметров диска;

•        функция 49h — получение расширенного статуса смены диска. В группу функций EDD входят:

•       функция 41h — проверка наличия поддержки дополнительных функций;

•        функция 48h — чтение параметров диска;

•        функция 4Eh — установка конфигурации аппаратуры.

Как видно из вышеизложенного, проверка наличия поддержки дополнительных функций является обязательной и входит во все три подгруппы. Если после вызова функции 41h флаг CF имеет значение 1, а регистр АН содержит код Olh, то дополнительные функции не поддерживаются BIOS и не могут использоваться прикладной программой.

Прерывание Int 13h, функция 41 h: проверка наличия поддержки дополнительных функций

Функция выполняет проверку наличия в BIOS компьютера поддержки дополнительных дисковых функций прерывания Int 13h.

Перед вызовом прерывания требуется записать в регистры следующие значения:

•        в АН — значение 41h;

•        в ВХ — значение 55AAh;

•        в DL — номер дисковода.

Если после завершения выполнения функции флаг CF сброшен, то в регистрах находится следующая информация:

•        в АН — номер версии дополнения;

•       в AL — информация, предназначенная для внутренних целей BIOS;

•        в ВХ — значение 55AAh;

•         в СХ — битовая карта свойств используемого интерфейса. Возвращаемая в регистре СХ битовая карта позволяет определить, какое подмножество дополнительных функций реализовано в BIOS. Назначение разрядов битовой карты следующее (если интерфейс обладает определенным свойством, то соответствующий разряд устанавливается в единицу):

•        бит 0 — признак поддержки группы функций доступа к диску;

•       бит 1 — признак поддержки операций блокировки и смены носителя;

•        бит 2 — признак поддержки группы функций EDD;

•        бит 3 — признак поддержки 64-разрядных расширений;

•        биты 4-15 зарезервированы (должны быть установлены в 0).

Если после завершения выполнения функции флаг CF установлен, то дополнительные функции в BIOS не реализованы. В этом случае в регистре АН будет возвращен код состояния Olh.

Прерывание Int 13h, функция 42h: расширенное чтение

Функция осуществляет передачу секторов с заданной области диска в буфер памяти.

Перед вызовом прерывания требуется записать в регистры следующие значения:

•        в АН — значение 42h;

•        в DL — номер дисковода;

•        в DS: SI — пакет дискового адреса.

После завершения операции функция возвращает в регистре АН состояние дисковой системы. В случае аварийного завершения выполнения функции поле счетчика блоков в пакете дискового адреса содержит число блоков, которые были успешно прочитаны (прочитаны до того, как произошла ошибка).

Прерывание Int 13h, функция 43h: расширенная запись

Функция осуществляет передачу секторов из буфера памяти в заданную область диска. Запись данных проводится в режиме верификации, то есть после записи выполняется проверка секторов.

Перед вызовом прерывания требуется записать в регистры следующие значения:

•        в АН — значение 43h;

•       в AL — код режима записи (0 или 1 — запись без верификации, 2 — запись с верификацией);

•        в DL — номер дисковода;

•        в DS: SI — пакет дискового адреса.

После завершения операции функция возвращает в регистре АН состояние дисковой системы. В случае аварийного завершения выполнения функции поле счетчика блоков в пакете дискового адреса содержит число блоков, которые были успешно записаны (записаны до того, как произошла ошибка). Причиной аварийного завершения , данной функции может быть отсутствие у заданного устройства поддержки команды записи данных с верификацией. Проверить наличие поддержки записи с верификацией можно при помощи функции 48h.

Прерывание Int 13h, функция 44h: верификация секторов

Функция осуществляет проверку секторов на диске по их контрольным суммам (без передачи информации между диском и оперативной памятью).

Перед вызовом прерывания требуется записать в регистры следующие значения:

•        в АН — значение 44h;

•        в DL — номер дисковода;

•        в DS.-SI – пакет дискового адреса.

После завершения операции функция возвращает в регистре АН состояние дисковой системы. В случае аварийного завершения выполнения функции поле счетчика блоков в пакете дискового адреса содержит число блоков, которые были успешно верифицированы (проверены до того, как произошла ошибка).

Прерывание Int 13h, функция 45h: блокировка/разблокирование диска

Функция позволяет логически блокировать («запирать») и разблокировать («отпирать») сменный носитель в заданном дисководе; допускается также запирание дисковода, в который не установлен носитель информации. Данная функция позволяет блокировать и разблокировать доступ к жесткому диску, если он поддерживает подмножество команд блокировки.

Перед вызовом прерывания требуется записать в регистры следующие значения:

•        в АН — значение 45h;

•       в AL — код выполняемой операции (0 — «запереть» том в дисководе, 1 — «отпереть» том, 2 — вернуть статус блокировки);

•        в DL — номер дисковода.

После завершения операции функция возвращает в регистре АН состояние дисковой системы. В случае успешного выполнения функции в регистре AL будет размещен код состояния диска (0 — диск не заперт, 1 — диск заперт).

Операции блокировки могут быть вложенными: допускается до 255 «запираний» для каждого диска. Диск не может быть физически отперт до тех пор, пока на каждую команду запирания не подана соответствующая команда отпирания. Если количество произведенных операций «запирания» диска превышает 255, то функция завершается аварийно с выдачей кода состояния B4h («Счетчик запирания переполнен»). «Лишние» команды отпирания вызывают аварийное завершение выполнения функции с кодом состояния BOh («Том не заперт»).

Прерывание Int 13h, функция 46h: извлечь сменный носитель

Функция позволяет извлечь носитель информации из заданного дисковода (функция предназначена только для дисководов со сменными носителями).

Перед вызовом прерывания требуется записать в регистры следующие значения:

•        в АН — значение 46h;

•        в AL — значение 0;

•        в DL — номер дисковода.

После завершения операции функция возвращает в регистре АН состояние дисковой системы.

Если после выполнения функции установлен флаг CF, то функция завершилась аварийно. Возможны следующие основные причины аварийного завершения:

•       попытка применения данной функции к жесткому диску приводит к аварийному завершению выполнения бперации с кодом B2h («Том является неперемещаемым»);

•       попытка извлечь «запертый» том приводит к аварийному завершению с кодом Blh («Том заперт в дисководе»);

•       попытка извлечь носитель из пустого дисковода приводит к аварийному завершению с кодом 31h («В дисководе нет носителя»);

•       неисправность дисковода может привести к аварийному завершению с кодом B5h («Команда извлечения носителя не выполнена»).

Прерывание Int 13h, функция 47h: расширенный поиск

Функция устанавливает головки дисковода на заданный сектор.

Перед вызовом прерывания требуется записать в регистры следующие значения:

•        в АН — значение 47h;

•        в DL — номер дисковода;

•        в DS: SI — пакет дискового адреса.

После завершения операции функция возвращает в регистре АН состояние дисковой системы.

Прерывание Int 13h, функция 48h: получить параметры дисковода

Функция устанавливает головки дисковода на заданный сектор. Перед вызовом прерывания требуется записать в регистры следующие значения:

•        в АН — значение 48ft

•        в DL — номер дисковода;

•        в DS: SI — адрес буфера результата.

После завершения операции функция возвращает в регистре АН состояние дисковой системы.

В буфере, на который указывает пара регистров DS:SI, в случае ус пешного завершения выполнения функции будет возвращена информация о физических параметрах устройства. Структура информации в буфере результата описана в табл. 6.25. В ранних версиях стандарта использовался буфер диной до 30 байт.

Блок информации о пути к устройству (длиной 44 байта) добавлен в буфер результата сравнительно недавно и поддерживается только в самых современных версиях BIOS. Рассмотрим назначение полей данной структуры более подробно.

Таблица 6.25. Структура информации в буфере результата

Смещение

Размер поля

Описание поля

OOh

WORD

Размер буфера в байтах (не менее 26)

02h

WORD

Информационные флаги

04h

WORD

Физическое число цилиндров

08h

DWORD

Физическое число голоаок

OCh

DWORD

Физическое число секторов на дорожке

10h

QWORD

Общее число секторов на диске

18h

WORD

Число байтов а секторе

1Ah

DWORD

Указатель на конфигурационные параметры EDD

1Eh

WORD

Сигнатура OBEDDh — признак наличия информации о пути к устройству

20h

BYTE

Длина блока информации о пути к устройству, включая начальную сигнатуру (поле должно иметь значение 44)

21 h

BYTE

Зарезервировано (имеет значение 0)

22h

WORD

Зарезервировано (имеет значение 0)

24h

4 байта

Тип шины, записанный в виде строки в ASCII-коде

28h

8 байтов

Тип интерфейса, записанный в виде строки в ASCII-коде (см. табл. 3.17)

3Qh

8 байтов

Структура — описатель пути к интерфейсу (см. табл. 3.18)

38h

16 байтов

Структура — описатель пути к устройству (см. табл. 3.19)

48h

BYTE

Зарезервировано (имеет значение 0)

49h

BYTE

Контрольная сумма блока информации о пути к устройству (двоичное дополнение суммы байтоа со смещениями 1 Eh-48h)

Слово со смещением OOh содержит размер буфера в байтах. Значение данного слова влияет на результат выполнения функции следующим образом:

• если задан размер менее 26 байт, то функция завершается аварийно;

•     если размер буфера больше либо равен 26, но меньше 29, то после выполнения функции размер устанавливается равным 26, а указатель на конфигурационные параметры EDD функция не возвращает, так как для него не выделено место в буфере;

•     если размер буфера больше либо равен 30, то после выполнения функции он устанавливается равным 30.

Слово со смещением 02h содержит так называемые информационные флаги (если флаг имеет значение 1, то дисковод обладает соответствующим свойством):

•     бит 0 — «прозрачное» управление сообщениями о нарушении границ при использовании DMA;

•     бит 1 — значения в словах со смещением 08h и OCh (физическое число головок и секторов на дорожке) являются достоверными;

•     бит 2 — дисковод является устройством со сменными носителями;

•     бит 3 — устройство поддерживает режим записи с верификацией;

•     бит 4 — устройство вырабатывает сигнал смены носителя;

•     бит 5 — устройство способно выполнять «запирание» носителя;

•     бит 6 — геометрия устройства сконфигурирована на максимум, носитель информации в устройство не загружен;

•      биты 7-15 зарезервированы и должны иметь значение 0. Биты 4-6 могут принимать значение 1 только в том случае, если установлен бит 2, то есть если дисковод является устройством со сменными носителями. Бит 6 устанавливается при отсутствии носителя и сбрасывается после его загрузки.

Двойное слово со смещением 04h содержит физическое число цилиндров устройства. Значение этого слова на единицу больше максимального номера цилиндра, так как счет цилиндров ведется с нуля. Двойное слово со смещением 08h содержит физическое число головок устройства. Значение данного слова на единицу больше максимального номера головки, так как счет головок ведется с нуля. Двойное слово со смещением OCh содержит физическое число секторов на дорожке. Значение данного слова равно максимальному номеру сектора, так как счет секторов ведется с единицы. Квадраслово со смещением 10h содержит общее число физических секторов на носителе. Значение данного слова на единицу больше максимального абсолютного номера сектора, так как счет абсолютных номеров ведется с нуля.

ВНИМАНИЕ

Поля буфера результата со смещением 1 Ah и выше не являются обязательными (могут отсутствовать).

Слово со смещением 18h содержит число байтов в секторе диска. Двойное слово со смещением lAh содержит указатель на конфигурационные параметры EDD. Данное поле присутствует в буфере только в том случае, если установлен признак наличия поддержки функций внутреннего назначения (бит 2 регистра СХ при выдаче результата функцией 41h прерывания Int 13h). Значение FFFFh:FFFFh в данном поле означает, что указатель недействителен. Блок информации о пути к устройству имеет длину 44 байта и используется для локализации устройства. Если при вызове функции в буфер результата помещен блок информации о пути к устройству, то слово со смещением lEh должно содержать сигнатуру OBEDDh. Байт со смещением 20h содержит размер блока информации о пути к устройству в байтах, который должен иметь значение 44. Байт со смещением 21h и слово со смещением 22h зарезервированы и должны содержать нули.

Строка из четырех ASCII-символов со смещением 24h описывает тип шины, к которой должно быть подключено устройство. Строка может содержать одну из двух возможных последовательностей байтов:

•          для шины PCI — последовательность байтов 50h, 43h,49h, 20h;

•          для шины ISA — последовательность байтов 49h, 53h, 41h, 20h.

Строка из восьми ASCII-символов со смещением 28h описывает тип интерфейса устройства. Возможные типы интерфейсов и соответствующие им последовательности байтов перечислены в табл. 6.26.

Таблица 6.26. Байтовые последовательности, соответствующие различным типам интерфейсов

Тип интерфейса

Мнемоническое обозначение

Последовательность ASCII-кодов

АТА

ATA

41 h, 54h, 41 h, 20h, 20h, 20h, 20h, 20h

ATAPI

ATAPI

41 h, 54h, 41 h, 50h, 49h, 20h, 20h, 20h

SCSI

SCSI

53h, 43h, 53h, 49h, 20h, 20h, 20h, 20h

USB

USB

55h, 53h, 42h, 20h, 20h, 20h, 20h, 20h

IEEE1394

1394

31 h, 33h, 39h, 34h, 20h, 20h, 20h, 20h

Fibre Channel

FIBRE

46h, 49h, 42h, 52h, 45h, 20h, 20h, 20h

Intelligent Input/

l20

49h, 32h, 4Fh, 20h, 20h, 20h, 20h, 20h

Output

 

 

Структура со смещением 30h имеет длину 8 байт и содержит описатель пути к интерфейсу устройства. Формат структуры описателя пути к интерфейсу показан в табл. 6.27.

Таблица 6.27. Формат структуры описателя пути к интерфейсу устройства

Тип шины

Смещение от начале буфера результата

Размер поля <

Назначение поля

ISA

30h

WORD

16-разрядный базовый адрес

 

32h

WORD

Зарезервировано (имеет значение 0)

 

34h

DWORD

Зарезервировано (имеет значение 0)

PCI

30h

BYTE

Номер шины

 

31h

BYTE

Номер слота

 

32h

BYTE

Номер функции

 

33h

BYTE

Номер канала

 

34h

WORD

Зарезервировано (имеет значение 0)

Структура со смещением 38h имеет длину 16 байт и содержит описатель пути к устройству, который позволяет BIOS получить доступ к конкретному устройству заданного интерфейса. Формат описателя пути к устройству показан в табл. 6.28 (как видно из таблицы, он зависит от типа используемого интерфейса).

Таблица 6.28. Формат структуры описателя пути к интерфейсу устройства


Тип

Смещение

Размер

Назначение поля

 

интер

от начала

поля

 

 

фейса

буфера результата

 

 

 

АТА

38h

BYTE

Номер устройства на канале (0 — ведущее устройство, 1 — ведомое устройство)

 

 

39h

BYTE

Зарезервировано (имеет значение 0)

 

 

3Ah

WORD

Зарезервировано (имеет значение 0)

 

 

3Ch

DWORD

Зарезервировано (имеет значение 0)

 

 

40h

QWORD

Зарезервировано (имеет значение 0)

 

Тип

Смещение

Размер

Назначение поля

интер

от начала

поля

 

фейса

буфера

 

 

 

результата

 

 

ATAPI

38h

BYTE

Номер устройства на канале

 

 

 

(0 — ведущее устройство,

 

 

 

1 — ведомое устройство)

 

39h

BYTE

Номер логического устройства

 

3Ah

BYTE

Зарезервировано (имеет значение 0)

 

3Bh

BYTE

Зарезервировано (имеет значение 0)

 

3Ch

DWORD

Зарезервировано (имеет значение 0)

 

40h

QWORD

Зарезервировано (имеет значение 0)

SCSI

38h

WORD

Физический номер устройства

 

 

 

(SCSI ID)

 

3Ah

QWORD

Номер логического устройства

 

42h

WORD

Зарезервировано (имеет значение 0)

 

44h

DWORD

Зарезервировано (имеет значение 0)

USB

38h

QWORD

64-разрядный порядковый номер

 

 

 

устройства

 

40h

QWORD

Зарезервировано (имеет значение 0)

IEEE1394

38h

QWORD

64-разрядный расширенный

 

 

 

уникальный идентификатор (EUI-64)

 

40h

QWORD

Зарезервировано (имеет значение 0)

Fibre Cannel

38h

QWORD

64-разрядное слово идентификатора

 

 

 

(WWID)

 

40h

QWORD

Номер логического устройства

l20

38h

QWORD

64-разрядный идентификационный тег

 

40h

QWORD

Зарезервировано (имеет значение 0)

ПРИМЕЧАНИЕ

Поле «Номер канала» структуры описателя пути для шины PCI необходимо для того, чтобы можно было различать интерфейсы, имеющие идентичные координаты на шине PCI, то есть одинаковые номера шины, слота и функции. Например, интерфейс АТА допускает наличие на системной плате первичного (Primary) и вторичного (Secondary) каналов, у которых номера шины, слота и функции совпадают. В этом случае Рптагу-каналу присваивается номер 0, а Secondary-каналу — номер 1.

Байт со смещением 48h зарезервирован и должен содержать значение 0.

Байт со смещением 49h содержит контрольную сумму байтов блока информации о пути к устройству (начиная с сигнатуры блока). Контрольная сумма вычисляется как двоичное дополнение суммы байтов со смещениями lEh-48h; в результате сумма байтов lEh-49h должна быть равно нулю.

Прерывание Int 13h, функция 49h: получение расширенного статуса смены диска

Функция возвращает статус смены диска. Она аналогична функции 16h прерывания Int 13h, но допускает задание любого номера дисковода.

Перед вызором прерывания требуется записать в регистры следующие значения:

•           в АН — значение 49h;

•           в DL — номер дисковода.

После завершения операции функция возвращает в регистре АН состояние дисковой системы. Если флаг CF сброшен и АН = 0, то сигнал смены диска неактивен; если флаг CF установлен и АН = 06h, то сигнал смены диска активен.

Если в качестве параметра данной функции указан номер жесткого диска, поддерживающего подгруппу команд запирания и извлечения носителя, то функция всегда завершается успешно: после ее выполнения флаг CF сброшен и АН = 0.

ПРИМЕЧАНИЕ

Сигнал смены диска активируется при открывании и закрывании дверцы накопителя независимо от того, производилась ли при этом замена носителя.

Прерывание Int 13h, функция 4Eh: установка конфигурации аппаратуры

Функция позволяет аппаратно-независимому программному обеспечению настраивать устройства системной платы на оптимальный режим работы.

Перед вызовом прерывания требуется записать в регистры следующие значения:

•           в АН — значение 4Eh;

•       в AL — номер подфункции конфигурирования аппаратуры (табл. 6.29);

•           в DL — номер дисковода.

Таблица 6.29. Список подфункций конфигурирования аппаратуры

Номер под

Назначение

функции

 

0

Разрешить предвыборку

1

Запретить предвыборку

2

Установить максимально допустимый номер режима РЮ

 

и повысить скорость передачи данных до максимально

 

допустимой для данного диска и системной платы

3

Установить режим РЮ 0 и понизить до минимума скорость

 

передачи данных

4

Установить режим РЮ, используемый по умолчанию.

 

Вернуть систему к скорости передачи данных, заданной

 

процедурой SETUP

5

Установить максимально допустимый для прерывания Int 13h

 

номер режима DMA

6

Запретить прерыванию Int 13h использование DMA

После завершения операции функция возвращает в регистре АН состояние дисковой системы.

В случае успешного выполнения функции в регистре AL возвращается информация о возможном воздействии на другое устройство, подключенное к тому же каналу АТА (0 — функция выполнена корректно, 1 — другое устройство, подключенное к данному каналу, подверглось воздействию). Дело в том, что на некоторых системных платах до сих пор встречаются устаревшие чипсеты, которые не обеспечивают взаимной независимости режимов работы устройств, подключенных к одному АТА-каналу.

ВНИМАНИЕ

Режимы РЮ и DMA не могут использоваться одновременно. Установка режима DMA отменяет режим РЮ и сбрасывает заданные для него параметры скорости передачи данных. Аналогично установка режима РЮ отменяет режим DMA и сбрасывает заданные для него параметры.

Прерывание Int 15h, функция 52h: извлечь сменный носитель

Функция позволяет извлечь из дисковода сменный носитель; она считается «низкоуровневой» — служит буфером между устройством и функцией 46h прерывания Int 13h. Данная функция перехватывается программами кэширования данных на диске, что позволяет предотвратить потерю информации.

Перед вызовом прерывания требуется записать в регистры следующие значения:

•           в АН — значение 52h;

•           в DL — номер дисковода.

После завершения операции функция возвращает в регистре АН состояние дисковой системы. Если флаг CF сброшен и АН = О, то заданная операция успешно выполнена, а если флаг CF установлен, то произошла ошибка, и ее код помещен в регистр АН.

Источник: Кулаков В. К90 Программирование на аппаратном уровне: специальный справочник (+дискета). 2-е издание. — СПб.: Питер, 2003. — 847 е.: ил.

По теме:

  • Комментарии