星くんとの会話

星くんからメッセンジャーで来た話があまりに面白かったので、ちょっとブログで取り上げることにした。
もちろん、当人の許可はもらっている。
星くんについては、僕のブログの星恵太君のことでも読んで頂きたい。
■星

そういえば、以前PCE YS I-IIのゲームオーバーの曲がなぜ音色がああなったのか、メモリが足りないって話をしたのですが、「32バイト足すだけでいいじゃん」ってツッコミが入ったんですよね。そういえば、きちんとお話してなかったんですけど、YS IIの街、村の曲の高音のために矩形波倍音をシコタマ用意した上に音痴になるのを微調整したり、イース中枢の音とかにメモリを食われてたのが原因だったんですよ。あと、テンポがVシンクなのでVあまりの補完が手作業で中途半端になり、遅い曲や早い曲が残ってしまってましたね。その分、雰囲気は近づけたつもりでしたが。。。
PCエンジンはなんで音がイマイチなのか、高音も低音もダメだから、これにつきるかもしれないっすねwwww だから、作曲レベルで得意な音階をせめ、楽曲的にも技術的にも高いマジカルチェイスは別次元だったですよね。
なんて話を同業だった知人としていて、岩崎さんのお耳にも入れたくなってメッセしました。お目汚し、あしからずです。

■僕

スゴく面白い話なんだけど、これってブログに書いていい?
サイコーに思うのがさ「32バイト足すだけじゃん」なのか「32バイト<も>必要なのか」の感覚の違いだよねw
32バイトって、あんときビット単位で詰めてた感覚からすると、ゲームオーバーは常駐バンクじゃん? 絶対無理! な量で、星が「すません、ゲームオーバーの音良くしたいんで32バイト常駐バンクに追加したいんすが」って言ったら「なにふざけたこと言ってんの?」って絶対に言ってたはずwwww
毎日、常駐バンクがパンクして「何を追い出せるか」で必死になってたんだぜ?w


■星

良いですよ、もう会社ないですしwwwww 32バイトも、CDROM2のドライバは、波形メモリワンステップ5ビットを1バイトずつ、3ビット余して格納してた罰当たり仕様でしたから余計辛いんですよね。 ちなみに、欲しいんですけど言ってもドライバの仕様上断るのも己なんですけどね。圧縮は手作業でしたし

■僕

な、なんだとー! 俺たち、そこを圧縮すりゃあ数十バイトは・・・wwww

■星

フルビットたてた波形メモリ、1Fhを羅列してましてからね
そうか、、考えてみたら3Bit×32バイト、波形一音色毎に浪費してたのですね。めちゃ酷い話だ

と、こんな会話をしていたわけなのだけど、全く、意味がわからないであろうから説明しておこう。
イース1・2ではサウンドは「共通領域」と呼ばれる最大14KBの領域に詰め込まれていた。
これは音が鳴る時にドライバーは割り込みで駆動されるので、必ず物理アドレスの上にデータが見えていなければならないルールがあった(回避することはできるがデメリットの方が遥かに大きい)ので、この制限があったわけだ。
このあたりの細かい説明はクソ面倒くさいので割愛するが、全部で64KBある物理アドレスのうち16KBにプログラムが見えていて、最初の8KBはI/Oバンク、そして40KBに汎用データを配置していくって構造…とか説明したってワケわからんよね。ともかく14KBの中にデータはなければならなかった。
そして、この14KBの常駐バンクは他のプログラムやテキストデータやともかく常駐してないとマズいものが置かれている場所だったので、いつでも恐ろしくメモリが足りなかった。ここに32バイトの波形メモリのデータを「もうちょっと音よくしたいから、つけくわえてください」とか言われたら、当時の僕とHahi君は間違いなくにべもなく「メモリねえよ!」で終わりだったのは賭けてもいい。
加えて書くと、なんとこの32バイトの波形データは全く圧縮されておらず、3×32=96bit=12バイト分のデータが無駄に使われていたというのだから、全く許しがたいという話なわけだ。いくつの波形があったのかはさすがに覚えていないが、10もあれば120バイトなわけで、120バイトもあればちょっとしたコードの一つや二つは入って、あああああ…みたいな感覚のサイズだ。
全く許しがたい仕様だったわけだ。

■追記
当時の開発者から「ちょっと理解できねーぞ」ってツッコミが入ったので、めんどくさくて割愛した説明を書いてみる。
1)割り込みのベクターは常駐部においてあり、そこで割り込みルーチンが起動する。
2)MPR操作して、CDROMBIOSを出す。
3)サウンドドライバーを呼び出す。
4)終わったらMPR操作して戻す。
5)割り込み終了
と、こんな風になるわけだけど、ここでサウンドデータは物理メモリにこのとき見えている必要は確かにない。
2.5)MPR操作して、サウンドデータバンクを呼び出す
を入れれば、物理メモリに出てくるのだ。
だけど、これをやるとMPRを操作する無駄な処理が入るし、だいたい初代CDROMのデータはたったの8バンクしかなく、そのうちの2バンクは常時物理アクセス可能になっている。ならば、MPRを操作する無駄をやるより、常駐バンクにある方が効率がいい判断だったわけだ。またこれにはもうひとつ理由があり、僕が作ったメモリ管理ではデータ管理用のindexがデータバンクの先頭にあり、これを操作してデータを呼び出すのが標準手続きだった。ここにサウンドのためだけにイレギュラーな処理をいれるよりは、常駐バンクに置いたほうがプログラムは小さくなったわけである。

なにもかも懐かしい25年前の話である。
気が向いたら、そのうち、PCエンジンでどんな風にデータを圧縮していたかとかも、書いてみたいと思っている。

LinkedIn にシェア
Pocket

1件のコメント

  • AGENT: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36
    「以前PCE YS I-IIのゲームオーバーの曲がなぜ音色がああなったのか」
    岩崎さんのイース本が発売される前、まさにこの質問をTwitterで岩崎さんにさせていただいたのでした。その時には「内蔵音源ではオリジナルの音色の再現が難しかったからではないか」的なお返事をいただいた記憶があるのですが、その理由をここまで詳細に記していただきありがとうございます。興味深いことこの上なし、です。

コメントは現在停止中です。