2012-03-07

bsnesがついに完成したそうだ

byuu's homepage
SNES Coprocessors — The Future Has Arrived
via: Bsnes has emulated every SNES DSP | Hacker News

bsnesというオープンソースのスーパーファミコンのエミュレーターがある。このエミュレーターは、スーパーファミコンを極限まで正確にエミュレートする目的で開発されていた。正確というのは、ソフトごとのハックなしに、実機とサイクル一致で、すべての商用ソフトを実行するということだ。このたび、bsnesはすべての商用ソフトをサポートした。最後に残っていたプロセッサーは、1995年に発売された、「早指し二段 森田将棋2」で使われていたST018である。

これで、百年、千年後の未来の歴史家は、ゲームの歴史について学ぶ時、すべてのスーファミのゲームを正確に再現して研究することができるようになる。

スーパーファミコンの仕様は公開されていないので、エミュレーターを開発するには、ハードを解析する必要がある。問題は、スーファミはカセット側に独自のチップを載せられるので、スーパーファミコン本体だけをエミューレートしたのではどうしようもない。また、エミュレーターの実装が正確ではなく、動作が実機と異なってしまう場合がある。従来のエミュレーターは、そのような場合、ソフトごとのハックを用いていた。あるソフトは、特定の状況で動作速度が落ちるので、処理速度を上げてやるとか、そういったたぐいのハックだ。bsnesには、ソフトごとのハックが存在しない。

また、ひとくちにプロセッサーの正確なエミューレートといっても、二種類ある。プロセッサーの内部実装を調べて、同じ挙動をするコードを書く。これは低レベルエミュレーションといい、理想だが、プロセッサーの仕様が分からない場合、不可能である。もうひとつの方法は、プロセッサーをブラックボックスと見立て、外から観測する方法である。可能なあらゆる入力を与えて、対応する出力を記録し、その結果から、同じように動作するコードを書く。これを高レベルエミュレーションと呼ぶ。

仕様のわからないプロセッサーの解析というのは、チップを基盤から剥がし、カバーを取り除き、電子顕微鏡で撮影することから始まる。非常に手間と技術のかかる作業である。bsnesの作者は最近、その技術をもつ人間を見つけたらしい。しかし、解析にはカネがかかる。そんなわけで、作者はここ数年寄付を募っていた。その寄付によって、これまで仕様が判明していなかった、DSP-1、DSP-2、DSP-3、DSP-4、ST010、ST011、ST018、Cx4を解析できたそうだ。

それ以前にも、bsnesはSPC7110を世界ではじめてエミューレートし、またサイクル一致の SPC700、 SuperFX、スーパーゲームボーイのエミュレーションを始めて実装したエミュレーターでもある。最後のスーパーゲームボーイは重要である。なぜならば、スーパーゲームボーイはスーパーファミコン上で動くので、完全なスーパーファミコンのエミュレーターを目指すならば、当然スーパーゲームボーイも漏らしてはならない。

さて、最後に残ったのはST018である。これはたった一つのソフトにしか使われていない非常に珍しいプロセッサーである。ソフトの名前は、「早指し二段 森田将棋2」。将棋ソフトは処理速度を必要としたので、独自プロセッサーをカートリッジ側に搭載したのも分かる話だ。

その解析裏話も面白い。どうやら、ST018にはデバッグコマンドがあり、プログラムや内部ROMをダンプする機能があった。デバッグコマンドを実行するのは難しいが、Blarggというこれまた有名なエミュレーター作者によって、スーパーファミコンにシリアルポートをつなぎ、PC側から任意のコードを実行させることができるツールが提供された。さて、ダンプはできたのだが、一体どのような言語なのかわからない。そのバイナリを実行するHLEコードもない。幸運なことに、Cydrakなる人物がバイナリを一目見ただけで、ARMv3 CPUだと鑑定してくれたので、実装を終えることができた。

それにしても、当時スーパーファミコンでARMプロセッサを搭載した将棋ソフトがあったとは驚きだ。コンピューター史としても興味深い。検索してみると、当時のソフトの価格は14900円だったらしい。

ところで、最初のスーパーファミコンのソフトが発売された年を覚えているだろうか。1990年である。

スーパーファミコンのゲームタイトル一覧 - Wikipedia

ということは、映画ではないゲームは2041年から、映画であるゲームは2061年から、徐々に著作権が切れ始めるということだ(ゲームが映画であるかどうかは個別の判断になる)。老後が楽しみだ。

ちなみに、作者はすべてのスーパーファミコンのソフトをコレクションしたいそうである。後残っているソフトは35本、ちょっと近所の中古屋を回ってみようかと思う。

List of Missing Boxes

追記:どうもいくつかの中古品はAmazon.co.jpにありそうである。

追記2:bsnesはポータブルなコードであり、またC++11の機能もふんだんに使っているので、ソフトウェアとしても興味深い。

3 comments:

Anonymous said...

とても興味深いお話ですね!

Anonymous said...

byuuさんが今のところ集めてるのはおそらくSNES版だと思うので
日本のSFC版を探してもあまり意味はないかも(そもそも輸入してたら商品代金はもとい送料もバカにならない)
もちろん日本版もできるだけ集めてるでしょうし、タダでプレゼントしたりしたら喜ばれるとは思いますが。

Anonymous said...

あとスーパーゲームボーイに関しては完全とは言えません。
SGBのロム内にゲームボーイが入っている訳ではないようなので
SGB起動時はbsnesと同時にGBエミュ(bgameboyというらしい)も動かしています。
このエミュの再現性がまだ開発中で高くないためGBソフトで正常に動作しないタイトルがあります。
また元GBやSGB2にある通信ケーブル機能も未対応です。
ただこれを言い始めるとSFC/SNESも拡張コントローラ未対応なため
動作はすれど先に進めないタイトルがあったり...