2020年4月29日から2020年4月25日までの日記を表示中
2020年 4月29日 (水)
■基板
バージョン違いの解析結果におかしな点がないかをチェックすべく、MAMEから切り出したSH向け逆アセンブラの関数をライブラリ化して、既存のバイナリで命令と推測されるところを逆アセンブルして、命令の並びにおかしなところ(遅延スロットに不正な命令が置かれているところなど)がないかチェックするプログラムを書いてみました。で、試しに初代ジョジョの解析結果に適用してみたところ、エラーになるところがボロボロと・・・。うーん、引っかかったのは実行されない部分なのか、それともわざわざ初代ジョジョを遊ぶ人が居ないからこの辺のクオリティが低いということなのか・・・。
2020年 4月28日 (火)
■基板
CPS3解析を目的にしたSH-2の逆アセンブラ、命令数が少ないと思ったけど、いざ一から手で書き始めてみると表を見ながらの入力が意外と面倒だということがわかりました(汗)
そこで、ヘッダか何かを再利用して楽できないかとunidasmの中で呼んでいるSHの逆アセンブラのコア部 (sh_dasm.cpp) を見てみたところ、実はこれ自体が超シンプルで、ほぼそのまま使えそうなことが判明。外側の複雑さとのギャップが凄いというか、MAMEなのにこんなに読みやすいなんて・・・w
というわけで途中まで書いた自作品は放棄して、これを改造のベースにすること決定。最初からこうすれば良かったなー。
[コメントを書く]
■キーホルダー
[コメントを書く]
2020年 4月27日 (月)
■基板
unidasm、それ自体は悪くないんですが、CPS3の解析のためにSH-2に限定してもっと凝ったことを色々やるには弄りにくくてなかなか大変な感じです。・・・というか、そもそもSH-2って命令自体がかなりシンプルでドキュメントも整っているんだから、既存のものに頼らずに一から書いてしまったほうが早くて簡単だったりするのでは? というわけでちょっくら実装を始めてみました。
[コメントを書く]
2020年 4月26日 (日)
■基板
CPS3の解析の効率を上げるべく、任意の短いバイト列を、いちいちファイルに書き出すことなくその場で逆アセンブルしてくれるコマンドが欲しい感じ。というわけでMAME付属のunidasmをちょっと改造して、引数で与えた16進数の並びを逆アセンブルできるようにしてみました。プチハックだけどかなり便利でちょっと嬉しいw
[コメントを書く]
2020年 4月25日 (土)
■基板
これまでCPS3の電池切れカートリッジで動かしていたプログラムは海外で解析済みの情報(プログラムのバイナリ列の中のどこが命令でどこがデータか)を元に構成したものだったりするんですが、すべてのバージョンが解析されいてるわけではないようです。というか、ストIII 3rd以外は単一バージョンしか解析されていない模様。
一方で、あらゆる電池切れCPS3を復活させようと思うと、未解析のバージョンにも対応しなければなりません。もちろん未解析のバージョンであっても頑張れば一から解析できるとは思いますが、できることなら楽をしたいもの。
そこで、バージョン違いであるならば大きなプログラム上の差異は存在しないと仮定して、差分のみを抽出し、そこを追加で解析することで未解析のバージョンの解析を楽に行う方法を考えました。
差分は、解析済みのバージョンと未解析のバージョンの両方のプログラムを2Byte単位で区切った16進数に変換し、diff コマンドで差分を取ることで得られるはずです。後は、差分で置換・挿入・削除された箇所の属性(命令 or データ)を推測できれば・・・。
[コメントを書く]
■マリオ3Dワールド
読み込み不良だったWii Uのマリオ3Dワールド、ダメ元で任天堂に修理に出してみたところ、やはりメディア不良とのことで、何と有償でメディア交換となりました。かかった費用は送料込みでわずか1,000円ちょっと。任天堂、凄過ぎなんすけど・・・。ありがたや。
交換済みのメディア。
おおお、認識された! よかったよかった。
[コメントを書く]
2020年4月29日から2020年4月25日までの日記を表示中
[コメントを書く]