Artichoke Brethren

カリフォルニア・ベイエリアに住む CG エンジニアの気まぐれなブログ (ただいま引っ越し中)

2011年09月

もうすっかり 2.0 とか恥ずかしい感じですが、ここはあえて。

nesdisasm2.png
みなさんはエキスパートシステム、を覚えているでしょうか。まだ8ビット機にたくさん夢が詰まっていた時代の話ですが、そう、第五世代コンピュータ、なんて用語もありましたね...

と、先日友人がとある話題で翻訳メモリに言及していたときに一人いろいろと昔を振り返っていたりしたんですが、やっぱり逆アセンブルはみんなでやった方が楽しいと思うんですよね。たとえば最近はマリオのジャンプとベルレ積分の話題なんかも聞きましたけど、そりゃやっぱり実物を見ながらあーだこーだ言うのがより盛り上がるってものではないでしょうか。

とはいえWikiみたいなの作ってやるほどじゃないし、そもそも逆アセンブルであっても勝手に公開したら違法でしょう。そこで今回 FileAPI でローカル逆アセンブルやってみて思いついた訳です。読んだコメントを共有するだけならいいんじゃないかと。

というわけで、少し拡張してみました。あと、手元にROMイメージなくてもいじれるようにサンプルとして NES 版の Hello world をデフォルトで表示するようにしました。こちらはNES研究室のサンプルをcc65に通したものを使わせてもらっています。ありがとうございます。


遊び方はこんな感じ
  • 読みたいゲームのROMイメージを指定する。アップロードするわけではないので、心配いりません。なければデフォルトのサンプルのままでもいいや。
  • 逆アセンブルを読む
  • コメント欄をクリックすると入力できるので、思ったことを書く
  • 書き終わると共有されて、みんなに伝わる(ただし相手も同じイメージをちゃんと持ってないとダメ)

おお。これは楽しそうじゃないか。フェアな気がするし。

実はまだ途中で、異なるROM間でもコメントを共有してしまいます(使えねーよ)。
でも雰囲気は伝わると思うので。そのうちイメージのハッシュかなんかで分離する予定です。ちなみに今回 DB はめんどーなので php 組み込みの sqlite を使いました。あー今気づいたけどサニタイズ全然してないやー。あははは。後でやっとこ。

さてこれが後にどうなるかというと...そうそう、そうなんですよ。2.0。

あとはとりあえずワークエリアのシンボルとかもシェアできるようになるとすごく便利になる気がしてます。まずその辺かな。

ではまた。

全然WebGLと関係ないのですけれど、最近ちょっとした事情で夜な夜なとあるファミコンのゲームのコードを読んでました(スペランカーではないです)。NES 回りとかさすがにもう枯れきってるはずなんですが、エミュはどれも完成度高いし最近は JavaScript 版なんかも使えるんですけど、逆アセンブラってあんまりいいのがないんですよね。もっとあったけどなくなってしまったのかもしれません。しかもたまたま使ったやつが微妙にバグっててちょっと悲しい思いをしました。

ndss1.png
JavaScript 版の逆アセンブラもすでにいくつかあるんですが、どちらかというとエミュ指向だったりして、今の自分のようにただソースを読みたいという場合にはあんまり向いていません。というわけで、3時間くらいかかりましたが作ってみました。

NES Disassembler  JavaScript 版

HTML5...といっても FileAPI 使ってるだけですけど、ほんとこういうツールはもうブラウザでいいな、って感じがします。

ちなみにこの逆アセンブラはどの辺がいいのかというと、
  • 2パス(以上)なのでラベルを解決する
  • 割り込みベクタからPC到達範囲を調べるので、データセクションを分離できる
  • その上ジャンプテーブルを使った間接ジャンプ先も結構追いかけてコードセクションを識別する
  • NES の IO アクセスをコメントで出してくれる
といった辺りが素敵な感じになっています。そしてこれが今後どうなるかというと・・・どうなるんだろう。。。とりあえずバンク切り替えに対応しないとですね。
あくまでエミュにせずにちゃんと解析していろいろする、というあたりに強いこだわりが感じられます(意味不明)

それではまた。

↑このページのトップヘ