extipl.txt for FreeBSD/Linux

			   June 16, 1999

			takamiti@tsden.org
			 extipl@tsden.org
		http://www.tsden.org/takamiti/extipl/

==============================================================================
1.  はじめに
  1.1  Extended-IPL って何？
  1.2  Extended-IPL の制限や注意点
  1.3  著作件、再配布等について
2.  extIPL の使い方
  2.1  commands
    2.1.1  save
    2.1.2  fdtest
    2.1.3  install
    2.1.4  restore
    2.1.5  show
    2.1.6  chgboot
    2.1.7  clrboot
  2.2  device名について
3.  インストールの前に
4.  extIPL による Extended-IPL のインストールと使い方
  4.1  FD版 Extended-IPL
  4.2  Extended-IPL のインストール
  4.3  Extended-IPL の起動
  4.4  ブート対象ハードディスクの変更
  4.5  拡張 DOS 領域内からのブート
  4.6  Extended-IPL の使い方・番外編
5.  エラーコード
6.  補足
  6.1  Extended-IPL の内部構造
  6.2  option flags
==============================================================================


[1] はじめに

[1.1] Extended-IPL って何？
昔、むかし、UNIX version 7 互換の minix というシステムがありました。
OSの学習用という側面もあって 8086 でも動作し、要求するリソースも小さなもので
した。この minix で日本語を表示させようのと試みが日経mix/minix会議で進められ、
minix-V として公開されました。

この開発過程で公式版と minix-V あるいは MS-DOS との切替えブートプログラム
が必要となりました。手にしっくりとするツールがなく、必要にかられて assistIPL
というブートセレクタを作りました。このツールを update に当たり、名称を変更し
たものが "Extended-IPL" です。

本来 assistIPL は minix をハードディスクからブートさせるために作った master 
IPL なので、minix からインストールしていました。しかし、他の OS でも有用なの
でもっと手軽に使えるようにすべきとの圧力(?)に屈して、世間に広くある MS-DOS 
環境からも使えるように bcc + tasm で書き直し、インストーラを持たせて公開した
ものが最初の extIPL です。仲間内では手短に Extended-IPL を extipl と呼ぶこと
もあります。

現在、Extended-IPL は、MS-DOS を離れて以下のような環境で保守を行っています。

	*--------
	 caldera DR-DOS 7.02
	 lsic-86 3.30c 試食版			 }... 別パッケージとして用意
	 nasm 0.97 for dos
	*--------
	 FreeBSD / Linux
	 gcc (OS 付属のもの)			 }... このパッケージ
	 nasm 0.97
	*--------

この Extended-IPL には次のような特徴があります。

	(1) IBM 製 HD-IPL と完全な上位互換性を持っています。
	(2) 非アクティブパーティションから選択ブートできます。
	(3) 拡張領域(System-ID:0x05, 0x85)内からもブート可能です。
	(4) DR-DOS のパスワード機能と共存できます。
	(5) 必要ならばアクティブ領域を変更後ブートできます。
	(6) OS のローダさえ対応していれば DISK BIOS が認識する任意の HD から
	    ブートさせることができます。
	(7) HD のブートセクタを書き変えたくなければフロッピーディスクから疑似
	    的に使うことができます。
	(8) 試みとして LBA/CHS 両用のサンプルソースも添付しました。

この Extended-IPL は保守環境とは完全に独立したものです。ここでは PC-UNIX 側か
らインストールする説明に終始していますが一旦インストールしてしまえば FreeBSD/
Linux の領域を削除しようが、パーティションを切り直そうが（format すれば別）ハ
ードディスクのマスタブートセクタが壊れない限りブート対象となるハードディスクに
インストールしたすべての OS を起動させることができます。
	---------
	assistIPL のままでも差し支えないのですが、名前だけから判断されると他の
	IPL を補佐するものと勘違いされてしまうことが多いかったものですから、実
	体に添って「拡張 IPL」と改名しました。そもそも「補佐」の意味は「人間の
	仕事の "補佐"」なのですが、そうは取ってもらえない時が多いのは考え方が
	機械中心なのでしょうかね？ 　　 だとしたらとても寂しい。
	---------


[1.2] Extended-IPL の制限や注意点
Extended-IPL を使う上で、次のことに注意してください。

