Работа с диском на физическом уровне 79

= $FF — задан неверный номер диска;

DS:BX — адрес блока информации.

Например, следующая программа читает блок информации о диске и выясняет, в соответствии с какими версиями MS-DOS он построен.

Uses DOS;

type

PDrvInfo = "DrvInfo;

Drvlnfo = record

a: array [0..15] of Byte;

Reserv: Byte; {Признак версий 4.х и выше} b: array [17..27] of Byte;

Reservl: Word end;

var

R: Registers;

P: PDrvInfo;

begin

with R do begin

ah := $32; (Номер функции ДОС} al := 2; {Для диска С:} MSDOS(R) ;

if aloO then

WriteLn('Ошибка обращения к функции: AL = ',а1) else begin

P := ptr(ds,bx) ;

if P^.Reserv^O then

WriteLn('Версия MS-DOS 4.0 и выше') else

if P^-ReservloO then

WriteLn('Версия MS-DOS 3.x') else

WriteLn('Версия MS-DOS 2.x') end end end.

Поскольку функция $32 может не работать в других версиях ДОС, ею следует пользоваться с осторожностью1. В описываемом в п.3.3 модуле F_Disk реализованы приблизительно такие же функции, но с использованием только документированных возможностей MS-DOS. Эти возможности реализуются так называемым общим вызовом IOCTL (Input/Output ConTroL — управление вводом/выводом). IOCTL представляет собой соглашение об интерфейсе (способе обмена данными) между ДОС и

' На моем ПК используется MS-DOS 6.20. Мне не удалось получить информацию о диске С помощью функции $32.