Тексты программ 329

ReadSector (Disk, FATLoc]<+k*n,n,Fat) ;

if not Disk_Error then begin

if FAT 16 then

Fat.w[j] := Item else begin

if odd(Cluster) then

Item :- Item ehl 4 +Fat.b[j] and $F else

Item := Item+(Fat.b[j+l] and$FO) shi 12;

Fat.b[j] := Lo(Item) ;

Fat.b[j+l] Hi(Item) end;

if not FAT16 then

begin {Проверяем "хвост" FAT} k := k*n; {k - смещение сектора} while k+n > FatSize do dec(n) end;

inc(FATLock,k); (FATLock - номер сектора в FAT} {Записываем изменение в FatCnt копий FAT) for k := 0 to pred(FatCnt) do

WriteSectortDisk,FATLock+k*FatSize,n,Fat) end end end end; {SetFATItem} ^——————————————;

Procedure SetMasterBoot(var Buf);

{Записывает в главный загрузочный сектор содержимое Buff begin

with Reg do begin

ah := 3; {Операция записи}

al := 1; (Кол-во секторов}

dl :- $80; {1-й жесткий диск)

dh := 0; {Головка 01

сх := 1; (1-й сектор 0-й дорожки}

es := seg(Buf) ;

bx := ofs (Buf) ;

Intr($13, Reg);

Disk_Error := (Flags and FCarry о 0);

if Disk_Error then

Disk_Status :~ ah else

Disk_Status := 0 end end; {SetMasterBoot} ^-__—————————————;

Procedure UnpackCylSec(CSec: Word; var Cyl,Sec: Word);

{Декодирует цилиндр и сектор для прерывания $13} begin

Cyl := (CSec and 192) shi 2+CSec she 8;

Sec := CSec and 63 end; {RecodeCylSec} /-——————————————;

Procedure WriteSector(Disk: Byte; Sec: Longint; NSec: Word; var Buf);

{Записывает сектор {секторы) на указанный диск) var