6

私は最近、フロッピー ドライブで使用するためのブートストラップ コードを研究しています。私の目標は、私の USB フラッシュ ドライブを使用するようにプログラムを変更することです。これで、INT 13H 機能がフロッピー デバイスでどのように使用されたかがわかりますが、私の質問は、USB ドライブとの通信はどのように異なるのでしょうか?

たとえば、フロッピー コード (GNU アセンブラ) の一部を次に示します。

    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

0x80 を %dl に移動すると、BIOS で最初の HDD が選択されることを確認しました。私の特定の BIOS では、USB ドライブを含むドライブの順序を変更できます。これが BIOS に依存するようになっていることは確かですが、BIOS にリストされている順序は、%dl に移動する値に対応している可能性があると考えていました。いくつかのドキュメントを追跡する必要があります...

ブロックデバイスをそのまま使用することに本当に慣れていません。誰かがもっと学び始めるのに適した場所を教えてもらえますか?

ありがとう!

4

3 に答える 3

5

簡単な答えは、BIOS が USB フラッシュ ドライブから起動できる場合、フロッピー ディスク/ハード ドライブへのアクセスに対して同じ BIOS 機能を使用できるということです。

幸いなことに、USB フラッシュ ドライブがフロッピー ディスク エミュレーションで起動されたか、ハード ドライブ エミュレーションで起動されたかに関係なく、同じブート セクタ コードで USB フラッシュ ドライブ上のフロッピー ディスク イメージにアクセスできます。dl=80h の場合 (ハード ドライブ エミュレーション)

GET DRIVE PARAMETERS
int 13h, ah=8
戻り値:
ch=最大セクタ番号 (トラックあたりのセクタ数と同じ)
dh=最大ヘッド番号 (ヘッドの数を取得するには 1 を追加するだけです)

この返された情報は、エミュレートされたデバイスのジオメトリを記述します (dl=0 の場合、標準のフロッピー ディスク ジオメトリ - トラックあたり 18 セクタと 2 ヘッド)。これは、以下に必要なシリンダー ヘッド セクター情報を計算するために使用できます。

READ SECTOR(S)
int 13h, ah=2

WRITE SECTOR(S)
int 13h, ah=3

Ralf Brown の割り込みリストを参照してください- int 13h

ここで私の投稿を参照してください: USB Booting Secrets

于 2010-08-25T01:08:58.910 に答える
3

BIOS が USB デバイスをハード ドライブとして「認識」すると、それに番号が割り当てられます。割り当てられた番号は、最初のハード ドライブの場合は 0x80、2 番目の場合は 0x81 などです。したがって、インストールされている HDD の数に応じて、USB ドライブは 0x81 以上になります。また、BIOS で順序を変更すると、これを反映して USB ドライブ番号が変更されます。

于 2010-11-22T17:27:51.690 に答える