extipl.txt for FreeBSD/Linux

			   January 06, 2001

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


==============================================================================
1.  はじめに
  1.1  extipl って何？
  1.2  extipl 内蔵ローダの制限や注意点
  1.3  著作権、再配布等について
2.  extipl の使い方
  2.1  extipl のコマンド
    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 による gemini のインストールと使い方
  4.1  gemini をフロッピーから使う
  4.2  gemini をハードディスクにインストール
  4.3  gemini のオプション
  4.4  ドライブスワップについて
5.  extipl が内蔵するローダ
  5.1  gemini
  5.2  taurus
  5.3  aquila
  5.4  scorpius
6.  拡張領域の取り扱い
7.  エラーコード
8.  補足
  8.1  内蔵ローダの内部構造
  8.2  option flags
==============================================================================



[1] はじめに

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

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

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

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

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

extipl ver.5 は４種類のローダを内蔵しており、次のような特徴があります。なお、
個々のローダについての詳細は「5. extipl が内蔵するローダ」をご覧ください。

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

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


[1.2] extipl 内蔵ローダの制限や注意点
extipl 内蔵のローダを使う上では次のことに注意してください。

* DISK BIOS(int 13h)の制限はそのまま extipl 内蔵ローダの制限事項になります。
  extipl が内蔵しているローダは DISK BIOS を使ってアクセスしますので、BIOS
  経由で見えない部分にアクセスすることはできません。
* extipl が内蔵しているローダは IBM 技術仕様書に従って OS のローダに制御を
  渡すだけです。実際に OS を起こすのは OS が準備しているローダの仕事になりま
  す。１台目以外 の HD からもブート可能かどうか、拡張領域内部からブートできる
  かどうかは後者の機能に依存しています。
* サブコマンド clrboot で全領域を非アクティブとした時に、ROM IPL が「アクティ
  ブ領域が無い」とエラー停止し、ブートできなくなることがあります。このような
  時には、一番多く使う OS の領域をアクティブにして回避してください。
  IBM の仕様ではブート対象ドライブ(１台目)にはアクティブ領域が必須です。
* BIOS Setup でブート優先順を C: -> A: とした場合にはフロッピーを使ったシミュ
  レーションはできません。BIOS Setup を変更してフロッピーから起動できる状態で
  お試しください。
* MBR を独自仕様で使っている OS がインストールされた環境で使う時には注意して
  ください。
* 他のブートセレクタ等、マスタレコードを操作するツール類との共存はできません。
* コンパイル条件を変更し、全ハードディスクにユーザ定義名称を設定できるような
  gemini を使う場合には、保存のために全ハードディスクの第２セクタ(MBR に続く
  先頭から２番目のセクタ)の内容を上書きします。他のツールがこの第２セクタを
  使っている場合には対象ツールに障害を与えます。十分に注意してください。


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

(1) 著作権と再配布について
  * 本パッケージの保守は takamiti@tsden.org が行っています。
  * このドキュメントは ryutarho@tsden.org により英訳され、./doc/English/ に
    納められています。
  * ソースやドキュメント内に署名がある部分はその署名者が著作権を有します。
  * 本パッケージは GNU General Public License Version 2 に基づき、自由に利用、
    修正、再配布することができます。

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

