Работа с диском на физическом уровне 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.