| 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.  |