MSDOS(Reg) ;
ah :=• $OE;
dl := al;
MSDOS(Reg) ;
Max := al end;
GetMaxDrv := Max end; {GetMaxDrv} /———————————.——-J;
function GetSector(Disk: Byte; Cluster: Word): Word;
{Преобразует номер кластера в номер сектора} var
DI: TDisk;
begin
GetDiskInfo(Disk,DI) ;
if not Disk Error then with DI do begin
Disk_Error := (Cluster > MaxClus) or (Cluster < 2);
if not Disk_Error then
GetSector := (Cluster-2)*ClusSize +DataLock end;
if Disk_Error then
GetSector := $FFFF end; {GetSector} ^————————————————;
Function PackCylSec(Cyl,Sec: Word): Word;
{Упаковывает цилиндр и сектор в одно слово для прерывания $13}
begin
PackCylSec := Sec+(Cyl and $300) shr 2+(Cyl shi 8) end; {CodeCylSec} ^————————————————;
Procedure ReadWriteSector(Disk: Byte;
Sec: Longint; NSec: Word; var Buf; Op: Byte);
(Читает или записывает сектор (секторы):
Op = 0 - читать; 1 - записать (малый диск)
= 2 - читать; 3 - записать (большой диск)} type
TBufO "2 record
StartSec: Longint;
Sees: Word;
AdrBuf: Pointer end;
var
BufO: TBufO-S: Word;
0: Word;
begin
if Op>l taen with BufO do begin
{Готовим ссылочную стр'^туру для большого диска} AdrBuf := Ptr(Seg(Buf) ,0?s (Buf) ) ;
StartSec := Sec;
Sees := NSec;
S := Seg(BufO) ;
0 := Ofs(BufO) ;
asm
mov CX,$FFFF nio"v й.Ь f ^ly