coding, photo, plant and demo

*mxdrvエミュレーションの歴史

mxdrv x68000 20140215 180744
mdx2wav を作る際に、何をベースに作ろうか調べていたら、いつの間にかmxdrvのエミュレーションの歴史を調べていました。もう昔のソフトはサイトもバイナリも消えていて、いつ頃登場したのかどんなソフトだったのかもよく分からないのもあります。

他にもただ繋ぎこんだもの(拙作のmodpとか)やプラグイン系があると思いますが、mdxのデコード、YM2151のエミュレート、プラットフォームの変化に絞ると下記のソフトくらいになりそうです。

name release author platform mdx decoder ym2151 emulation comment
MDXDRV 1998? よいこ,まーくん2 Windows ? x68sound.dll 不可能を可能にした金字塔的存在
WinMDX 1998? miamo Windows ? ?
MDXWin 1998? moonlight Windows MXDRVm ? 鍵盤表示+MDXOnlineが便利すぎる
mdxplay 1999 Daisuke Nagano Linux 独自 MAME改
MXDRVg 2000 GORRY. Windows 実機完全移植 x68sound.dll 実機バイナリから逆アセンブルして移植。以後デファクトに
gamdx 2011 GORRY. Android MXDRVg fmgen Androidにも進出
mdxplayer 2011 BouKiCHi Android mdxplay mdxplay
MDX Player 2011 Kuma Flash 独自? fmgen移植
MDX Player (Web Audio API) 2013 Kuma HTML5 独自?(FMのみ) fmgen移植 いつの間にかJSでも鳴るようになってた
MDXPlayer 2013 NagisaWorks iOS gamdx gamdx iOSも対応
mdx2wav 2014 mitsuman Linux gamdx gamdx / fmgen ←New

エミュレーションは98年頃から始まったようです。その頃はログを読むとMDXDRVを筆頭にWinMDX,MDXWinの御三家が存在したようです。ただ当時はMDXDRVの再現性が圧倒的だった記憶があります。MDXWinは演奏のコアの部分は現在手に入る最新だとMDXDRVm.dllというものを使っているようですが、これが何なのか既に僕には分かりません。また98年当時は何を使っていたのかも既にバイナリが手に入らず不明です。(@hex125さんより、MXDRVm.dllはmoonlight氏の独自実装だったようです 2/17追記)

この頃はYM2151(OPM)のエミュレーション技術がm_puusanのx68sound.dllによって急激に完成しつつ有り大きな衝撃を受けたものです。MXDRVのエミュレーションに限らずEX68というX68自体のエミュレーションの黎明期でもありました。「X68kエミュレータ EX68 に非常に感動しましたので、私はX68k内蔵音源をWindowsのWave出力で再現する研究を行ってみました。」とあるのでEX68登場後に開発が行われたようです。

あと知らなかったのですが、Linux向けにはmdxplayというものがその少し後に出たようです。MAME用に作られたYM2151エミュのデキに驚いて作ったという旨のことが書いてあり、MAMEのym2151.cを使っているのが特徴です。MDXパーサは独自です。作者のDaisuke Nagano氏はSTed2等もLinuxに移植されている強者ですね。

海外も含め、この時期にFM音源のリアルタイムエミュレート技術が一気に進んだようですね。これはマシンパワーの向上から起きた歴史の必然なのでしょうか。

次にエポックメイキングだったのはGORRY.氏のMXDRVgです。これはソースを読んでいただければ分かりますが、dis.xで逆アセンブルしたものをそのままCに落とし込んだものです。これでmxdrv自体(つまりMDXを読んでYM2151のレジスタを叩くところまで)に関しての競争に終止符が打たれました。理論上完全な互換性を持っていますからね。

ここから数年の間の進化はよくわからないのですが、MDXWinは2005年位まで開発されており、その間に追加されたMDX Onlineという機能は革命的でした。手元にMDXが無くても流通した大部分のMDXが聞けてしまうという脅威のサービスでした。既にMDX Online自体は終了しているのですが、MDX Online AFで引き継がれているようです。


GORRY.氏はさらにそのMXDRVgを使ったAndroid向けのプレイヤも開発しました。このときYM2151のエミュレーションはx68soundからm88のサウンド部をベースに作られたcisc氏のfmgenに切り替わっています。よく分かりませんが、この方が再現性が高いということなんでしょうか。これまでのMXDRVgへの信頼とarm向けにコンパイル実績があることから、RasPi向けにmdx2wavではこれをベースとしました。

これでほぼMDX再生の実装は決定的か、と思いきや、mdxplayベースのAndroid用のアプリがBoukichi氏からリリースされ、曲によってはこの方が再現性が高いのでは、という声もあるようです。(ということでmdx2wavにはmameのym2151.cも組み込んでみた)

iOS用に出ているのはgamdxベースですね。この紹介記事が秀逸です。
X68000シリーズ由来の音楽データMDXをiPhoneで再生!MDX Player for iOSがリリース


それからサウンドの再生に極限まで拘ったPI.氏のX68エミュレータ、XM6の存在も大きいと思います。XM6の既に開発は止まっていますが、それを引き継いでYM2151エミュレーションの部分をMAME等に差し替えられるようにしたりM-UNITに対応したXM6Gがあります。この上で楽曲に最適なドライバで演奏するのが最強かもしれません。
http://www.geocities.jp/kugimoto0715/xm6g_win32.html

なおBoukichi氏より「fmgenはMAMEを参考にスクラッチで作りなおした」ものではないか、とのこと。ということはfmgenとMAMEに両対応してもあまり意味ない説!なおMAME系のコアはTatsuyuki Satoh氏の尽力によって大幅に再現性が向上したという情報。確かに検索するとMAMEへのコントリビューションで大量に名前が出てきます。凄い。(2/17 追記)

(2022/7/4追記)
まーくん2氏より、情報をいただきました。ありがとうございます。
「1998年3月頃mdxdrv.exeの開発が始まりました、当時のYM2151エミュレーターはX68Sound.dllではなくてx68opmemu.dllから始まってその後にX68Sound.dllになりましたね、現在のmdxdrv http://mdxdrv.cocolog-nifty.com/blog/
とのことです。さらに自分は知らなかったのですがM-UNIT対応版のMXDRVやZ-MUSICもあり、最新のmdxdrvでは対応されているとのことです。


参考

PCで聴くFM音源
http://www2.ocn.ne.jp/~hmd/hobby/music.htm

MDXを聞こう!!
http://kmkz.jp/mtm/mag/mus/mdx.html

mdxdrv specification
http://www16.atwiki.jp/mxdrv/pages/23.html