Электронная библиотека книг Александра Фролова и Григория Фролова.
 
Библиотека
Братьев
Фроловых
Электронная библиотека книг Александра Фролова и Григория Фролова.
Библиотека системного программиста
Программирование на JAVA
ПК. Шаг за шагом
Другие книги
Восстановление данных
Антивирусная защита
Статьи для
программистов
Пользователю компьютера

Операционная система MS-DOS

© Александр Фролов, Григорий Фролов
Том 1, книга 3, М.: Диалог-МИФИ, 1992.

[Назад] [Содеожание] [Дальше]

1.5. Функции BIOS для работы с дисками

Наилучшим и самым безопасным способом работы с дисками на физическом уровне является использование функций BIOS. Эти функции учитывают все особенности аппаратуры и предоставляют достаточно широкий набор средств доступа к дискам на физическом уровне.

Вся дисковая подсистема обслуживается прерыванием BIOS INT 13h. Это прерывание выполняет множество функций. Для вызова определенной функции программа должна занести ее код в регистр AH, другие регистры, как правило, должны содержать параметры - номера используемых дисководов, цилиндров, головок, адреса таблиц параметров дискеты и жесткого диска и т.д.

Библиотека транслятора Microsoft QC 2.5 содержит специальную функцию _bios_disk(), сильно упрощающую работу с дисковыми функциями BIOS. В примерах программ, приведенных в книге, мы продемонстрируем как непосредственный вызов прерывания INT 13h, так и использование функции _bios_disk().

Мы приведем краткую таблицу функций прерывания INT 13h, после чего займемся детальным описанием этих функций. В примечании к описанию функций мы будем указывать типы компьютеров, на которых данная функция работоспособна.

00h Сброс дисковой подсистемы
01h Получить состояние дисковой подсистемы
02h Чтение сектора
03h Запись сектора
04h Проверка сектора
05h Форматирование дорожки
06h Форматирование дорожки (НМД)
07h Форматирование диска (НМД)
08h Получить текущие параметры дисковода (НМД)
09h Инициализация таблиц параметров жесткого диска
0Ah Чтение длинное (НМД)
0Bh Запись длинная (НМД)
0Ch Поиск цилиндра (НМД)
0Dh Альтернативный сброс дисковода (НМД)
0Eh Чтение буфера сектора (НМД)
0Fh Запись буфера сектора (НМД)
10h Проверка готовности дисковода (НМД)
11h Рекалибровка дисковода (НМД)
12h Проверка памяти контроллера (НМД)
13h Проверка дисковода (НМД)
14h Проверка контроллера (НМД)
15h Получить тип дисковода
16h Проверка замены диска
17h Установка типа дискеты
18h Установка среды носителя данных для форматирования
19h Парковка головок (НМД)
1Ah Форматирование диска (ESDI НМД)

1.5.1 Сброс дисковой подсистемы

На входе: AH = 00h
  DL = Адрес дисковода (0, 1, ...,80h, 81h, ...)
На выходе: -
Примечание: PC, XT, AT, PS/2

Эта функция вызывает сброс и рекалибровку дискового контроллера (головки устанавливаются на нулевой цилиндр). Если в адресе дисковода старший бит (бит 7) установлен в 1, выполняется сброс контроллера НМД. Сброс рекомендуется выполнять после того, как произошла ошибка при выполнении других операций, таких как чтение или запись. После сброса можно попытаться повторить операцию.

Адрес дисковода 0 соответствует первому флоппи-диску (A:), 1 - второму (B:) и т.д. Адреса 80, 81 соответствуют первому и второму физическим накопителям на жестком магнитном диске.

1.5.2 Получить состояние дисковой подсистемы

На входе: AH = 01
  DL = Адрес дисковода (0, 1, ...,80h, 81h, ...)
На выходе: AL = Состояние дисковода после завершения последней операции
Примечание: PC, XT, AT, PS/2

Эта функция может быть использована для анализа результата выполнения дисковой операции и получения кода ошибки. Передаваемый в регистре AL код ошибки функция берет из области данных BIOS - из байта с адресом 0000:0441h.

Код ошибки может принимать следующие значения:

