* OSASK共通ドライバ仕様 -(まだOSASK-MLやOSASK-Wikiには書けない段階) -() *** IA-32ネイティブ -FS:EBX --コマンドライン構造体 ---0x00000000で終了。 ---0x00000001:基本的なinfo。最低ワークエリアサイズ、状態セーブ対応など。マイナーリビジョン。(メジャーバージョンやエンディアン情報は、あらかじめ分かっているべきものだから、ここにはかいてない。) ---0x00000002:コンストラクタ(パラメータがあるかもしれない)。 ---0x00000003:デストラクタ。パラメータはない。だからデストラクトに必要な情報は覚えておくように。 ---終了コマンドで終わる場合、EBXは次のアドレスを指す。 ---終了コマンド以外は、次の4バイトがオプションになるが、オプションの24-31bitは、コマンド長になる(dw単位で、cmdとoptを含まない)。 ---0x00000004-0x00000007:リザーブ。 ---0x00000008-:自由。 -DS:ESI --ワーク。呼び出し元に設定してもらえる。コールゲートをくぐる場合はこの限りではない。 * 以下、没っぽい -GS:EDX --(A) ---使わない。 --(B) ---外部入出力ポインタ。 ---こいつの導入に伴い、書き込み即値は撤廃。 --(C) ---不定型および、マルチセグメント型の場合、GS:EDXからfarポインタが並ぶ(8バイトずつ)。 ---これはkabaの場合、インタプリタによってセットさせる。 *** 汎用バイトコード -オブジェクトセレクタを使って、セグメントをエミュレーション。オブジェクトセレクタ値なら、ただの定数なので機種依存問題はない。OSASKアプリにおけるスロット番号のような役目を果たす。 -LDTへの設定に相当するものは、外部関数で適当に作る。リミットは上限と下限。コピーと、アクセス可能域の制限はできるが、ベースは変更不能。 -タスク制御、ページ制御、オブジェクトセレクタ設定部分は、各OS依存として、汎用バイトコードでの記述は検討しない。