PPC2003 Second Edition でVGA表示


●PPC2003SE-VGA対応バイナリ

 本文がムダに長くなったので、最初にPPC2003SEのVGA機で動作する風味の
 バイナリを置いておきます。
 (一応、手持ちのPOCKET LOOX v70、GENIO e830で動作確認済み。)

 わっふる PPC2003SE-VGA版はこちらから

 SV-5E1 PPC2003SE-VGA版(Ver. 2.7)


==============================================

●注意

 このページの情報はかなり古いです。
 VGAに正式に対応している最新の開発環境を使用している場合には
 このページの情報はほとんど無意味だと思われます。
 eMvt3(eMbeded Visual Tools ver.3)などの古い開発環境を
 使ってVGAアプリを作りたい人には多少は役に立つかもしれません。


==============================================

●はじめに

 PocketPCは2003SEになってようやくVGA表示がサポートされたのですが、
 単純に画面サイズを大きくしただけではVGAでは動かないみたいです。
 VGA機ではこれまでのPPCバイナリはQVGAエミュレーションで動くわけですが、
 このエミュレーション動作を無効にするための細工を施さないと
 必ずQVGAエミュレーションモードで動作してしまうらしいです。

 これはねこーぷろじぇくとU掲示版の2004年7月15日〜7月18日あたりに
 書かれていました。

 上記掲示板を勝手に転載することになるのであまりよいことではないのですが、
 ログ流れに備えて一応ここにも関係のありそうな部分を抜粋しておきます。


 当方なりに非常に大雑把にまとめてみると、

 ◎VGAとして動作させるには"HI_RES_AWARE"リソースを追加する必要がある

 ◎GAPIをそのまま使うとQVGAエミュレーション動作してしまう

 ということかと思います。


 ということは、
 ・GAPIを使用していない
 ・画面サイズがQVGA(240×320)で固定されていない
 ものであれば、"HI_RES_AWARE"リソースを追加すればVGAアプリとして
 動作するものもあるのではないかと思われます。
 (実際には、そう単純にはいかない場合が多いようですが。)

 上記の推測に基づいて、
 ・SV-5E1(HPC版)
 をPPC2003SEのVGA機対応にしてみました。

 また、ゆいさん作のねこープロジェクトUのソースから、
 GAPIの使い方もなんとなく判ったような気がするので、
 ・わっふるVGA版
 のバイナリも作成してみました。

 以下にバイナリ作成時のTips?等を書いておきます。


==============================================

●リソースの追加方法

 リソースの追加方法については、ホーミンさんのHPにある
 「PocketPC2003SEハイレゾアプリ作成方法」
 というテキストがとても参考になります。
 というより、"HI_RES_AWARE"リソースの追加手順が全て書かれています。
 自分のPCのOSがWindows2000やXPの方は、この通りにやれば、
 多分問題ないと思います。

 ただし、PCのOSがWindowsMeの場合は、eMvt(eMbeded Visual Tools)では
 exeファイルに直接リソースを埋め込むことはできません。
 (少なくとも当方のWindowsMe+eMvt3という組み合わせでは
  書き換えはできても、そのexeファイルを保存できませんでした。)

 WindowsMe環境でexeファイルにリソースを追加したいのであれば、
 Resource Hackerなどを使う必要があります。
 ただ、Resource Hacker単独で新規リソースを作成するのは面倒なので
 (というより、当方には作成方法がよく分かりませんでした。)
 他のアプリ(eMvt等)でリソース付きのバイナリを作成しておいて、
 Resource Hackerでそのリソースを一旦抜き出し、それを改めて
 他のexeファイルに埋め込むようにすると楽です。
 参考:抜き出した"HI_RES_AWARE"リソースのサンプル(Resource Hacker用)
    リソースの埋め込み手順


==============================================

●VGAネイティブモードでのGAPIの使い方

 前述の通り、GAPIをそのまま使うとQVGAエミュレーションモードで
 動作してしまうためVGAアプリにはなりません。

 対処法は、
 ・GXGetDisplayProperties()、GXBeginDraw()、GXEndDraw()の3つの関数を
  GAPIを使用しない別の関数に置き換える。
  (その他のGAPI関数は使ってもかまわない模様。)
 ・フレームバッファの先頭アドレス等のGAPI用パラメータは
  ExtEscape()で取得した値を使用する
 ということになるようです。

 これは、ゆいさん作のねこープロジェクトUのソース(ver0.79以降)の
  WinCE\SCRNMNG.CPP
 の最初のほうの
  // ---- GX DLLとか
 のコメントのあたりを見ていただければよいかと思います。
 当方もこれをそっくり真似させていただいただけです。


==============================================

●SV-5E1のPPC2003SE-VGA版について

 自作の改造版SV-5E1 HPC版のARMバイナリに、Resource Hackerで
 "HI_RES_AWARE"リソースを追加しただけのものです。

 改造版SV-5E1 HPC版についてはSV-5E1をひっそりと応援するぺぇじを参照。

 ※追加したリソース(Resource Hacker用)
  このリソースを追加すれば、VGA動作するようになる
  アプリもあるかもしれません。

 ※なお、これと全く同じ方法でPPC版のTTVブックリーダも
  VGA動作するようになります。(Ver2.00にて確認。)


==============================================

●わっふるのPPC2003SE-VGA版について

 自作の改造版わっふるのソースに
  @"HI_RES_AWARE"リソースを追加
  AVGAネイティブモードで動作するようにGAPI周りを修正
  BVGA縦画面(480×640)に対応
  Cあめぢすとをロードするタイミングを変更(POCKET LOOX v70対策?)
 の変更を施してリビルドしたものです。

 改造版わっふるについては改造版わっふる最新verを参照。

 @、AがPPC2003SEのVGA画面に対応させるための処理です。

 Bは、VGA対応わっふるでは main_ppc.c の
  void *GXBeginDraw_menu()
 という関数が横画面しか考慮されていないようだったので、
 これを縦画面にも対応させました。
 これで、縦画面モード、横画面(landscape)モードのどちらからでも
 起動できるようになったはずです。

 Cは、POCKET LOOX v70固有の問題なのかもしれませんが、
 何故かあめぢすとのロードに失敗して音が出ないようだったので
 あめぢすとのロードをわっふるの起動直後に変更しました。


==============================================


きゅーびずむ