複数 IPLware アプリケーションの統合
IPLWuni 1.40
Copyright(C) 2019-24 まりも (DOSsoft)
IPLware というIPL組み込み型のアプリケーションがあり、最大8個までの アプリケーションを組み込むことができます。しかし8個でも足らないという 需要があるため作られたのが、本ツール IPLWuniです。 IPLWuniでは、複数のIPLware アプリケーションを一つにまとめるという ことを行います。これによりIPLwareのディレクトリ数の上限を緩和することが できるでしょう。IPLWuni内部には16個ぶんのディレクトリがあり、最大16個 までのIPLwareアプリケーションをまとめることができます。IPLWuniで統合したもの は、IPLwareからは IPLWAPPS.BIN という1個のアプリケーションとみなされます。
まずアーカイブを解凍して、カレントディレクトリにそのすべてのファイルがある 状態にします。UNILDR.DAT というファイルがカレントディレクトリに存在すれば、 それをローダプログラムとします。なければ標準で内蔵しているローダプログラムが 使用されます。
次に、組み込みたいIPLwareアプリケーションのファイルをカレントディレクトリに 用意してください。
たとえばそれらが iplapp1.bin iplapp2.com iplapp3.dat であるとする場合、コマンドラインから
IPLWuni iplapp1.bin iplapp2.com iplapp3.dat
のように打ちます。つまりまとめたいファイルの名前をコマンド引数に与えます。
ファイルがカレントディレクトリにない場合は、full path 名を与えてください。 拡張子がある場合それを省略できません。拡張子を除いた部分のファイル名が同一の ものでも統合はできます。なおコマンド引数の仕様で127文字以内しか記述できません ので、ファイルが多数となる場合には注意して下さい。
それぞれのアプリケーションの実行後に画面を1秒程度表示し続けるかどうかの 可否を問われますので、YまたはNで答えて下さい。Nのときはほとんど表示 せずに次のアプリケーションに実行が移りますが、その際SHIFTキーを押し続けて いれば、その間表示は保持されます。ただしアプリケーション側でもともと表示 時間を確保している場合は、Yで応答しないほうがよいでしょう。表示時間がさらに 長くなってしまいます。
実行が正常に終了すると、IPLWAPPS.BINというファイルが作られますので、それを iplware IPLWAPPS.BIN
で一括してIPLに組み込みます。
再起動し、IPLwareとして実行が開始されると、画面下の方(20行目)に
IPLWAPPS ロードします iplapp1
のように表示されます。「ロードします」の後の文字列は、統合前の各アプリケーションの名前となり、変化します。シフトキーを押下し続けていると、次のアプリケーションの実行に移る前に画面表示を保持します。実行順序はコマンドラインに書いたモジュールの記述順に対応しています。実行の前後関係が重要なアプリケーションがあれば、それを記述順序に反映させてください。
IPLWuniにまとめた場合、7000:0100hにロードされて実行されます。本来のIPLwareでは6000:0100h にロードされますので、ロードアドレスに極度に依存したようなアプリケーションは統合できません。
IPLWuni内のもとのアプリケーションを個別に実行可能/不可の設定することはできません。本来のIPLwareでは HELPキーでそれができ、DELキーで実行回避ができましたが、これらの操作ではIPLWAPPS.BIN 全体の制御となります。
したがって、じゅうぶんにデバッグがなされているアプリケーションのみを 統合するようにしてください。ひとつのアプリケーションがハングアップするような 場合でも、IPLWAPPS.BINの作り直し、組み込み直しとなります。
IPLWuni内で実行されるアプリケーションでは、実行開始時点のレジスタは 不定であり、唯一SI レジスタが 0300hということのみを保証します。 これはIPLware バージョン 3.00のときの仕様と同じです。そのほか保証外 ですが DXとCXとDI は いずれもFFFFhとしています。
IPLware 3.33以上では、ディスクに設定を書き込むアプリケーションを実行できました が、IPLWuni 内からロードされた場合は実行開始時点のレジスタがアプリケーション のディスク上の存在位置を示さないことから、そのようなアプリケーションを実行 しても、正しく書き込みができません。そのような既存アプリケーションとしては "PCISET"があります。
なお、ディスク番地を示すレジスタ初期値の DX:CXは FFFFFFFFh を指しているので、 正しくバージョンチェックを行っていないディスク書き込みIPLwareがあったと しても、単純に書き込みに失敗するだけで、既存のデータ域を潰すということは ないと考えられます。
統合したファイルを、また統合するということは、ファイル作成上はできますが、その実行は不可能です。ローダとして残る実行域のセグメントが重複するためです。
ファイル名の拡張子が .COM の場合はIPLwareタイプ2として扱い、IPLWuni内部でも 戻りコードをそれに対応したものとして扱います。判断基準は拡張子だけであり、 .COM以外であれば RETF命令で戻るタイプ1として扱われます。拡張子がない場合も 同じです。
IPLWuniでは固定の名前 IPLWAPPS.BINを出力しますが、これをリネームしてしまえば、別のアプリケーションということになり、統合されたものを複数起動することができます。実質的に非常に多数のIPLwareを組み込むことができるわけです。
核になるローダ部分について、アセンブリ言語のソースファイルを添付します。ファイル名は UNILDR.S です。
UNILDR.DATはこのソースをアセンブルして得られる最小単位の統合アプリのテンプレートでもあります。このファイルはIPLWAPPS.BIN 作成時に存在すれば読み込まれます(なくても構いません)。このファイルを使う場合は、不用意に改変や破壊をしないようにご注意ください。
UNILDR.DATの存在は必須でなくなりました。ユーザがオリジナルのローダプログラムを作成して使うことを想定し、別ファイルとしていましたが、とくに開発もしない一般のユーザにはかえって不便でしたので、標準で内蔵するローダプログラムを使用することとしました。
0〜7 | IDname プログラムを登録したときの識別名 8文字(以内)。 | ||||||
8 | 用途廃止しているが、将来使用する可能性もある。 | ||||||
9 | 実行制御ビット
|
||||||
10〜11 | プログラムモジュールのバイト数。すなわちもとのファイルのバイト数。 | ||||||
12〜15 | ユーザプログラムモジュールが格納されているオフセット位置 |
(例) バ イ ト 並 び 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 'I' 'P' 'L' 'A' 'P' 'P' '0' '1' xx ww (yyyy) ( zzzzzzzz ) (説明) "IPLAPP01" :プログラムIDname(一例) xx :(使用していない) ww :実行制御ビット、タイプを示す、00hまたは40h +10hのときは表示延長 yyyy :プログラムモジュールのバイト数 zzzzzzzz :プログラムモジュールの格納位置で先頭からのオフセットただし12〜15バイト目はアプリケーションが存在するディスク番地に代わって、統合ファイルの先頭からの存在バイト位置を示しています。ダブルワード長ありますが実際にはショートワードぶんしか使いません。統合ファイル内ではチェックサムは検査されません。制御ビットはIPLware本体のものと同じ定義としてあり、bit6が元のアプリケーションのタイプです。COMファイル型の場合に1となりそれ以外は0となります。bit 4を表示待ち時間の有無のbitとして今回新たに定義しました。
このプログラムはフリーソフトウェアです。自由に使用してよい代わりにサポートのようなものはありません。直接・間接的に、このプログラムの運用の結果に何があっても、作者は一切責任をとることはないものとします。著作権は作者が保持しています。著作権侵害のないようにお使いください。他のサイトへの無断転載は認めません。連絡先メールアドレスは、トップページに記載されています。
年月日 版数 内容 2019. 6. 3 1.00 新規作成 2019. 6. 4 1.10 Type2が実行できなかった問題の修正、表示保持機能を追加 2022. 5.23 1.20 16bit CPU機でもLoader部が動作するようにした 2022.10.10 1.30 UNILDR.DATがなくても実行できるように仕様を変更 2024. 3.20 1.40 IPLwareアプリケーションファイル名をPATH名で指定可能となった