MS-DOS для программиста
© Александр Фролов, Григорий Фролов
Том 19, М.: Диалог-МИФИ, 1995, 253 стр.
Подфункция 0Dh функции 44h прерывания INT 21h
обеспечивает механизм взаимодействия между
прикладным программным обеспечением и
драйверами блочных устройств. Эта подфункция
позволяет программам читать и изменять
параметры устройств, предоставляет возможность
выполнять чтение, запись, форматирование и
проверку дорожек диска на низком уровне с
помощью драйвера устройства.
При вызове функции вы должны загрузить
регистры процессора следующим образом:
Регистр |
Содержание |
AH |
44h |
AL |
0Dh |
BL |
Номер устройства НМД или НГМД (0 - текущий
диск, 1 - А: и т. д.) |
CH |
Код категории устройства: 08h - дисковое
устройство |
CL |
Операция:
40h - установить параметры устройства;
60h - получить параметры устройства;
41h - записать дорожку;
61h - прочитать дорожку;
42h - форматировать дорожку;
62h - проверить дорожку |
DS:DX |
Указатель на блок параметров |
Если функция выполнилась без ошибки, флаг
переноса CF сброшен. В противном случае этот флаг
установлен, при этом регистр AX содержит код
ошибки.
Через регистры DS:DX функции необходимо передать
адрес подготовленного блока параметров, формат
которого зависит от выполняемой операции. Опишем
этот формат для наиболее важных операций.
- Получить/установить параметры устройства (CL =
40h/60h)
Смещение |
Размер |
Содержимое поля |
0 |
1 |
Специальные функции:Бит 0:Если
установить этот бит в операции с кодом 60h, можно
извлечь текущий BPB . Результат аналогичен
выполнению команды драйвера с кодом 2 (построить
BPB). Если этот бит сброшен, надо извлечь BPB,
используемый по умолчанию.Бит 1:Если этот бит
установлен, функция игнорирует все поля в блоке
параметров, кроме поля описания физической
структуры дорожки на данном устройстве.Бит 2:Если
этот бит установлен, все секторы на дорожке имеют
одинаковый размер |
1 |
1 |
Тип устройства, возвращаемый драйвером:
0 - НГМД емкостью 320 или 360 Кбайт с диаметром 5,25";
1 - НГМД емкостью 1,2 Мбайт и диаметром 5,25";
2 - НГМД емкостью 720 Кбайт и диаметром 3,5";
3 - НГМД диаметром 8" нормальной плотности;
4 - НГМД диаметром 8" двойной плотности;
5 - жесткий диск;
6 - накопитель на магнитной ленте;
7 - НГМД емкостью 1,44 Мбайт и диаметром 3,5", а
также прочие дисковые устройства |
2 |
2 |
Атрибуты устройства, возвращаемые
драйвером. В этом поле используются только два
младших бита.
Бит 0 - признак возможности замены среды носителя
данных (0 - заменяемая, 1 - не заменяемая).Бит 1 -
признак наличия аппаратного контроля замены
дискеты (1 - контроль выполняется, 0 - контроль не
выполняется). Остальные биты зарезервированы и
должны содержать 0 |
4 |
2 |
Максимальное количество дорожек на
физическом устройстве. Это поле устанавливается
драйвером |
6 |
1 |
Тип среды носителя данных. Используется
для устройств, поддерживающих несколько типов
носителей данных. Например, если в НГМД высокой
плотности установлена дискета высокой
плотности, тип равен 0, а если установлена дискета
двойной плотности - 1 |
7 |
31 |
BPB для устройства. Если бит 0 поля
специальных функций сброшен, то в этом поле
находится новый BPB для устройства. Если бит 0
установлен, драйвер устройства возвращает BPB для
всех последующих запросов на построение BPB |
38 |
? |
Таблица разметки дорожки, имеет
переменную длину |
Таблица разметки дорожки начинается с
двухбайтового слова, содержащего общее
количество секторов на дорожке. Затем для
каждого сектора в таблице находится по два
двухбайтовых слова, содержащих номер сектора (1, 2
и т. д.) и размер сектора. То есть для каждого
сектора в таблице содержится два слова.
Если в поле "специальные функции" бит 2
установлен в 1, размеры всех секторов должны быть
одинаковыми.
- Записать/прочитать дорожку (CL = 41h/61h)
Смещение |
Размер |
Содержимое поля |
0 |
1 |
Специальные функции (это поле всегда
содержит 0) |
1 |
2 |
Номер головки |
3 |
2 |
Номер дорожки |
5 |
2 |
Номер начального сектора (нумерация
секторов, в отличие от нумерации головок и
дорожек начинается с 0) |
7 |
2 |
Общее количество секторов на дорожке,
уменьшенное на единицу |
9 |
4 |
Дальний указатель на буфер обмена с
диском, в который помещается считываемая
информация или откуда берется записываемая
информация |
- Форматировать/проверить дорожку (CL = 42h/62h)
Смещение |
Размер |
Содержимое поля |
0 |
1 |
Специальные функции. Для этой операции
определен только бит 0. Перед вызовом команды
значение, равное 0, требуется для форматирования
дорожки. Если этот бит установлен в 1, то
проверяется возможность использования
заданного формата дорожки. Если после выполнения
команды значение бита равно 0, то заданный формат
дорожки и заполненную таблицу разметки дорожки
можно использовать. Если значение бита 0 равно 1,
то указанный формат дорожки не поддерживается |
1 |
2 |
Номер головки для форматирования или
проверки |
3 |
2 |
Номер дорожки для форматирования или
проверки |
Перед началом выполнения операции программа
должна получить и сохранить текущие параметры
устройства. Для получения текущих параметров
устройства необходимо выполнить операцию с
кодом 60h. Затем программа должна установить новые
параметры устройства, которые будут
использованы в операциях чтения, записи,
проверки или форматирования. Для установки
параметров программа должна выполнить операцию
с кодом 40h.
После выполнения операции программа должна
восстановить первоначальные параметры
устройства, выполнив операцию с кодом 40h.
|