Hi,
ich bin gerade dabei mich mit etwas... naja, "tiefgreifenderen" Dingen zu beschäftigen
und versuche, Sektoren direkt von der Festplatte zu lesen. Leider habe ich dazu nur etwas eingestaubten
TP-Code gefunden, den ich nicht in Delphi übersetzt bekomme
Ich kann ihn ja trotzdem mal posten.
Delphi-Quellcode:
function bios_ReadAbsSector(drv, head: byte; cyl: word; sector: byte; var
buffer): byte;
var regs: TRegisters;
begin
regs.ah:=02;
regs.dl:=drv;
regs.dh:=head;
regs.ch:=cyl and $ff;
regs.cl:=(sector and $3f) or ((cyl and $300) shr 2);
regs.al:=1;
regs.es:=seg(buffer);
regs.bx:=ofs(buffer);
intr($13,regs);
if (regs.flags and $01)=0 then begin
bios_ReadAbsSector:=0;
end else begin
bios_ReadAbsSector:=regs.ah;
end;
end;
Gefunden auf http://www.elists.org/pipermail/delp...er/016753.html
Es werden also die unterschiedlichsten Register belegt. Theoretisch ließe sich ja dieser Quelltext ja mit Delphi umsetzen, nur hängt es bei mir an zwei Stellen...
- Wie bekomme ich die Befehle seg() und ofs() umgesetzt?
- Wie ermittle ich die Werte, die hier so schön in regs.flags enthalten sind?
Hier nochmal der Delphi-Quelltext, soweit ich ihn habe:
Delphi-Quellcode:
function bios_ReadAbsSector(drv, head: byte; cyl: word; sector: byte;
var
buffer): byte;
var b, bCyl: byte;
begin
bCyl := cyl
and $ff;
b := (sector
and $3f)
or ((cyl
and $300)
shr 2);
asm
mov ah, 02
mov
dl, drv
mov dh, head
mov ch, bCyl
mov cl, b
mov al, 1
mov es,
{???}
mov bx,
{???}
int 19
{???}
end;
{???}
end;
Vielen dank schonmal!
FProg