00h Успешное завершение операции
01h Неправильная команда
02h Не найдена адресная метка
03h Попытка записи на диск, защищенный от записи
04h Сектор не найден
05h Ошибка при сбросе (НМД)
06h Произошла замена дискеты
07h Неправильные параметры дисковода (НМД)
08h Переполнение канала ПДП (НГМД)
09h Переход за границу 64К при работе с ПДП
0Ah Обнаружен плохой сектор (НМД)
0Bh Обнаружена плохая дорожка (НМД)
0Ch Неправильный номер дорожки
0Dh Неправильный номер сектора при форматировании (НМД)
0Eh Обнаружена адресная метка управляющих данных (НМД)
0Fh Ошибка ПДП (НМД)
10h Обнаружена ошибка в CRC/ECC
11h Данные скорректированы с использованием ECC (НМД)
20h Сбой контроллера
40h Сбой при поиске дорожки
80h Таймаут - программа не успевает обрабатывать данные
AAh Дисковод не готов (НМД)
BBh Неизвестная ошибка (НМД)
CCh Сбой при записи (НМД)
E0h Ошибка регистра состояния (НМД)
FFh Ошибка операции считывания (НМД)

1.5.3 Чтение сектора

На входе: AH = 02h
  AL = Количество секторов, которые нужно прочитать
  CH = Номер дорожки
  CL = Номер сектора
  DH = Номер головки
  DL = Адрес дисковода (0, 1, ...,80h, 81h, ...)
  ES:BX = Адрес буфера для данных
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: PC, XT, AT, PS/2

Эта функция позволяет прочитать один или несколько секторов диска в буфер, находящийся в оперативной памяти. Вам надо задать для начального сектора номера дорожки, головки и номер самого сектора.

Для НМД номер дорожки и сектора задаются следующим образом: биты регистра CX 5...0 задают номер сектора, а биты 15...6 - номер дорожки.

Перед чтением необходимо подготовить таблицу параметров дискеты или диска (для операций с НМД).

1.5.4 Запись сектора

На входе: AH = 03h
  AL = Количество секторов, которые нужно прочитать
  CH = Номер дорожки
  CL = Номер сектора
  DH = Номер головки
  DL = Адрес дисковода (0, 1, ..., 80h, 81h, ...)
  ES:BX = Адрес буфера для данных
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: PC, XT, AT, PS/2

Функция записи секторов аналогична предыдущей, за исключением направления перемещения данных - данные записываются из буфера в сектора диска. Необходимо отметить, что при работе с НГМД не всякий BIOS будет ожидать разгона двигателя до рабочей скорости перед выполнением операции записи. В результате программа может получить признак ошибки. Прежде чем делать вывод о причинах ошибки, следует сбросить контроллер НГМД функцией 00H и повторить операцию записи три раза.

1.5.5 Проверка сектора

На входе: AH = 04h
  AL = Количество секторов, которые нужно проверить
  CH = Номер дорожки
  CL = Номер сектора
  DH = Номер головки
  DL = Адрес дисковода (0, 1, ..., 80h, 81h, ...)
На выходе: AH = Состояние дисковода после завершения последней операции
  AL = Число проверенных секторов
  CF = 1, если произошла ошибка, 0, если ошибки нет
Примечание: PC, XT, AT, PS/2

С помощью этой функции можно убедиться, что указанные сектора существуют и их можно прочесть. Данные проверяются по методу циклического избыточного контроля (CRC). Адрес буфера не нужен, так как чтения данных в оперативную память при проверке секторов не происходит.

Если вы используете компьютер со старой BIOS, выпущенной ранее 11/15/85, регистры ES:BX должны указывать на буфер соответствующего размера, как и при выполнении операции чтения.

Перед использованием этой функции убедитесь, что мотор НГМД раскрутился до рабочей скорости, в противном случае вы получите признак ошибки.

1.5.6 Форматирование дорожки

На входе: AH = 05h
  AL = Количество секторов, которые нужно создать на дорожке, или
Фактор чередования для НМД XT
  CH = Номер дорожки
  CL = Номер сектора
  DH = Номер головки
  DL = Адрес дисковода (0, 1, ..., 80h, 81h, ...)
  ES:BX = Адрес буфера формата, используется для НГМД и НМД машин XT
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: PC, XT, AT, PS/2

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

Для этой функции необходимо задать два интересных параметра, на которых мы остановимся подробнее - фактор чередования и буфер формата.

Что такое фактор чередования (Interleave)?

Этот фактор определяет последовательность расположения секторов на дорожке. Сектора могут располагаться в порядке своих номеров, через один, через два и т.д. Способ размещения секторов определяется значением фактора чередования.

