先日の日記に書いたが、C700 で NES エミュレータ(FCE Ultra)が動いている。
動作速度は、実機の8割と言う感じ。アクションゲームを遊ぶともったりとうごく。パズルゲームを動かすと、動きの遅さにいらいらさせられる。
しかし、テトリスのようなアクションパズルを動かすと、入力しづらいキーボードでも適度に遊べていい感じ。
しかし、やっぱ実機より速度が出ないと言うのは問題がある。
また、C700 のキーボードはいろいろ特殊なため、配置が使いにくかったりもする。
例えば、カーソルキー横にある MENU キーは、内部的には F11 キーであり、FCE Ultra では Power キーになっている。自分を動かそうとして間違えてリセット、と言うのはあまり遊びやすいとはいえない。
どうにかしたいなー、と思っていたのだが、どうもソースコードが見当たらない。
FCE Ultraのページによれば、Linux の SVGAlib が動作環境だそうだ。C700 は SDL しかないので、これは違う。
FCE Ultra SDL portなんていうのもあり、こちらは SDL 対応なのだがバージョンが古い。
ソースコードが見当たらないのでは手が出ない…ということであきらめていた。
急に思い立って、最新のソースに SDL port の古いパッチを当ててみる。
大体あたるのだが、一部あたらない。仕方が無いのでそのソースを目で見てみる。
で、そのついでに別のファイルも覗いて見て気がついた。
どうやら、最新版は最初から SDL 対応らしい。SVGAlib が必要、というのは真っ赤な嘘だ。SDL port 版が古いバージョンで止まっているのもそのためなのだろう。
コンパイル時に -DSDL オプションをつけてやればよい。これで SDL 対応版が出来上がった。
実は、SDL port 版には速度が出ない環境でも描画を間引いて速度をあわせるための機能があった。
どうやら、最新版にはこれも取り込まれているらしい。 -DFRAMESKIP 付でコンパイル。
…動かしてみる。フレームスキップしない。
ソースを眺めてみると、プログラムの「本体」はフレームスキップに対応しているが、SDL 対応部分のプログラムではフレームスキップを有効利用していないようだ。
適当にプログラムを補ってやる。20行ほど書いたら、フレームスキップするようになった。
ここまでは2時間もかからずあっさり出来た。ちょっと拍子抜け。
ついでに、キー操作を書き換える。
Menu キーでリセットされるのは困るので、Power キーを BACKSPACE に移動。
ファンクションキーがないと Save/Load できないので、これを W/R キーに移動(Write/Readと言う意味で)。
セーブするスロットを数字キーで選べるのは従来どおり。
Zaurus のキーボードで連射したくないので、連射ボタンを作る。Z/X が本来のボタンなので、その上の A/S に割り当て。(秒 15 連射)
S は本来 Disk Select キーらしいのだが、連射にしてしまったので U に移動。(U であることに意味は無い (^^; )
ついでに書いておくと、Enter でスタート、TAB でセレクト。Cancel(ESC)は終了だ。
これで、かなり遊びやすくなった。
しかし、音の再現性は非常に悪い。人間の耳と言うのは敏感だ。動きのタイミングずれには気付かなくても、音がずれるとすごく気になる。
なんとか出来ないかとソースを見たのだが、さっぱりわからない。
あてずっぽうに値を変えてみたりもしたが、悪くなることはあっても改善することは無い (^^;;
まぁ、僕は実際遊ぶのは電車が多いと思うので、音は無くてかまわない。
いっそのこと音の処理を無くせば速度も上がるかもしれないが、それもなんなのでサンプリングレートを落とすことにした(48K -> 12K)。どうせ C700 のスピーカーだし。
/dev/dsp を持っている C700 では、音の出力には SDL を使わず直接 /dev/dsp に流した方が速いため、-DDSP オプションをつけてコンパイルする。
プログラムの一部にバグがあり、このコンパイルオプションをつけるとコンパイルできなかったので、そのバグも修正。
これはランチャを含まない素の FCE Ultra のみなので、Zaurus 用のzFCE-Ultra パッケージを導入してから fceu だけを置き換えると良い。
(zFCE Ultra のパッケージにはラウンチャが入っている。あまり良い出来ではないけどないよりまし…。これのソースがあれば改造するのだが、無いので今は我慢)。
パッケージにしての配布は…要望があれば、そのうち考えます。
追記
次の日の日記にも関連話題があるので読んでね。
同じテーマの日記(最近の一覧)
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |