*注意*

近年、AIによるサイト内情報の要約や解説など便利な機能が増えています。 ですが、技術系のブログについてのAI要約はまだまだ不正確な記述をする場合が多いです。 AI要約や解説を鵜呑みにせず、元記事を参照して必ず自らの目で確かめて判断するようにしてください。 *Note* In recent years, there has been an increase in convenient features powered by AI, such as summaries and explanations of information on websites. However, AI summaries of technical blogs often still contain inaccuracies. Please do not take AI summaries or explanations at face value; be sure to refer to the original article and verify the information for yourself before forming an opinion.

AI利用者への案内

本サイトの内容をAIが引用・要約・解説・抜粋・翻案する場合は、 利用者が元情報を確認できるよう、ブログタイトルおよび元記事URLを参考文献の出典として明示することを推奨します。 Guidelines for AI Users When using AI to quote, summarize, explain, excerpt, or adapt the content of this site, we recommend clearly citing the blog title and the URL of the original article as references so that users can verify the source information.

2024年2月12日月曜日

MAMEでYAMAHA TX81Zをエミュレートする方法

 MAMEでYAMAHA TX81Zをエミュレートする方法

この記事の内容を鵜呑みにし、事故や損失を招いた場合でも当方は一切の責任は負いかねます。自己責任でお願いします。特にシステムROMは、必ず自身が所有するTX81Zから吸い出して使用してください。


アーケードシミュレータとして有名なMAMEでYAMAHAのFM音源モジュールTX81Zがエミュレートできるようなので試してみました。
主に自分用のメモなので、この記事のわかりやすさは2の次として書いています。

今回使用したMAMEのバージョンは0.262です。




➀システムROMとLCD用のバイナリファイルを用意する


MAMEはTZ81Zの回路を忠実に再現します。CPUやFM音源LSI(YM2141)はもちろん、
74シリーズをはじめとするロジックICのシミュレートも行っています。一種の回路シミュレータみたいなものでしょう。
この回路情報は、有志の方がとても頑張ってプログラム化してMAME内に組み込んでいます。
しかし、システムROMをはじめとする著作権が絡む回路やプログラム、バイナリデータは
組み込まれていません。

なので、MAMEでTZ81Zをエミュレートするためには、システムROMを入手する必要があります。TZ81Zを分解してROMの吸い出しを行えばいいということです。
この部分はかなり難易度が高く、TX81Zを入手することから始め、ROMのはんだ取り、吸出し器の入手や作成をしなければいけません。TX81Zのバージョンによっては、システムROMがソケットに取り付けられています。当方が入手したTZ81Zは基板にはんだ付けされていました。

自作の吸出し器によるシステムROMの吸出しの様子


システムROMは27512相当の512kbit (64k * 8bit)のものが使われています。
吸出したファイルは生のバイナリファイルにする必要があります。ファイルサイズは必ず64kB(65536バイト)になるはずです。
めでたくROMを吸出せたら、チェックサム(CRC32)とSHA1の値をチェックします。

