Closed pinterior closed 2 years ago
Pull Requestありがとうございます!ただ、これはSPENに関わらずVSYNCごとにSpriteにScheduled Taskが入ったままになるように見えるのですが、SPENがオフの状態ではScheduleを使わないようになんとかならないですかね?Scheduled TaskはCPUがインストラクションをひとつ実行するたびにチェックしているので、できれば少なく抑えたいところなのですが。
ちなみに、これを書いている途中で、vmbase.h/cppのRunScheduledTaskがinlineになっていないことに気が付いてしまったので、Inline化しておきます。ちょっとスピードが上がるはず。
それから、Shadow of the Beastは、スプライト書きかけなのに既に書き終わったはずと見当をつけてSPENをオフにしてしまうということをやっているので、書き換えサイクルの途中でSPENがオフになったらその時点でスプライトをVRAMに書き込む処理を入れないと多分動かなくなるように思います、と、ここまで書いた段階で、本当にダブルバッファになるんだったら、書き換えサイクルの最初に書き込んでしまえばいいのではないかと思ったのでこっちはなんとかなりそうですね。
あ、そうか。電源投入時からかかりっぱなしにする必要があるのであれば、Scheduled Taskを経由せずに別途毎回呼び出すようにすればいいのか。これは、1/60単位だから、1/1000秒の精度があれば十分過ぎるぐらいですよね? そうであれば、ProcessSoundと同じ頻度でチェック(ProcessSpriteみたいな)すれば十分かな。そう考えると前からそうしておけばよかった気がしてきた。とりあえずMergeしてそのように書き換えようかな。
直したのをpushするので少々お待ちください…(動作確認中)
電源オンではスケジュールせず、以下の場合にスケジュールするようにしました。
定期的なチェックで十分かどうかはわかりかねます。 プログラムから見えるVSYNCとSPD0のセット、PAGEのフリップが十分同期するならよいのですが、ミリ秒単位ではどうでしょうか。 BBSで挙げられていたGenocide2などが不安に思います。
おお、速い!ありがとうございます!Mergeさせていただきます!Genocide 2はVSYNCの最初にSPENがReadyになるか、最後になるかの違いだったように記憶しているので、多分大丈夫な気もしますが、必要のあるときのみScheduleが入るのであれば敢えてProcessSoundと同列の専用のチェックを入れる必要は無さそうですね。
Works fine with ALLTYNEX stage4 boss (still have a small glitch due to lack of SPYS bit support), but not yet tested with tricky softs. (Shadow of the Beast, Genocide Square, Image Fight, etc)