2009年10月3日の日記の1番目の記事へのコメント

セイヴァー2を電池レス化してみる その2

一昨日の続き.MAMEでvsav2を動かした場合と比べてみたところ,vsav2dの方が途中で全然違う命令を実行し始めるために暴走していたことが判明.同じアドレスから読んでいるのになぜだ・・・と思ったら,デコードしなければならない領域をデコードし忘れていたのが原因でした.本来は命令であるべきところをdis.xがデータとして誤認識しており,それをデコードしなくてよい値と判断してしまったのがその原因 (;´Д`).そしてなぜかmove.bの先頭2byteと次の2byteの間にラベルがついており,上の方で addaでそのラベルが参照されているのがさらにその原因です.dis.xに-k オプションをつけたりはずしたりしても効果なし.こういうのは手で探して直さないとだめかー (´・ω・`)

というわけでdis.xの出力のデータ領域を上から1個1個確認しながら手で直しているうちに今度は別の問題が発生.データ領域であることはほぼ確実な領域でも,デコード前の値は超ランダムな感じで,デコードすると意味のありそうな値になる領域が結構あるのです.見るからにデコードした方が正しい値っぽい.うー,どういうことだ?同じデータ領域でもデコードした方がいいものとしない方がいいものがある?

規則性がよくわかりませんが,とにかくデータ領域だからなんでもデコード不要というわけではなさそうです.そんなわけで,再度 dis.x の出力結果を上から順番に追い,デコードするとランダムな感じの値になってしまうところを探すことにしました.

デコードすべきデータ領域は,dis.xの出力結果の値の並びが見るからに整然としていていかにも意味のありそうな値となっており,逆にデコードすべきでない領域は,デコード前の方を見るとランダムなデータの中に突然規則的なデータが現れるため一目瞭然.こうやって1個1個見比べて見つけ出して行きます.どうもデコードが不要な領域はアドレスレジスタ間接形式でアクセスされる領域っぽいですなぁ.どういう仕組みになってんだ?FC0とかFC1の信号見てデコードの有無を切り替えているのか?

と,そんなこんな感じで頑張って1MByte分のデータを追って,130個ほどのデコード不要領域を抽出しました.あっさり書いてますが,めちゃくちゃ辛いですw.さっそく抽出した情報を元にvsav2dのROMイメージを作り直してMAMEで動かしてみたところ,見事にオープニングデモが始まりました!やった! 方針は間違っていなかったようです.が,オープニングデモが1周して,実際のゲームプレーのデモに入るところで強制リセット (´・ω・`).あと,F2 (テストスイッチ) を押しても強制リセットがかかります.しょんぼり.

ところで実機ではどうなんだろうと思ってこの状態のを焼いてみたところ,こっちでは全く画面出ず _|‾|○. リセットをかけるたびにいつもの灰色画面だったり紫画面だったり・・・あれ?紫画面? 画面をよく見てみると,実は一瞬だけメモリチェックの画面が出ているっぽい.あっという間にチェックが終わって,その後暴走して画面がグレーになるわけか・・・.MAMEだと動くのにー.↓XRGB-3で強制的に画面を保持してみたところ

うっすらとメモリチェックの結果が出ている

とりあえず実機の方をエミュレータと同じところにまで持っていきたいので追ってみたところ,メモリチェックの後に再度ワークRAMを初期化しており,その中で 0xFFFFFx の領域を書き潰していました.ここに変な値を書いたときの挙動がMAMEと違うってことかな.ここを修正したら実機でも見事にオープニングデモに到達するようになりました.やったね! もちろん,デモ終了後リセットがかかるところはMAMEと一緒です(笑)

実機でもオープニングデモが出るところまで到達

さて,次はリセットの原因調査ですね.どうせ例外で落ちているんだろうということで,例外ベクタの先にブレークポイントを張りまくったら引っかかりました.不正な命令を実行しているらしい.ふーむ,本来命令のはずのところをデコード不要のデータとみなしてしまっているところがあるとかその辺かなー.

う,例外ベクタにとんできた際のスタックの見方がよくわからん・・・.仕方ないのでトレース取ったりしてどうにか解決.やっぱりデコード不要の範囲の指定がおかしかった.というわけで,その辺直したらF2で落ちなくなり,オープニングデモ後のプレー画面まで到達するようにもなりました.わーい,もう一息か?

しかしここでまた問題が.サウンドテストの画面が何か変(;´Д`).これはデコード不要のところを間違ってデコードしちゃっているっぽいなぁ.・・・と,ここで唐突に気力が尽きて本日の解析はおしまい.ほんとすげー疲れるわこれ.明日に続きます.

文字が一部壊れている

お名前:  メールアドレス(省略可):
メールアドレスも表示されます
ここに名前その他を書いてはいけません: ここにメールアドレスその他を書いてはいけません:

2009年10月3日の日記の1番目の記事へのコメント

中の人情報

名前:
nosuke (のすけ)
メール:
sasugaanijaのgmail.com
「の」は「@」みたいな
関連リンク:

カレンダー

2009年10月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

<<先月分

翌月分>>

最新の10件のエントリ

最近の10件のコメント

過去ログ