EMSボードの活用 

PC34 EMS RAMボードを用いたテキスト画面の退避・保存ツール

「TXTCPY34」 1.35

Copyright (C) 2021-2023 まりも

1.目的

 このツールは、I-Oデータ機器製のPC34シリーズのEMSボードを使って、テキスト画面wをキャプチャするというものです。COPYキーを押した時点での画面がEMSボードのメモリに保存されます。このツールは、リセット後、拡張ROMスキャンが行われた時から有効となります。他のROM搭載ボードの出す画面のキャプチャや、固定ディスク起動メニュー、IPLwareアプリケーションの画面もキャプチャすることができます。MS-DOS起動後にはいったん無効となりますが、割込みが効くようにするプログラムを実行することで、また使えるようになります。EMSボードに記憶させたテキスト画面情報は、グラフィック画面に転送して参照したり、BMPファイルに保存できます。 ここをクリックしてダウンロードする

2.準備および動作環境

 本ツールは、原則的には初代A-mateから後の機種に対応とします。初代B-FELLOWやそれ以前の機種では、キャプチャは可能ですが、後述のGETTXT34の動作が遅くなります。キャプチャプログラム自体は80386以上の機種に対応しています。ハイレゾモードでは動作しません。

 使用できるEMS RAMボードは、I-Oデータ機器製のPC34シリーズのみです。なおメルコのEMJシリーズには対応しません。リセットでマッピングが初期化されてしまうボードであること(ハードウェア的改造での解決は可能)のほか、PCIバス搭載機で使用し難い設計であることが理由です。

 PC34RAMボードは、「EMS専用」で設定し、拡張スロットに装着してください。98本体がPCIバス搭載機である場合は、[ESC][HELP][5]を押しながらの電源投入を一度行ってください。なおこの操作は一度だけで済みますが、何かの拍子に「SET THE SOFTWARE DIPSWITCH」の表示が出て起動となった場合は設定記憶が無くなっていますので、もう一度行う必要があります。

 PC34Rという最終型のボードについては、設定のためのユーティリティが必要ですが、無い場合は、おふがお氏作成の「メモ鯖ボウズ」も使用できます。その際メモリの全てをEMSとしてください。一部でもプロテクトモードメモリがあるとリセット時に初期化されてしまいます。

PC34シリーズの容量については1MB以上あれば十分です。本ツールでは1MBまでしか使用しません。

3.使い方

 このツールは次のように多数のプログラムから成っているので、役割と使用するタイミングをよく把握しておいてください。
LOADPC34.COMPC34ボードを初期化しD0000かD4000にTXTCPY34.BINをロードする
TXTCPY34.BIN最初にPC34ボードに送り込むブートプログラム
GETTXT34.EXEPC34ボードに現在蓄えられているデータをグラフィック画面上に映す
SETINT05.COMDOS起動後に本ツールを有効にするプログラム(必須ではない)
SAVEBMP4.EXE現在のグラフィック画面をBMPファイルに保存するもの

 電源投入後 MS-DOSを起動しますが、EMM386を使用しないで下さい。これは仮想86モードが不都合だからという意味ではなく、拡張ROM域を探す際にUMBで使われていることが問題となるためですが、バージョン1.30からは誤って仮想86モードで実行した場合には中止するようにしています。HIMEM.SYSはあっても構いません。カレントディレクトリに TXTCPY34.BIN を置いて、コマンドラインから

   LOADPC34

と打ってください(引数不要)。このプログラムでは、PC34ボードのメモリを拡張ROM域にマッピングし、ブート時に働くプログラムTXTCPY34.BINをアップロードします。拡張ROM域のD0000〜,D4000〜の空き具合によって自動で選択されます。どちらも空いていればD0000のほうが優先されます。

 この後はリセットします(電源を落としてはいけません)。リセットボタンの無い機種ではソフトウェアリブートを行ってください。ピポ音のあとメモリチェックが始まります。その後拡張ROMスキャンになります。この時から本ツールは有効となります。COPYキーを押すと「プィッ」という音がして、画面中央にシアン色で数字が出ます。この直前の画面情報がPC34ボードに蓄えられます。

 例えば一部のSCSIボードでは特定のキーの組を押すと設定メニューが出ますが、この時点でもCOPYキーを押せばキャプチャが可能となります。固定ディスク起動メニュー、IPLwareのアプリケーション時点でもキャプチャできます。

 再起動後のOS,アプリケーションによってはそのままCOPYキー押し機能が有効となりますが、多くのゲームアプリケーションでは無効にされてしまうと思われます。

 MS-DOS起動後にもCOPYキー割込が変更されてしまい、本ツールは無効となります。しかし、SETINT05.COM を一度実行すると機能を有効にできます。これ以降MS-DOSのアプリケーション中でCOPYキーを押せばキャプチャされますが、一部のものについてはやはりCOPYキーを無効あるいは自身の機能に変更してしまう可能性があります。

 N88 DISK BASICあるいは ROM BASIC中でも有効にしたい場合は、後述の技術的説明を参考にして、ご自身で割込ベクタの再設定を行うなどしてください。基本的にPC34ボードのデータは電源を落とさなければリセット・再起動しても保存されているので、BASIC終了後にMS-DOSを再起動して、下記のようにデータを取り出すことができます。他のOS・アプリケーション終了後も同様です。

