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 {Главная программа}