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依存として、汎用バイトコードでの記述は検討しない。
|