[OSASK 5669] 拡張汎用BIOS構想.

  こんにちは、川合です。このメールは、僕が時々やる、思いつきのメ
モみたいなものです。

---

  最近毎日少しずつ、「すべてのデバイスからのブートを!」というこ
とを考えています。これはつまり、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/



ML番号でジャンプ
ML単語検索