MZ-2000エミュレータ支援ツール

[ 仮想ボード メモリ編集ツール ] [ 仮想ボード GRAM-BMP変換ツール ] [ ステートセーブ内のメモリ編集ツール ]


仮想ボード メモリ編集ツール(EmuZ-1M10)

DLL作り方を勉強するための習作プログラムで、ステートセーブ内のメモリ編集ツールの仮想ボード版。使えそうならどうぞ。 本ページからダウンロードしたDLLを利用する場合、ご利用の環境によって「Microsoft Visual C++ 2015 Redistributable (x86)」が必要になります。お持ちでない方はマイクロソフトのダウンロードセンターから検索して入手してください。 ソースを自前でコンパイルして作成したDLLはそのまま利用できると思われます。

ダウンロード

補足:詳細なデバッグをしてませんのでバグを見つけたら連絡を頂ければ対応できるものはします。書き換えたアドレスの範囲が表示されますが、最小アドレスと最大アドレスの表示で、その間は変更されてないメモリも存在します。意図するメモリの範囲外を書き換えてないかの確認用です。

EmuZ-1M10 Ver1.0(2017年1月17日版):ダイアログ内のパス名が自動で水平スクロースしなかった点を訂正。

EmuZ-1M10 Ver1.0(2016年5月14日版をポーティング)


仮想ボード GRAM-BMP変換ツール(EmuZ-1M11)

仮想ボードで、エミュレータとWindows間でGRAM内容とBMPファイル間の変換ができます。 エミュレータで表示したCGやゲーム画面のスクリーンショットはWindowsのPrint Screen機能で取れますが、逆はできないので作ってみました。 Windowsで加工した画像データをエミュレータ上で表示させたり、ゲーム画面をBMPファイルへ保存し、1Z001などが起動した状態でGRAMへ戻せるので何らかの利用範囲が広がると思われます。 使えそうならどうぞ。本ページからダウンロードしたDLLを利用する場合、ご利用の環境によって「Microsoft Visual C++ 2015 Redistributable (x86)」が必要になります。お持ちでない方はマイクロソフトのダウンロードセンターから検索して入手してください。 ソースを自前でコンパイルして作成したDLLはそのまま利用できると思われます。

ダウンロード

補足:詳細なデバッグをしてませんのでバグを見つけたら連絡を頂ければ対応できるものはします。

EmuZ-1M11 Ver1.0(2017年1月17日版)


ステートセーブ内のメモリ編集ツール

エミュレータから保存できる動作スナップショットであるステートセーブにメインメモリ内の 内容も含まれてる点を利用して、メモリ内へ打ち込むプログラムを書き込めればと思って作成しました。 このステートセーブ内のメモリイメージを書き換えるアイデアは一緒にMZ-2000関係の入力支援して頂いていた方から教えて頂いてまして、 手作業での書き換えを自動化してしまおうと思って作ったものです。

利用方法

用意するのは、ステートセーブデータと埋め込むダンプリストのテキスト化したものか、 バイナリのダムデータです。

ステートセーブデータ

ステートセーブデータは、MONITOR MZ-1Z001Mがロードされた状態か、BASIC MZ-1Z001(SB-5520や ディスクBASICでもOKです)がロードされた状態でステートセーブを行っておきます。MONITOR TS-1000/2000(WICS)、dB-BASICでも書き換えが可能です。 通常通りに起動し、BASICやモニターのプロンプトが出てる状態でFile→State Saveを選ぶとファイル選択して保存されます。 ついでに、チェックサム算出プログラムや検証用のツールをロードしておくと書き戻した時にすぐチェックできて便利かもしれません。

ダンプリストのテキストイメージかバイナリデータ

埋め込むダンプリストのテキストイメージのファイルを用意します。(既にバイナリデータを持ってる場合はそれを利用する事も可能) ダンプリストは雑誌I/OやPiOに載っていた16バイト単位のもの(一応チェックサムは最後のデータとみなすので8バイト単位もいけると思われます)を テキストファイルに用意します。

ダンプリストのテキストイメージは、先頭4バイトの16進アドレス、2バイト単位にスペースで区切ったデータの 形式なら埋め込む事ができます。極端な話、アドレスと1バイト分のデータという形で用意してもOKです。 恐らく、雑誌に記載されてるダンプリストを取り込んでテキストにすると思いますので、下記のように用意するといいと思われます。

ページ丸ごとでもいいですが、下記のように切り分けておくと誤認識などの間違いが減ると思われます。

OCRソフトは有料のものでもフリーウェアでも何でもいいと思います。有料のものの方が認識率も高いと思いますが、 フリーのものでも使い方次第で何とでもなります。手間を省きたいならここにお金をかけるといいかもです。 (2015-01-25追記:パナソニックの読取革命v14を使うとテクノポリスのC-GRACE関係のダンプはOとゼロ、小文字のL、Iと1の誤認識がありますが、それ以外ほとんど間違いなく認識できました。かなりお勧めです。) うちはフリーのFree OCRを利用しました。SmartOCR等でもいけると思われます。