Фактор 1 означает последовательное расположение секторов на дорожке в порядке их номеров, т.е. чередование отсутствует. Фактор 2 задает расположение секторов через один, 3 - через два и т.д. На рисунке показано использование фактора чередования при форматировании дорожки:

Все утилиты, предназначенные для подготовки жесткого диска к работе, требуют задания величины фактора чередования при выполнении низкоуровневого форматирования.

Для чего может понадобиться несмежное расположение секторов с последовательными номерами на дорожке диска?

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

Если же сектора будут расположены через один или через два, количество оборотов диска, нужных для обработки последовательности смежных секторов, будет значительно меньше.

Для подбора оптимального фактора чередования можно использовать специальные программы или делать это методом проб и ошибок, задавая каждый раз новое значение фактора и проверяя быстродействие диска.

Займемся теперь буфером формата.

Перед вызовом функции форматирования регистры ES:BX должны содержать полный адрес буфера формата. Для дискет перед форматированием этот буфер должен представлять из себя заполненный массив четырехбайтовых элементов - номера дорожки, головки, сектора и кода размера сектора. Код размера сектора может иметь следующие значения:

0 128 байтов на сектор
1 256 байтов на сектор
2 512 байтов на сектор
3 1024 байтов на сектор

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

Для жесткого диска буфер формата должен представлять из себя массив размером 512 байтов. В начале этого массива для каждого сектора на дорожке необходимо подготовить двухбайтовые элементы. Первый байт содержит признак - хороший это сектор (00) или плохой (80h). Второй байт - это номер сектора.

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

Приведем пример подготовленного буфера формата для форматирования дорожки на 17 секторов с фактором чередования, равным 2:

db 00h,01h,00h,0ah,00h,02h,00h,0bh,00h,03h,00h,0ch
db 00h,04h,00h,0dh,00h,05h,00h,0eh,00h,06h,00h,0fh
db 00h,07h,00h,10h,00h,08h,00h,11h,00h,09h

Отметим, что буфер формата используется только для машин AT. Машины XT при форматировании НМД не используют буфер формата, вместо этого значение фактора чередования указывается при вызове функции форматирования в регистре AL.

При форматировании флоппи-дисков с помощью этой функции таблица параметров дискеты должна содержать правильное значение количества секторов на дорожке и другие параметры.

1.5.7 Форматирование дорожки (НМД)

На входе: AH = 06h
  AL = Фактор чередования
  CH = Номер дорожки
  CL = Номер сектора
  DH = Номер головки
  DL = Адрес дисковода (0, 1, ..., 80h, 81h, ...)
  ES:BX = Адрес буфера формата
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: PC, XT

Функция форматирования дорожки с кодом 6 предназначена только для НМД и устанавливает флаг плохого сектора. Буфер формата подготавливается аналогично функции 5.

1.5.8 Форматирование диска (НМД)

На входе: AH = 07h
  AL = Фактор чередования (только для XT)
  CH = Номер дорожки
  CL = Номер сектора
  DH = Номер головки
  DL = Адрес дисковода (0, 1, ..., 80h, 81h, ...)
  ES:BX = Адрес буфера формата
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: PC, XT

Функция форматирования с кодом 7 предназначена для форматирования целого диска начиная с определенной дорожки. Буфер формата подготавливается аналогично функции 5.

1.5.9 Получить текущие параметры дисковода (НМД)

На входе: AH = 08h
  DL = Адрес дисковода (0, 1, ..., 80h, 81h, ...)
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
  BL = тип дисковода (только для AT и PS2)
  DL = количество НМД, обслуживаемых первым контроллером
  DH = максимальный номер головки
  CL = максимальный номер сектора
  CH = максимальный номер цилиндра
  ES:DI = адрес таблицы параметров дисковода
Примечание: PC, XT, AT, PS/2

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

0 не используется;
1 360К, 40 дорожек, 5,25 дюймов;
2 1,2М, 80 дорожек, 5,25 дюймов;
3 720 К, 80 дорожек, 3,5 дюйма;
4 1,44М, 80 дорожек, 3,5 дюйма.

1.5.10 Инициализация контроллера НМД

На входе: AH = 09h
  DL = Адрес дисковода (80h, 81h, ...)
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: PC, XT, AT, PS/2

Функцию инициализации контроллера НМД применяют после модификации таблиц параметров жесткого диска. BIOS BIOSузнает о внесенных в таблицы изменениях и инициализирует соответствующим образом контроллер НМД.

