Тексты программ 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