OSの起動フロッピーをそのままFD-IPLwareに

OSFD-IPLware Version 2.00

Copyright (C) 2023 まりも(DOSsoft)

  もとのフロッピーも、フロッピー以外からもブートできます。1.44MBもOK。 

【1.このツールの目的】

 当サイトでは、PC-98を強化するソフトウェアツールとして、20年前にIPLwareという仕組みを公開しており、2022年にはそれをFD上で実行できる「FD-IPLware」も公開してきました。しかしFD-IPLwareはIPLwareアプリケーションを起動することはできても、FDにあるOSを起動する場合はメディアを差し替える必要がありました。

 そこで、OS起動可能なフロッピーをそのままに、空いているトラックにIPLwareアプリケーションを書き込み、FDブート時にはIPLwareアプリケーションの後にもとのOSの起動が可能なツールを作成しました。

 ただし制約があり、3.5インチおよび5インチの2HDの1232KBフォーマット(セクタ長1024バイト、8セクタ)および1440KBフォーマット(セクタ長512バイト、18セクタ)のメディアに限るものとしています。後者ではフロッピーの最終5トラック以内がファイルで占有されていないことも条件として必要です。

 おそらくこのツールが最も効果的なのは、DISK BIOSの不備を修正・改善するようなIPLwareアプリケーションの組み込みです。LBA_IDE2,SCSI_RAM, EXIDE543 などです。大容量のHDDを接続した環境では、これらを適用したあとにDOSを起動しないとどうにもなりませんが、本ツールでは1枚のDOS起動フロッピーで完結するのです。

[同意の上ダウンロードする]

【2.使い方(FDへの処理)】

 まずOS起動可能なフロッピーメディアを用意します。これには原本ではなく必ずバックアップコピーを作り、それを運用するようにしてください。

 アーカイブ ZIPを解凍して、OSFDIPL.EXE を取り出しておいてください。これをコマンドラインから実行します。コマンドラインから実行しますが、引数として、IPLwareのアプリケーションファイル名を与えてください。例えば次のようにします。

   OSFDIPLW A:\IPLAPP1.COM B:\BIN\IPLAPP2.BIN C:IPLAPP3.BIN

 PATH名(相対PATHも使用可)がファイル名の前にあっても大丈夫ですし日本語もOKですが、ファイル名部分には日本語を使用しないでください。あくまでもディレクトリ、PATHの部分のみ日本語使用可能としています。コマンドラインは126文字までしか記述できないので、多数のものや長いPATHを記述する場合は注意してください。なお最大15個までのアプリケーションを登録できます。それ以上指定しても捨てられます。

 実行が開始されると、フロッピードライブの接続状況リストが表示され、

「ドライブA:にメディアを挿入してありますか?(y/n).」

という問いが表示されます。このドライブでよければ Y で答えてください。リストの次のドライブのほうがよければ、N で答えてください。ドライブ名が変わって、また同じメッセージが表示されますから、メディアがセットされているドライブまで来たら Y で答えてください。なおESCを押すと実行を中断します。

 まったくFDDが接続されていない場合は、

「1MBフロッピードライブ装置のドライブ文字が存在していません.」

となって中止します。

 この後現在のIPL(Initial program loader, フロッピーの先頭のプログラム)が読み込まれます。ここでメディアの種別が違っていた場合は強制終了となります。

 実行が次に進むと、コマンドラインに記述したファイル名のファイル読み込みが行われます。1つのファイル名を間違えても、そのほかのファイルが存在すれば続行されます。またファイルサイズをチェックしており、収容可能な容量に達すると、それ以降のアプリケーションファイルは登録されません。

 読み込みが終わると、

「これからフロッピーの77-79シリンダにOSFD-IPLwareを書き込みます.

という表示が出ますと、いよいよここからは書き込みの段階となります。続いて、

「■ブート先選択メニュー表示時にbeepを鳴らすようにしますか?」

という問いが出ます。音が鳴るのは嫌いであるという方はNで答えてください。

 1.25MBメディアの場合は、次に赤い文字で

「フロッピーの77-79シリンダをフォーマットしています...」

と表示されますが、しばらくすると消えます。いっぽう1.44MBメディアの場合は、緑色の文字で

