end;

{Элемент буфера форматирования} F_Buf = record

Track: Byte; {Номер дорожки)

Head : Byte; {Номер головки}

Sect : Byte; {Номер сектора}

Size : Byte {Код размера} end;

var

Old: PDBT_Type; {Указатель на исходную ТПД) /—-___————___——;

Procedure Intrl3(var R: registers; S: String);

[Обращается к прерыванию 13 и анализирует ошибку (CF=1 - признак ошибки). Если ошибка обнаружена, печатает строку S и завершает работу программы} begin

Intr($13,R) ;

if R. Flags and FCarryoO then

if R.ah о б then {Игнорируем ошибку от смены типа дискеты} begin

WriteLn(S) ;

SetIntVec($lE,01d); {Восстанавливаем старую ТПД} Halt end end; {Intrl3} ^_____-__————___;

Function AccessTime(DSK,TRK: Byte): Real;

{Измеряет время доступа к дорожке и возвращает его своим результатом (в секундах) } var

Е: array [1..9*512] of Byte;

t,k: Longint;

R: registers;

begin

t :- MemL[0:$046C] ;

while t=MemL[0:$046C] do;

for k :- 1 to 10 do with R do begin

ah :- 2;

al := 9;

ch := TRK;

cl :- 1;

dh := 0;

dl := DSK;

es :- seg (E) ;

bx := ofs(E) ;

Intrl3(R,'Error') end;

AccessTime :- (MemL[0:$O46C]-t-1)*0.055

end;

/——————————;

var

B: array [1..9] of F Buf; {Буфер для форматирования}

k,N: Integer; {Счетчик цикла}

R: registers; {Регистры}

DBT: PDBT_Type; {Указатель на новую ТПД}

С,О: array [1..1024] of Byte; {Буферы чтения/записи)

Size: Word; {Длина сектора}

Info: TDisk;

begin {Главная программа}