■ キャプチャした画面の取り出し方

 MS-DOSコマンドプロンプトでGETTXT34を実行すると、次のような画面となります。右端にはPC34ボードに蓄えられているテキスト画面のデータのリストが表示されます。左側が空いているのは、ここにテキスト画面データのプレビューが表示されるためです。青字で書かれている説明は次のステップでの操作です。

 LOADPC34で初期設定したあとにCOPYキーで記憶させた最大20個までのデータがあります。COPYキーを押した日と時刻も表示されますので、必要な画面かどうかの判断に使って下さい(バージョン 1.00では年月も表示していましたが削除)。

 ↓↑キーでデータを選択し、ENTERキーを押すと、ピッという音が鳴り、そのデータのプレビューが全画面に表示されます。プレビューといっても記録された画面そのものです。ここで受け付けられるキーは次の通りです。

  図 メルコのSCSIボードの起動時設定メニューのときにCOPYキーを押して得たテキスト画面をプレビューしているところ

 ENTERキーを押してグラフィック画面に描画すると、テキスト画面とグラフィック画面が重なった状態となり、区別がつきにくいため、パレットは暗めに設定してあります。必要があれば、SAVEBMP4.EXE を実行し、現在のグラフィック画面をBMPファイルとして保存して下さい。なお実行の際にはパレットがデフォルト設定になり、グラフィック画面の表示が明るめになります。

 なお初代BX/BAやそれ以前の機種ではGETTXT34のグラフィック描画が非常に遅くなります。画面が青バックとなりクリック音が25回鳴ってからもとのパレットに戻って終了となりますが、1分程度かかることがあります。A-mate以上の機種ではほぼ一瞬です。いかにA-mateが改良された機種であるかがわかります:-)

4.注意すべき点

 D0000やD4000からの16KBおよびA5000からの12KBは、本ツールによりPC34ボードが占有しています。再起動後にはEMM386を組み込んでもかまいませんが、これらのエリアをUMBに割り当ててはいけません。config.sysの記述などは予め見直しておいてください。

 テキスト画面のデータは文字コードであって文字の形ではありません。このため外字を使って表示しているものは、キャプチャしても正しく再生できません。不明な文字コードは空白になるか、ノイズのようなブロックになると考えられます。また半角サイズの日本語文字の表示には、現在のGETTXT34は対応できていません。ブリンク(点滅)属性の文字はプレビューでは再生できますが、グラフィック画面に写したときには点滅を表現できません。

 高頻度でCOPYキーを押すと、カレンダ時計が不正な状態になることがあります。必要もないのに連打しないようにしてください。

 短時間電源切ったあとにまた起動した場合、PC34ボードにデータが残っていることがあります。またPC34Rでバックアップ電源を接続している場合は当然残ります。以前にキャプチャした古いデータがGETTXT34のリストに現れることがありますが、電源断の後には内容はかなり破壊されているはずです。そのようなデータをGETTXT34で表示するとテキスト文字化けしたものになります。作成日付時刻を参考にして、古いデータを表示しないようにご注意ください。

 LoadPC34.BIN を実行すると、PC34ボードのキャプチャ履歴はクリアされますから、基本的には電源を入れた後には必ずこれを実行してください。

※バージョン1.10で追記

 PCIバス搭載機では、予期せぬハードウェア障害によって、PC34ボードのRAMのデータが化けが不意に起こることがあるようです。そうなると解釈不能なデータとなり、GETTXT34が暴走することもあります。そうならない場合でも、表示が著しく乱れます。具体的には特定の文字コードが多く現れたり、アトリビュートエリアにでたらめな値が入ることでカラフルなゴミ画像などが現れます。その場合は一度電源を切ったうえで LoadPC34の実行からやり直し、キャプチャデータも作り直すしかありません。

※バージョン1.20で追記

 チェックサムを保存し、GETTXT34で表示する際に照合する機能が追加されました。データに異常がある場合は、表示前に6回、ピッっという音が鳴ります。おそらく表示にもゴミや文字化けなどの異常が見られるはずです。

