работающими в ней драйверами устройств ввода/вывода. Этому соглашению обязаны следовать все драйверы (в том числе и разработанные пользователями) для версий MS-DOS, начиная с 2.0 и выше.
Общий вызов IOCTL реализуется прерыванием $21 ДОС со следующими значениями регистров:
АН == $44 (функция $44 ДОС реализует вызов IOCTL)
AL = $OD (подфункция $OD - общий вызов IOCTL)
BL - номер диска (0 - текущий, 1 - А и т.д.)
СН - $08 (код категории устройства: $08 - дисковое устройство)
CL - операция:
$40 - установить параметры устройства
$41 - записать дорожку
$42 - форматировать дорожку
$60 - получить параметры устройства
$61 - прочитать дорожку
$62 - проверить дорожку DS:BX - адрес указателя на блок параметров
При возврате из функции флаг переноса CF содержит 0, если обращение было без ошибок, и 1, если обнаружена ошибка. В случае ошибки регистр АХ содерж IT код ошибки.
Формат блока параметров, адрес которого указывается в регистрах DS:BX, зависит от выполняемой операции.
Получить/установить параметры устройства CL = $б0/$40
При использовании этой операции блок параметров должен соответствовать такой структуре данных:
type
Tracks_Type = record
Trek: Byte; {Номер сектора}
Size: Byte {Длина сектора} end;
IOCTL_Info_Type = record
Control Byte; {Управляющий байт}
TypeDrv Byte; {Тип диска}
Attrib Word; {Атрибуты диска}
Cylindrs Word; {Число цилиндров}
Media Byte; {Тип носителя}
BPB ВРВ_Туре;
Add Add_BPB_Type;
Reserv array [1..1O] of Byte;
Sectors Word; {Количество секторов на дорожке}
Tracks {Образ дорожки}
array [1..Sectors] of Tracks_type