August 25, 2006

0.108u1出た

0.108u1のソース差分がリリースされました。what's new-JはこちらMameDev.com - Latest Release
August 23, 2006

Model 2 Emulator v0.3出た

ElSemi氏のModel2エミュレータが2年ぶりに更新されました。速度関係の改良がメインのようで、フレームスキップなどもサポート。富士通製TGP MB86234のドキュメントが見つかってモデル2と2Aのコアが完成するまで次の更新は多分ないとのこと。 Nebula
August 21, 2006

MAME 0.108出た

オフィシャルMAME v0.108がリリースされました。what's new-JはこちらMameDev.com - Latest Release
August 18, 2006

0.107u4出た

0.107u4のソース差分がリリースされました。what's new-Jはこちら。キーボードLEDなどの出力が本体から分割されました。 MameDev.com - Latest Release
August 15, 2006

E6600ベンチ

R.Belmont氏ページにCore 2 Duo E6600のMAMEベンチが上がっています。SDLMAMEなので、Windows版とは直接比較はできないですが参考までに。数値は左がPentium4 3.4GHz、右がE6600 2.4GHz定格での速度制限OFFの平均フレームレートです。
【更新】さらにE6600 3.12GHzオーバークロックの結果が追加されました。 Arbee's WIP Emporium
August 11, 2006

0.107u3出た

0.107u3のソース差分がリリースされました。what's new-JはこちらMameDev.com - Latest Release
August 6, 2006

Nicola WIP更新

Nicola氏WIPの続報。ものすごいことやってます:
多分もう気づいていると思いますが、前回の書き込みはバブルボブルのカスタムMCUです。

バブルボブルと言えば一番メジャーな部類で、MAMEでもすでに何年も前からサポートされていますが、MCUのオリジナルROMが無かったため、エミュレーション動作は完全ではありませんでした。

一時期、海賊版の基板に載っていた68705のプログラムがオリジナルから取り出されたものと思われていた頃がありました。しかし、モンスターの動きが違い、クロックアイテムの動作も間違ってました。

プログラムと基板回路を詳しく調べたところ、オリジナルのMCUは68705とは全く異なり(ピンアウトが合いません)、68701ではないかと予想されていました。68705のプログラムは、ブラックボックスリバースエンジニアリングテクニックを使ったもので、オリジナルのMCUを動作させ、メモリからのリード・ライトを記録することで海賊版屋がゼロから書いたものでした。オリジナルのMCUはメモリから読み込みを行い、それに対して何らかの処理をしていたので、この68705プログラムも何もしなくても意味のないメモリ読み込みを多く行います。

このプログラムがエミュレータ内で次第にシミュレーションコードに置き換えられていくに従って、エミュレーション精度も大きく向上しました。モンスターの動作は改善され、クロックアイテムの動作も修正されました。しかし、それでもEXTENDバブルのランダム発生の仕組みなど、いくつかの謎が残っていました。

そしてついに今回、Trinity氏がオリジナルのMCU ROMを取り出すことに成功しました。チップのパッケージを溶かし、顕微鏡で写真を撮って、ROMの内容を手作業で1bitずつ解読する作業を行いました。先日の書き込みにある写真は、MCUが以前に推測された68701ではなく、6801クラスの6801U4であることを示しています。

このROMにより、100%完璧なエミュレーションに必要なパズルの最後のピースをついに入手しました。

オリジナルMCUプログラムの解析はとても興味深いものです。ゲームでは次第に使用されなくなった、以下のような、多くのプロテクト機能を提供するようにデザインされています:
  • コイン入力とクレジットカウンタの処理
  • 両プレイヤーの残ライフの操作
  • 現在プレイ中の面数の操作
  • 4つ変数を異なった速度で増加
  • ランダムデータと思われる1280バイトから値を返す
このような機能が使われなくなった理由はおそらくいろいろあるでしょう。ひとつは、MCUがデータ処理をするには1フレーム必要なので、単にあまりよいやり方ではないということ。他には、MCUでハードコードしてしまうと、コインエイジの変更が柔軟に行えないなどなどです。

