|
Palmware開発ツールメモ
散文的に使用しているツール、注意点、参考リンクなどを書きます。
- FreeBSD/LinuxでPalmのアプリケーション開発を始めるのに必要なものは?
- prcファイルからリソースファイルを作成するには?
- あれば便利なツールなどは?
- チャレンジャーなもの(multilink) (prc-tools 2.0では不要)
- 32Kの壁 (crt0置き換え) (prc-tools 2.0では不要)
- 2001/2/23 pilrceditを追加
- 2000/11/15 私家版pilot-templateへのリンク作成
- 2000/9/4 誤字修正など
- 2000/7/13 prc-tools2.0でobsoleteな内容に注釈など追加
- 2000/4/17 portsにprc-tools2.0が入ったので記述修正
- 2000/1/22 prc-toolsがportsからの削除を受け記述修正
- 2000/1/13 日本語の修正を少々
- 1999/12/13 32Kの壁の間違いを訂正
- 1999/11/5 誤字修正など
- 1999/10/21 prc-tools,pilot-templateの説明追加。multi-linkを別扱いにした
- 1999/10/16 作成
- pilot-link
- ファイルのインストール/バックアップやアプリケーション対応の同期ソフトとそれらための通信ライブラリなどです。
ないとお話にならないのでインストールして下さい。
FreeBSD+PalmIIIでもフォローします。
pilot-linkはFreeBSDのportsコレクションからインストール出来ます。当然Linuxなrpmもあります。
- prc-tools 0.5.0
- gccなどの開発ツールとprc作成ツールなど。
具体的には gcc-2.7.2.2, binutils, gdbとそれらのPalmOS対応パッチです。
かなり古い環境なので次に説明する2.0を使用した方が良いでしょう。
- FreeBSD 3.2R以前の場合
- FreeBSDのportsコレクションからインストールしましょう。
- FreeBSD 3.3R以降の場合
- portsにはありません。インストール方法を prc-toolsでご紹介します。ご自分でコンパイルして下さい
と思っていたらいつの間にかprc-tools2.0が復活しています。portsに "prc-tools", "prc-tools-binutils", "prc-tools-gcc", "palmos-sdk"が入っています。これで以前のように(試してませんが)一発インストール可能ですね。
- RedHat系Linuxの場合
- 0.5.0のrpmバッケージがあります。
- Win32
- 0.5.0のバイナリパッケージがあります。
- その他
- ソースから頑張ってインストールして下さい(^^)
- prc-tools 2.0
- gccなどの開発ツールとprc作成ツールなど。最新版でマルチセグメント対応してます。
具体的には gccが2.95.2, binutils, gdbなどもバージョンアップしています。
なにより大きいのはPalm,Inc.がサポートしていることです。
浮動小数点まわりにバグがあるようで、フィックスが出ています。
- FreeBSD portsの場合
- prc-toolsが2.0で復活しています。portsに "prc-tools", "prc-tools-binutils", "prc-tools-gcc", "palmos-sdk"が入っています。これで以前のように(試してませんが)一発インストール可能ですね。
- RedHat系Linuxの場合
- Palm Incのdevzoneから2.0のrpmパッケージがダウンロードできます。
- Win32
- Palm Incのdevzoneから2.0のパッケージがダウンロードできます。
- その他
- ソースから頑張ってインストールして下さい(^^)
- gcc
- gas
- ld
- gdb -- シリアル経由でリモートデバッグ出来ます。
- その他 binutilsのツールなど
- pilrc v1.5 -- pilrcの古いバージョンも含まれています。
- txt2pbitm -- エディタなどで書かれたテキスト形式のビットマップを
リソースのビットマップの形式(=pbitm)に変換するツールです
あとは以下のツールが必須でしょう
- pilrc
-
pilrcとはリソースファイルを作成するためのコンパイラです。
テキストで書かれたソースファイルをpilotで必要なリソースの形式に変換してくれます。
pilrcはprc-toolsにも含まれていますがかなり古いバージョンがインストールされます。
まず最新版に入れ換えましょう。 pilrc情報も読んでみて下さい。
日本語に対する不具合のパッチを公開しています。(現在の版(2.5b4以降)にはこのパッチは取り込まれています)
インストールの手間は展開->コンパイル程度です。
なをGUIでリソースの出来栄えを確認できるツールpilrcuiというのがついてきますが,
これを入れるにはgtkが必要です。
開発にどうしても必要なわけではないので,
うまくインストールできなければpilrcuiは入れなくても問題ないと思います。
- pilot-template
-
pilot-templateとはPilotプログラムのテンプレートを作成してくれる
perlスクリプトです。
引数にアプリ名などを渡して実行するとなんにもしないプログラムとリソース、アイコンなどを作成してくれます。
バークレイ大学のISAACグループのページ Pilot stuff from the ISAAC Groupで
GPLに従って配布されています。
とても便利なのですがほんのちょっとだけ不満があります。
CALLBACK_PROLOGUE,EPILOGUEに';(セミコロン)'をつけてくれないのです。
Emacsでindent-regionなどとやるとインデントが崩れてしまいます。
私はpilot-templateの中のcallback.hとEventHandlerの辺りをいじって使っています。
prc-tools2.0に対応していないので、書き換えが必要です。
このスクリプトはprc-tools0.5.0用なのでprc-tools2.0で使うには修正が必要です。
私家版pilot-templateのページを御覧下さい。
- Prc2pilrc
- prcファイルをpilrcのリソースファイルに変換するツール。要Java
- Presdec
- prcファイルをpilrcのリソースファイルに変換するツール。要Java
これらは PalmCentral 辺りで
探せば見つかると思います。
- pbitmtopbm, pbmtopbitm
-
pbitm形式のビットマップデータとpbm形式とのデータの相互変換ツール
そのままではエラーが出たのでUnofficialなportsパッケージを作成してみました。
pbitmtopbm.tgzをダウンロードして下さい。始めてのports作成なのでうまくいってなかったらお慰みです。
- par
-
tarののりでpdb,prcファイルを覗き見ることができるツールです。
レコード単位にデータベースをばらしてバイナリファイルにしてくれます。
バグったプログラムが作った変なデータファイルなんかチェックするのにいいでしょう。
- pilrcedit
-
pilrc形式のリソースをビジュアルに編集できるツール。部品を配置して画面のデザイン作成が出来ます。
Java環境下で動作します。日本語は使えないようです。
いままでもWindows用ではありましたが、これはJavaなのでマルチプラットホームで動作します。
Kondara Linux+JDK1.2.2で動作確認しました。
以下の内容はprc-tools 2.0では不要です
- MultiLink
- parと 同作者のツール。prc-tools 0.5.0のgccでプログラムを作成する場合コードの大きさに制限があり32Kバイトまでしか使えないのです。頑張っても64K程度までです。これはあほな68000CPUの相対ジャンプオフセットが符合つき16bitでしか表現できないという制限からくるものです。(だいたい今どき,なんぼなんでも68000はないやろとか思いますね。せめて68020...^^)
本来、PalmOSはコードリソースをマルチセグメントにしてこの制限を
乗り越えるように設計されていますが,
現在のgccはそれをサポートしていません。
multilinkはこれを行なうものです。
開発の初心者さんなどには全くお勧めしません。積極的に避けた方がいいでしょう。チャレンジャー専用です。(などといいつつ私も試してません ^^;;)
以下の内容はprc-tools 2.0では不要です
- crt0 (C RunTime)を変更する
- codeサイズ32Kの壁を越える方法の一つを御紹介します。
問題の詳細については本ページでは触れません。関連する事項のみ説明します。
詳しくは SRAの ほしさんのページ gccの32kの壁、
英語ですが GCC programming tricks for the PalmPilot辺りを参考にして下さい。解決方法とともに解説されています。
では、このページで説明する方法で改善できる点を説明します。
32K問題の一つはコードの先頭にあるcrt0からコードの最後にあるアドレスを参照しており、そのためのオフセット値が符合付き16bitであるという点にあります。
crt0とはCのスタートアップコードのことでPilotMainが呼ばれる前に
PalmOSから呼び出されます。
このcrt0の中でcodeの最後の方にあるbhook*,ehook*というアドレスを参照しているのですが、その際PC相対アドレッシングでアドレスを取得しています。
DragonBall(=68000)のPC相対アドレッシングは符合付16bitを32bitに拡張してPCと加算する演算なので、結果的にPC+32K先までしかアクセスできないことになります。
そこでcrt0をコード全体の真中あたりに配置し、先頭からそこにジャンプする方法が前述の参考ページで紹介されています。これですと うまく配置すれば全体で32K+32K=64Kまで使用することが出来ます
しかしながら以下のような欠点があります。
- 32Kよりは増えるが中間のアドレスをうまく配置しないと64Kまで使えない
- 場合により何段かの中間ルーチンをおく必要がある。
- 1,2の制限によりモジュール配置に制限が出来る
そこで、もう少し抜本的な対策としてcrt0からのアドレス参照を32bitで行なう方法を御紹介します。
この方法ですと、全てのアドレスにアクセスできるので上記のモジュール配置の悩みを一つ減らすことが出来ます。
また、直接パッチとは関係ありませんが16bitジャンプで届かないというエラーが出る時も、パッチで使用している方法と同様の方法を用いて
マクロなどを用意すれば、決して美しくはありませんが問題は解決できるでしょう。
- 注意点
- crt0をコンパイルし置き換える必要があるため面倒臭い。
また危険です。危険とは、crt0を利用するプログラム(=すなわちほとんどのアプリケーション)全てにリンクされますので、バグがあったり、入れ換え間違えたりすると、かなりひどい問題をおこしますので注意して置き換えて下さい。
また、当然ながら問題が全て解決されるわけではないので、コードが大きくなってくると(自分の作成した)関数間の呼び出しなどでエラーが出ると思います。
パッチの使い方
- 前記のページにあるようにpilot.ldの更新を行ないます。
PalmOSの1レコードの最大値は64Kまでなのでそれ以上には大きくできません。
- prc-tools-0.5.0を展開しlibglib.0.1.0ディレクトリをまるごとコピーします
- コピーしたlibglib.0.1.0に以下のpatchをあててmakeします
本パッチはgccやINCLUDEのパスなんかも変更しますが、これは御利用の環境に合わせて変更して下さい。(FreeBSDな環境ではこのままでOKでしょう)
ダウンロード: libglib.0.1.0-longjump-0.2.patch.txt
- /usr/local/pilot/m68k-palmos-coff/libの中のcrt0.o, gcrt0.o, scrt0.oをそれぞれ(必ずbackupをとって!)置き換えます。
- 又は、普段はそんなに大きなの作らないという方、入れ換えが嫌な方は、オブジェクトかソース (crt0, gcrt0など)を自分のプログラムのディレクトリにコピーし、リンカのオプションに-nostartfilesをつけて、必ずcrt0.o(gcrt0.o)を先頭にしてリンクして下さい。
置換えが終了すると、あとは普通にコンパイラを使用するだけです。Makefileに手を加えたり、別なファイルをリンクしたりする必要はありません。
pilot-templateなどで出来るMakefileそのままで使用できます。
また、patchコードの見ためはちょっとダサ目ですが効率的には問題ないと思います。20数バイト程度スタートアップコードが増えますが実質的に問題ないでしょう。
バグ/動作報告,ご意見などはyamap@browncat.orgまでお願いします。
|