Ich habe kürzlich einige Bootstrap-Code untersucht, der für die Verwendung mit einem Diskettenlaufwerk gedacht war. Mein Ziel ist es, das Programm so zu modifizieren, dass es meinen USB-Stick benutzt. Jetzt sehe ich, wie die INT 13H-Funktion mit dem Diskettenlaufwerk verwendet wurde, aber ich denke, meine Frage ist, wie wird sich die Kommunikation mit dem USB-Laufwerk unterscheiden?Wie führe ich Low-Level-IO mit einem USB-Flash-Laufwerk unter dem BIOS (im Vergleich zu einer Diskette)?
Zum Beispiel, hier ist ein Ausschnitt aus der Floppy-Code (GNU Assembler):
movb $0x00,%dl /* select 1st floppy */
/* later */
movw sec,%cx /* get sector number */
movw head,%dx /* get head number */
movw $0x0201,%ax /* read 1 sector */
int $0x13
Nun habe ich gelesen, dass 0x80 in% dl bewegt, wird die erste Festplatte im BIOS auswählen. In meinem speziellen BIOS kann ich die Laufwerksreihenfolge ändern, die ein USB-Laufwerk enthalten würde. Ich bin mir ziemlich sicher, dass dies BIOS-abhängig wird, aber ich dachte, dass die im BIOS aufgelistete Reihenfolge dem Wert entsprechen könnte, den ich in% dl verschiebe. Ich muss etwas Dokumentation aufspüren ...
Ich bin wirklich nicht vertraut mit der Arbeit mit Block-Geräten, wie es ist, kann mir jemand auf einen guten Ort zeigen, um mehr zu lernen?
Danke!
OK, mit einer Art von revisited sah ich einen Code (Arbeitscode), der explizit dl = 0x00 lädt, obwohl es einen USB-Stick verwendet. Jetzt denke ich, dass dies BIOS-abhängiges Verhalten ist, vielleicht erlaubt es Ihnen ein anderes BIOS nicht, ein Flash-Laufwerk als eine Diskette zu behandeln. –
Es ist möglich und bequem, ein FAT12-Disketten-Image von einem USB-Flash-Laufwerk auf einem beliebigen BIOS/einer beliebigen Version, die von einem USB-Flash-Laufwerk startet, zu booten und auszuführen. Der dl-Wert muss verwendet werden. Selbst wenn dl = 80h (was bei allen späten Modell-BIOS/Versionen der Fall sein wird), kann die Festplatten-Geometrie, die von Int 13h neu abgestimmt wurde, ah = 8 verwendet werden. Das 1,44-MB-Format, obwohl restriktiv, ist für den Anfang und ist universell. –