2013年03月29日

PC6001VX2.0計画(1)新バージョンを妄想してみる

PC6001VXも当座の動機であった「自分の常用環境であるLinuxで動くP6エミュレータを作る」という目標は達成したわけですが、今後はもっと長期的な「動作プラットフォームの拡大」という課題に取り組んでみたいと思います。

当面の目標はAndroidとOpenPandora(3年近く前にポチったのにまだ届かねえよ(ノ`Д´)ノ彡┻━┻)です。
そのために、解決しなければいけない課題と、今後の方針を考えます。

・SDLを外してQtに置き換える
現在のP6VXの実装は、コア部分にSDL、設定GUIにQtという合わせ技で実装していますが、やはりプラットフォームごとに異る不可解な挙動をしたり、なによりライブラリを揃えるのが面倒臭い。
依存するライブラリは少ないに越したことはありません。
かねてからSDLとQtどっちかだけで全部やりたいと思っていたのですが、GUIの作りやすさや私の慣れの問題でC++で書きたいなどいろんな要因でQtを選択します。
またQtの方がベクターグラフィックスの描画や、描画したオブジェクトに対するタッチイベントなど高水準のAPIが揃っているので、将来タッチパネル用のソフトウェアキーボードとか、PC-6051エミュレーションができるかも?
ちなみにQtにジョイスティックサポートはないので、そこだけは何か別のライブラリを使わないといけませんが。

・エミュレーションコアの基本構造は変えない
本家PC6001Vはひと通りの移植性は考慮されていて、コア部分が特定のOSやAPIに依存しない作りになっています。
その構造は必ずしもQtと相性がいいわけではないのですが、Qtのラッパー側が多少いびつになっても、オリジナルの基本構造は極力維持したいと思います。
これは近日中に本家PC6001VがSRに対応する(既成事実)ためで、その際の変更を取り込めるようにしておきたいからです。
それは冗談としても、まだ私にはコア部分の改良やデバッグをする力量はないので、本家からはあまり逸脱しないようにします。

・省電力
従来デスクトップで動かしていた際は気にする必要はあまりなかったのですが、例えば現在のP6Vにはビジーウェイトがあり、1コア分のCPUパワーを使いきってしまいます。
モバイルだとそのへんが地味に効いてくるので、処理の重い所は見なおしていきたいと思います。

・ハードウェアでできることはハードウェアでやる
省電力とも関連しますが、現在の実装は色変換や画像の引き伸ばしをソフトウェアでやっており、それなりにCPUパワーを食っています。
現在だとOpenGLが動かないハードのほうが少数派なので、そのへんの処理はハードウェアに投げて、なるべく処理を軽くしたいと思っています。
本当は音声のミキシングなんかもハードウェアでやりたいけど、そっちは厳しいだろうなあ。

・画面の解像度に依存しない
現状だと表示を大きくしようとするとウィンドウモードでスキャンラインを使って640x400で表示するか、フルスクリーンで表示するかという選択になりますが、フルHDモニタくらいだとスキャンラインモードでもそろそろ物足りない大きさになりつつあります。
またAndroidだと解像度を変えてフルスクリーンというのも現実的でないと思うので、ウィンドウはOpenGLを使って任意倍率で拡大できるようにします。

本当にAndroidに持っていけるかどうかは全くの未知数ですが(この時点でAndroidSDKもnecessitasも触ってない)ここ2ヶ月くらい、ちまちまと試行錯誤を続けてきて、少なくともSDL切り離しまではできそうだという感触を得ています。
現時点で画面表示周りのQt化は完了しており、拡大縮小(やろうと思えば回転も)自由自在です。
BGH_zDrCQAARJMl.png:large.png
あとはサウンドとかフォントファイル周りとか、地道な作業が続く予定です。

あ、なんか本家P6VをDISってるように見えるかもしれませんが、そういう意図はないのであしからず。
posted by eighttails at 20:24| Comment(3) | PC6001VX | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
はじめまして。まだ全然作りこんでいませんが、とりあえずNecessitasを使ってAndroidで実行出来ましたのでご報告いたします。
Posted by tanam at 2013年04月27日 20:26
tanam様
はじめまして。
まさか先を越されてしまうとは。驚きました。
今動いているという事はP6VX1.0ベースという事ですよね。
SDL+Qtはデスクトップ(LinuxやMac)でもちょっと挙動が怪しかったというのが作り直している動機ですが、Androidで動いてしまうとは。

現在開発中の2.0はLinux上ではほぼ完成していて、ジョイスティックサポートを外せばすべてQt5だけでビルドできるようになっています。
グラフィックはSDLの代わりにQGraphicsView+QGLWidgetで描画するようになっており、Androidで動かすにはこちらのほうが軽くなると思います。
いずれにしてもQt5がAndroidに来るのはもう少し先なので、気長にウォッチしてください。
Posted by eighttails at 2013年04月27日 21:18
はい。PC6001VX_1.01_src.zipとandroid-project.zipをNecessitas上で混ぜただけで動きました。

サウンドも既にQt化されているんですね。公開を心待ちにしております。
Posted by tanam at 2013年04月28日 01:28
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: