[PR]子育てママさんへ:3年毎に15万円うけとれる保険?

ディスク読み込みの方法がわかりましたので、 マスタブートローダの改良にうつります。
本格的なローダの作成は後で行うことにして、 今回はファイルシステムのことは考えずに、 2番目のセクタ、つまり論理セクタ1(C,H,S=0,0,2)を 07E00h-07FFFh に読み込むことにします。

まずは、セクタ読み込み関数を書くことにします。
ディスクのセクタ指定方法ですが、CHS ではプログラミング上面倒ですので、 0 からはじまる論理セクタで指定することにします。
指定された論理セクタを 1 セクタ分だけ読みこむ関数は次の通りです。

次のコードは、 hello, world を論理セクタ 1 におき、 それを実行するマスタブートローダです。
この例では hello,world を表示するだけですが、ここで OS のブートコードを読み込めば、OS が起動できることになります。

今回は読み込み先としてアドレス 07E00h-07FFFh に読み込みました。 マスタブートローダが起動した段階で、 リアルモードで扱える 1M バイトのメモリアドレスに アクセスすることができます。
このとき、ほとんどのメモリは使われておらず 自由に使うことができます。
機種によってメモリの内容は違いますが、その典型的な例を次の表の通りです。

アドレス内容
00000h - 003FFhINT 00h〜INT FFhの割り込みハンドラ
00400h - 005FFhBIOS のワークエリア 1
00600h - 9FBFFh通常は空きメモリ(メモリサイズはINT 12hで取得)
9FC00h - 9FFFFhBIOS のワークエリア 2
A0000h - BFFFFhビデオメモリ
C0000h - CFFFFhビデオカードの BIOS
D0000h - EFFFFhBIOS など
F0000h - FFFFFhマザーボードの BIOS

マスタブートローダが読み込まれるメモリアドレスは 07C00h-07DFFh です。
BIOS ワークエリア 2 を除いた 空きメモリのサイズは INT 12h で取得できます。
現在使われている PC では 639KB が返されることが多いようです。


2005-08-27: ChangeLog作成 (最終更新)
Copyright (C) 2005 hoverkid, all rights reserved.
[PR]看護師の好条件求人なら:看護師の転職完全サポート!安心お任せ♪