GUST NOTCH? DIARY

MAINCNTL と MAINCNTH

自分でBGMを鳴らそうかと思うが、VSYNC を使うとずれてしまうので、同期をとるにはどうしたらいいのか?と調べていたら、起動時からの経過フレーム時間を示すシステ変数 MAINCNTL というのがあることが分かった。最初、MAIN CoNTroL という意味なのかと思ったら、MAINCNTH というのもあることが分かり、MAIN CouNT Low ということだったらしい。
さて、この MAINCNTL と MAINCNTH の説明を読むとこうとしか書いてない*1

MAINCNTL 起動時からの経過フレーム時間(最大145分)
MAINCNTH 起動時からの経過フレーム時間(145分以上の情報)

アバウトすぎる。
まあ、フレーム時間ということなので、リフレッシュレートが分かればいい。VSYNC を見てみたが、具体的な数値は書いていない*2Nintendo 3DS の仕様をみても特に記載されていないようなので、仮に60Hzだとすると、145分は60*60*145=522000。この数字は見覚えがあって、プチコンの符号付整数値の上限である524287に近い*3。146分だとこの値を超えてしまうので、まあ、これで当たりでしょう。
そうすると、MAINCNTL があふれると MAINCNTH が使われることが予想できますが、522000で繰り上がるのか、それとも524287で繰り上がるのかを確認してみました。
そしたら、MAINCNTL の値は 524287 で 0 に戻り、その際 MAINCNTH がインクリメントされていました。つまり、274876858369 フレーム時間まで管理できるわけですね。