Palm OS 5の概要

1.前書き

初のPalm OS 5搭載機であるCLIE NX60/70、およびPalm TungstenTが昨年末に発売されてから、早くも半年が経とうとしています。その間ソニーからはハイエンド機NZ90とビジネス機TG50が、Palm Inc,からはビジネスプロフェッショナルのためのTungsten C、エンターテイメントモデルZire 71が追加されました。またGPSメーカーGarminからもPalm OS 5を搭載するiQueがアナウンスされています。
このように当初はハイエンドモデルに限定されていたPalm OS 5が徐々にミッドレンジまで下がってきて、Palm OS 4搭載機はローエンド機やスマートフォンなどに限られ、Palm OS 5搭載機が中心になりつつあります。
多少時機を逸してしまった感もあるのですが、私のソフトウェアをPalm OS 5対応にした経験を踏まえて、Palm OS 5におけるプログラミング上の注意点について解説しましょう。

以下、OSの表記をPalm OS 5、Palm OS 5.0、Palm OS 5.2等と表記しますが、Palm OS 5と記述した場合は5.0、5.1、5.2等に共通する点と思ってください。

また、今回の講座では開発環境としてCodewarrior Dev Studio for Palm OS Platform v9.0J(ずいぶん長くなりましたね)を用います。R8以前をお使いの場合はサンプルプロジェクトがそのまま使えない、設定画面が異なるといったことがありえますのでご注意ください。


2.Palm OS 5の特徴

Palm OS 5の特徴を整理してみます。まずはPalm OS 5.0で実現されたものです。

  • CPUがDragonBallからARM互換CPUに変更
  • Palm OS 4以前用に開発されたアプリケーションを動作させるための仮想マシン環境であるPACE(Palm Application Compatibility Environment)を搭載
  • Palm OS標準機能として初めてハイレゾ画面をサポート
  • Palm OS標準機能として初めてPCM音声の再生・録音機能をサポート(クリエは未実装)

他にも以下のような機能がPalm OS 5の機能としてアナウンスされていますが、実際はPalm OS 5.1以降の機能となり、Palm OS 5.0を搭載したTungsten T、CLIEシリーズでは利用できません。このあたりはPalm OS 5とPalm OS 5.0の違いをわかっていないと理解しにくいところです。

  • SSLに対応
  • 暗号化機能をOS標準で搭載
  • カラーテーマをサポート

これらの機能はPalm OS 5.2.1搭載のTungsten C、Zire 71で初めて実現されました。


3.アプリケーションへの影響

上記の特徴がアプリケーションプログラミングにどのような影響を与えるかをもう少し詳しく見てみましょう。

・CPUがDragonBallからARM互換CPUに変更

Palm OS 5最大の変更はCPUが変わったことです。変更された理由はいろいろなところで語られていますので、ここでは触れないことにします。
CPUが変わることで、従来アプリケーションが使っていたM68000のCPUコードは理解できなくなります。CPUが持っていた各種IOも機能、構成などが変わります。また、バイトオーダーがBig EndianからLittle Endianになり、データのバイトアライメントが16bitから32bitに変わりました。バイトオーダーとバイトアライメントについては詳しくは説明しませんが簡単な例をあげましょう。以下のような構造体があり、

  struct test_structure {
      UInt16 a;
      UInt16 b;
      UInt8 c;
      UInt32 d;
    }

メンバーの値が、a = 0x1234, b = 0x5678, c = 0xaa, d = 0x11223344だった場合、M68000では以下のように格納されます(00はアライメントのために挿入されたものです)。

  12 , 34 , 56, 78, aa, 00, 11, 22, 33, 44

一方ARMでは以下のように格納されます。

  34 , 12, 78, 56, aa, 00, 00, 00, 44, 33, 22, 11

このようにデータの内容が(全体の長さすらも!)まったく異なっています。
CPUコードが理解できない点についてPalm OS 5にはM68000CPUコードを解釈、実行するエミュレータ PACE(Palm Application Compatibility Environment)が搭載されており、アプリケーション開発者はあまり気にする必要はありません。

●PACE について、より詳しいことをお知りになりたいかたは、以下の URL をご覧ください。

http://www.palmos-japan.com/dev/support/docs/palmos5/os5overview.html

一方、CPUコア以外にDragonBallが持っていた各種ハードウェア(LCDインタフェース、D/A,A/Dコンバータ、タイマー等)は一切エミュレートされませんので、Palm OS関数を使わずハードウェアに直接アクセスしていたアプリケーションはまったく動作しなくなります。
バイトオーダーとバイトアライメントの変更についても、ほとんどの場合はPACEが自動的に変換してくれるのですが、アプリケーション開発者も完全に無縁ではいられません。ぜひ理解してください。

・データ構造の変更
Palm OS 5は内部的には完全にARMコードで記述されており、OS内部のデータは全てLittle Endian/32bitアライメントで格納されています。一方、アプリケーションは全てデータがBig Endian/16itアライメントで格納されていることを想定していますので、OSとアプリケーションがデータのやり取りをする場合必ず変換が必要になります。

例えば、なんらかのイベントが発生した場合、Palm OSは発生したイベントに対応するイベント構造体を作成し、それをアプリケーションに渡しますが、この時点ではイベント構造体はLittle Endian/32bitアライメントで表現されています。これをそのままアプリケーションに渡すと異なった解釈をされてしまいます。
そこでPACEがこれらの情報をBig Endia/16bitに変換してアプリケーションに渡します。逆にアプリケーションがイベントをPOSTした際も、PACEがBig Endian/16bit形式からLittle Endian/32bit形式に変換してOSに渡すことになります(実際に変換が行われるのはPalm OSが認識するものだけです。独自に定義したイベントなどはそのままの形式でOSを経由してAPに渡されます)。
またPalm OS関数のパラメータ、返却値も形式が変わりますが、これらも全てPACEが自動的に変換を行います。


他にOSとアプリケーションで共有されるデータとして各種GUIに関する構造体があります。Formを使うアプリケーションでは、アプリケーション内にFormを定義するリソースがあり、それが実行時にDynamic Heap内にコピーされ、必要な初期化が行われます。アプリケーション内にあるFormリソースはBig Endian/16bit形式で表現されていますが、OSが解釈できるのはLittle Endian/32bitのため、リソースの初期化時(具体的にはFrmInitForm)にアプリケーション内のリソースが変換されて利用されます。ここまでは問題はありません。
問題となるのは、Dynamic Heap内にある構造体メモリにアプリケーションが直接アクセスすることがある時です(例:ctl->bounds等)。Dynamic Heap内にある構造体はすでにLittle Endian/32bit形式に変換されていますので、アプリケーションからみると意味のないデータになります。また、イベントの取得やリソースの初期化時と異なり、アクセス時に何らかのPalm OS関数が呼び出されるわけでもないため、この時点でPACEが動作して情報を変換することもできません。

この問題に対してPalm Sourceでは、「構造体内の情報への直接のアクセスはせず、専用の関数を使ってアクセスする」という方針を持っています。こうすれば関数呼び出し時にデータの変換が可能になり、また将来的に構造体の内部構造が変化したときにもアプリケーションへの影響が少なくなります。
ただし、実際には構造体に直接アクセスするアプリケーションが多数存在することから、Palm OS 5にはShadow Structureという仕組みが用意されています。

・Shadow Structure
Shadow Structureとは、OS内部にあるLittle Endian/32bit形式のデータをアプリケーションに参照・変更させるために作られたBig Endian/16bit形式のコピーのことです(図1参照)。
FrmInitForm等の関数が呼ばれた場合、Palm OS内ではLittle Endian/32bitでデータを管理しますが、PACEはこれをBig Endian/16bit形式のShadow Structureにコピーして、これへの参照をアプリケーションに返します。これによってアプリケーションは正しく構造体の内部にアクセスすることができます。
ただし、Shadow Structureでは「OS内部の構造に変更があった場合、それをShadow Structureに反映する」、「Shadow StrcutreにAPが変更を加えているかどうかを常にチェックし、加えられていたら、それをOS内部の構造に反映する」といった処理が必要になりますので、速度的にはデメリットの大きい方式です。そのためShadow Structureはアクセスされる頻度が高い構造体の中の、さらに一部のメンバーのみで利用されているようです。どの構造体のどのメンバーに対してShadow Structreが提供されているかという公式の情報はありません。Shadow Structure自体暫定的な性格のものであり、いつまでサポートされるかわかりませんので、できるだけ早く本来の方法であるアクセス関数を利用するように変更すべきでしょう。詳細な方法については後ほど説明いたします。

・Palm OS標準機能としてハイレゾ画面(正確には高密度画面)をサポート

ユーザおよび開発者にとって大きな機能です。これまではSONY、HandEraといった企業が独自の方法で拡張をしており、開発者にとっては悩みの種でした。今後も当面は複数の方式が並存してしまいますが、長期的にはこの方法に集約されるでしょう。
Palm OS 3.5〜4.1を搭載するクリエでも、画面バッファに直接アクセスするアプリケーションは正常に動作しませんでしたが、これまではローレゾモードが準備されていたため回避することができました。これに対してPalm OS 5のハイレゾ機能は常にハイレゾモードで動作しますので、画面バッファに直接アクセスしているようなアプリケーションは修正が必要になります。

・カラーテーマをサポート

Palm OS 5.1からはカラーテーマがサポートされており、画面上のさまざまなコンポーネントに任意のカラーの組み合わせが可能となります。
独自に描画を行っているアプリケーションでは、テーマを変更した場合に画面が汚くなってしまうことがありますので、テーマを考慮した描画を行う必要があります。

・Palm OS標準機能としてPCM音声をサポート

これについてはPCM音声再生機能、録音機能を利用しなければ影響はありません。ただし、Palm TungstenT等ではPCM音源で従来のビープ音をエミュレートしているようで、音色が異なって聞こえることがあります。その場合は調整が必要です。
また、本機能はクリエではサポートされていませんので、この点についても注意してください。

・SSLに対応
・暗号化機能をOS標準で搭載


これらの機能は新機能が必要でない場合、意識する必要はありません。


4.Palm OS 5対応方法

以上、Palm OS 5がPalm OS 4から変わった部分とアプリケーションへの影響について説明してきました。次回以降は具体的な例をあげながら対応の方法を解説していきます。

    (解説予定)
  • 構造体へのアクセス
  • リソースの扱い(Bitmapリソースを例として)
  • Hack
  • 動作速度
  • ハイレゾ画面への対応
  • カラーテーマへの対応

●参照資料
PalmSource内のPalm OS 5に関するページ

http://www.palmos-japan.com/dev/tech/palmos5/



copyright(C)2002 Hacker Dude-san all rights reserved.