4

私は自分用にブートストラップとカーネルを書いています。ブートストラップとカーネルの両方が CD-R に書き込まれ、CD-live として機能します。これは Linux CD-Live などではなく、完全に私自身のブートローダーとカーネルです。他のブーローダー (GRUB など) は使いたくないので、使用を勧めないでください。

ここに私の質問があります: 私のブートローダ ASM コードで、カーネルとカーネル エントリを(ハードディスクやフロッピー ディスクからではなく) CD-ROM からRAM にロードしたいと思います。 CD-ROM (セクター番号)。私が知る限り、ドライブから RAM にセクターを読み取る int 0x13, AH = 02h を使用する必要があります。この割り込みサービスを使用するには、次のようにいくつかのレジスタを設定する必要があります。 パラメータ: AH 02h AL Sectors To Read Count CX Track + Sector / 備考参照 DH Head DL Drive ES:BX Buffer Address Pointer

私の問題は DL と DH に関するものです。最初のハード ドライブを読み取るために、80h に設定するか、フロッピー ディスクの場合は 00h に設定します。しかし、CD-ROM から読み取りたいのですが、DH と DL にどの値を使用すればよいかわかりません。

CD-ROM からRAMにセクターのカップルを読み取るために、それは正しい割り込み (int 0x13) ですか? はいの場合、DH と DL にどのような値を設定する必要がありますか。

よろしく、プーリア。

4

1 に答える 1

9

BIOS が CD からブート セクタをロードするには、 "El Torito"標準 を使用して CD をブート可能にする必要があります。

それを使用すると、2 つのオプションがあります
。エミュレーション - BIOS はフロッピーまたはハード ドライブをエミュレートし、デバイス 00 またはデバイス 80 のいずれかを使用して INT13 呼び出しを介してカーネルを読み取ることができます
。デバイスはエミュレートせず、INT13 ExtendedRead 関数を使用して CD から直接読み取ることができます。

これがどのように行われるかを確認するには、Linux「ISOLINUX」ローダー - ISOLINUX.ASMを見てください。

質問のより具体的な出発点を提供するには、El Torito 仕様、セクション 5.3:

Once the system jumps to segment:0, the program can retrieve its boot
information by issuing INT 13, Function 4B, AL=01.  After the boot process
has been initiated the INT 13 Extensions (functions 41-48) will access the
CD using 800 byte sectors and the LBA address provided to INT 13 is an
absolute sector number. This gives any program running in no emulation mode
the ability to locate the boot catalog, and any other information on the
CD, without providing a device driver.
于 2009-05-13T16:09:40.173 に答える