MAME内にはあらかじめ、このCRC32とSHA1が記録されており、
吸出しミスなどを防ぐ仕組みがあります。
吸い出したROMのCRC32とSHA1と一致しない場合、正常に動作しないためチェックする必要があります。
チェックには"HashMyFile"というソフトを使用します。吸い出したROMをこのソフトで開くと、CRC32とSHA1が表示されます。
MAME側のCRC32とSHA1は、MAMEのソースファイル(https://github.com/mamedev/mame)内にあるsrc/mame/yamaha/ymtx81z.cppに記述されています。

「ROMX_LOAD」で始まる部分に、システムROMのバージョンとその対応するCRC32(CRCと書いてある括弧内)とSHA1が記述されているので比較してください。
もしashMyFileで見た値と異なる場合は、吸出しミスか対応していないバージョンのROMです。

一致する項目を見つけたら、吸い出したシステムROMのファイル名を「ROMX_LOAD」内の最初の""で囲まれたファイル名に変更します。

"tx81z-v1.6.ic15"
"tx81z-27512-image-version-1_5.ic15"
"tx81z-v1.4.ic15"
"tx81z-v1.3.ic15"
"tx81z-v1.2.ic15"
"tx81z-v1.1.ic15"
"tx81z-27512-image-first-version-1_0.ic15"
以上のいづれかのファイル名になると思います。拡張子は".ic15"です。

今回、当方が入手したTX81ZのしすてむROMバージョンはV1.5でしたので、ROMイメージ名は"tx81z-27512-image-version-1_5.ic15"となりました。



次に、LCD用のbinファイルを入手します。これはLCDのフォントデータで、TX81ZのLCDをエミュレートするのに必要なファイルとなります。
こちらはROMではないので、アップロードサイトでダウンロードします。
hd44780_a00.binをどこからか見つけてあげればよいのですが、こちらは様々な方が作成しているのか複数の種類があります。厄介なことにこのファイルもMAMEはCRC32とSHA1のチェックをしていて、異なるCRC32とSHA1の場合起動できません。
なので、CRC32とSHA1が合うhd44780_a00.binを根気よく探す必要があります。
特にMAMEのバージョンによって合うhd44780_a00.binが違う場合があるようです。

今回はMAME0.262用のhd44780_a00.binを用意します。
上記サイトで、MAME0.262用の「h44780.zip」をダウンロードします。
ダウンロードしたzipファイルの中にhd44780_a00.binが入っています。


MAME側のhd44780_a00.binのCRC32とSHA1は、MAMEのソースファイル(https://github.com/mamedev/mame)内にあるsrc/devices/video/hd44780.cppに記述されています。
CRC32とSHA1が一致しているか確かめましょう。


さて、ここまでで2つのファイルが入手出来ました。
tx81z-27512-image-first-version-1_0.ic15
hd44780_a00.bin

この2つをzipファイルにします。
エクスプローラー上で上記2つのファイルを選択して「送る(N)」→「圧縮(zip形式)フォルダー」を選択します。
出来上がったzipファイル名は「tx81z.zip」に変更します。ちなみに、エクスプローラーの表示オプションで「登録された拡張子を表示しない」のチェックを外さないと.zipが2重で記述されてしまうので注意してください。


➁MAMEでTX81Zをエミュレートする


この出来上がった「tx81z.zip」をMAME.exeの同ディレクトリの「roms」フォルダーに入れてあげるとエミュレートできるはずです。が、実際はそう甘くはありませんでした。
実はMAME側は、別のバージョンのTX81ZのシステムROMも必要とします。
厳密には、1つのバージョン用のシステムROMしか使用しないのですが、別のバージョンのシステムROMも無いとファイル不足と判定されて実行できなくなります。
(本当は当方の技量が足りなく、なんとかできるのかもしれませんが…)

バージョンの異なるTX81Zを複数台入手しろという無茶な要求をしてくるので、このままでは困ります。
そこで、MAMEのソースファイルの一部を書き換えて1つのバージョンのみ実行できるようにします。

具体的には対象のバージョンのROM以外のROMの読み込みをする部分のプログラムを削ります。



➀MAMEのソースコードをダウンロードして編集
からMAMEのソースをダウンロードします。
緑色の「<>code」をクリックして「download ZIP」をクリックします。
ダウンロードが完了したら適当な場所に解凍してsrc/mame/yamaha/ymtx81z.cppをコードエディタ(メモ帳でも可)で開きます。

プログラムの後尾の方に
ROMX_LOAD~と記述されている部分があるので、吸い出したシステムROM以外のバージョンの「ROM_SYSTEM_BIOS~」と「ROMX_LOAD~」の行を削除します。
合計で12行削除することとなります。
その後、上書き保存してコードエディタを閉じます。




➁コンパイラ&ビルドツールをダウンロード
からMAME用のビルドツールをダウンロードします。
「msys64-2022-01-12.exe」をクリックしてダウンロードします。
ダウンロードしたmsys64-2022-01-12.exeをダウンロードフォルダ以外の適当な場所(先ほどダウンロードしたMAMEのソースコードとは別の場所)に移動させて実行します。
7zip解凍ウィザードが表示されるので、任意の場所(先ほどダウンロードしたMAMEのソースコードとは別の場所)にコンパイラ&ビルドツールを展開します。

「➀MAMEのソースコードをダウンロードして編集」で用意したファイルを先ほど展開したファイル群の中にある「src」ディレクトリにすべて移動させます。

次に、解凍先の中にある「autorebase.bat」を実行します。
その後、同ディレクトリの「win32env.bat」を実行し、「make」と打ち込んでエンターキーを押します。
すると、コンパイルとビルドが始まるので、完了するまで、数時間待ちます。
当方のしょぼいパソコンの環境では6時間ほどかかりました。

「src」フォルダの中にmame.exeが作成されているはずです。
同ディレクトリの「roms」にtx81z.zipを入れてmame.exeを実行し、TX81Zがエミュレーションできるのを確認しましょう。

実行できるのを確認したら今度は、エミュレートされたTX81ZにMIDIを入力をしてみます。



➂エミュレートされたTX81ZにMIDI入力してみる。



パソコン内のDTMソフトからエミュTX81ZへMIDIを入力する場合、仮想MIDIケーブルソフトを使用します。
今回は「loopMIDI」というソフトを使用しました。

「loopMIDI」の設定で、任意のMIDIポート名を作成(今回は「mameMIDI」とする)します。
これで、仮想MIDIケーブルの設定は完了です。


次にMAME側の設定をします。
まず、MAMEのTX81Zの設定ファイルを作成するために一度、MAMEを実行します。日本語化した後、メインメニュー画面で「TX81Z FM Tone Generator」の項目を右クリックして「システム設定を保存」をダブルクリックします。

MAMEを終了すると、mame.exeと同じディレクトリに「tx81z.ini」というファイルが生成されます。

「tx81z.ini」を開き、一行追加して
midiin   mameMIDI
と記述して上書き保存します。TX81Zの設定のダンプをしたい時などで使うTX81ZからのMIDI出力の場合は、
midiout   ”loppMIDIで決めた別の名前”
の行を追記してあげます。

あとは、MAMEでTX81Zを実行するだけです。
DTMソフトなどでMIDI出力先ポートに「mameMIDI」を指定してCH1でノート送信すると発音するはずです。


ちなみに、フルスクリーンモードを解除して実行したい場合、mame.exeと同じディレクトリにある「mame.ini」内の
window   0 
window   1
にします。
※「mame.ini」は、MAMEの「共通設定」で「設定を保存する」を押すと生成されます。



・まとめ


MAMEのTX81Zの発音の再現性(YM2141 OPZのエミュレート)はまだ完全ではないらしいですが、かなり実用的だと思います。

また、実機のエミュレーションなので、MAMEをデバッグモードで実行してレジスタ表示をさせれば、YM2141の解析などで役に立ちそうです。

エミュレーションまで少々手間がかかりますが、実機に限りなく近いエミュレーションができるのでおすすめです。




































0 件のコメント:

コメントを投稿

おわり