2025/03/15 16:10 Why SNES hardware is running faster than expected and why it's a problem

ロボ子、今日はちょっと懐かしい話をするのじゃ。Super NES、つまりスーファミのAPU(Audio Processing Unit)の話じゃ。

スーファミですか、懐かしいですね。APUというと、音を処理する部分ですよね。

そうじゃ。そのAPUに使われているセラミック発振子が、実は曲者だったらしいのじゃ。

曲者、ですか?

そう。経年劣化とか熱で、動作速度が変動するらしいのじゃ。それがエミュレーターでの速度記録と実機での結果が一致しない原因になっているらしいぞ。

なるほど。エミュレーターと実機で動作が違うのは、よくある話ですが、発振子の変動が原因とは。

TASBotチームって知ってるか?彼らが実機でのツールアシストスピードラン(TAS)の再現に苦労しているらしいのじゃ。APUのクロック変動がフレーム単位での正確な再現を困難にしているんだと。

TASBotチームですか。すごいですね。フレーム単位での再現となると、本当にシビアですね。

APUのクロック速度は、仕様では24.576 MHzらしいが、実際には個体差や使用状況で変動するらしい。DSPのサンプルレートも32,000 Hzからずれることがあるみたいじゃ。

仕様と実際の動作が違うのは、よくあることですが、それがゲームの動作に影響するとなると、無視できない問題ですね。

2000年代初頭には、一部のエミュレーター開発者が、特定のSNESゲームがエミュレーター上で正しく動作しない問題を、DSPのサンプルレートを32,040 Hzに調整することで解決したらしいぞ。

へえ、32,040 Hzですか。微妙な調整で動作が変わるんですね。

TASBotチームの調査では、温度変化によるDSP速度への影響は小さいものの、コンソール間のクロック速度の差は最大で234 Hz(約0.7%)に達することが判明したらしい。

0.7%ですか。意外と大きいですね。コンソールによってそんなに差があるとは。

調査対象のコンソールのDSPクロック速度は、平均で32,076 Hzだったらしい。任天堂の仕様である32,000 Hzや、2003年にエミュレーター開発者が実機から測定した32,040 Hzよりも高いみたいじゃ。

平均で32,076 Hzですか。仕様よりも高いんですね。個体差が大きいということでしょうか。

APUの発振子をより正確な水晶発振子に交換しても完全な動作は得られず、APUサンプリングには「ジッターパターン」が存在し、実行間の動作時間にばらつきが生じることが判明したらしい。

ジッターパターンですか。そんな複雑な要素があるんですね。

Rasteriの研究によると、同一コンソールでのばらつきは、リセット回路の非決定的な動作が原因らしい。CPUとAPUのクロックの同期サイクルが毎回異なるため、ラグフレームの発生を予測できないんだと。

リセット回路の動作が非決定的とは、面白いですね。それがラグフレームに影響するとは。

つまりじゃな、スーファミのTASは、運も絡んでくるってことじゃな!

運ですか!それは面白いですね。でも、エンジニアとしては、原因を特定して解決したいところですね。

そうじゃな。でも、たまにはこういうアナログな問題も面白いじゃろ?

そうですね。勉強になりました。ところで博士、スーファミのカセットって、息を吹きかけると直るって本当ですか?

それは都市伝説じゃ!でも、私も昔よくやったぞ!…って、ロボ子、まさか私をからかっているのか!?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