(3) サポート
この 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] extipl のコマンド
extipl は次のような 7 つのコマンドを受け付けます。もしそのコマンドがパラメー
タ等を必要とする場合にはディバイス名に続く引数として与えます。これらはほとん
どの場合省略可能で、その時にはプログラム内であらかじめ設定されたものが使われ
ます。

 (1) save device-name file
    現在のハードディスクのブートセクタを含めて、内蔵ローダのなかでもっとも大
    きい gemini に予約されている 18 セクタの内容をそれに続く引数 file で指定
    した ファイルとして保存します。save コマンドは次に続く保存ファイル名を省
    略することができません。
    保存されるファイルの属性は 0400 です。
	[例]
	    # extipl save wd0 /var/save/fdisk.ipl
		wd0 の先頭から 18 セクタを /var/save/fdisk.ipl として保存し
		ます。

 (2) fdtest device-name [@{iplname}]
    フロッピーディスクからブートさせ、ハードディスクからブートした時と同じ操作
    環境を作ります。あらかじめフォーマット済みのブランクディスクを一枚用意して
    ください。なお、ブートローダの書かれたフロッピーディスクはデータディスクと
    しては使えません。
	[例]
	    # extipl fdtest fd0 @aquila
	        内蔵する aquila と呼ばれるローダを１台目のフロッピーユニット(fd0)
		にセットされたディスクの先頭から書き込みます。書き込む前にディ
		スクの確認を促されますので良ければ "y" キーで答えてください。
		なお、書き込みはブート対象フロッピー以外のデバイスでも可能です。
		間違って、wd0 などのハードディスクを指定しても書き込まれてしま
		います。フロッピーへ書き込む内容はハードディスクへ書き込む場合
		と異なりますので、致命的な障害を引き起こします。
		ディバイス名の指定は十分に注意してください。
                また、内蔵するローダ名を指定するときには、必ず '@' を先頭に置
		いてローダ名を指定してください。さもないと、外部のバイナリファ
		イルが指定されたものとして処理されます。

	    # extipl fdtest fd0
		@{iplname} が省略された場合は、内蔵するローダのなかで gemini が
		指定されたものとして処理します。"extipl fdtest fd0 @gemini" の
		時と同じです。
		

 (3) install device-name [@{iplname}]
    内蔵するブートローダで、指定されたものをハードディスクの先頭から書き込みま
    す。現在のパーティションテーブルの内容はそのまま引き継がれます。また、ブー
    トローダを書き込む前に自分が占める量のセクタ内容をファイルに保存するように
    促します。
    この時に保存されるファイルの属性は 0400 です。
	[例]
	    # extipl install wd0 @aquila
		aquila と呼ばれる内蔵ローダをハードディスクの先頭に書き込みま
		す。書き込む前に、必ずブートセクタの保存を強制され、正常に保存
		されない限りインストールへは進めません。保存するファイル名は
			Enter file name to save:
		のプロンプトに対して分かりやすい名称で指定してください。パスを
		含んでも構いません。ファイル名を省略した場合 (<Enter>キーのみを
		入力した場合) にはカレントディレクトリに fdiskipl.nnn として保
		存されます(nnn は 001 から 999 までの数値で既に存在するファイル
		を上書きしないよう順に増加していきます)。

	    # extipl install wd0
		@{iplname}が指定されていないので、extipl は gemini と呼ばれる
		内蔵ローダをハードディスクの先頭 18 セクタに書き込みます。
		インストール前に gemini の占有セクタ内容の保存を促されるのは上
		記と同じです。

 (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 :	パーティションテーブルを除くブートプログラムを書き戻します。
	T)able:	パーティションテーブルの内容だけを指定されたファイルの内容で上
		書きします。
	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] 0B: FAT32                                    1866MB
	     [2] 06: FAT16(>32MB)                              125MB
	    A[3] A5: FreeBSD                                  2596MB
	     [4] 05: Extended DOS                                 --
		 ( 1) 83: Linux native                         256MB
	         ( 2) 83: Linux native                        1153MB
		 ( 3) 83: Linux native                          86MB
		 ( 4) 82: Linux swap/Solaris x86                62MB

		ハードディスク wd0 のパーティションテーブルを表示させたもので
		す。マスタテーブルに拡張 DOS 領域があるので、その中も表示して
		います。領域番号の前にある "A" はブート標識を示すもので、ここ
		では FreeBSD にセットされています。また、拡張領域内にブート標
		識がセットされていれば、その領域の先頭に "*" マークが付きます。


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

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

	[例]
	    # extipl chgboot wd0
	    =========
	    Partition TABLE on "/dev/wd0"
	    =========
	     [1] 0B: FAT32                                    1866MB
	     [2] 06: FAT16(>32MB)                              125MB
	    A[3] A5: FreeBSD                                  2596MB
	     [4] 05: Extended DOS                                 --

	    >>> Select partition to make bootable (? for help): 4
	    Partition #4(Extended DOS) specified,
	    Can you make bootable(y/n)? y

	    ### Inside [4] Extended DOS
		 ( 1) 83: Linux native                         256MB
	         ( 2) 83: Linux native                        1153MB
		 ( 3) 83: Linux native                          86MB
		 ( 4) 82: Linux swap/Solaris x86                62MB

	    >>> Select partition to make bootable (? for help): 1

	    ### Inside [2] Extended DOS
		*( 1) 83: Linux native                         256MB
	         ( 2) 83: Linux native                        1153MB
		 ( 3) 83: Linux native                          86MB
		 ( 4) 82: Linux swap/Solaris x86                62MB

	    >>> Select partition to make bootable (? for help): w
	    Ok.

		この例では拡張 DOS 領域内にある Linux native にブート標識を設定
		しようとしています。まず、マスタテーブルの拡張 DOS 領域にブート
		標識を設定します。この時、IBM 純正 IPL の仕様から言えば、拡張
		DOS 領域は本来ブート不可なので確認を求めています。
		続いて、その中にある Linux native にブート標識を設定します。
		ここでは既に拡張領域からの起動について確認済みなので、再度確認を
		求めることはありません。最後に "w" でこれらのテーブル内容を書き
		戻します。結果を確認したいならば次のようにすれば良いでしょう。

	    # extipl show wd0
	    =========
	    Partition TABLE on "/dev/wd0"
	    =========
	     [1] 0B: FAT32                                    1866MB
	     [2] 06: FAT16(>32MB)                              125MB
	     [3] A5: FreeBSD                                  2596MB
	    A[4] 05: Extended DOS                                 --
		*( 1) 83: Linux native                         256MB
	         ( 2) 83: Linux native                        1153MB
		 ( 3) 83: Linux native                          86MB
		 ( 4) 82: Linux swap / Solaris x86              62MB

		extipl の内蔵しているローダはアクティブフラグを辿って、ブート
		領域を探しますので、この場合は拡張領域内から Linux を起動しま
		す。


 (7) clrboot device-name
     device-name で指定されたハードディスクのマスタテーブルのブート標識をクリ
     アします。このコマンドを使用すると、全領域が非アクティブとなり自動的にブ
     ートせずに毎回ブート領域の選択をしなければなりません。なお、ブート対象の
     バードディスク全領域を非アクティブにした場合には、必ず extipl に内蔵され
     た選択機能を持つローダを使用してください。それ以外の場合はエラー停止する
     でしょう。
	[例]
	   # extipl clrboot wd0


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

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

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


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

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

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

	# extipl save wd0 ./master.ipl