1.5.11 Чтение секторов длинное (НМД)

На входе: AH = 0Ah
  AL = Количество секторов, которые нужно прочитать
  CH = Номер дорожки
  CL = Номер сектора
  DH = Номер головки
  DL = Адрес дисковода (0, 1, ..., 80h, 81h, ...)
  ES:BX = Адрес буфера для данных
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: PC, XT, AT, PS/2

Функция "Чтение секторов длинное" отличается от обычной функции чтения (код 02h) тем, что она дополнительно считывает в буфер данных 4 байта кода коррекции ошибки (ECC).

1.5.12 Запись секторов длинная (НМД)

На входе: AH = 0Bh
  AL = Количество секторов, которые нужно записать
  CH = Номер дорожки
  CL = Номер сектора
  DH = Номер головки
  DL = Адрес дисковода (0, 1, ..., 80h, 81h, ...)
  ES:BX = Адрес буфера для данных
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: PC, XT, AT, PS/2

Функция "Запись секторов длинная" отличается от обычной функции записи (код 03h) тем, что она дополнительно записывает на диск из буфера данных 4 байта кода коррекции ошибки (ECC).

1.5.13 Поиск дорожки (НМД)

На входе: AH = 0Ch
  CH = Номер дорожки
  CL = Номер сектора
  DH = Номер головки
  DL = Адрес дисковода (0, 1, ..., 80h, 81h, ...)
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: PC, XT, AT, PS/2

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

1.5.14 Альтернативный сброс дисковода (НМД)

На входе: AH = 0Dh
  DL = Адрес дисковода (0, 1, ..., 80h, 81h, ...)
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: PC, XT, AT, PS/2

Вы можете использовать эту функцию для сброса контроллера вместо функции с кодом 00h. В отличие от функции сброса дисковой подсистемы с кодом 00h эта функция не влияет на контроллер НГМД, она сбрасывает только контроллер накопителя на жестком магнитном диске.

1.5.15 Чтение буфера сектора (НМД)

На входе: AH = 0Eh
  AL = Количество секторов, которые нужно прочитать
  CH = Номер дорожки
  CL = Номер сектора
  DH = Номер головки
  ES:BX = Адрес буфера для данных
  DL = Адрес дисковода (0, 1, ..., 80h, 81h, ...)
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: PC, XT

Контроллеры НМД в компьютерах PC и XT содержат внутренний буфер данных. С помощью функции 0Eh программа может прочитать содержимое этого буфера в оперативную память. Чтения данных с диска при этом не происходит. В основном функция чтения буфера используется для диагностики дискового контроллера.

1.5.16 Запись буфера сектора (НМД)

На входе: AH = 0Fh
  AL = Количество секторов, которые нужно записать
  CH = Номер дорожки
  CL = Номер сектора
  DH = Номер головки
  ES:BX = Адрес буфера для данных
  DL = Адрес дисковода (0, 1, ..., 80h, 81h, ...)
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: PC, XT

Функция полностью аналогична предыдущей, за исключением того, что происходит не чтение, а запись данных из оперативной памяти в буфер контроллера. Она может быть использована для инициализации содержимого буфера сектора перед форматированием диска функцией 05h прерывания INT 13h.

1.5.17 Получить состояние дисковода (НМД)

На входе: AH = 10h
  DL = Адрес дисковода (80h, 81h, ...)
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: PC, XT, AT, PS/2

О готовности дисковода можно судить по байту состояния, передаваемому функцией в регистре AH. Этот байт аналогичен возвращаемому в регистре AH функцией 01h.

1.5.18 Рекалибровка дисковода (НМД)

На входе: AH = 11h
  DL = Адрес дисковода (80h, 81h, ...)
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: PC, XT, AT, PS/2

Вызов функции приводит к позиционированию головок выбранного дисковода на нулевую дорожку. Дополнительно в регистре AH возвращается байт состояния дисковода.

1.5.19 Проверка памяти контроллера (НМД)

На входе: AH = 12h
  DL = Адрес дисковода (80h, 81h, ...)
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: PC, XT

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

1.5.20 Проверка дисковода (НМД)

На входе: AH = 13h
  DL = Адрес дисковода (80h, 81h, ...)
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: PC, XT

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

1.5.21 Проверка контроллера (НМД)