「77シリンダ以降が使用できるか調査します」

と表示され、成功すれば、

「このフロッピーには OSFD-IPLwareを導入できます」

と表示されます。

 続いて、

「フロッピーの77-79シリンダにOSFD-IPLwareの書き込みを行いました.」

となれば正常です。読み出したもとのIPLはこの最後のセクタに退避されています。

1.25MBメディアの場合

1.44MBメディアの場合

 以上は1回目適用のときの手順です。2回以上適用しようとすると、次のメッセージが出ます。

「OSFD-IPLwareは既に1度組み込んであるようです. 現在のIPLの退避は行いません.」

もとのIPLのバックアップがさらに上書きされることで、もとのOSブートができなくなったり、後述の復元操作ができなくなってしまうため、2回目以降はIPLの退避をしないという注意書きです。とくに気にする必要はありません。

【3.使い方(FDの運用)】

 いま作ったフロッピーは、起動優先順位に関係なくフロッピードライブに挿入して起動できます。赤から青に変化する間にIPLwareアプリケーションが読み出されます。その後は 「IPLwareアプリケーションロード中」⇒「スキャン中」⇒実行中 という表示が画面中央やや下に現れ、その右にアプリケーション名が表示されます。アプリケーションの実行を一時停止するにはSHIFTキーを押し続けておいてください。

●キー押しによる実行制御

 HD版のIPLwareにも有った機能ですが、デバッグ/テスト用に実行制御できます。画面背景色が変わりつつある間に、

[DEL]キーを押してあると、OSFD-IPLwareのアプリケーションは全て回避されます。

[HELP]キーを押してあると、アプリケーションごとに実行可否(y/n)の逐次問い合わせが出ます。

なにかの理由でハングアップしてしまうアプリケーションを入れた場合などに実行回避できます。

 IPLwareの実行が終わると、緑色の枠に黄色の文字の画面が現れます。

「そのままENTERキーを押すと、このフロッピーディスクのOSを起動します」

とあるとおり、ENTERを押すと、以前と全く変わらない、このフロッピーからのOS起動となります。

 枠に説明が書かれているとおり、特定のキーを押すと、ブート先を選ぶことができます。フロッピー起動したいときはFですが、その前に起動フロッピーを差し替えてください。そのままだとまたIPLwareからの実行し直しとなってしまいます。既に述べたように、「この」フロッピーから起動するなら、そのままENTERキーです。その他のデバイスからの起動は、
[1]押し IDE#1/SASI#1
[2]押し IDE#2/SASI#2
[H]押し IDE#1/SASI#1
[S]押し SCSI
[M]押し MO
[B]押し ROM BASIC

などとなっています。接続されていないデバイスを指定するとハングアップしてしまうので注意してください。またMOは環境によってはここからブートできない場合があります。なおこのメニュー部はバージョン1.10から一部変更となっています。

 ここでESCキーを押すとこのメニューからIPLwareのローダに戻ります。今度は青枠となります。FDメディアを抜いてからどれかのキーを押せば、メモリスイッチの起動デバイス順が標準のときはそのとおりの検索になります。HDが接続されていればそこから起動しますし、何も無ければ【システムディスクをセットしてください】のおなじみの表示が現れます。

 話を戻しますが、ブート先選択メニューを出さずに、IPLware実行⇒自動でこのフロッピーのもとのOSブート にしたい場合というのもあろうかと思います。そのときは、メモリスイッチの起動デバイスを「1MB FDD」に設定しておいてください。それはシステムセットアップメニューまたはDIPスイッチ2-5でメモリスイッチ「保持」にして、DOSディスクに付属している switchコマンドで設定します。

 OS起動フロッピーはDOSに限りません。物理フォーマット形式が1024B/s*8セクタの1232KBのメディア(8インチ除く)であればおそらく何でもOKです。

【4.使い方(元に戻す)】

 コマンドラインで

  OSFDIPLW /R

とすると復元モードになります。/ は - でも構いませんし、 Rは小文字 r でも構いませんが、これ以外のパラメータやファイル名をつけてはいけません。複数の項目を書いてあると、それはアプリケーション名として扱われてしまいます。

 このオプションで元に戻すことができます。なお登録されているアプリケーションを差し替える際に、/R オプションで元に戻す必要はありません。既に述べたように、複数回組み込んだ場合にはもとのフロッピーのIPLのバックアップは上書きしません。

 現在フロッピーがオリジナルなのかOSFD-IPLware適用済みなのかを先に確かめたいときは、

  OSFDIPLW /L

というようにLオプションをつけてください。組み込まれたアプリケーションのリストが表示されます。もし組み込まれていなければ、

「OS FD-IPLwareを適用したフロッピーメディアではないようです.」

というメッセージが出ます。

【5.注意事項】

 本ツールは起動用FDのファイルシステムには手をつけないとはいえ、IPLには変更を行いますから、不測の事態に備え、原本のフロッピーではなく、バックアップしたものを運用するようにしてください。シリンダ77以降に不良が発生した場合、もとに戻せなくなりますので、バックアップは必要ですし、下記のようにOSFD-IPLwareを導入後に完全なメディアコピーができない可能性があるからです。

 【1.25MBメディアの場合】シリンダ77以上のところに秘密のデータが置かれているような起動フロッピーはまず存在していないと思いますが、あるとすると本ツールと競合します。したがってプロテクトが掛けられたメディアに適用してはいけません。また8インチのFDDは77シリンダ以上へのヘッドの移動すは想定されていません。8インチFDに対しては絶対に使用しないでください。使用すると機構が壊れる恐れがあります。

 本ツールでOSFD-IPLwareを組み込んだメディアの完全複写は、一般的なDOS用フロッピーツールではできないと思われます。76シリンダまでしか存在しない前提に設計されているはずだからです。

 【1.44MBメディアの場合】シリンダ77サイド1から最終セクタまで(5トラック)を、skipセクタ扱いとしてFATに登録します。そこは OSFD-Iplwareのシステムとアプリケーションの格納場所となります。chkdskコマンドでは「スキップセクタ」と表示され、そこにはファイルを書き込めなくなり、実質的に容量が46080バイト減りますが、異常ではありません。しかしシリンダ77サイド1より後方をファイルが既に使用しているかもしれません。そのときは本プログラムを適用できません。ただしDefragなどを実行してファイルを前方に詰めれば、適用可能になる場合があります。

 そのため、一部のフロッピー複写ツールはskipセクタを不良箇所と判断してFD-IPLware部分をコピーしない可能性があります。完全な複写をするには、ファイルシステムを一切チェックせずトラック単位でコピーするものを使用してください。MS-DOS 6.2に含まれる FDNCOPYは該当します。

<以降はFDメディア種別によらず共通>

 フロッピーから起動できないような環境設定、たとえばメモリスイッチのブート装置を「標準」「1MB FDD」以外に設定すると実行できません。

 動作可能なアプリケーションは、IPLwareバージョン3.00準拠で、ハードディスクに書き込みを行わないものに限ります。

 現時点ではFD-IPLware対応アプリケーションのうち「PCISETバージョン1.25」は本プログラムによる組み込みに対応していないので、使用しないでください。従来のFD-IPLwareのみの対応です。

 CPUがV30とそれ以上であれば動作確認がとれています。8086ではおそらく動作しません。

 ハイレゾモードではどのような動作になるか不明な点があります。一応、ブート装置選択メニューは機能するようですが、そもそもハイレゾではリセット時に押されたキーでFDかHDかの起動決定しかできない仕組みです。それが優先されます。  

 本ツールは、2022年5月に発表したFD-IPLwareのバージョンアップという位置づけではなく、別の特徴を持ったソフトウェアです。それぞれ利点欠点が異なるので、使い分けてください。たとえばN88-DISK BASICのメディアのブートには本ツールは対応できませんが、従来のFD-IPLwareならメディアを交換の上対応可能です。

 以前のFD-IPLwareのFDに対して、本ツールOSFD-IPLwareを適用しないでください。そのようなことをしても実用的な意味はありません。

【6.技術的情報】

 アプリケーションプログラムがセグメント6000hオフセット0100hにロードされる点は、HDD版のIPLwareとまったく同じです。HDD版と異なるのは、バージョンが3.30未満であることです。たとえば開始時点のレジスタがSI=0303h,DI=0000hであれば3.03を意味します。その場合開始時点のレジスタはモジュールのディスク上の存在場所を示しません。CX=FFFFh, DX=FFFFhとしています。

 セグメントレジスタはCS=DS=ES=SS=6000hです。スタックポインタは BP=SP=F7FEhです。

 本ツールはファイルシステムには影響を与えません。空いているところに関係ないデータファイルを保存することは問題ありません。

 1024バイト/セクタのフロッピーのIPLは 1FC0:0000にロードされて実行されます。これはすべての98で同じであるようです。その後本ツールのIPLが呼び出すシステム本体は、7400:0000にロードされ実行されます。したがってこれらのセグメントを固定的に使用するIPLwareのアプリケーションを作成・実行してはいけません。そのようなものはこれまでに存在していないと思われます。

 FD上のマップやデータ構造は次の通りです。


■1.25MBの場合シリンダ77〜最終、1.44MBの場合シリンダ77サイド1〜最終
本ツールのシステムとアプリケーション
offset  
0000h     ジャンプ命令
0003h〜000Fh 変数域
0010h〜00FFh アプリケーション登録情報(16バイト)×15個ぶん
0100h〜    IPLwareシステムのコード
   Appication Base というシグナチャ書かれたところまで(バージョン依存)
以降 〜BBFFh(1.25MB) ,〜B3FFh(1.44MB)まで
アプリケーションのバイナリが連続で詰めてある

■アプリケーション登録情報(16バイト)のフォーマット(従来のFD-IPLwareと同様)
offset
00〜07h 8文字のアプリケーション名、文字列余りの部分は20hの空白で埋めてある
08h   (未使用,将来check sum用に使う可能性がある)
09h   制御ビット 現在使われているのは bit6が1のときアプリケーションTYPE 2
0Ah〜0Bh アプリケーションのバイナリバイトサイズ
0Ch〜0Dh アプリケーションの置かれる位置で、システム域先頭からのバイトオフセット値
0Eh〜0Fh 未使用で0(32bitアドレス化のときの予約)


■マスタ−ブートレコードの内容については次のとおりです。 
オフセット00h〜3Dh  通常のBIOS parameter blockとしてのデータ 
オフセット3Eh〜3Fh  IPLコードへのジャンプ命令 
以降3FFhまで     IPLコードと自身が使うデータ 

 全ソースコードがこちらにあります。ZIPアーカイブにまとめられています。OSFDIPLW.EXE はCとx86アセンブリ言語で書かれています。80386オプションは使っていないのでV30以上の機種で動作するはずです。IPL部やシステム部はx86アセンブリ言語で書かれています。これのバイナリデータをテキスト化したものを、Cのソースで取り込んでいます。なおこのCソースではMS-DOS依存部がほとんどありませんので、移植はしやすいと思います。いっぽうx86アセンブリソースのほうはDOSおよび16bit版MASM依存度が高くなっています。本来は全てアセンブリ言語で書くつもりでしたが、プログラムの全貌が分かりにくくなる ので、処理の流れの大まかなところだけCを使用しました。

 このソースプログラムを部分的に参考にして別のフリーソフトを開発することは妨げません。自由にお使いいただいて構いません。 しかしほぼ全体を再コンパイルして有料ソフトウェアにするようなことは認めません。

【7.お約束】

 このプログラムはフリーソフトウェアです。自由に使用してよい代わりにサポートはありません。直接的・間接的に、このプログラムの運用の結果に何があっても、作者は一切責任を負わないものとします。著作権は作者が保持しています。著作権侵害のないようにお使い下さい。他のサイトへの転載は認めません。連絡先メールアドレスは、トップページに記載されています。

【8.改版履歴】

2023. 9.15 1.00版 新規作成

2023. 9.26 1.10版 相対PATH使用可、画面表示内容、起動デバイス選択コマンド文字の変更

2023.10. 1 1.20版 内蔵FDDが640KB固定モードに設定の場合でも動作するようにした

2023.10.15 1.25版 シリンダ77以上のエラーチェックを厳重にした

2023.10.17 2.00版 1.44MBメディアに条件付き対応、対象ドライブを選択可能にした

[戻る]