などとすると、 ./master.ipl としてセクタイメージが取れます。"save" で取り出す
セクタは先頭から 18 セクタ分で、これは内蔵ローダのなかでもっとも大きい gemini
に予約されているセクタ数です。
安全のために、このイメージは他のマシンか、フロッピーなどの別のメディアに保存し
ておきましょう。もし、マスタブートセクタに事故が起こったならばフロッピーから
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 による gemini のインストールと使い方

いきなりハードディスクのブートプログラムを書き換えるのはちょっと抵抗があるかも
知れません。そんな慎重なあなたのためにフロッピーディスクを使って体験することが
できます。そして覚悟が決ったならばハードディスクへのインストールに進んでくださ
い。extipl は全部で４個のローダを内蔵していますが、ここでは default でインスト
ールされる gemini を使って説明します。



[4.1] gemini をフロッピーから使う

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

	# extipl fdtest fd0

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

フロッピーから試す前に BIOS setup でブート順序が必ず "A -> C" となっていること
を確認してください。また、ブート可能な CDROM などもドライブから抜き出しておきま
しょう。さもないとフロッピーディスクから優先してブートできません。それでは、
gemini を書き込んだフロッピーディスクを入れたままマシンをリブートしてください。

ブート時の BIOS 初期化に伴う諸々のメッセージが出たあとで、

	extipl ...

と表示され、やがてブートに向けてのカウントダウンを開始します。この時の待ち時間
は 15 秒で、この間に <Space> キーなどが押されるとブート領域の選択メニューが表示
されます。待ち時間経過を中断して、アクティブ領域からブートさせたい時には<Enter>
キーを押してください。

<Space> キーなどが押されると、次のような画面が表示されブート領域の選択ができま
す。

  +-------------------------------------------------------------------------+
  | Drive: 1/2                                                    mode:LBA  |
  +-------------------------------------------------------------------------+
  |                                                  |                      |
  |  0B: FAT32                               1866MB  | Change target Drive  |
  |                                                  |                      |
  |  06: FAT16(>32MB)                         125MB  |                      |
  |                                                  |                      |
  | *A5: FreeBSD                             2596MB  | Mark active and Boot |
  |                                                  |                      |
  |  05: Extended DOS                            --  | Boot                 |
  |                                                  |                      |
  +-------------------------------------------------------------------------+

選択画面は、上下の２段構成になっており、上側は必要な諸元を表示するガイド部。
下側はさらに左右２つに別れており、左側はパーティションテーブルの内容を、右側に
は gemini ローダのコマンドメニューが表示されてます。最初は、左側のアクティブ領
域上にカーソルが置かれ、そこが反転表示されるはずです。もし、アクティブ領域がな
ければ最初の領域にカーソルが置かれます。