次に、これまでのシミュレーションが実物にどれくらい近かったかを見てみましょう。答えは本物にきわめて近く、逆に「出来すぎ」でした。理由を見てみます。

まず、クロックアイテムの動作は正確でしたが、1フレームずれていました(シミュレーションでは1フレーム遅れが起きていた)。

EXTEND泡のランダム化はオリジナルのMCUには存在していません。しかし、シミュレーションコードは乱数生成器を使い、完全にランダムな文字を生成していました。ところが、オリジナルMCUでは単純に1フレーム毎にカウンタを増やすだけです。これにより、EXTENDの出現が予想できるようになるので、ゲームプレイへの影響は重大です。新しい泡は、128フレーム毎に画面に入って来て、128/6の余りは2なので、次に出現するのは2つずれた文字になります。E→T→N、またはX→E→Dの順序で、その後繰り返します。ただし例外があって、新しい泡が画面に入ってくるのと全く同じフレームで泡をはくと、この泡は1フレーム遅れます。そのために、ボタンのタイミングをぴったり正確にすれば、泡の出現順序を変更でき、理論的にはひとつの面で6文字全てを集めることも可能なはずです。また、画面にすでに16個の泡があるときは新しい泡は現れませんが、これも泡の順序を変更します。

最後に、これが一番重要ですが、モンスターとプレイヤーの座標位置の比較です。比較結果は、>、=、<を示すフラグと、絶対的な距離で返されます。これはシミュレーションでも正しく行われていたのですが、オリジナルのMCUにはバグがあります。プレイヤーとモンスターの接触を調べる部分があり、接触のフラグとどのモンスターと接触したのかを返す部分のコードが正しく動作していません。プレイヤーのY座標と、あるモンスターのY座標が同じで、さらにプレイヤーのX座標と別なモンスターのX座標が同じときでもフラグを設定してしまうのです。
メインプログラムの方でこのフラグを無視するようにしているので大きな問題はなく、2つ目のZ80が実際の正確な当たり判定をしています。しかし、プレイヤーのX軸位置から8ピクセル内にモンスターがいると、MCUの方もすぐに処理を完全停止してしまうので、例えば、3段真上にモンスターがいたとして、そのモンスターがリストの最初にある場合、他のモンスターはプレイヤーを追いかけるのを止めてしまいます。これはとても微妙で、個人的には全然気づかなかったのですが、理論的にはこのような動作をしています。
Nicola's MAME Ramblings
August 5, 2006

Nicola WIP更新

Nicola氏WIPに、なにやらバブルボブルなMCUと思われる写真が、“Good News”として載せられています。詳細は後ほどとのこと。 Nicola's MAME Ramblings
August 4, 2006

0.107u2出た

0.107u2のソース差分がリリースされました。what's new-JはこちらMameDev.com - Latest Release
July 30, 2006

MAME32 0.107出た

オフィシャルに少し遅れましたが、MAME32が新オプションに対応してリリースされました。新表示系オプションも比較的わかりやすくまとめられています。なお、ダウンロードにはFilePlanetの無料登録が必要です。捨てアドレスなどで十分でしょう。
【更新】0.107u1へ更新しました。 the mame32 qa/test and art dept.

0.107u1出た

0.107u1のソース差分がリリースされました。what's new-JはこちらMameDev.com - Latest Release
July 29, 2006

Haze氏WIP更新

Haze氏WIPが久しぶりの更新。ニセバブルボブルは置いておいて、改良中のメガドライブ(Genesis)のVDPにスプライト表示制限を追加したそうです。スプライトが横にいっぱい並ぶと消えるあれで、横320ピクセル表示のときの制限は80ピクセルで、画面外や半透明ピクセルも含むとのこと。ソニックザヘッジホッグのタイトル部分のプライオリティなども修正。 Haze's Mame WIP
July 24, 2006

MAME 0.107出た

2ヶ月間のu期間を経て、0.107 stable版がリリースされました。what's new-JはこちらMameDev.com - Latest Release
July 21, 2006

0.106u13出た

ついに0.106u13の差分がリリースされました。what's new-JはこちらMameDev.com - Latest Release
July 18, 2006

windows.txt訳出来

