Palmware を開発するには、まず開発環境を整えることが必要です。 幸い FreeBSD では ports/palm 以下にツールが揃っているので、これを利用します。 おそらく必要なのは、
POSE を使用するためにはロムイメージが必要です。 これを入手する方法は
ロムイメージを吸い出すには pilot-link にある pi-getrom というコマンドでできます。 これを実行して HotSync すればよいです。 ただしシリアルクレードルの場合 4M 吸い出すのに3時間くらいかかりましたので、時間にゆとりのあるときにやりましょう。 吸い出しが完了したら、 pilot.rom.3.5.1(TRGpro の場合)というファイルができてると思います。 これを pilot.rom という名前に変えてから、pose を起動します。 それででてきた Palm な画面上で右クリックすればメニューがでてきますので「NEW」を選び、「Device」と「ROM file」を選んでやれば、見慣れた画面が起動します(感動の一瞬)。 ちなみにデバイスには TRGpro はなかったので Vx を選んだら動きました。
web 上のマニュアルは ここ です。
が、これで PC 上でエミュレートはできますが、gdb みたいにデバッグをするには Windows じゃないとダメそうです(探しが足りないだけかもしれませんが)。 デバッグだけは Windows 上でやったほうがいいかもしれません。
さて、いざアプリケーションを作ろうと思っても、普通のプログラムを書くのとは形式が結構違いますし、なによりも決まりきった構造をしています。 そこで雛型を作ってくれる 私家版 pilot-templete をありがたく拝借いたします。
できたソースや SDK のマニュアルを見てみると、UInt16 やら Boolean やらと謎の単語が一杯です。 これらの正体は include/PalmType.h に書いてあります。 char などを typedef してるだけですね。
Palm のプログラムでは C の標準ライブラリが使えない場合が多いです。 例えば printf() でデバッグしようと思っても、ありません。 SDKのドキュメント を参考に
static void MyPrintF(Char* s, UInt16 x, UInt16 y, Char* formatStr, ...) { va_list args; UInt16 l; va_start(args, formatStr); StrVPrintF(s, formatStr, args); va_end(args); l = StrLen(s); WinDrawChars(s, l, x, y); }ってなのを作って使いました。 こうすると画面上に変数の値を表示できます。 また malloc() もありません。 メモリを読み書きする場合には、一旦ハンドルというものを確保して、それを使ってロックしてからアクセスするようです。 使用後はアンロックします。 少ないメモリをやりくりするためこうなったそうです。 慣れないうちは配列にアクセスする度にコアダンプしてくれました。 こういった違いはありますが、基本的にはイベントが起ったら処理をする、といった感じで普通に書いていけばいいので、プログラムをやったことがある人ならば簡単なものはすぐ作れるようになると思います。 ちゃんとドキュメントを読めば。
勉強不足のため UNXI 上で作れませんでした。 とりあえず bitmap というコマンドがあるのは分かったのですが、これで作ったアイコンは BMP と認識されませぬ。 まあ gimp を使うっちゅう手もありましたが、牛刀っぽいので、Windows のペイントツールでつくってしまいました。 無念。