操作は視覚的に分かると思いますが、もっとも簡単な選択ブート手順は、左側で上下カ
ーソルキーを使い、ブートさせたい領域を反転表示させます。そして、右カーソルキー
で右側に移動し、Boot の文字上にカーソルを置き <Enter> キーを押す、となります。
この時に左側でブート対象として選択したものが DOS/Linux 拡張領域ならば、gemini
は拡張領域内部からブート標識を探してブート処理を行います。もし、拡張領域内部に
ブート標識がみつからなければ、さらなる選択を促すために次のような画面に変わりま
す。

  +-------------------------------------------------------------------------+
  | Drive: 1/2                  (Inside: #4 Extended DOS)         mode:LBA  |
  +-------------------------------------------------------------------------+
  |                                                  |                      |
  |  [1] 83:Linux native                      256MB  | Change target Drive  |
  |  [2] 83:Linux native                     1153MB  |                      |
  |  [3] 83:Linux native                       86MB  | Return to MBR        |
  |  [4] 82:Linux swap/Solaris x86             62MB  |                      |
  |                                                  | Mark active and Boot |
  |                                                  |                      |
  |                                                  | Boot                 |
  |                                                  |                      |
  +-------------------------------------------------------------------------+

ガイド部に "Inside: #4 Extended DOS" の表示が出て、マスタテーブル４番目の拡張
DOS 領域内に入っていることがわかります。また、右側にはマスタテーブルに戻るため
のメニューも加わります。マスタテーブルでの選択と同じ手順でブートさせることがで
きます。

拡張領域内部での選択では一度に表示できる領域数は７個です。８個以上の領域がある
場合はカーソルの移動に伴って縦スクロールしますが、プログラム上では最大 16 個ま
でしか読み込まないようになっています。

なお、ガイド部と右側に表示されているコマンドの意味は、以下のとおりです。

    Drive: 1/2
           | +--- BIOS が認識しているハードディスクドライブ数。
           +----- 現在の選択対象のドライブ。

    mode: LBA	LBA モードでハードディスクにアクセスしています。
		ドライブが LBA をサポートしていなければ CHS と表示されます。

    Change target Drive
	BIOS から見えるディスクが２台以上の時にのみ表示されます。認識している
	ディスクを巡回する形で切り替えを行います。

    Return to MBR
	左側に DOS/Linux 拡張領域内部を表示している時にのみ表示され、マスタテ
	ーブルの表示に戻したい時に使います。

    Mark active and Boot
	選ばれた起動領域にブート標識(Active flag)をセットしてからブートします。
	"extipl chgboot" でブート標識を変更した時と同様に、選択された条件をみて
	マスタテーブルと拡張領域内のブート標識に矛盾がないよう調整します。

    Boot
	ディスク上のブート標識はそのままで、メモリ上に読み込まれたマスタテーブ
	ルのブート標識を操作し、選択されたＯＳのローダを起こします。


また、左側にカーソルを置いたときに限り、次のキー操作が有効になりますので、
慣れれば最低限のキー操作で選択ブートができます。

    <Enter>
	カーソルで示された領域からのブート処理を試みます。選択されたものが
	DOS/Linux 拡張領域ならばその内部からブート標識を探してブート処理を行
	います。もし、拡張領域内部にブート標識がなければ、後述の <Space> キ
	ーと同様に振る舞います。右メニューの "Boot" と同じ。

    <End>
	選択された領域にブート標識をセットしてからブート処理を行います。右メ
	ニューの "Mark active and Boot" と同じ。

    <Space>
	DOS/Linux 拡張領域上にカーソルがある時にのみ有効で、その内部一覧を表
	示します。右メニューに該当するものはありません。

    <Backspace>
	DOS/Linux 拡張領域内部を表示しているときにのみ有効で、マスタテーブル
	の表示に戻ります。右メニューの "Return to MBR" と同じ。

    "0"
	数字のゼロキーで、初期の extipl 内蔵ローダと同様にドライブ切り替えを
	行います。右メニューの "Change target Drive" と同じ。

さらに、カーソルキーが小さくて使いづらい時などは、vi(1) のカーソル移動キー
h, j, k, l で代用することもできます。



[4.2] gemini をハードディスクにインストール

フロッピーから使うのは本来デバッグ目的ですし、立ち上げ用のフロッピーディスク
が残っていて不便です。ハードディスクにいれればより便利に使うことができます。
ハードディスクに gemini をインストールするには、

	# extipl install wd0			あるいは、
	# extipl install wd0 @gemini

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

使い方はフロッピーからとまったく同じです。



[4.3] gemini のオプション

gemini は領域選択画面で <Alt> キーを押しながらアルファベットキーを押すこと
より、オプション機能を呼び出すことができます。現在用意されているオプション
は次の３つです。

    <Alt> + t : ブート標識のある領域から自動起動するまでの待ち時間変更

	選択対象ドライブが１台目の時にのみ有効なもので、自動起動までの待
	ち時間を0 〜 999 秒の範囲で変更することができます。(デフォルトの
	待ち時間は 15 秒)  このオプションが呼ばれると、画面下方に

	    Time to pause before boot: 15 -> _

	と表示され、新たな待ち時間を設定することができます。ここでは３桁
	の数字を受け付けますが、何も入力しないか、<Esc> キーでキャンセル
	することもできます。新しい待ち時間を設定した時には、<Alt>+s によ
	り保存してください。この設定は次回の gemini 起動時から有効にりま
	す。
	なお、待ち時間を 0 秒にすると、ブート標識のある領域からの自動ブー
	トは行われず、常に領域選択状態になります。


    <Alt> + n : 領域名称の設定

	カーソルが左側にあるときにのみ有効で、選択時に表示される領域名称を
	分かりやすいものに置き換えることができます。インストール直後の
	gemini は内部にあるテーブルから System-ID をキーに名称を決定して表
	示しています。0x82 の ID を持つ領域は "Linux swap/Solaris x86" と
	しか表示されません。これをより実態に合った、"Solaris-8 x86" 等の表
	示に変更することができます。
	名称を変更したい領域にカーソルを置き、<Alt>+n を押すと、画面下部に

	    Enter Name (20 chars max):

	とプロンプトが現れ、20 文字以内で好みの名称を入力できます。設定され
	た名称は <Alt>+s で保存してください。なお、名称の入力中に <Esc>
	キーを押すと現在入力中のものがキャンセルされます。すでに設定した名
	称を抹消するには、何も文字を入力せずに <Enter>キーだけを押してくだ
	さい。登録できる数はハードディスク１台につき 12 個までです。

        [注] これらの名称データは各ハードディスクに対して MBR の次のセクタ
	 ー(２番目のセクタ)に保存されます。配布ソースのコンパイル条件そのま
	 までインストールしたものは、１台目に対してのみ保存を行います。
	 すべてのハードディスクに対してユーザ名称を設定したい時にはコンパイ
	 ル条件を変更しなければなりません。(詳細は Makefile 参照のこと)
	 コンパイル条件を変更して作成した、全ハードディスクに対して名称設定
	 ができる gemini は、他のツールが使っているかもしれないセクタのデー
	 タを上書きし、障害が発生する可能性があります。自分の使用環境を考え、
	 注意して使ってください。


    <Alt> + s : 変更した設定を保存

	<Alt>+t, <Alt>+n 等で変更された設定を、保存するときに使います。
	ユーザによる設定は自動的に保存はされませんので、ブート前あるいは、
	対象ドライブの切り替え前この <Alt>+s により保存してください。
	さもないと、設定は失われます。

     ***************************
     ***      注意事項       ***
     ***************************
     いずれも fdtest で作られたフロッピーから起動したときだけの制限です。

     1. 変更された設定データの書き込みはハードディスク１台目の代りにフロッ
	ピーディスクに行います。特に、初回起動時は何も変更しなくても、gemini
	が名称登録テーブルを初期化して書き戻そうとします。フロッピーを一旦取
	り出し、再挿入すると「メディアチェンジ」エラーがでますので、注意して
	ください。fdtest で作ったブートフロッピーを取り出してしまった時には、
	必ず <Alt>+s により２回保存指示を入れてください。
     2. 変更された領域名称等はブートフロッピーに保存されますが、対象ハードデ
        ィスクは１台目に限られます。ブート標識設定以外はハードディスクに書き
	戻さない仕様によるものです。


[4.4] ドライブスワップについて

gemini は２台目以降の任意のハードディスクからブートされた時に、起動対象ドライ
ブを DISK BIOS で識別する１台目ハードディスクの番号 0x80 にすり替えることがで
きます。２台目のハードディスクから起動した時に、この機能が有効になっていると、
ドライブ番号 0x81 として DISK BIOS にサービスを要求すると１台目に、0x80 なら
ば２台目と、順序が入れ替わってアクセスされます。
この機能は DR-DOS/MS-DOS や Windows95,98 等を２台目から起動させるには有効に働
くのですが、FreeBSD, Linux 等ブートの初期段階以外は DISK BIOS を使わない柔軟
なローダを持つものに対してはブート障害の原因にしかなりません。このため、gemini
は、２台目以降のハードディスクから下記のシステム標識を持つ領域が起動対象とな
った時にのみ、ドライブスワップ機能を有効にします。
	0x01 FAT12			0x04 FAT16(<=32MB)
	0x06 FAT16(>32MB)		0x07 NTFS/HPFS
	0x0B FAT32			0x0C FAT32(LBA)
	0x0E FAT16(LBA)			0x11 Hidden FAT12
	0x14 Hidden FAT16(<32MB)	0x16 Hidden FAT16(>=32MB)
	0x17 Hidden HPFS		0x1B Hidden FAT32
	0x1C Hidden FAT32(LBA)		0x24 NEC DOS 3.x
	0x86 NTFS striped FAT		0x87 NTFS striped
	0xCB secured FAT32		0xCC secured FAT32(LBA)
	0xCE secured FAT16(LBA)		0xF2 DOS 3.3 2nd partition

また、起動時に次のキーの組み合わせを使用することにより、システム標識にかかわらず
ドライブスワップ機能の有効/無効を指定することができます。

	<右シフト> + <Enter>		常に有効にする
	<Ctrl> + <右シフト> + <Enter>	常に無効にする

もし、ドライブスワップ機能を一切必要としないならば src/Makefile の GEMINIFLAGS 右
辺にある -dHOOKUP13 を削除し、再コンパイルした extipl によりインストールされる
gemini を使ってください。


[5] extipl の内蔵するローダについて

extipl は前項で触れた gemini と呼ばれるローダの他にも、マスタレコードに許さ
れた 446 バイトに収まるよう機能を限定したものを３個内蔵しています。
install/fdtest でこれらの名称を指定することができます。目的に応じて使い分け
てください。これらローダを extipl から指定するには、インストールしたいローダ
名の前に "@" を置いて、次のようにします。

    # extipl install wd0 @taurus	; taurus を指定
    # extipl install wd0 @gemini	; gemini を指定

なお、install/fdtest で名称を省略した場合には gemini が指定されたものと見な
します。また、ローダ名称の前に "@" を忘れると、外部ファイルが指定されたもの
として処理されますので注意してください。

[5.1] gemini
	２段式ローダで、最も視覚的な使い方ができますが、コードサイズも大き
	く現在の版では約 8KB 程あります。以下に述べる特徴を持ち、内蔵するロ
	ーダの中でもっとも機能が豊富です。他のローダは gemini のサブセットと
	考えても差し支えありません。

	    1) CHS/LBA を自動判別してアクセスできます。
	    2) DISK-BIOS から見える任意のハードディスクから OS ローダを起動
	       できます。
	    3) DOS/Linux 拡張領域内のブート標識(Active flag)をたどって自動
	       的にブートさせることができます。
	    4) DOS/Linux 拡張領域内部からも選択ブート可能です。
	    5) ブート標識(Active flag)を変更後に OSローダを起動させることも
	       できます。
	    6) もし、何らかの理由で２段目に制御を渡せない時には、１段目だけ
	       でブート標識のある領域から起動させることもできます。