※バージョン1.30で追記

 仮想EMMとしてLEMMを使用している場合、EMSボードのRAM領域がUMBに割り当てられてしまいます。そうなるとPC34ボード上のプログラムウィンドウにアクセスが出来なくなり、COPYボタンを押したときにCPU例外で落ちます。データ領域のウィンドウがUMBになっている場合はデータ不正で強制終了となります。LEMMを使うときはPC34の使用するメモリアドレスはUMBに割り当てられることがないように明示的にオプションを記述してください。

5.技術的説明

 PC34ボードなどEMSメモリボードは、16KBバイト単位のメモリウィンドウを持ち、それに任意のアドレスを割り付ける機構が備わっています。

 LOADPC34では、まずPC34ボードのウィンドウ0番をを拡張ROM域に設定し、EMSページ番号3Ehが見える状態とします。ここにキャプチャプログラム本体 TXTCPY34.BIN をロードします。このデータはブート可能な拡張ROM構造のプログラムとなっており、再起動するとまず実行されます。

 そのとき実行されるのは、COPYキーを押したときの割込のジャンプ先の設定のみです。ジャンプ先はPC34ボード内にある、テキストVRAMをEMSボードに転送するルーチンです。そのジャンプ先は、現バージョンでは先頭からのオフセット 0050hとなっており、実際の設定値は D000:0050hあるいは D400:0050hとなります(*)。これ以降、COPYキーを押すと働くようになります。

(*) リアルモード物理番地 0000:0014h に 50h,00h,00h,D0h(D4h)を書き込めばよい

 データのためのウィンドウのアドレスは、「拡張ROM域に置かれたPC34のコード部のオフセット0040hからの1ワード」に書かれています。A-mate以上の機種ではA400hが書かれています。それ未満の機種では、LoadPC34実行時に環境調査が行われ、SASI BIOSが無ければD4000hに、IDE BIOSが無ければD8000hにウィンドウが置かれます。それらも使えないようならC8000hに置かれます。したがってこのオフセット0040hのワード値を書き換えれば、任意のセグメントに置くことは可能です。

 テキストVRAMは文字コード8KB、アトリビュート8KBから成っていますが、通常使用されるのは80字×25行×2 の約4KB+4KBまでです。無理矢理90字32行の表示ソフトウェアを使ったとしても5760バイトまでしか使用されません。そこで少し節約して1800h(6KB)までを保存することにしています。アトリビュートコードと合わせると12KBです。画面1枚はEMSの1ページの3/4で足りることになります。

 データを格納するEMSページのウィンドウ番号は01で、データ域に使用するページ番号は 01h から 3Dhまで(現時点では14hまで)としています。ウィンドウの出現場所は拡張ROM域のプログラムとは別のところにする必要があります。PCI機およびi486機世代ではA5000-A7FFFの12KBに出現させることができますので、ここを利用しています。A4000のところは「CGウィンドウ」という本体の重要な機能のエリアと重複しますが、大丈夫なようです。

 いっぽうレガシー機では大丈夫とは言えないので、プログラム本体がD0000にあるときはD4000を使うこととしています。具体的には 9821シグナチャがシステムBIOS中にある機種のみA4000からを使い、そうでない機種では使わないようにしています。この判断は、実装が簡単なのでそうしているだけで、適切かどうかはわかりません。なるべくなら、無駄に空いているA4000を使ったほうがよいでしょう。

 ソースプログラムはこちらです(ZIPアーカイブ形式)

6.お約束

 このソフトウェアはフリーソフトウェアです。自由に使っていただいて構いません。

 ソースファイルを別途公開しますが、これを流用して何かを作ることは妨げません。ただし商用ソフトウェアにはしないで下さい。

 プログラムは、ある程度のテストを経て公開していますが、動作が完璧に行なわれるということを、作者は保証するものではありません。

 システムが起動しなくなったり、PC34メモリボードが破壊されるなどの不具合に付随した逸失利益、精神的損害について、作者である私は、一切責任は負わないものとします。これらの点を了承できない方には、使用(ソースファイル含む)を認めません。

 このソフトウェアを、不特定多数のダウンロードできる場所へ無断転載することは、禁止とします(転載不可)。

7.改版履歴

版  日付    内容
1.00 2023-1- 8 新規
1.10 2023-1-10 GETTXT34の機能大幅改良、データ破損の際のハングアップ軽減
1.20 2023-1-20 チェックサムを保存し照合する機能の追加
1.30 2023-1-30 LOADPC34のみ更新(仮想86モードチェックを追加)
1.30 2023-2-15 GETTXT34で一部の2バイト半角文字(PC-98独自)が表示できるようにした
1.35 2023-2-16 GETTXT34で2バイト半角罫線が表示できるようにした

まりも (連絡先メールアドレスはホームページ上で)

[戻る]