# 0Dh Общее управление вводом/выводом (GENERIC IOCTL)
Вызов:
Регистр | ||
AH | 44h | |
AL | 0Dh | |
BL | Номер дисковода (0 - текущий дисковод, 1 - дисковод А: и т.д.) | |
CH | Код категории устройства: 08h - дисковое устройство | |
CL | Операция:
40h - установить параметры устройства; 60h - получить параметры устройства; 41h - записать дорожку на логическом устройстве; 61h - прочитать дорожку на логическом устройстве; 42h - форматировать дорожку на логическом устройстве; 62h - проверить дорожку на логическом устройстве | |
DS:DX | Указатель на блок параметров. |
Возврат без ошибки:
Регистр | |
CF | 0 |
Возврат с ошибкой:
Регистр | |
CF | 1 |
AX | Код ошибки |
Общая схема использования этой подфункции:
Формат блока параметров зависит от выполняемой операции:
CL = 40h/60h (получить/установить параметры устройства)
Смещение | Размер | Содержимое поля | |
(0) | 1 | Специальные функции | |
(+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 | Тип среды носителя данных. Используется для устройств, поддерживающих несколько типов носителей данных, например, для флоппи-дисковода на 1.2М значение этого поля, равное 0, соответствует дискете на 1.2М, а 1 - 360К. | |
(+7) | 31 | BPB для устройства. Если бит 0 поля специальных функций сброшен, то в этом поле находится новый BPB для устройства. Если бит 0 установлен, драйвер устройства возвращает BPB для всех последующих запросов на построение BPB. | |
(+38) | ? | Таблица разметки дорожки, имеет переменную длину. |
Биты байта специальных функций имеют следующее значение:
В операции 60h значение этого бита, равное 1, используется для извлечения текущего BPB, как если бы он был получен по команде драйвера с кодом 2 (построить BPB). Значение этого бита, равное 0, говорит о том, что надо извлечь BPB, используемый по умолчанию.
Для операции с кодом 40h значение бита, равное 1, используется для извлечения текущего BPB, значение 0 приводит к использованию BPB, подготовленного в данном блоке параметров.
Значение этого бита, равное 1, - это указание игнорировать все поля в блоке параметров, кроме поля описания физической структуры дорожки на данном устройстве.
Значение этого бита, равное 1, говорит о том, что все сектора на этой дорожке имеют одинаковый размер.
Таблица разметки дорожки начинается с двухбайтового слова, содержащего общее количество секторов на дорожке. Затем для каждого сектора в таблице находится по два двухбайтовых слова, содержащих номер сектора (1, 2 и т.д.) и размер сектора. То есть для каждого сектора в таблице содержится два слова.
Если в поле "специальные функции" бит 2 установлен в 1, размеры всех секторов должны быть одинаковыми.
CL = 41h/61h (записать/прочитать дорожку)
Смещение | Размер | Содержимое поля |
(0) | 1 | Специальные функции (это поле всегда содержит 0) |
(+1) | 2 | Номер головки |
(+3) | 2 | Номер дорожки |
(+5) | 2 | Номер начального сектора (нумерация секторов, в отличие от нумерации головок и дорожек начинается с 0) |
(+7) | 2 | Общее количество секторов на дорожке, уменьшенное на единицу |
(+9) | 4 | FAR-указатель на буфер обмена с диском, в который помещается считываемая информация или откуда берется записываемая информация |
Смещение | Размер | Содержимое поля |
(0) | 1 | Специальные функции. Для этой операции определен только бит 0. Перед вызовом команды значение бита, равное 0, требуется для форматирования дорожки. Если этот бит установлен в 1, то проверяется возможность использования заданного формата трека. Если после выполнения команды значение бита 0 равно 0, то поддерживается заданный формат трека и заполненную таблицу разметки дорожки можно использовать. Если значение бита 0 равно 1, то затребованный формат дорожки не поддерживается. |
(+1) | 2 | Номер головки для форматирования/проверки |
(+3) | 2 | Номер дорожки для форматирования/проверки |