[5.2] taurus
	gemini の１段目ローダ(pollux)から２段目ローダ(castor)を呼び出す機能
	を外したものです。コードサイズはマスタレコードに収まる 446 バイト以
	下で特徴は次の通りです。

	    1) CHS/LBA を自動判別します。
	    2) 起動対象とできるのは DISK-BIOS から見える最初のハードディスク
	       のみです。
	    3) DOS/Linux 拡張領域内のブート標識(Active flag)をたどって自動的
	       にブートさせることができます。
	    4) ドライブの切り替えや起動領域の選択、ブート標識の再設定等はで
	       きません。

	古くからある MS-DOS の "fdisk /MBR" で書き込まれるローダに LBA対応と
	DOS/Linux 拡張領域内からもブートさせる機能を追加したものと考えれば分
	かりやすいでしょう。


[5.3] aquila
        gemini の１段目ローダをベースに、限定的ながら起動領域の選択機能を持
	たせたものです。コードサイズはマスタレコードに収まる 446 バイト以下
	で、次のような特徴を持ちます。

	    1) CHS/LBA を自動判別します。
	    2) 選択起動できますが、対象となるのは DISK-BIOS から見える最初の
	       ハードディスクのみです。
	    3) DOS/Linux 拡張領域内のブート標識(Active flag)をたどって自動的
	       にブートさせることができます。
	    4) DOS/Linux 拡張領域内部からも選択起動可能です。
	    5) ドライブ切り替えやブート標識の再設定はできません。
	    6) 選択メニューを呼び出すトリガには <CapsLock>キーを当てています。
	       他のキーを割り当てたければ、altair.asm にある TRIGGER_BIT の定
	       義を適宜書き変えてください。

	余計な機能は不要で、時々だが１台目のドライブから選択起動したい場合な
	どに使ってください。

	使い方は以下のとおりです。

	    1) ブート標識のセットされた領域から起動させるには、<CapsLock> を
	       off にして待ってください。何もすることはありません。

	    2) 選択起動をしたい場合には、BIOS によるキーボードの初期化が終わ
	       ったころをみはからって、<CapsLock> を on にし、選択メニューが
	       表示されるのを待ちます。最初に現れる選択メニューは以下のように、
	       マスタテーブルの内容から、登録されているパーティションの番号と
	       システム標識を１６進数で表示します。なお、プロンプト "Boot>"
	       に続く数字はブート標識がセットされている領域の番号です。

		------------
		No Sys
		1   0B
		2   06
		3   A5
		4   05
		Boot>3
		------------

		この例では、１〜３の領域は数字を選んで <Enter> キーを押すこと
		によりブートさせることができます。４番目の DOS 拡張領域を選ぶ
		と、さらにその内部を表示し、次の選択を促してきます。

		------------
		No Sys
		1   83
		2   05
		3   
		4   
		Boot>4.1,1
		------------

		"Boot>" に続く数字が増えました。左側から２個は、各々マスタテー
		ブル上の登録番号、拡張領域内をどこまでたどったかを示す意味をも
		っています。ここの例ではマスタテーブル上の４番目の領域を１つ入
		った位置にいることを示しています。
		ここで、DOS 拡張領域の "2" とタイプし <Enter> を打つと、さらに
		１つ仮想ボリュームのリンクをたどっていけますので、左から２番目
		の数字を見ながら目的の位置までたどり、ブートさせることができま
		す。

	***************************
	***  aquila の制限事項  ***
	***************************
	    コードサイズにより以下のような制限があります。

		a) 仮想ボリュームのリンクを１つ戻る機能はありません。
		   選択中に目的の場所を通り過ぎてしまった場合は、<BS>キーでマス
		   タテーブルの選択画面に戻り、もう一度やり直してください。
		b) 仮想ボリュームのリンクをたどる時に、誤って目的の場所よりも手
		   前の領域でブートさせようとし、失敗した時にも (a) 同様に <BS>
		   でマスタテーブルに戻ってやり直してください。


