2007-12-27-01-Inside Japonica - 1 - ARMネイティブコードの話 - project-enigma

2007-12-27-01-Inside Japonica - 1 - ARMネイティブコードの話

>> Site top >> weblog >> 月別アーカイブ >> 2007年12月のlog >> 2007-12-27-01-Inside Japonica - 1 - ARMネイティブコードの話

最終更新日付:2013/12/31 07:37:49


Inside Japonica - 1 - ARMネイティブコードの話

2007 年 12 月 27 日

リリースから48時間。アクセスカウンタは1600周り、ダウンロード数は300を超えた。これは project-enigma としては快挙であります。何かワケもなく不安になってしまうような快挙であります。それでも気を良くした単純愚直なソフトウェア開発者の陰郎は、Japonica の開発裏話的な話題を書いて柳の下から2匹目のどじょうを探そうとするのでありました...

...というわけで、第一回。ARM ネイティブコードの話です。

Japonica で大きな Doc データを開こうとした場合、思いのほか素早くファイルが開けることにお気付きでしょうか。本体内にある 500KB の Doc データを開く場合、それが圧縮形式の Doc データでもほぼ一瞬で開きます。カード上の圧縮 Doc ならば(カードの種類などの条件にもよりますが)だいたい1秒程度で開きます。Japonica は文書データを全て「一気読み」してメモリ上に展開するにもかかわらず、です。

なぜにこれだけの速度が出せるのか。それは圧縮 Doc データの展開処理を ARM ネイティブコードで書いているからです。ご存知の方も多いと思いますが、いわゆる Palmware は 68K といわれる Palm OS 4 までのプラットフォーム向けのプログラムです。Palm OS 5 以降は ARM という別のアーキテクチャのプロセッサが使用されているので、普通ならば Palm OS 5 のデバイスでは OS 4 以前の Palmware はそのままでは動きません。でも動きますよね。それは、Palm OS 5 が実は 「 68K エミュレータ 」 のような方法で Palmware を動かしているからです。PACE とよばれる互換性維持レイヤーが 68K のプログラムを逐次 ARM 用に解釈しながら実行しているので、Palm OS 4 以前の Palmware も OS 5 でそのまま動くわけです。膨大なソフトウェア資産に大きな価値を持つ Palm プラットフォームならではの措置と言えますね。

とはいえ、パソコン上で往年のゲーム機のエミュレータを動かすのと同様、それは結構CPU パワーを食う作業だったりします。そして、複雑な計算や長大な処理 ── たとえば暗号化したりデータ圧縮をしたりとか ── をした場合、この 68K 命令のエミュレーションには多大なコストがかかります。そのため、Palm OS 5 では部分的に ARM プロセッサ用のネイティブな処理を作って部分的な高速化がはかれるようになっているんですね。これを ARMlet と呼びます。陰郎が始めて ARMlet を試したのは PalmLife というアプリでしたが、このときは処理速度が(記憶が間違ってなければ) 25倍になったという驚きがありました。

では、Japonica が ARM ネイティブコードを使用しているのはどこか? 実は、5ヶ所あるんです。

最初の4つは、文書全体を処理する必要性があったり複雑な処理をだったりするため、ARMlet 化は必須でした。文書の展開と画面描画はまぁいいですね。MeDoc インデックスの展開では、「何行目にあるか」という MeDoc インデックス情報を 「文書先頭から何バイト目にあるか」という情報に置き換える作業をやっています。文字列検索では、英文字の大小や全角・半角の同一視をしようとすると、必然的に手作りのロジックになってしまうため、丸ごと ARM コードに放り込みました。

では最後、フィルタリングでのマッチングとは...? 実はこれ、隠し機能に関わる部分なんで、今回はあまり触れませんが、まぁフィルタリングでも ARM ネイティブコードが動いているとお考え下さい。

今回はこのへんで。

続く

 

コメント

このページにコメントする

 

このページのタグ

Page tag : Palm

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.