* DISK BIOS(int 13h)の制限はそのまま Extended-IPL の制限事項になります。
  Extended-IPL は DISK BIOS を使ってアクセスしますので、BIOS 経由で見えない部
  分にアクセスすることはできません。
* Extended-IPL は IBM 技術仕様書に従って OS のローダに制御を渡すだけです。
  実際に OS を起こすのは OS が準備しているローダの仕事になります。１台目以外
  の HD からのブート可能かどうかや、拡張領域内部からブートできるかどうかは後
  者の機能に依存しています。
* サブコマンド clrboot で全領域を非アクティブとした時に、ROM IPL が「アクティ
  ブ領域が無い」とエラー停止し、ブートできなくなることがあります。このような
  時には、一番多く使う OS の領域をアクティブにして回避してください。
  本来の仕様ではブート対象ドライブ(１台目)にはアクティブ領域がなければならな
  い事になっています。
* BIOS Setup でブート優先順を C: -> A: とした場合にはフロッピーを使ったシミュ
  レーションはできません。


[1.3] 著作件、再配布等について

(1) 著作権
本パッケージ中の ./Doc/English/*.txt は ryutaroh@tsden.org が、ソースコードや
ドキュメント内に署名がある部分はその署名者が、それ以外の部分は
takamiti@tsden.org が有します。

(2) 再配布等について
再配布は以下の条件を満たしているならば自由に行って構いません。
  1. 以下の a, b のいずれかに該当すること
     a. 再配布内容にはオリジナルの配布物から得られる情報がすべて含まれること。
     b. バイナリ形式(実行ファイルとドキュメント)に変更して再配布する場合には、
	ソースコードの所在を明確にし、希望されたならばソースコードを速やかに
	提供できるように努めてください。なお、再配布する実行ファイルは、再配
	布者が提供するソースコードから make したものと同じであること。
  2. ソース等に変更を加えたものを再配布することも可能ですが、その場合には変更
     内容を明記したドキュメントを添付してください。
  3. 著作権表示および、再配布、免責条項に変更がないこと。

(3) 改変
本パッケージに含まれるファイルの改変は著作権(所有者)表示を改変・削除しない限り
自由です。特に、添付のサンプルソースを使ってより良い IPL の作成は歓迎します。

(4) 免責
本パッケージを使用したことによって生じたあらゆる障害について、作者及び配布に
携わった人達は一切の責任を負いません。あくまでも、あなた自身の責任でお使いく
ださい。また、作者はバグの修正やアップグレードの義務を負いません。

(5) サポート
この extipl パッケージは必要があれば随時更新し、

	http://www.tsden.org/takamiti/extipl/
	ftp://ftp.tsden.org/extipl/

に公開していきます。なお、ご意見、バグレポート、改良案、などは

	extipl@tsden.org

までお願いします。できるかぎり対応致しますが、その義務は負わないものとしま
す。



[2] extIPL の使い方

extIPL  は 拡張IPL のコード自身を含んでいるインストーラで一般的な使い方は

	extipl command device-name [arg1 arg2 ....]

とします。



[2.1] commands
extipl は次のような 7 つのコマンドを受け付けます。もしそのコマンドがパラメー
タ等を必要とする場合には続く第二引数以降に与えます。第二引数以降はほとんどの
場合省略可能で、その時にはプログラム内であらかじめ設定されたものが使われます。

 (1) save device-name [file]
    現在のハードディスクのブートセクタの内容をそれに続く引数[file] で指定した
    ファイルとして保存します。このファイルの属性は Read-Only です。
	[例]
	    # extipl save wd0 /var/save/fdisk.ipl
		wd0 のブートセクタを /var/save/fdisk.ipl として保存します。

	    # extipl save wd0
		現在のブートセクタを ./master.ipl として保存します。つまり、
		保存するファイル名が省略されるとカレントディレクトリに
		master.ipl として保存します。すでに ./master.ipl が存在してい
		る場合にはエラー終了します。

 (2) fdtest device-name
    フロッピーディスクからブートさせ、ハードディスクからブートした時と同じ操作
    環境を作ります。あらかじめフォーマット済みのブランクディスクを一枚用意して
    ください。なお、FD版 Extended-IPL が書かれたフロッピーディスクはデータディ
    スクとしては使わない方が安全です。
	[例]
	    # extipl fdtest fd0
		FD版 Extended-IPL をフロッピーユニット fd0 にセットされたディ
		スクのブートセクタに書き込みます。書き込む前にディスクの確認を
		促されますので良ければ "y" キーで答えてください。なお、書き込
                むことのできるドライブはブート対象外のデバイスでも可能です。
		なお、このときに wd0 などのハードディスクを指定しても書き込ま
		れてしまい、正常動作しませんので、十分に注意してください。

 (3) install device-name
    Extended-IPL をハードディスクのブートセクタに書き込みます。この時にパーテ
    ィションテーブルの内容はそのまま引き継がれます。また、Extended-IPL を書き
    込む前に古いブートセクタの内容はファイルとして保存を強要されます。保存する
    ファイル名にパスを含むこともできます。このファイルの属性は Read-Only です。
	[例]
	    # extipl install wd0
		Extended-IPL を書き込むコマンドですが、その前に必ずブートセク
		タの保存を強制され、正常に保存されない限りインストールへは進め
		ません。保存するファイル名は
			Enter file name to save:
		のプロンプトに対して分かりやすい名称で指定してください。パスを
		含んでも構いません。もし、<Enter>キーのみの入力によってファイル
		名を省略すると ./fdiskipl.001 として暫定的に保存します。
		なお、ここでブートセクタが保存されたファイルは Read-Only に
		なります。

 (4) restore device-name file
    file で保存されているブートセクタの内容を書き戻します。このコマンドが使わ
    れると、

	C)ode:  restore ipl code only
	T)able: restore partition table only
	A)ll:   restore ipl code and partition table
	restore (c/t/a)? 

   と尋ねてきますので、'c', 't', 'a' のいずれかを指定してください。
   これらはそれぞれ次のような意味を持っています。

	C)ode :	IPL コード 446バイトのみを上書きします。パーティションテーブル
		の内容は変化しません。
	T)able:	パーティションテーブルの内容だけを上書きします。IPL コードは変
		わりません。
	A)ll:	ブートセクタを全部上書きします。

    この時に上書きするために読み込まれるファイルの内容が正当なブートセクタのイ
    メージかどうかの判断はプログラム上ではまったく行っていませんし、現在のブ−
    トセクタの保存も行いません。使う人の指示にすべてを委ねていますので、細心の
    注意を払って使用してください。
    この restore コマンドだけは次に続くファイル名を省略することができません。
	[例]
	    # extipl restore wd0 master.ipl

	    C)ode:  restore ipl code only
	    T)able: restore partition table only
	    A)ll:   restore ipl code and partition table
	    restore (c/t/a)? c
		ハードディスク wd0 に master.ipl の内容からコード部分をのみ
		を現在のブートセクタに上書きします。

 (5) show device-name
     device-name で指定された対象のパーティションテーブルの内容を表示します。
     もし、パーティションテーブル内に拡張領域があれば、その中を再帰的に表示
     します。
	[例]
	    # extipl show wd0
	    =========
	    Partition TABLE on "/dev/wd0"
	    =========
	     [1] 06: FAT16 (>32MB)
	    A[2] A5: FreeBSD/NetBSD/386BSD
	     [3] 05: Extended DOS
	        --> [1] 83: Linux native
	        --> [2] 05: Extended DOS
	            --> [1] 82: Linux swap
	     [4]

		ハードディスク wd0 のパーティションテーブルを表示させたもので
		す。マスタテーブルに拡張 DOS 領域があるので、その中をたどりな
		がら表示しています。領域番号の前にある "A" はブート標識を示す
		もので、ここでは FreeBSD にセットされています。
		これは、extipl が独自に拡張した機能で、詳細は [4.5] 拡張領域内
                からのブートを御覧ください。

 (6) chgboot device-name
     device-name で指定されたハードディスクのブート領域を変更します。この作業は
     対話的に行われます。拡張領域をブート領域に設定すると、その中を再帰的に設定
     することができます。この時に、以下のキーが有効です。

	1 .. 4 : ブート標識を立てたい領域を指定する
	     w : 指定したブート標識をディスクに書き戻します。
	     q : 何もせずに終了します。(ブート標識は変りません)
	     c : 操作対象となっているテーブルのブート標識をクリアします。
	     b : 操作対象のテーブルを１つ前に戻します。このキーは拡張領域に
                 再帰的に入り、１つ戻りたいときに使います。マスタテーブルを
		 対象としている時には 'q' と同じ意味を持ちます。

	[例]
	    # extipl chgboor wd0
	    =========
	    Partition TABLE on "/dev/wd0"
	    =========
	     [1] 06: FAT16 (>32MB)
	    A[2] A5: FreeBSD/NetBSD/386BSD
	     [3] 05: Extended DOS
	     [4]
	    >>> Select partition to make bootable (? for help): 3
	    Partition #3(Extended DOS) specified, Can you make bootable(y/n)? y

	    =========
	    Partition TABLE on "/dev/wd0"
	    =========
	     [1] 06: FAT16 (>32MB)
	     [2] A5: FreeBSD/NetBSD/386BSD
	    A[3] 05: Extended DOS
	        --> [1] 83: Linux native
	        --> [2] 05: Extended DOS
	     [4]
	    >>> Select partition to make bootable (? for help): 1

	    =========
	    Partition TABLE on "/dev/wd0"
	    =========
	     [1] 06: FAT16 (>32MB)
	     [2] A5: FreeBSD/NetBSD/386BSD
	    A[3] 05: Extended DOS
	        -->A[1] 83: Linux native
	        --> [2] 05: Extended DOS
	     [4]
	    >>> Select partition to make bootable (? for help): w

		この例では拡張 DOS 領域内にある Linux native にブート標識を設定
		しようとしています。まず、マスタテーブルの拡張 DOS 領域にブート
		標識を設定します。この時、拡張 DOS 領域は本来ブート不可能なので
		確認を求めています。続いて、その中にある Linux native にブート
		標識を設定します。ここは、常識的にブート可能なので確認は求めら
		れません。最後に "w" でこれらのテーブル内容を書き戻します。
		この後、確認したいならば次のようにすれば良いでしょう。

	    # extipl show wd0
	    =========
	    Partition TABLE on "/dev/wd0"
	    =========
	     [1] 06: FAT16 (>32MB)
	     [2] A5: FreeBSD/NetBSD/386BSD
	    A[3] 05: Extended DOS
	        -->A[1] 83: Linux native
	        --> [2] 05: Extended DOS
	            --> [1] 82: Linux swap
	     [4]


 (7) clrboot device-name
     device-name で指定されたハードディスクのアクティブフラグをクリアします。
     このコマンドを使用すると、全領域が非アクティブとなり自動的にブートせずに
     毎回ブート領域の選択を強要されます。ExtIPL のブートメニューを呼び出すタイ
     ミングがつかめないときなどに使用すると便利でしょう。
     clrboot を使用した後で、アクティブ領域を設定したいときには対象領域を <End>
     キーを使ってブートしてください。(このあたりのからくりについては後述します)
     ブート対象の HD 全領域を非アクティブにした場合には、必ず Extended-IPL を
     使用してください。それ以外の場合はエラー停止するでしょう。
	[例]
	   # extipl clrboot wd0



[2.2] device名について
ExtIPL をインストールする際には、その対象デバイス名をコマンドに続いて指定しなけ
ればなりません。この指定を間違える取り返しの付かないことになりますから、十分に
注意してください。手元でテストしたブート対象となるデバイス名の具体例は次の通り
です。extipl は指定されたデバイスについて簡単なチェックをするだけですから、実際
の指定に当たってはしっかりと確認してください。

   * FreeBSD :		2.2.x	3.x
	IDE  HDD #0 -    wd0	wd0
	SCSI HDD #0 -    sd0	da0
	Floppy   #0 -    fd0	fd0

   * Linux :	    	2.0.x
	IDE  HDD #0 -    hda
	SCSI HDD #0 -    sda
	Floppy   #0 -    fd0



[3] インストールの前に

extipl を使いインストールしながら Extended-IPL の使い方について説明して行き
ますがその前に万一に備えて現在のブートセクタの内容を保存しておきましょう。
extipl を使うこと自体はさほど難しいことでもありませんが転ばぬ先の杖とも言いま
すから...

extipl 自身にもブートセクタのイメージを抜き出す機能がありますので、これを使い

	# extipl save wd0

などとすると、 ./master.ipl としてそのイメージが取れます。安全のために、この
イメージは他のマシンか、フロッピーなどの別のメディアに保存しておきましょう。
もし、マスタブートセクタに事故が起こったならばフロッピーから FreeBSD/Linux を
起動して

	# dd if=./master.ipl of=/dev/rwd0 bs=512 count=1

等で書き戻すことで復帰できます。もちろん extipl 自身でも restore コマンドを使
って行うことが可能です。

さらに、mtools などで MS-DOS のデータとして保存しておけば、最悪、FreeBSD/Linux
が起動しなくなっても DR-DOS 版の extipl で書き戻し、復旧させることもできます。
マスタブートセクタが致命的な障害を負っても、DR-DOS や MS-DOS ならばフロッピー
から簡単に起動させて復旧させることができます。万一への対策として、できるならば、
こちらをお勧めします。



[4] extipl による Extended-IPL のインストールと使い方

いきなりハードディスクのブートセクタを書き換えるのはちょっと抵抗があるかも知れ
ません。そんな慎重なあなたはブートセクタを書き換えずにフロッピーディスクを使っ
て Extended-IPL とはどのようなものかを体験してみてください。そして覚悟が決った
ならばハードディスクへのインストールに進んでください。



[4.1] FD 版 Extended-IPL

本来デバッグ用に作ったものをそのまま残したものです。マスタブートプログラムには
まったく触らずに Extended-IPL の機能を忠実に再現させることができます。もちろん
アクティブ領域を変更後にブートさせることも可能です。テストするにはフォーマット
済みのフロッピーディスクをユニット #0 に入れて

	# extipl fdtest fd0

とします。この時確認を求められますので "y" で答えてください。"Ok." と表示され
ればフロッピーユニット #0 にあるディスクのブートセクタに FDtestIPL と呼ばれる
コードが書き込まれています。

それではこの FDtestIPL を使ってみましょう。その前に C-MOS setup でブート順序が
必ず "A -> C" となっていることを確認してください。さもないとフロッピーディスク
から優先してブートできませんので FDtestIPL 試す事ができません。
それでは FDtestIPL を書き込んだフロッピーディスクを入れたままマシンをリブートし
てください。いかがですか？ 今までハードディスクからブートさせていたときと何か
変化がありましたか？「なんにも変わりなし、からかってるのか！」と怒らないでくだ
さい。「変化なし」が正常なのです。フロッピーユニット #0 のアクセスランプが消え
ると同時に HD のアクティブ領域になっている OS が起動したはずです。では、もう一
度リブートし、フロッピーディスクのアクセスランプが点灯している間にシフトキーを
押してみてください。
	---------
	このタイミングの取り方は慣れないと少し難しいかもしれません。数回テスト
	してみてください。コツは BIOS の初期化が済んで、ドライブ A: からブート
	しようとしている時をねらうことです。ドライブ A: のアクセスランプを注意
	して見ると BIOS の初期化時の recalibrate で点灯し、その後ブートセクタ
        を読むためにもう一度点灯するはずです。この2度目をねらうのです。
	---------

すると、画面左上にパーティション情報と System-ID が表示され、"Boot#0:0.?" と
選択を促されるはずです。このときに表示される "Boot#0:0.?" の意味は次のように
なっています。

	Boot#0:0.1
	     | | +-- アクティブ領域番号。アクティブ領域がなければ "1"
	     | +---- 拡張領域に入った時の深さを示す。マスタテーブルは "0"
	     +------ ハードディスクのユニット番号。１台目は "0"

ここで、そのまま <Enter> キーで答えると今まで HD からブートした時と同じ動作を
します。もし、アクティブ領域ではないけれどもブート可能領域があるならば、その領
域番号を1〜4の数字で指定し、<Enter> キーを押す事によりブートすることができます。
	---------
	うまくブートできるか否かはそこから起動される OS のローダに依存します。
	OS のローダが FDtestIPL から示されたメモリ上に置かれた partition table
	だけを参照するのならば問題無く起動できます。しかし、数ある OS のローダ
	の中には master IPL から知らされる partition 情報を無視して自分でブート
	セクタの partition table を確認する生真面目なものもあります。
	FDassist(Extended-IPL) はメモリ上に置かれた partition table の active
	flag を操作するだけですからこのような真面目なローダには相手にされません
	ので注意してください。
	---------

この状態では <End> キーでブートさせない限りマスタブートセクタの内容は変化しませ
んので安心して使えます。しばらくはこの状態で Extended-IPL の雰囲気に慣れてくだ
さい。もちろん、このままずっと使い続けても構いません。


[4.2] Extended-IPL のインストール

FDtestIPL は疑似体験するためのもので、立ち上げ用のフロッピーディスクが残ってい
て不便です。覚悟ができたならば master-IPL を Extended-IPL に取り替えることにし
ましょう。心の準備ができていない人はこの項目はどうぞパスしてください。怖いもの
見たさで読んでも構いません。

ハードディスクへ Extended-IPL をインストールするには extipl を使って

	# extipl install wd0

などとします。途中で現在の master-IPL を保存するファイル名の入力を促されますの
で適切なファイル名を入力してください。ファイル名にはパスを含んでも構いません。
その後、本当に書き換えて良いかどうか確認されます。もし良ければ "y" で答えてく
ださい。"Ok." が返れば Extended-IPL のインストールは完了です。
なお、この作業は root で行ってください。常識的にはブートセクタへは一般ユーザの
書き込み権が与えられていません。


[4.3] Extended-IPL の起動

Extended-IPL は IBM 製の HD-IPL と完全互換ですからユーザから特別な指示がない限
り 1 台目のハードディスクのアクティブ領域からブートします。

Extended-IPL の「拡張」部分の機能を呼び出すにはブート時に <Shift> キーを押すこ
とにより行ないます。Extended-IPL は起動時にシフトキーが押されているとアクティブ
領域からの自動起動を中止し、パーティションテーブルの内容を表示し、あなたからの
起動領域指定を待ちます。下記はその一例で、簡単な説明を加えたものです。

	-------------------
	 Part  Sys
	  1    s01		;; パーティション番号と OS 識別子
	  2    sA5		;;	   〃
	  3    s05		;; 拡張 DOS 領域
	  4			;; 空き領域
	 Boot#0:0.2		;; プロンプト
	-------------------
	      | | |
	      | | +---- ブートする領域番号
	      | +------ 対象パーティションテーブル番号
	      +-------- HD unit 番号

インストールしている OS などによって Sys の下にならぶ OS 識別子は変ります。
この例では 1 台目ハードディスク(HD unit #0)で３つのパーティションが使われて
います。そして、1 には DR-DOS(12bit FAT)が、2 には FreeBSD が、インストールさ
れ、3 は拡張 DOS 領域に設定されており現在のアクティブ領域は 2 の FreeBSDに設
定されていることが分かります。

この画面で OS のインストールしてあるパーティションを 1 〜 4 の数字で指定し、
<Enter> キーで確定することによりブートさせることができます。もし、空き領域が
指定されたならば BELL を鳴らして警告を出しブートはしません。また、起動したい
OS のブートセクタの 511 バイト目から 0xaa55 が無い場合も正規のブートセクタ
とは認めず処理を行いません。

    <Enter>
	一般的なブート開始キーで、ほとんどの OS はこれで起動できるはずです。

    <End>
	このキーで領域を確定させると選択した領域をアクティブパーティションに変
	更してからブート動作に移ります。次回の自動起動領域はこのときに選択され
	たパーティションに変ります。なお、ブート標識の変更ができるのは 1 台目の
	ハードディスクに限られます。2 台目以降や、拡張 DOS 領域内の場合には書き
	戻されません。
	----------
	Extended-IPL が active flag を変更したパーティションテーブルをブートセ
	クタに書き戻す意味はアクティブ領域の変更ではなく、ブートセクタにあるパ
	ーティションテーブルの active flag を確認する OS に対応させるためです。
	<Enter>、<End>どちらのキーを使って起動すべきか迷ったならば、まず<Enter>
	キーでブートを試みてください。失敗するようならば <End> キーでもう一度た
	めしてみてください。それでも失敗したならば？？
	----------


[4.4] ブート対象ハードディスクの変更

これはまったくの個人的な願望の産物として付加したもので、ただでさえ狭いコード領
域に入り込んでますから顰蹙は覚悟の上です。本来 IBM 機はハードディスク 1 台目の
みがブート対象で、それ以外からは不可能です。ところが、Extended-IPL にはブート
パーティションの選択時にブートさせたいハードディスクを切り換える機能も付加さ
れています。

少し使い込むと分かると思いますが、Extended-IPL はブート領域を選択する時に "1..
4" 以外にも、"0" を受け付けます。もし、 HD が複数接続されており、選択画面で
"0" が指定されたならば次のハードディスクのブート領域選択画面に変り、そのハード
ディスクの任意の領域からブートできます。MS-DOS をはじめほとんどの OS は 1 台
目からの起動を前提としているので実際にはブートできない OS が多いと思います。
これは Extended-IPL の責任ではなく、該当する OS のローダの制限によるものです。

現在選択対象となっているハードディスクの番号はプロンプト "Boot#" に続いて
"0, 1, 2 .." として表示されます。"0" による対象ハードディスクの変更は巡回動
作をしますから、ブートキーを押さない限り 1 台目と 2 台目、 .... n 台目のハード
ディスクの領域を順次表示します。(最後の n 台目までいくと、1 台目の HD に戻る)

仮に 2 台の HD からなるシステムを使っていて、[4.3] の画面で "0" を押したとしま
す。すると Extended-IPL は 2 台目の HD のパーティションテーブルを読みそれを表
示します。

	-------------------
	Part  Sys
	 1    s06		;; パーティション番号と OS 識別子
	 2    s81		;;	   〃
	 3	     		;;  空き領域
	 4
	Boot#1:0.1		;; プロンプト、 2 台目は "#1:0.1" となる
	-------------------

上記はその一例です。2 台目の HD にはアクティブ領域が無いのが一般的ですからプロ
ンプトに続く数字は常に "1" になります。いま、ここから minix を起動したいならば
、 "2" を指定してから <Enter> キーを押します。あるいは、ここでもう一度 "0" で
対象 HD の切り替えを行なうと DISK BIOS から見て次の HD のブートセクタを読みに
いきます。もし、HD が 2 台だけならば 1 台目の HD に戻るサイクル動作をします。


[4.5] 拡張領域内からのブート

ここで言う拡張領域とはシステム標識 0x05(DOS 拡張領域)ので示されるものをいいます。
IBM の技術仕様書によれば、「この標識を持つ領域はブート不可」と明記されています。
さらに、DOS の fdisk などのブート領域を設定できるプログラムではブート可能に設定
できないようにしなければならない、とも書かれています。

しかし、extipl はシステム標識 0x05 の領域にブート標識が設定されていると、さら
にその内部からブート標識のある領域を探し、見付かったならばブート処理を行います。
この本来の仕様を外れた処理をさせている理由は、Linux のインストーラが拡張DOS領域
の中にブート対象となる Linux native(0x83) を置いてしまうこと、あるいは、オペレ
ータが意図的に拡張領域内に Linux のブート領域をインストールしてしまうことへの対
策です。
このために現在、拡張領域内部からブート確認が取れているものは linxu のみです。
おそらく、その他の OS ではブートできない可能性が極めて高いと思われます。
なお、Extended-IPL はシステム標識 0x85 を持つ Linux 拡張領域に対しても同様の動
作をします。

さて、ここで [4.3] で示した例で領域 3 を選んでみましょう。すると、extipl は拡
張 DOS 領域に用意されたパーティションテーブルを新たに読み込んでその内容を表示
し次のような画面に変わります。

	-------------------
	 Part  Sys
	  1    s83		;; パーティション番号と OS 識別子
	  2    s05		;;	   〃
	  3
	  4
	 Boot #0:1.1		;; プロンプト
	-------------------

選択が拡張 DOS 領域内に入ったことを示すために、プロンプトが "Boot #0:" に続く
テーブル番号が +1 されたことに注意してください。この例では、拡張領域内の最初
が Linux native になっており、さらにもうひとつ拡張領域が設定されています。こ
こで、さらに拡張領域を選択すると、さらにその内容をダンプしてきます。

ここで、1 を選択すると Linux を起動させることができます。確定キーとして [End]
も使うこともできますが、ブート領域を再設定するための書き戻しは行いません。
Extended-IPL が書き戻せる対象は１台目のマスタテーブルのみです。
(ブート領域を変更したい時には extipl のサブコマンド "cghboot" を使ってください)

なお、拡張領域を表示している時に基本領域の選択に直接戻ることはできません。どう
しても戻りたい時には、HD 切替えキーの "0" を使います。Extended-IPL は HD の切替
えを行いますから、これを必要回数行って "Boot#0:0.?" としてください。もし、HDが
1 台だけならば、1 度の切替え操作で基本領域にもどることができます。

迷子にならないためには "Boot" に続く数字に注目してください。


[4.6] Extended-IPL の使い方・番外編

(1) ブート時に active 領域を変更する
    Extended-IPL は真面目な OS ローダのために <End> キーで active 領域を変更
    したパーティションテーブルをブートセクタに書き戻すことができます。
    これを逆手にとれば今回起動する OS を次回から自動起動とすることができます。
    結果として自動起動領域を変更してから OS を起動できるわけです。

(2) ブート領域の強制選択
    通常の master-IPL はパーティションテーブルからブート標識がセットされている
    領域が見つからないとエラーで停止します。しかし、Extended-IPL はブート標識が
    見つからないと強制的にブート領域の選択状態になります。毎回どの OS をブート
    させるか迷う浮気者(?)を自認する方は extIPL の clrboot によりすべての領域を
    非アクティブに設定してください。Extended-IPL はあなたの気持ちが定まるまで
    いつまでも待ち続けます。:-)
    このときにプロンプト "Boot #?:0." に続く数字はアクティブ領域ではなく、使わ
    れている最初の領域番号です。（通常は "1" になるはずです）
    但し、ROM IPL のチェックが厳密だと Extended-IPL が走る前にエラー停止するこ
    とがあります。([1.2] 注意点 を参照のこと)


[5] エラーコード

Extended-IPL がエラー停止するのは DISK BIOS がエラーを返したときに限られ、その
エラーステータスをクエスチョンマーク "?" に続いて 2 桁の 16 進数で表示します。
BIOS の解説書により原因を調べて適切な対処を行なってください。コードサイズの厳
しい制限の中で作りましたので "Err" などと気の利いたメッセージは出ませんのでご
了承ください。なお、BIOS が返すエラーコードは以下のように定義されています。

	0x01 Bad command
	0x02 Bad address mark detected
	0x04 Record not found
	0x05 Reset fail
	0x07 Cannot drive initialize
	0x09 DMA boundary error
	0x0B Bad track flag detected
	0x10 Uncorrectable ECC error
	0x11 Correctable ECC error
	0x20 Bad controller
	0x40 Seek error
	0x80 Time out
	0xBB Undefined error
	0xFF Sense operation fail


[6] 補足

[6.1] Extended-IPL の内部構造
Extended-IPL の内部動作に興味があるならば添付の develop.txt に含まれる
「4.技術情報」をご覧ください。



[6.2] extipl の option flags
extipl は特殊な用途のために次のような４個の option flag を用意しています。

    -d: debug
	書き込む内容を検証するための option です。この option が指定される
	と、実際にブートコードを HD あるいは FD に書き込むことは行わず、そ
	のイメージを "./_BootSec.????????" として書き出します。???????? の
	部分はセクタオフセット値(FreeBSD/Linux)あるいは 16 進表記のシリンダ
        番号(DR-DOS)が使われます。
        ダンプツールや 8086 逆アセンブラ ndisasm を使って内容の確認ができま
        す。Extended-IPL の改良や独自の IPL を開発する時などに使うと便利で
        しょう。

    -f: force install
	サブコマンド "install" にのみ影響のある option で、古いブートセクタ
	の保存とインストール作業の確認を行なわずに、ipl code を書き込みます。
	この時、古いブートセクタの内容は "./fdiskIPL.???" として自動的に保存
	されます。もし、不要ならばあなたの手で削除してください。

    -p: packing partition table
	IPL code を書き込む時に、パーティションテーブルの内容を前に詰め、
	未使用領域を末尾に集めます。

    -s: sorting partition table
	IPL code を書き込む時に、パーティションテーブルの内容を開始セクタ
	をキーとして昇順にならべ変え、未使用領域を末尾に整理します。

	---[注意・警告]---
	-p, -s option を使ってパーティションテーブルの登録位置を変更すると、
	副作用に悩まされることがありますので、十分に注意してください。
	ここで言う「副作用」の意味がとっさに分からない人は、これらの -s, -p
	option を絶対に使わないでください。不親切かも知れませんが、どんな場
	合に、どのような副作用があり、その対策はどうする、と言った具体的な説
	明はしません。
	くどいですが、ブートプロセスの詳細を知らない人は -p, -s optionを使わ
	ないでください。安易に使って不幸になっても責任はとりません。
	------------------

# end of extipl.txt