[5.4] scorpius
        extipl ver4.x に Extended-IPL と称して内蔵されていたローダの名前を変えた
	ものです。最も古くからあり、選択起動できるローダで gemini の仕様のベース
	となったものです。コードサイズはマスタレコードに収まる 446 バイト以下
	で、特徴は次の通り。

	    1) CHS モードでのみ動作。
	    2) LBA には対応していないので 8GB 超の位置 からブート不可能です。
	    3) DISK-BIOS から見える任意のハードディスクから OS のローダを起動
	       することができます。
	    4) DOS/Linux 拡張領域内のブート標識(Active flag)をたどって自動的
	       にブートさせることができます。
	    5) DOS/Linux 拡張領域内部からも選択ブート可能です。
	    6) ブート標識(Active flag)を変更後にブートさせることもできます。
	       但し、変更できる対象は BIOS からみで最初のハードディスクのマス
	       タテーブルのみです。

	このローダの詳細は添付の scorpius.txt を参照してください。



[6] 拡張領域の取り扱い
ここで言う拡張領域とはシステム標識 0x05(DOS 拡張領域)、0x85(Linux拡張領域)、
0x0f(FAT-LBA拡張領域)の３種類を指しています。
IBM の技術仕様書によれば、「この標識を持つ領域はブート不可」と明記されています
し、DOS の fdisk などブート領域を設定できるプログラムではブート標識を設定しては
いけない、とも書かれています。

