こんにちは、川合です。このメールは、僕が時々やる、思いつきのメ モみたいなものです。 --- 最近毎日少しずつ、「すべてのデバイスからのブートを!」というこ とを考えています。これはつまり、PCMCIAにつけられたCFからのブート を可能にすることが発端なのですが、いろいろ考えているうちに構想が 大きくなっています。 ここまでのいきさつについては、ぼやきの「OSASKノート」の2003.01 27追記分を読んでください。 <基本原理> ATAやFDなど、普通にブートできるメディアのブートセクタが以下の ような動作をするプログラムを起動する。 1.後に述べる「拡張汎用BIOS」をロードして提供 2.非常に多様な設定にしたがって、それぞれのデバイスがブート可 能であるかどうかをチェック 3.もし対応するシグネチャが見付かれば、そのデバイスから起動 4.一つも見付からなければ、もともとの起動デバイスに書いてあっ たブートセクタのバックアップを読み込んで、何事もなかったか のように動作を再開(これでWindowsなどのもとあったOSを起動 できる) このような仕組みによって、M/Bが対応していなくてもCFやSCSIや全 てのATA/ATAPIデバイスやUSBデバイスからの起動が可能になります。 当然ですが、この方法でたとえばCFブートした場合、BIOSのINT13で はCFにアクセスできません(INT13のベクタを書き換える方法も考えま したが、そのプログラムをどこに置くが問題です)。ということで、呼 び出すための新しいファンクションを作ります。このファンクションを 知っているということは、つまりこの拡張汎用BIOSが使っているメモリ 領域を無断で使ってはいけないと知っていることになるわけで、問題は 解決します。 この方法のために、従来のOSがそのままブート可能になるわけではあ りません(もっともINT13のベクタを書き換えるバージョンも提供した いとは思います、ハイメモリにプログラムをおいておくので、ハイメモ リを使わないOSなら騙せるかもしれません)。 拡張ファンクションの呼び出しは、全てfar-callです。 call 0xffff:0x0010 , call 0xffff:0x0014 , ... です。この手法のために、286以降のみの対応です。 こうやって新しいファンクションを作るということになれば、実は、 AT互換機だけはなく、TOWNSやNEC98もカバーできるじゃん、ということ になります。拡張汎用BIOSは原則としてブロックアクセスデバイス(= セクタ単位でランダムアクセスできるデバイス)へのサービスを統一的 にサポートするものですが、さらにキーボードやグラフィック(含むテ キスト表示)、マウスなどのサービスを提供すれば、ブートするOSがこ のサービスをそのまま使う限りにおいて、同じOSで3機種に対応できる ことになります。 <拡張汎用BIOSの基本ファンクション> ・バージョン情報・機種情報取得 (0x0010) ・デバイスステータスの取得 (0x0014) ・リードアクセス (0x0018) ・ライトアクセス (0x001c) ・デバイス状態変化チェック (0x0020) ・フォーマット (0x002) ・ベリファイ (0x0028) ・予備 (0x002c) 原則として、アクセスは全て64bit-LBAアクセスで、ブロックサイズ は512バイト固定です(セクタサイズがこれに合わなければ、1024バイ トセクタを2つにわけるなどの細工をします)。またリードもライトも 24bitでブロック数を指定できます。 このBIOSでは、起動デバイスによってドライブ番号が変わるのでは なく、起動デバイスは0というエイリアス番号が与えられ、それ以外は 起動デバイスによらず固定です。ハード的にデバイスを追加しても、 それによって番号の対応が変わったりはしません。それはBIOSの設定 メニューでいじれます。 パーティションの扱いもBIOSから完全に別デバイスに見えるように なったドライブ番号と、それとも普通のBIOSのように単一のドライブ として見えるドライブ番号があります。 複数のデバイスに分かれたパーティション群を単一のドライブに見 せる機能も有します(簡単なアドレス変換ですので)。 以上のような情報は起動するOSからも容易に取得でき、拡張BIOSの 設定と食い違わないようにできます。 この8ファンクションのほかにもファンクションを増やすことはでき ます。増えたファンクションについてはバージョン情報で取得できるよ うにしたいです。・・・文字表示ファンクションと文字入力ファンクシ ョンを増やせば、3機種共通OSを作れますが、まあ、これらのファンク ションがなくても、機種情報取得で機種が分かりますので、3機種対応 はどっちにしろできます。 このシステムができたら、OSASKはすぐに対応版を作ります。また、 FreeDOSくらいなら自力で移植すると思います。他のOSについては、や りたい人がやるっていうことにしましょう。このBIOSに対応することで あらゆるデバイスから起動可能になる上に、どのデバイスから起動して もドライブ番号が固定なので、便利だろうと思います。 <補足> なお僕の構想では、この拡張汎用BIOSを設定するためのメニュープロ グラムは、別プログラムで供給されます。つまり、あるデバイスからブ ートするとメニューが出てくる、みたいな感じです。 また、それぞれのブートセクタには、そのデバイスから起動するので はなく、どのデバイスから起動するかを指定させる、というコードを書 くこともできます。・・・これはどういうことかというと、HDDには5個 のパーテションがあって、FD0→HDD0a→HDD0b→HDD0dの順序で起動する ように設定していたとしましょう。このとき、FD0が入っていなければ HDD0aから起動します。これは当然です。しかしFD0にディスクがあって も、FD0から起動するのではなく、FD0に「HDD0bから起動させろ」と書 くことができるというわけです。 そもそも最小構成の汎用拡張BIOSはキー入力や画面表示プログラムを 持たず(=その分起動を速くしたい)、一時的に起動順序を変える方法 がないのです。もちろんメニューブートを入れてキー入力で一時的に起 動順序を変えることはできます。・・・しかしたいてい第一ブートデバ イスはリムーバブルなドライブを指定すると思うのですが、リムーバブ ルデバイスは一般に読み込みが遅く、いらいらするでしょう。メニュー プログラムがたとえ小さくても、速いHDDから読んでほしいと思うかも しれません。ということで、第一ブートデバイスを鍵的に使って、さっ とメニューブートしたり、他のOSのブートをできるようにもしたい、と いうわけです。 --- さて、問題はこのシステムをいつ作るか、ですね。まあ2ヶ月くらい でCFとかのサポートのないAT版のベースバージョンはできそうです。半 年くらいかければ、TOWNS版やNEC98版もできてLibretto50とThinkPad76 0XLのPCMCIAポートのCFくらいもサポートできて、OSASKとFreeDOSの対 応も完了できると思います。 まあこの辺はみなさんの要望を見ながら考えることにします。 それでは。 -- 川合 秀実(KAWAI Hidemi) OSASK計画代表 / システム設計開発担当 E-mail:kawai !Atmark! imasy.org Homepage http://www.imasy.org/~kawai/