GB用エミュレーターのTGB Dualにデバッグ機能等を追加したものです。
TGB Dualのバグなど直せるところは直したいので
バグ周りの情報や要望をお持ちの方がいればコメントからお願いします
今後の予定
- luaスクリプトの導入
- GBC同士の赤外線通信への対応
- Huc1,Huc3の赤外線通信への対応
- 音周りの改修(根本からいじる必要があるため保留中)
2013/01/20 更新(v1.1.4.1)
- スロット2の状態保存、復元機能の追加
- スロット1&2の同時状態保存、復元機能の追加(通信時利用可)
- スロット2の画面サイズ指定及びメモリダンプ機能を追加
- スロット2の操作等を通信メニューとして独立(画面1倍時メニューが3行に‥)
- 画面サイズの倍率指定時に160*144*Xとなるよう修正
ツールの説明
TGB_Dualに上記画像にあるデバッグメニューを追加したものです。エミュの重要な部分に判定命令追加しているため当然ながら普通のTGBDualよりもかなり重くなっています。当社比3倍の重さ。
追加機能・変更点
- ログの取得、表示
- 実行の一時停止
- ステップ機能
- フレームステップ機能
- ブレークポイントの設定
- 編集可能なメモリダンプ
- チートのUI等を改良
- 情報表示(レジスタの値や命令実行位置等)
- ローカル通信プレイ時の状態保存
- 波形メモリが鳴り続けるバグの修正
- ログの取得、表示
- ログを取得するように変更。設定から保存数を設定可能。ログの表示で保存されたログを逆アセした状態で表示します。下の行が新しく上に行くほど古くなります。
- 実行の一時停止
- ゲームの実行を一時停止することができるように変更。
- ステップ
- 実行を一時停止させた上で1命令だけ実行させる。HALT命令は割り込みが入るまでスキップし続けます。
- ブレークポイントの設定
- ブレークポイントを設定して任意の箇所で一時停止できるように変更。ブレークポイントは種別毎に3つまで設定可能。以下の3種類のブレークポイントを設定することができる。
・任意のメモリアドレスへの書込み
・任意のアドレスからのデータ読込み
・任意のアドレスの命令が実行された時 - 編集可能なメモリダンプ
- 元から付いているメモリダンプは直接メモリの書換えが出来なかったため、メモリの書換えが可能なメモリダンプを追加。ただしROM部分への書込みは無効。TGBDualはメモリ管理の方法が複雑だったためld命令実行と同じ処理で書換えを行うようにしてあります。よって0x4000や0x2000へ書込みを行うと当然バンク切り替えが働いてしまうため注意。
- 情報表示
-
レジスタやSP,PCの改変が可能。ただしSPやPCを下手にいじるとエラーを起こして終了してしまうため注意。このメニューを開くと強制的に実行が一時停止されます。ROMの中身を逆アセで表示してあるためSTEP実行等を行って動作確認等に使用したりします。 - 確認されている問題
-
・スキップ時割り込みが入った時に割り込み処理が実行される。
・ログ取得時にも割り込み近辺で取得されないことがある?
ダウンロード:TGB_Dual_Kai.zip(v1.1.4.1)
ソースのダウンロード: tgb_dual_kai_v1.1.4.1_source.zip
TGB Dualオリジナル:http://gigo.retrogames.com/
すいませんなんか書き込めないのでちょっとtest
返信削除あれ書けた。
返信削除文章長すぎると投稿に失敗するようですね、
ちょっと分けて書いてきます。
これはなかなか大変そうなことやっていますね・・
開発お疲れ様です。
TGB Dualのバグといえばパッと思いつくのでウインドウサイズ関連です。
環境によるかもしれませんが、メニューバーの改行分に食われてしまい
x2以下だと整数倍にならず用手動調整な問題があります。
続く
あとx2以上だと
返信削除強制的ににじみフィルタみたいなのがかかっていたり
スロット2のサイズが強制的にx2にされたり(これは仕様?)
情報表示がスロット1のみに関しては通信対戦状態だと両方見れそう。
(1PCで多重起動できないみたいなので未確認)
そういえばTGBは4人対戦・・・は対応しているものが存在しないのでいいとして
通信精度もあんまり高くないですよね、ただ精度あげたら間違いなく要求スペックが上がりそうですが。
BGBも少し前の更新で精度が以前より大幅に上がった変わりに、通信プレイ時の要求スペックが通常の十倍以上になっていました。
続く
(長さじゃなくて特定の文章がまずかったぽいです、すいません。(ばいりにあ(カナ)→にじみに変更で投稿出来た))
返信削除個人的にはサウンド改修に期待しています。
現状、-M付かないほうのVBAよりはいくらかマシですがそれでもかなり微妙なので・・
改修された際には対応済みのgbrだけでなくgbsに対応+デバック関連の機能も使えればさらにありがたいですが、ちょっと無茶ですかね。
ともかく開発応援しています。
nkcさん情報どうもありがとうございます。
返信削除��x2以下だと整数倍にならず用手動調整な問題があります。
これに関しては修正を行いましたがもしかしたら環境によってはまだ問題があるかもしれません。
��強制的ににじみフィルタみたいなのがかかっていたり
にじみの件に関しては対応をしようと色々調べていたのですが
TGBDualではDirectDrawを用いて描写を行っていますが
これを利用している時には拡大縮小操作を行ったときに
自動的に補完処理がされてしまうようです。
対応するとすれば描写周りをすべてDirect3D等へ
切り替える必要があるようで、暫くは現状のままになると思います。
通信プレイに関してはローカル通信はいじる予定(音なんとかしないといけないですね)ですが
返信削除ネット越しの通信プレイに関してはいじる予定はないですね。
技術的課題も多いこともあるため特化したエミュに任せるのが無難かなと。
音の改修は現状若干躓いた感があります。
処理の方法が高速化よりの実装で現状だと根本からいじらないと対応できな感じです。
じっくりやれるときにまとめてやるか、アイディア湧き待ちです。
メッセージ書くのが遅れてしまい申し訳ないです。
返信削除開発お疲れ様です!
>拡大時のズレ
修正ありがとうございます。
こちらの環境では、*2では320*"287"と、
*1~4すべてでスロット1の縦幅が1ドットだけ減ってしまい
まだズレてしまうようです。(スロット2は問題なしです)
オリジナルのTGB Dualでも同じ状態になったので、これも元々の仕様かもしれません。
通信まわりはだいぶ使いやすくなりました。
欲を言えば「片方のスロットと同じゲームを読み込み」のようなオプションと
Slot2画面サイズの設定も記憶出来ればさらに使いやすいなあと。
それとスロット2のメモリダンプを表示したままスロット2のウインドウを消すと
エラーで動作停止状態になってしまいました。
>拡大時のフィルタ処理
なるほどそういう仕様でしたか・・
そういえば全然関係ないかもしれないですが
スーファミエミュのsnes9x 1.53でDirect3Dの描画にバグがあり、表示がおかしかったため
DirectDrawを使いつつドットバイドット表示させるために、フィルタを使用しているのを思い出しました。
使用していたのはSimple 2X系のものです。(Video>Display Setting>Output Image Processingで設定)
もしこのフィルタを導入できればDirect3Dへ切り替えなくても済むかもしれません。
ネット通信に関しては少し残念ですが確かに開発難しそうですしね・・。
ただ以前ネットプレイを使用した際は、ローカルで問題なく通信できるものは
ネットプレイでもゲーム終了までプレイできたので、
通信ケーブルによるリンク機能のエミュレーション精度さえ上がれば
ネットプレイもそのままでいけるのではないかと想像しています。
エミュレーション自体が大幅に変わったり、そもそも仕様が別々だったらあれですが。
言われてみればローカル通信時のスロット1もサウンドがなんか変になりますね。
スロット2にいたってはミュート状態ですし。ネットプレイ通信では問題ないんですけどね・・
ただネットプレイでの通信に関してもTGB Dualが一番特化というか敷居が低いのではないかと。
TGB Dualはネットプレイ時のチャット機能もありますが、BGB・KiGBにはありませんし
これはネットプレ関係ないですがBGB、KiGBでも同期が取れずうまく動作しないもので
TGB Dualだと動作するタイトルもあるので。逆のパターンもありますけど。
あとは前回書いたようにどちらもTGB Dualに比べて相当重いのがネックです。
>音の改修
やはり厳しいですか・・うーん
nezplug++の作者さんがVBA(-Mじゃない方)にnezplug++を移植しているのはご存知かもしれませんが
あれもかなりの労力があったのかもしれませんね、当人はなんだかさらっとリリースしていましたけど。
エミュ作成ありがとうございます。
返信削除slot2も起動している状態でslot1リセットを使用すると同時にリセットがかかるのがいいですね。
これで通信ケーブルに対応しているゲームは同期がとれるのでありがたいです。
スロット1&2の同時ステートセーブもとても重宝しています。
将来的に下記も考慮していただくとありがたいです。
・zipファイルでもドラッグ&ドロップで起動
・スロット1&2の同時起動
・ネットプレイ時のステートセーブ・ロード(mednafenやvirtuanesのエミュが参考になるかもしれません。)
※上記実装が難しい場合、「オートステートセーブ・ロード」というゲーム起動時や終了時に勝手にステートロード・セーブしてくれる機能をつけて欲しいです。(もちろんネットプレイ起動時にも作用するようなもの)
昔、nnnesterJの「オートステートセーブ&ロード」機能を使用してネットプレイ起動時にオートステートロードをしてゲームの途中からプレイしていました。
・4人同時通信プレイ(4人用アダプタゲーム対応)
以上、よろしくお願いします。
すごい
返信削除