Startseite ¦  was ist neu ¦  programmier tips ¦  indy artikel ¦  intraweb artikel ¦  informationen ¦  links ¦  interviews ¦  sonstiges
kylix ¦  tutorials ¦  online shop ¦  fotos ¦  Add&Win Gewinnspiel


Willkommen Gast. Bitte einloggen oder registrieren.
21.05.2012, 12:29:02
Übersicht Hilfe Suche Einloggen Registrieren

+  SwissDelphiCenter Forum
|-+  German Forums
| |-+  Allgemeines Forum
| | |-+  Disketten_E/A direkt via BIOS ?
« vorheriges nächstes »
Seiten: [1] Drucken
Autor Thema: Disketten_E/A direkt via BIOS ?  (Gelesen 1171 mal)
delph5
Jr. Member
**
Offline 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 !

.
Gespeichert
Seiten: [1] Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS