人間ホットスポット

flashで動くファミコンエミュがやっぱり遅い。
ホットスポットを見てみるだけならできるだろう。」
とcpuの命令を実行する前でpcのアドレスのハッシュを作ってカウントするようにしてみた。
そうすると、無限ループが50%とか使ってたりするソフトもあることが分かった。
多分、水平同期待ちとかだろうけどなんという無駄だ。
昔のコンピュータはシングルタスクだからアイドル状態は無限ループなんだよなぁ。
ゼビウスとかそのアドレスにジャンプするだけとかの待ちになっているし。。。


そこで「さらに、ここだけ高速化すれば速くなるんじゃ?」
と、手動でホットスポットの最適化をしてみた。


?高速化の場所はソフトによってことなるので
ファイル名を見てその場合の処理を関数の変数に保存する。
?該当箇所のromの部分をCPUの空き命令に書き換える。
?空き命令の部分で登録された関数を呼び出す。


これだけだ。
結構ファミコンのCPUはあいてる命令が多いので何箇所も登録できそうだ。
手動でホットスポットしてるので最大でも3箇所しか使ってないけど。


で、結構速くなった。
物凄くじゃないのは、グラフィック周りもまた、どうしようもなく遅かったりしてるので
しょうがない。
コレを自動化すれば、いろいろ嬉しいかもしれない。
マスタークロックの更新が適当になってしまったりして、
クロックを見てるゲームは異常な状態になったりもして楽しい。


携帯のエミュがどうなってるかは知らないけど、最適化するためのパッチ入りソースを自動で作って
コンパイルして自動でUPしてダウンロードできるようにまでしてあればいいのかもしれない。
それが、さらにサーバサイドで動いたらいいんじゃなかろうか。