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;

{Восстанавливаем содержимое дорожки и заново проверяем секторы}