元ソース(MML)を紛失したNSFからユーザ定義音色を復元するという話。 Emu2413に手を入れる方向で考えていたのだけど、ソースが公開されていてかつEmu2413 を使用したスタンダロンNSFプレイヤがすぐに思いつかなかったので、Game_Music_Emu に手を入れることにした。 Nes_Vrc7_Apu.cppをでっちあげて、それからNsf_Emu.cppにこんな風なメソッドを追加した。これだけ。あとは再生するだけでstdout.txtに $21,$67,$0A,$02,$93,$90,$74,$45 みたく出力されて万々歳ですよ。 Game_Music_Emu作者のBlargg氏はnes_ntscやBlip_Bufferのような、今までありそうで 無かったライブラリを作っているので素敵。static unsigned int vrc7_indexreg; void Nsf_Emu::write_vrc7( Nsf_Emu* emu, nes_addr_t addr, int data ) { if ( addr == 0x9010 ) { vrc7_indexreg = data; } else if ( addr == 0x9030 ) { if (vrc7_indexreg < 0x08) { if (vrc7_indexreg == 0) printf( "\n\t$%.2X", data ); else printf( ",$%.2X", data ); } } }
一日中デスクに向かって座りっぱなしのため、あれが再発したんですよ。ほら、皆まで 言わなくても分かるでしょう。あれです。とにかく辛いんですよ。自己診断してみたら この段階みたいですよ。 これまでテンピュール座布団や穴あきクッションを試すなどして、騙し騙しやってきた のですが、もはやそういう段階を突破いたしましたよ。
よっしん氏の承諾を得て、超連射68kの移植作業を開始してからおよそ1年が経過した。 その間何をやっていたかと言うと、まずX68kの青本を入手しアーキテクチャを頭に叩き 込み、MC68000のアセンブリを勉強しひたすら逆アセンブルリストの解析を行っていた。 (途中でついカッとなってワンダースワンやメガドライブの開発に浮気したりもしたけ ど……でもメガドライブは68アセンブリを書く練習になったのでやって損は無かったよ) そうして得た情報を元に敵キャラクタの行動をCのソースにしていき、マシンパワーが 足りなくなったらシステムを見直して、今年に入ってようやくそこそこ動くようになっ てきた。 しかし、そこで一旦手を休めちゃったんだなぁ。ふと周りを見渡してみると8bit時代の ゲームが見直されつつあり、往年のファミコンソフトが次々と復刻され、PSGをフィー チャした楽曲が多数発表され、更には新作を開発するという話まで出ているようである。 時代はファミコンだったのか?これは、やるしかない!というわけで、Cソースを更に6502アセンブリに落とし込む作業が始まった。 さすがにファミコンは制限が大きく、まず、いつでも巨大キャラを出せるようにするた め背景表示を諦めた。またスプライトの横並び制限が64ドットまでなのでほぼ全てのス プライトが常に点滅して表示されることとなった。なにげに多量のスプライトを使用す る爆破グラフィックは全面カットされた。 一面の本当に最初の部分が動くようになったところで実機チェックである。過去に吸出 し機を作っていたので、それを改造して自由に書き換え出来るようにし、ようやく実機 で動かせるようにしたところで力尽きた。 明日に続く。