WabaVMソースの読み方
ここではWabaVMのソースを読む上で知っておくといいことを つらつらと書いています。
ソースファイルの取り方
wabasoftのダウンロードページから、 wabavm-src_10.zipというファイルをダウンロードしてください。
ソースファイルの構成
wabavm-src_10.zipファイルを解凍すると、以下のようなファイルが得られます。
wabavm-src.10 - classes WabaVMが利用する基本クラス - vm WabaVMのソース README.txt りーどみー license.txt GPLのライセンス大事なのはvm以下のソースです。ここには以下のファイルが入っています。
nmpalm_a.c 機種依存部ソース Palm用 nmpalm_b.c nmpalm_c.c nmport_a.c 機種依存部ソース 移植用スケルトン nmport_b.c nmport_c.c nmwin32_a.c 機種依存部ソース WindowsCE/32用 nmwin32_b.c nmwin32_c.c waba.c 機種非依存部ソース VMコアこれを見れば分かりますが、VMのソースは、機種依存する部分と 依存しない部分に明確に分かれています。 依存する部分は、3つのソースに別れていて、それぞれ以下の機能を 受け持ちます。
- nm<platform>_a.c
そのプラットフォームのタイプやバイトオーダーの定義、 メモリの確保を行います。 具体的には、32ビット長の符合付きデータはlongであるとかの定義 や、バイトオーダーがビッグエンディアンであるとかの定義 を行います。また、メモリのmalloc、freeを行う方法や、メモリの比較用関数の 定義などを行います。
- nm<platform>_b.c
クラスファイルのロード方法、およびブートストラップの定義を行います。 具体的には、クラスをロードするための関数
static uchar *nativeLoadClass(UtfString className, uint32 *size)を実装します。また、関数VminitおよびVmStartAppを呼び出すメインルーチンを 定義します。
- nm<platform>_c.c
機種依存の動作各種を実装します。具体的には、以下のような動作です。
- ウィンドウ
- フォント
- イメージ
- グラフィックス
- ファイル
- ソケット
- サウンド
- カタログ
- 時間
読みすすんでいくには
VMの動作を知りたい人は、waba.cの中で興味があるところから読んでいくと いいでしょう。クラスのロード方法や、GCの実現、Javaバイトコードの実行など が分かりやすく(たぶん)記述されています。
WabaVMの移植に興味のある人は、nmport_?.cを順番に読むことです。 その後、必要に応じてnmpalm_?.cとnmwin32?_.cをサンプルとして 参照しましょう。どちらを見るかは、その人がどちらのプラットフォームに 慣れているかによると思いますが、どちらにも慣れていない私は palmの方を中心に見ました。こちらのほうが素直なような気がしたので。 ただし、palmはクラスをpalm独自のデータベースから読み出しているので、 そのあたりはwin32の方を見た方がいいかもしれません。
もどる