delph5
Jr. Member
 
Offline
Beiträge: 74

|
 |
« am: 22.03.2002, 16:32:36 » |
|
121 Disketten_E/A direkt via BIOS ?
1) Situation: Ein Haufen Disketten voll mit Daten soll archiviert werden mit einem Programm, welches beanstandet, daß die sog. DatenTrägerSerien-Nummer = 0 ist.
Kommt daher, daß viele Disketten derart vor-formatiert geliefert und beschrieben wurden ohne eigene Formatierung, welche die SerienNummer automatisch gesetzt hätte, bei der Gelegenheit.
WinAPI liefert zwar Routinen zum Lesen dieser Nummer, aber (soweit bekannt) nichts zum Setzen dieser Nummer. Vermutlich ist es garnicht so schwer, den Job direkt per BIOS-Aufruf zu erledigen.(?)
[FONT COLOR="red"]2) Frage:[/FONT] Wer kennt sich mit Assembler und BIOS-Disk-Operationen etwas besser aus als ich ?
3) Eigene Tests: Um die Sache überschaubar zu halten, wurde experimentiert mit Laufwerk Nr.0 = A:, mit einer SektorGröße = 512, mit dem aller-ersten Sektor Nr.0, mit einem SpeicherBereich vom Typ ARRAY OF DWORD, weil die Serien-Nummer irgendwo im hinteren Bereich des ersten Sektors ab-gelegt ist. (Das wird sich finden.)
Im Internet fand sich eine an-gejahrte Assembler-Routine dafür, wie man per INT 13H das BIOS dafür einsetzen kann. Dabei traten zwei Probleme auf, wo mir WIN- und Assembler-Kenntnisse fehlen, um die Fehler-Meldungen richtig zu deuten:
- Erstens die Übergabe der SpeicherAdresse zur Aufnahme eines Sektors (muß man den kleinen Umweg über den Pointer p gehen ?)
- zweitens die WINDOWS-FehlerMeldung bei Ausführung der AsmCodeZeile INT 13H.
Vielleicht ist einer der Experten mal so nett und korrigiert den folgenden Code:
<PRE>
procedure FloppySektorNr0LesenByBIOS; var Buf : array[0..127] of DWord; // = 1 DiskettenSektor = 512 Bytes P : Pointer; begin FillChar( Buf, SizeOf( Buf ), 0 ); P := @Buf; asm // mov BX, P // Anfang des SpeicherBereichs, DELPHI-Compiler-Fehler mov EBX, P // Anfang des SpeicherBereichs
mov DL, 0 // Lfwrk A: mov DH, 0 // Seite 0 der Floppy mov CH, 0 // Spur 0 mov CL, 0 // Sektor 0 mov AL, 1 // Anzahl der zu lesenden Sektoren mov AH, 2 // "Lies_Floppy!" int 13H // BIOS-Routine, von WIN quittiert mit VxD-FehlerMeldung end; end;
</PRE>
Danke für alle / "any" Tips !
.
|