しかし、extipl 内蔵の全ローダは DOS 拡張領域ブート標識が設定されていると、さら
にその内部からブート標識のある領域を探し、そこからブート処理を行うことができま
す。この仕様を外れた処理の理由は、Linux のインストーラが DOS 拡張領域の中にブ
ート対象となる Linux native(0x83) を置いてしまうこと、あるいは、オペレータが意
図的に拡張領域内に Linux のブート領域をインストールしてしまうことに対応するた
めです。このために現在、拡張領域内部からブート確認が取れているものは linux の
みです。おそらく、その他の OS ではブートできない可能性が極めて高いと思われます。

拡張領域の内部はポインタによりリンクされた仮想ボリュームの集まりです。仮想ボリ
ュームは拡張領域と１個の論理ブロック領域で構成され、この拡張領域に次の仮想ボリ
ュームへのポインタが格納されています。このリンク構成は extipl のサブコマンド
"show" を -d(debug option) 付きで使うことにより見ることができます。以下はその
例です。(デバッグ情報を画面に表示しますので、実際はもっと雑然としています)

	 [4] 05: Extended DOS
	    ( 1) 83: Linux native
	    ( 1) 05: Extended DOS
	       ( 2) 83: Linux native
	       ( 2) 05: Extended DOS
	          ( 3) 82: Linux swap/Solaris x86

