フラグ操作最適化とか

前に書いた通り、Cフラグだけintで、そのほかのフラグはboolで実装してみました。
速度はまだ測定してないのですが、バイナリのサイズはかなり小さくなりました。マリオブラザーズを変換した場合に80キロバイトぐらいです。これは、.NETでの場合ですので、Javaだったらさらに小さくなるはずです。
これぐらいなら十分携帯でもいけるサイズではないでしょうか。

フラグレジスタ操作については、かなりアグレッシブな最適化をかけてます。使わないフラグ操作はできるだけ削除するように、さらにアルゴリズムを改良するつもりです。
このフラグ操作削除が本当にうまく行っているかについては当然きっちりテストしなければなりません。

そこで、デバッグビルドではフラグ操作を削除する代わりに、フラグにnull値を入れておくようにしようと思います。
これはヌル許容型を使えば簡単にできます。
これによって、削除対象のフラグが実は使っているフラグだったという場合に、例外が発生するようになります。こうしておけば、一通り実行してみて例外が起きなければフラグ操作削除がうまくいっていることがテストできるはずです。

ところで、既存の携帯用のNESエミュレータがどんな感じなのか試してみたんですが、思ってたより全然遊べるレベルで動きますねぇ。フレームスキップを10にすると、等速ぐらいになる感じです。ちなみに機種はD703iです。
コマをだいぶとばしてるのでアクションゲームはきついですが、RPGなら問題ないでしょうね。

フレームスキップ無しだと実際の10分の1の速度しか出てないので、エミュレータでフレームスキップ無しで60FPSが出せるような機種が普及するまでは、まだ何年かかかると思われます。
トランスレートの価値を発揮できるシチュエーションは十分ありといえるのではないでしょうか。トランスレートした場合、フレームスキップ無しでも等速になる実行速度を目指します!

あとは差分だけ描画する方法について考えてみようと思います。