programmierproglem

djtechno

Neuling
Thread Starter
Mitglied seit
02.08.2003
Beiträge
57
Ort
beutelsbach
programmierproglem

folgendes: hatte an meinem 150er pentioum pc vor 2 jahren die partitionstabbele gekiltl, heute hab ich mich dann mal ans wiederherstellen egsetzt

habe erst das programm scrhpart.pas geschrieben,das die platte sektorweise lesen soll und jeden sektor,der nach einem bootsektor aussieht mit zhylinder head sektor (fuer das von ahnd wieder eintragend er partition lesten soll.

(mir ist klar,das der suchstring falsch ist, habe versehentlich den der partitionstebelle drin, da kommt halt ein apssender fuer die bootsektoren von dos bzw unix und die erweiterte aprtition rein

problem ist aber, er li4est den ersten sektor, danns tuerzt der pc ab.
wo liegt der fehler

die geänderte gfassung seekpart.pas hat dassselbve problem :(

========= scrhpart.pas ===============
{$I-}
{$G+}
{$M 4096,512,1024}
program scrhpart;

{
INT 13 - DISK - READ SECTOR(S) INTO MEMORY
AH = 02h
AL = number of sectors to read (must be nonzero)
CH = low eight bits of cylinder number
CL = sector number 1-63 (bits 0-5)
high two bits of cylinder (bits 6-7, hard disk only)
DH = head number
DL = drive number (bit 7 set for hard disk)
ES:BX -> data buffer
Return: CF set on error
if AH = 11h (corrected ECC error), AL = burst length
CF clear if successful
AH = status (see #0140)
AL = number of sectors transferred
((20f-21f 0 "Ung�ltige partiti"))
}
uses dos;
const srchstring='Ung�ltige Partiti';
var mov:registers;sec:array[1..512] of char;sector,cyllow,cdat:byte;er:word;

procedure examine;
var counter:word;ste:string;
begin
counter:=$110;
ste:='';
repeat
ste:=ste+sec[counter];
until counter=$120;
if ste=srchstring then begin
write('found partition at sector: ');
write(sector);
write(' zhilinder: ');
write(cyllow+64*cdat);
write(' kopf: ');
write(mov.dx div 256);
writeln(' gefunden!');
end;
end;


begin
writeln('suche bootsektoren (ms-dos/windows 95)');
mov.cx:=0;
mov.dx:=$80;
sector:=0;
cyllow:=0;
cdat:=0;
repeat
repeat
er:=mov.dx;
mov.es:=seg(sec);
mov.bx:=ofs(sec);
mov.ax:=$201;
intr($13,mov);
examine;
sector:=(sector+1) mod 64;
if sector=0 then cyllow:=cyllow+1;
if cyllow=0 then if sector=0 then cdat:=(cdat+1) mod 4;
mov.cx:=sector+256*cyllow+64*cdat;
if cyllow=0 then if sector=0 then if cdat=0 then er:=er+256;
mov.dx:=er;
if port[$60]=1 then halt;
until mov.cx=$FFFF;
until mov.dx=$FF80;
writeln('suchungsvorgang ist beendet.');
end.

============== seekpart.pas =======================

{$I-}
{$G+}
{$M 4096,512,1024}
program seekpart;

{
INT 13 - DISK - READ SECTOR(S) INTO MEMORY
AH = 02h
AL = number of sectors to read (must be nonzero)
CH = low eight bits of cylinder number
CL = sector number 1-63 (bits 0-5)
high two bits of cylinder (bits 6-7, hard disk only)
DH = head number
DL = drive number (bit 7 set for hard disk)
ES:BX -> data buffer
Return: CF set on error
if AH = 11h (corrected ECC error), AL = burst length
CF clear if successful
AH = status (see #0140)
AL = number of sectors transferred
((20f-21f 0 "Ung�ltige partiti"))
}
uses dos;
const srchstring='Ung�ltige Partiti';
var mov:registers;sec:string absolute $9000:$0;sector,cyllow,cdat:byte;er:word;

procedure examine;
var counter:word;ste:string;
begin
counter:=$110;
ste:='';
repeat
ste:=ste+sec[counter];
until counter=$120;
if ste=srchstring then begin
write('found partition at sector: ');
write(sector);
write(' zhilinder: ');
write(cyllow+64*cdat);
write(' kopf: ');
write(mov.dx div 256);
writeln(' gefunden!');
end;
end;


begin
writeln('suche bootsektoren (ms-dos/windows 95)');
mov.cx:=0;
mov.dx:=$80;
sector:=1;
cyllow:=0;
cdat:=0;
repeat
repeat
er:=mov.dx;
mov.es:=$9000;
mov.bx:=$0;
mov.ax:=$201;
intr($13,mov);
if paramstr(1)='/debug' then write('.');
examine;
sector:=(sector+1) mod 64;
if sector=0 then cyllow:=cyllow+1;
if cyllow=0 then if sector=0 then cdat:=(cdat+1) mod 4;
mov.cx:=sector+256*cyllow+64*cdat;
if cyllow=0 then if sector=0 then if cdat=0 then er:=er+256;
mov.dx:=er;
if sector=0 then sector:=1;
if port[$60]=1 then halt;
until mov.cx=$FFFF;
until mov.dx=$FF80;
writeln('suchungsvorgang ist beendet.');
end.

==========================================

marcus
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
häääääääää??

:confused::confused: :confused: :confused:

p.s. wie hast du des alles durchgestrichen??
 
ja frag mich ent, wieso der das alles durchstreicht :(

ich habs,der kannd as scharfe ß nicht, ich änders mal

ah, nem,da war ein kleiner-als zeichen drin :(
 
Zuletzt bearbeitet:
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh