Ich habe einige Disketten-Images (originale DOS 6.22- und FreeDOS 1.44 MB-Bootdisketten) mit dem dd
Befehl * nix erstellt, die in einer virtuellen Umgebung problemlos funktionieren.
Jetzt möchte ich die Struktur dieser Dateien verstehen.
Soweit ich weiß, hat eine 1,44 MB-Diskette 80 Spuren , jede Spur hat 18 Sektoren und jeder Sektor besteht aus 512 Bytes . Wenn ich das multipliziere, habe ich ungefähr 0,7 MB, was genau der Größe einer der beiden Seiten entspricht .
Die Position von Spur 0 Sektor 2 Kopf 2 ist 9728 (oder 0x2600) - dies ist der erste Sektor, den der DOS 6.22-Bootloader von der Festplatte abruft. Aber wie berechnet sich das?
Wie komme ich zu diesen Werten? Ich habe einen Emulator verwendet, um den Bootloader zu durchlaufen. Der erste Diskettenzugriff erfolgt durch Aufrufen des Interrupts 013h mit AH = 2 (Lesen von Diskette), AL = 1 (Lesen eines Sektors), CH = 0 (Lesen von Spur 0), CL = 2 (Lesen von Sektor 2) und DH = 1 (Kopf 1 verwenden = zweite Seite verwenden). Dieser Aufruf veranlasst den Emulator, die Bytes ab Position 9728 zu laden.
Jeder Registerwert mit Ausnahme der Sektornummer (die 1-basiert ist) ist 0-basiert.
Danke im Voraus!
quelle
0x2600
aus den übergebenen Registerwerten (AH, AL, CH, CL, DH) berechnet wird?Antworten:
Die Antwort habe ich selbst gefunden. Die Datei ist im LBA- Format aufgebaut, das sich leicht aus den erhaltenen CHS- Werten berechnen lässt :
quelle