経過報告


はーい!!

WSX2の最適化について

WSX2の最適化はなかなかうまくいきませんねえー。
バッファを毎回newしないようにしたり、インライン展開をやってみたのですが、体感では大きな差になってないかもです。
ちゃんと速度測定してみないと違いがわからない程度かもしれません。
APUエミュレーションコード中の、キューにデータをためる処理で、newしてるところも直したいですね。

FCCの状況

FCCの方は、統計情報最適化というのを有効になるように調整を進めています。
今は、使い方がめんどくさすぎるため、使えないようにしてました。

元々の機能は、最初にWindows上のエミュレータでゲームを動かしてみて、コードのアドレスごとに実行した回数を取得しておき、その情報を元にして実行回数が多かった部分だけを、トランスレートの対象とする機能でした。
JavaVMのHotspotみたいなのを、手動でやってる感じです。

しかし、事前にゲームで遊ぶのは面倒なんですよね。
そこで、その辺を自動化できないかということで、コードをトレースするプログラムを作ることにしました。
6502のコードをトレースして、コードとデータを自動で選り分けるわけです。
今は、コードもデータもお構いなしでJavaソースに変換かけちゃっていますので、やたらサイズが大きくなってます。
トレースした情報を使って、純粋なコードだけを変換するようにすれば、かなりサイズが小さくなるし、速度も上がるはずです。


また、現状だとマッパー0と3のごく一部のゲームが動くだけという状況なんですが、これだとちょっとあんまりですよね……
正常動作するソフトをもっと増やす必要があるなとはすごく思うんですが。
多分、この調子だとなかなか難しいと思うんですよね。

今は、CPUとPPUのエミュレーションコードは、フルスクラッチで組んだコードを使っています。
この辺で、既存エミュレータのソースを取り込んでいく方向に、方向転換するのもありかなと思います。

infoNESなど、移植性がよさそうなエミュレータのソースを使って、マッパーコントローラの処理を取り込みつつ、CPUコアとPPUコアは、私がDoJa用に最適化したFCCのものを組み合わせるようにすれば、再現性と速度の両方が得られそうだと思うんですが……
さてうまくいくでしょうか。