MAMEの設定、コマンド、オプション設定などを解説しているwindows.txtファイルが0.106u12で最新版に更新されました。日本語版の表示はこちら。ダウンロードはこちら。量はかなりありますが、目を通せばMAMEの設定については一通り理解できると思います。
July 17, 2006

0.106u12出た

0.106u12の差分がリリースされました。what's new-Jはこちら
【訂正】flickerではなくprescaleでした。d3dでprescaleを2以上にすると、画面がぐちゃぐちゃになる場合があります。 MameDev.com - Latest Release
July 11, 2006

0.106u11出た

0.106u11の差分がリリースされました。what's new-Jはこちら。スキャンラインなどのエフェクトは、外部ファイルから読み込む形で追加されました。Aaron氏ページによると、うまくいけば次は0.107とのこと。新しいエフェクト用のpngファイル(スキャンラインとアパーチャマスク各種)もDLできます。 MameDev.com - Latest Release
July 5, 2006

0.106u10出た

0.106u10のソース差分がリリースされました。what's new-JはこちらAaron氏ページに、アートワーク更新用.layファイルコレクションが上がっています。既存のアートワークzipファイルにそれぞれ追加するだけで動作します。 MameDev.com - Latest Release
July 4, 2006

アーロンの新ビデオシステム概観

Aaron氏が今回のビデオシステムの更新についていろいろまとめています:
0.106サイクルではいろいろな変更がありましたが、0.107のリリースまではまだ何週間かかかるでしょう。ここで、ビデオ設定オプションについて少し掘り下げた話をしたいと思います。

9年前にMAMEが登場したころ、MAMEのビデオシステムはユーザ側の表示解像度を変更するモードがデフォルトになっていました。5年前にコアシステムがWindowsへ移行してからは、グラフィックカードを使って必要な解像度へ拡大する方法がデフォルトでした。

現在のオプションを駆使して時間をかけて自分好みのビデオ表示をしている人も多いでしょう。しかし、時には一歩退いたところから現在の状況を見直す必要があります。現在のビデオシステムは5年もの間、特に大きな変更もなく使われてきました。今回の書き直しにより、これまでの設定方法を見直す必要が出てくることになります。

大別すると、新システムの設定は3種類に分けられます。自分がどのカテゴリなのかを見極めることが、ベストな設定を行うための第一歩です。

カテゴリ1:全部ありシステム 比較的新しめのシステムで、ほどほどの性能のビデオカードを使っている人はこのカテゴリになります(ここでいうほどほどとは、VRAMが16MB以上あるここ5年以内の製品のことで、超最新カードという意味ではありません)。MAMEの単純な画面表示なら、ほどほどのカードならどれでも十分に動作します。デスクトップの設定を好きなように設定して、MAMEにその解像度を使うように設定します(LCDのような固定解像度以外では、できれば1024x768以上の解像度で、リフレッシュレートも高めが望ましいです)。以下で説明するカテゴリ3の場合を除いて、最近は解像度を変更する機会や理由はほとんどないといえるでしょう。このモードでは、アートワークについてもフル解像度に拡大してアルファブレンディングも完全に動作させることができます。ベクターゲームもくっきりと表示できて、かっちょいいフォントを使ったり、グラフィック・タイルマップビューアを最大限に表示できます。このモードはDirect3Dを使うので、次のように設定します:

-video d3d -noswitchres [-triplebuffer] [-nofilter]

-noswitchresオプションはMAMEで現在の解像度を維持する設定です。もちろん、別な解像度を指定することも出来ますが、D3Dモードではほとんど意味がありません。いっそのこと解像度設定を取り外してしまうかもしれません。画面表示が裂ける現象を抑えるには、-triplebufferオプションも合わせて使うとよいです。ただし、ゲーム自体のリフレッシュレートよりもモニタのリフレッシュレートが高いことを確認してください。画面のぼやけた表示が好みではない場合は、-nofilterを付ければバイリニアフィルタリングを無効にできます。この代わりに-prescaleオプションを最後に追加することもできます。


