ah := 2; {Код операции чтения}
al := 2*NS; {Количество секторов чтения}
ch := k; {Номер дорожки}
с1 := 1; {Начать с 1-го сектора)
dh := 0; {Начать с 0-й поверхности}
dl := DSK; {Номер диска}
es := seg(pл) ;
bx := ofs (p") ;
Intr($13,R); {Читаем всю дорожку} if (Flags and FCarry)<>0 then
begin {Обнаружена сбойная дорожка} {Читаем дорожку по секторам}
for i := 0 to I do {2 поверхности} for j := 1 to MS do begin
ah := 2; {Код операции чтения}
al := 1; {Читаем один сектор}
ch := k; {Номер дорожки}
с1 := j; {Номер сектора}
dh := i; {Номер головки}
dl := DSK; {Номер диска}
nn := i*NS+pred(j) ;
es := seg{p^[nn*512}) ;
bx := seg(P/\[nn*512]) ;
Intr($13,R) {Читаем сектор} end;
{Форматируем дорожку} for i := 0 to 1 do
begin {Цикл по головкам} for j := 1 to NS do with BF[j] do begin {Готовим буфер} Track:= k;
Sect :° j;
Head := i;
Size := OlcT.SizeCode end;
ah =5; {Операция форматирования} al = NS; {Количество секторов на дорожке} ch == k; {Номер дорожки} с1 =1; {Начать с 1-го сектора} dh = i; {Номер головки} dl = DSK; {Номер диска} es = seg(BF) ;
bx = ofs(BF) ;
Intr($13,R); {Форматируем поверхность} end;
{Восстанавливаем содержимое дорожки и заново проверяем секторы}