PCエンジンエミュレータ移植始めました

今までiアプリ用のファミコンエミュレータを作成してきましたが、それはいったん凍結して、新たにPCエンジンエミュレータの移植をはじめることにしました。

iアプリ向けにファミコンエミュレータを作ろうと思ったころ、私の携帯はD703iというやつでした。
その機種では、ファミコンエミュレータがまともな速度で動かなかったことが、作ろうと思った動機になっていたわけです。

しかし、つくっているうちに月日は流れ、D703i、P905i、SH04Aと機種変更していきました。

いつのまにやら、既存のファミコンエミュレータでもフレームスキップなしでなんとか60FPSが出るくらいまでに、携帯電話のCPU性能が向上してしまいました。

これは良いことなんですけど、より高速なファミコンエミュレータを作ろうとしていた私には、その意義を自問することになりました。

エミュレータを作るというのは、けっこうな時間がかかります。
数万円だして機種変更すれば、それで高速にうごく機種が手に入るなら、それでいいじゃないかと思うんですよね。

お金をいくら出しても、滑らかにエミュレータで遊ぶことが不可能なら、がんばって開発する意義もあるんですけどね。


というわけで、今度はPCエンジンのエミュを移植してみることにしました。

なぜPCエンジンなのかということですが、

  1. 現状、iアプリ用のPCエンジンエミュが存在しない
  2. ファミコンエミュを開発したときのノウハウが生かしやすい
  3. 高速化すれば、60FPS動作も狙えるハードのスペックであるけど、そこそこ重たいと思われる

というのが、主な理由です。

PCエンジンファミコンのCPUは、6502というCPUをベースとしてカスタムしたものが搭載されています。
どちらも、基本的な部分は同じということです。

ファミコンエミュレータを作成したときに、携帯Java向けに最適化したCPUコアがあるので、それに足りない命令を追加することでソースを有る程度流用することもできそうです。


移植ベースはxpceというエミュレータです。
CD-ROM2やSuperGraphixには対応していないエミュレータですが、Huカードのゲームの再現性と速度はなかなか優れているエミュレータだと思います。

これをJavaに移植するわけですが、ベタに移植するだけでは、速度が出ないと思われます。

PCエンジンのHuカードのゲームは、アクションやシューティングゲームが割合として多いので、それなりに滑らかに動かないと面白くないと思います。

如何にして、高速化するかが、腕の見せ所なわけです。

ファミコンエミュのときの経験を生かして、まずは、高速化を行いやすいような環境を作ることからはじめます。


いきなり、iアプリJavaに移植するのではなく、一旦、PC用のJavaへ移植してから、iアプリへまた移植する手順にします。


PC用のJavaへ移植した時点で、デバックや高速化を十分に行っておきます。
PC用Javaへ移植して、PC上で作業を行えれば、パフォーマンスの計測をプロファイルしてログを出力したりすることが容易に行えます。

とりあえずは、こんな方針でやっていきます。