На входе: AH = 14h
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: PC, XT, AT, PS/2

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

1.5.22 Получить тип дисковода

На входе: AH = 15h
  DL = Адрес дисковода (0, 1, ..., 80h, 81h, ...)
На выходе: AH = Тип дисковода
  CX:DX = количество секторов размером 512 байтов
Примечание: AT, PS/2

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

0 диск отсутствует;
1 НГМД без аппаратных средств обнаружения замены дискеты;
2 НГМД оснащенный средствами обнаружения замены дискеты;
3 НМД.

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

1.5.23 Проверка замены диска

На входе: AH = 16h
  DL = Адрес дисковода (0, 1, ..., 80h, 81h, ...)
На выходе: AH = Признак замены дискеты:
0 - замены дискеты не было;
6 - дискета была заменена.
Примечание: AT, PS/2

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

1.5.24 Установка типа дискеты

На входе: AH = 17h
  AL = Устанавливаемый тип
  DL = Адрес дисковода (0, 1, ..., 80h, 81h, ...)
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: AT, PS/2

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

0 не используется;
1 диск 360К в дисководе 360К;
2 диск 360К в дисководе 1.2М (HD);
3 диск 1.2М в дисководе 1.2М;
4 диск 720К в дисководе 720К.

Если перед вызовом этой функции был установлен флаг замены дискеты, то он сбрасывается. Дополнительно BIOS BIOSустанавливает скорость передачи данных через контроллер НГМД в зависимости от типа дискеты.

1.5.25 Установка среды для форматирования (НГМД)

На входе: AH = 18h
  DL = Адрес дисковода (0, 1, ...)
  CH = Младшие 8 битов количества дорожек
  CL = Количество секторов на дорожку (биты 0-5)
На выходе: AH = 00h Требуемая комбинация количества дорожек и количества секторов на дорожку поддерживается операцией форматирования;
  AH = 01h Функция недоступна;
  AH = 0Ch Функция не поддерживается или неизвестен тип дисковода;
  AH = 80h Диск не установлен в дисковод.
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: AT, PS/2

Эта функция должна быть вызвана перед использованием функции 05h форматирования диска для установки правильной скорости передачи данных через дисковый контроллер. Дополнительно функция сбрасывает флаг замены дискеты (если этот флаг установлен).

1.5.26 Парковка головок (НМД)

На входе: AH = 19h
  DL = Адрес дисковода (80h, 81h, ...)
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: PS/2

Парковка головок - это их установка в нерабочую область, т.е. на нерабочую дорожку. Эту операцию обычно выполняют перед транспортировкой компьютера для исключения повреждения дисковода.

1.5.27 Форматирование диска (ESDI НМД)

На входе: AH = 1Ah
  AL = Количество элементов в таблице дефектов
  DL = Адрес дисковода (80h, 81h, ...)
  CL = Режим форматирования
  ES:BX = Адрес таблицы дефектов
На выходе: AH = Состояние дисковода после завершения последней операции
  CF = 1, если произошла ошибка,
0, если ошибки нет
Примечание: PS/2

Эта функция форматирования жесткого диска предназначена для НМД, используемого совместно с контроллером ESDI. Она поддерживает таблицу дефектных дорожек и имеет несколько режимов форматирования в зависимости от содержимого регистра CL при вызове:

Бит 0 игнорировать первичную таблицу дефектов;
Бит 1 игнорировать вторичную таблицу дефектов;
Бит 2 обновить вторичную таблицу дефектов;
Бит 3 выполнить анализ поверхности;
Бит 4 генерация периодических прерываний;
Биты 5-7 зарезервированы, должны быть равны 0.

Если при форматировании затребована функция генерации периодических прерываний, то после форматирования каждой дорожки вызывается прерывание INT 5h с регистром AH=0Fh. Это прерывание можно использовать для индикации хода процесса либо для завершения процесса форматирования по требованию оператора или программы.

При установке бита 2 регистра CL содержимое вторичной таблицы дефектов обновляется, в нее заносятся результаты тестирования диска. Для углубленного анализа поверхности диска сначала необходимо выполнить форматирование диска с битом 3, сброшенным в 0. Затем следует выполнить анализ поверхности диска, вызвав эту функцию с битом 3, установленным в 1.

[Назад] [Содеожание] [Дальше]


Создание интернет-магазинов: http://www.shop2you.ru/ © Александр Фролов, Григорий Фролов, 1991-2016