Копирование дискет

  • Автор темы IDeonisI
  • Дата начала
I

IDeonisI

#1
Всем привет! Как сделать копию пяти дюймовой дискеты на ПК, при условии, что файловая система неизвестна (отличная от стандартных) и то, что там написано тоже неизвестно?
 
S

sab0tage

#2
Легко, только тебе что нужно? Программа, которая это делает (DiskDuplicate) или код? Писал лет 6 назад на паскале-асме. На тот момент альтернатив было немеряно. (Посмотри сайты типа 386.ru)
 
I

IDeonisI

#3
Спасибо за совет sab0tage! На данный момент нужна программа, но былоб интересно
разобраться в коде. Какие WinIP функции можно использовать для обращения к конкретным байтам информации на дискете, вне зависимости от файловой системы?
 
S

sab0tage

#4
На WinApi не получиться, посмотри int25h/26h (Прямая дисковая операция чтения/записи)
Я использовал Int13h:
Код:
{ op=$02 to read / op=$03 to write }
function asmRWSectors(Drive,Track,Side,SSect:byte; var Buffer; op:byte):byte;
var
Regs : registers;
Tries: byte;
Done : boolean;
Result:byte;
cx_:word;
begin
Result:=0;
Tries:=0;
Done:=False;
repeat
cx_:=Track shl 8 + SSect;

asm
mov AH,op;
mov AL,$01; { Number of sectors to read }
mov CX,cx_; { track number and starting sector }
mov DH,Side;
mov DL,Drive;
{DX:=Side shl 8 + Drive;}
lds BX,Buffer;		 { point to data buffer }
Int 13h;
mov Result,AH;
end;

if Result<>0 then
begin
Inc(Tries);
if Tries>2 then Exit
else
asm
mov AX,$0000;
mov DL,Drive;
Int 13h;
end;
end
else Done:=True;
until Done;
asmRWSectors:=Result;
end;
Есть откомпилированная-консольная версия, но я делал ее для (40-Tracks, 9-sec/tra = 360Kb и 80-Tracks, 15Sec/tra = 1200Kb. это по 5ти дюймовым.)

Удачи.
 
I

IDeonisI

#5
Спасибо! Попробую сделать так, как ты говоришь.