Einzelnen Beitrag anzeigen

FProg

Registriert seit: 27. Dez 2003
Ort: Gera
3 Beiträge
 
Delphi 5 Standard
 
#1

Sektoren von der Festplatte lesen

  Alt 27. Mär 2005, 20:29
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
Felix Neumann
  Mit Zitat antworten Zitat