OPENでイメージを読み込ませ、OCRで文字認識させます。右側のテキスト領域にダンプイメージのテキストが 出力されるので、テキストエディタなどへコピー&ペーストします。 用意したダンプリストのイメージを全てOCRでテキストイメージにしてしまいます。 また、誤認識もかなりありますので、テキストエディタでOをゼロに置き換えたり、小文字のLを1に置き換えたりして 正確に直していきます。 Bと8、Aと9(AがRになるのは判りやすい)辺りはよく入れ替わって認識しますので、最後まで苦労すると思います。 ダンプリストのスキャンでゴミや汚れなどがあると誤認識しますのでOCRで認識させる前にダンプリストイメージをペイントなどで手直しするのも手です。

ちなみに、Apollo氏のツールにdmp2motがありますが、このツールでダンプリストのテキストイメージを チェックサム付きチェックすると一気に全部のチェックを行うのでこれでダンプリストのテキストイメージを訂正しておくといいかも。 出来上がったモトローラS形式のファイルを同氏のmot2binでバイナリ変換し、$0000-$5FFFFまでを切り取ると埋め込めるバイナリも作れます。 こちらはアドレス指定で埋め込んでください。

ツールによりメモリへデータを埋め込む

ツールを起動し、ステートセーブデータを指定、ダンプリストのテキストを指定(またはバイナリを指定)します。 それぞれのファイルをエクスプローラから各エディットボックスへドロップしてもセットできます。

ダンプ解析ボタンを押すと、指定したダンプリストのイメージを解析してステートセーブ内のメインメモリへ データを書き換えます。もし、複数のダンプリストのテキストイメージがあるなら、ダンプ解析を押してから 次のダンプリストイメージを指定し、ダンプ解析ボタンを押せば続けて反映できます。 確実に書き換えを確認する意味でも連続で行わずに一回づつ行った方がいいかもです。 ステートセーブデータをセットすると今まで書き換えた内容はリセットされますので、間違えた場合はやり直してください。

全てのダンプリストイメージを書き換えたら、書き戻しボタンを押してステートセーブデータへ 書き戻します。ボタンを押すと一世代バックアップが残ります。

エミュレータのメモリへ

ステートセーブデータをエミュレータからFile→State Loadで読み込ませ、メインメモリへ反映させます。 モニターに入り(または、モニター上で)、Dコマンドで内容を確認してみると、書き換わってると思います。 Sコマンドでテープイメージにセーブが可能となります。ジャンプアドレスは1Z001Mなら安全のために空白(またはBASICのホットスタートアドレス等)を指定したものも書き込んでおくといいかも。 TS-1000は$00F0がホットスタートアドレス。(WICSインタープリタなら$1503です。)

注意点としては、メモリのどこでも書き換えが可能ですので、モニター本体やワークエリアを 壊すとステートロードして動かないケースもあります。うまく空き領域へ埋め込むようにしてください。

ダンプリスト反映のコツ

OCRでテキスト変換すると誤認識が結構あります。数字の1がl(小文字のエル)、数字の0がO(大文字のオー)などはエディタで置換してしまえばいいのですが、 数字の8と大文字のB、数字の9と大文字のAはかなり厄介で最後まで悩まされると思います。 対処方法としては、もっと賢いOCRソフトを使うのがいいでしょう。当方みたいにお金をかけてられないなら、 根性で縦サムの比較と255バイト単位などのチェックサムを見比べるしかないと思われます。 入れ替わり方によっては縦横サムが一致して入れ替わるケースもあるので要注意です。

ダウンロード

補足:詳細なデバッグをしてませんのでバグを見つけたら連絡を頂ければ対応できるものはします。書き換えたアドレスの範囲が表示されますが、最小アドレスと最大アドレスの表示で、その間は変更されてないメモリも存在します。意図するメモリの範囲外を書き換えてないかの確認用です。

2016年5月14日版(バイナリ形式の埋め込み時もアドレス範囲を表示するように変更。)

2015年1月25日版(Oh!XのCRCタイプのダンプリスト対応。8バイトに満たない行もいけるはず。バグってたらすみません。)

2013年10月1日版(UNIX版S-OSのネイティブファイルのテキストファイルの書き換え対応)

2013年7月12日版(Oh!MZのチェックサムシステムVer1.0、1.1の形式をサポート。)

2012年1月7日版(v0.9対応。オフセット指定により何でも書き換えが出来ます。)

2011年9月28日版(アドレスサム部下2桁のみのチェックサム機能を追加。月刊マイコン誌もいけます。)

2011年8月3日版(チェックサム部下2桁より取得するように修正)

2011年3月22日版(チェックサムなしがうまく反映されない不具合を修正)

2011年3月12日版(縦サム対応)

2011年1月14日版(参照ボタンが効かないケースがあったので対応。テキストモードで反映後にアドレスの範囲を表示。)

2010年12月18日版