カテゴリ2:むかし風 個人的にはこのモードは全くサポートしたくなかったのですが、一部の有力MAMEDev氏がうるさかったので残しました。このカテゴリに入るケースは、旧バージョンのMAMEがうまく動作していた古いシステムや、Direct3Dレンダリングがうまく動作しない場合です(注意してほしいのは、たとえばスペースインベーダーをフルスピードで動作させたときに、DirectDrawでは2000fpsで動き、D3Dでは1000fpsだったとしても、通常の60fps動作のときにD3Dが重大な問題となるわけではないことです。ですから、確信が持てない場合はDirect3Dでしばらくテストしてみてください)。このモードでは、MAMEはゲーム画面とアートワークをゲーム自体の解像度で描画します。MAME 0.106以前と同じ方法です。しかしながら、-artcropなどのアートワーク用オプションはうまく動作しません。さらに、アートワークのアルファブレンディングモードも特にオーバーレイが動作しません。MAMEはビデオカードの拡大機能を使って正しいアスペクト比で表示します。

-video ddraw -hwstretch [-switchres] [-triplebuffer]

ここでは-switchresは任意です。使っているビデオカードが本当に大昔のもので、デスクトップの解像度までさえも拡大出来ないときにONにします。表示裂けを防ぐためには、-triplebufferを指定した方がよいですが、同様にゲームよりも画面のリフレッシュレートが高いのを確認してください(-switchresは自動でこのように設定します)。画面表示がぼやける場合は、-prescaleオプションを最後に指定してください。


カテゴリ3:おまけのビデオモード これは主に、自作筐体などを使っていて、オリジナルのビデオモードに近づけるようにCRTモードを手動で設定したりする人用です。この場合、MAME側で手動調整したCRTモードを使う必要があるので、オリジナルゲームの1ピクセル毎に対応して画面にも1ピクセル毎に描画します。ピクセルを正しいところに描画する以外のことはしませんが、一応MAMEにも設定の余地があります:

-video ddraw -nohwstretch -switchres [-triplebuffer]

このケースでは明らかに-switchresが必要です。完全な1対1のピクセルマッピングが必要ならば、ハードウェアストレッチも不要です。トリプルバッファについては、システムによるでしょう。

というわけで、これらの3つをベースの設定にして調整していくことをおすすめします。上のオプションと一緒に使える設定に-prescaleがあります。引数は1から8の整数で、最終的な描画の前に、あらかじめどれくらいゲーム画面のピクセルを拡大するか指定します。なぜこれが便利なのでしょうか?動作速度への影響は?その答えは、使用するビデオモードによって違ってきます。

カテゴリ1(-video d3d)の場合、-prescaleによってあらかじめゲーム画面のピクセルをビデオカードで拡大してからスクリーンに描画します。ビデオカードの種類によりますが、大抵はパフォーマンスの改善は少しですが、意味がないわけでもありません。-prescaleの利点は、ピクセルのぼやけを減らすことにあります。-prescale 1はデフォルトで拡大しません。-prescale 2は各ピクセルを2倍に拡大、-prescale 3は3倍に拡大、という具合です。私の考えでは、-prescale 2がちょうどいいと思いますが、高解像度なディスプレイではもっと高い値の方が良いかもしれません。

次にカテゴリ2(-video ddraw -hwstretch)では、指定した拡大サイズがMAME自体の画面グラフィックサイズになります。これは残念ながらソフトウェア処理ですが、アートワーク、フォント、グラフィックビューアなどは拡大することで、使えるレベルになります。結果としては、カテゴリ1同様に画面ボケを減らしたり、高解像度のアートワークとフォント表示、グラフィックビューアの表示領域拡大などとなります。

カテゴリ3(-video ddraw -nohwstretch)では、未加工の画面を-prescaleで拡大したサイズに合うビデオモードをMAMEが選択します。拡大処理はソフトウェアで行います。利点については、ピクセルのボケがない以外はカテゴリ2と同じです。

最後に、スキャンラインなどの“エフェクト”はどうなるのかと思っているかもしれません。これは何とかします。ただし、新ビデオシステムには今のところエフェクト機能自体がありません。近いうちに追加する予定もないです。
Aaron Giles' Home Page