この例では、内部に３つの仮想ボリュームがあり、それらが拡張領域を意味するシステ
ム標識を使って繋がっているのがわかります。つまり、マスタテーブルの SysID=0x05
には最初の仮想ボリューム(1)へのポインタがあり、(1)には、SysID=0x83 の Linux
native の論理ブロック領域と次の仮想ボリューム(2)へのポインタか格納された拡張領
域があります。そして、(2)からリンクされた仮想ボリューム(3)には SysID=0x82 の
Linux Swapのみで、リンクが終端します。

extipl 内蔵の全ローダは拡張領域内部からブート標識を探して自動的に起動させるこ
とができますが、fdisk 等でマスタテーブル(ここの例では４番目の領域)にブート標識
を設定しただけでは OS を起動させることはできません。拡張領域内部のリンクを、目
的の場所までたどっていけるようにブート標識を設定しなければなりません。上記の構
成例で、拡張領域内の２番目の Linux native 領域からブートさせるには、

	A[4] 05: Extended DOS
	    ( 1) 83: Linux native
	   *( 1) 05: Extended DOS
	      *( 2) 83: Linux native
	       ( 2) 05: Extended DOS
	          ( 3) 82: Linux swap/Solaris x86

のように、マスタテーブルから"(2) Linux native" の位置までブート標識のリンクを作
っておかなければなりません。マスタテーブルを起点として、仮想ボリューム内部にブ
ート標識のリンクを設定するには、extipl のサブコマンド "chgboot"、あるいは、内蔵
ローダ gemini の "Mark active and Boot" 機能により容易に行えます。
      ========
	Linux が持っている選択ブート可能なローダ Lilo をマスタレコードに置い
	た場合、この MBR-Lilo には自分が次に起動すべき２段目ローダの置かれた
	セクタアドレスが書き込まれています。このため、ブート標識の有無にかか
	わらず Linux を起動させたり、２段目ローダから他のＯＳを選択起動させ
	られますが、この２段目ローダは Linux 領域内に置かれ、Linux に非常に
	強く依存した設計になっています。
	一方、extipl が内蔵するローダは特定のＯＳにはまったく依存していません。
	ローダ内部には特定の領域やプログラムへのポインタはいっさい保持してい
	ませんので、起動する論理ブロックに至るリンクをブート標識により作って
	やらなければなりません。
      ========



[7] エラーコード

gemini 以外の内蔵ローダは DISK BIOS がエラーを返した時に、２桁 16進数のエラー
コードを表示して作業を放棄しますので、適切な対処をしてください。

唯一 gemini だけは

	Disk BIOS Error, code=0x????

と、"????" の部分にドライブ番号(上２桁)とエラーコード(下２桁)を 16 進数で表示
し、処理の継続を試みます。この時に画面が乱れるかも知れません。無理な強行はやめ、
BIOS の解説書により原因を調べて適切な対処を施してください。なお、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


[8] 補足

[8.1] 内蔵ローダの内部構造
内蔵している IPL の動作に興味があるならば添付の techical.txt をご覧ください。
説明は extipl が最も古くから内蔵しているローダで、ここでは scorpius と呼ばれ
るものについてですが、デフォルトでインストールされるローダ gemini でも基本的
な処理は何ら変わっていません。十分参考になると思います。


[8.2] extipl の option flags
インストーラ extipl は特殊な用途のために次のような４個の option flag を用意し
ています。

    -d: debug
	書き込む内容を検証するための option です。この option が指定される
	と、実際にブートコードを HD あるいは FD に書き込むことは行わず、そ
	のイメージを "./_BootSec.???" として書き出します。??? の部分は、そ
	の時に書き出された順序で 000 からの連番が振られます。
        ダンプツールや 8086 逆アセンブラ ndisasm を使って書き出される内容の
	確認ができます。内蔵 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を使わ
	ないでください。安易に使って不幸になっても責任はとりません。
	------------------

========
/*  $Id: extipl.seed,v 1.4 2001/01/06 15:29:53 takamiti Exp $  */
# end of extipl.txt
