こんにちは、I.Tak.です。
From: Hidemi KAWAI <kawai !Atmark! imasy.org>
Subject: [OSASK 6608] Re: chelo 0.32, p0cref.html
Date: Mon, 27 Oct 2003 18:14:21 +0900
> ・予備知識 / アプリ起動時のレジスタ
> → GSの初期値は保証されていません。これについては僕が間違っ
> た発言をしたことはないと思うのですが・・・。
すみません。曖昧な記憶で書いてしまいました。確かに GS = 未定
とMLに書いてありますね。
> ・特別モード終了 / バグ
> 僕の記憶が正しければ、NOPを入れてcmd004を呼ぶのは誤動作する
> はずです。というか、cmd004については、以下のルールに必ず従う
> ものとしましょう。
> 1.利用するなら、かならずコマンドの先頭。
> 2.特別モード終了(-1)以外では終了しない。
私がそこに書いた回避策は「初期化後」の話ですので, 誤動作はしません。
初期化前にNOPを入れるのは違反ですね。
ところで, 特別コマンド関係で考えられる組合わせは
初期化前:
1. 特別コマンド + 特別終了
2. 特別コマンド + 初期化コマンド + 一般コマンド
初期化後:
3. 特別コマンド + 特別終了
4. 特別コマンド + 一般コマンド
5. 一般コマンド + 特別コマンド + 特別終了
6. 一般コマンド + 特別コマンド + 一般コマンド
このように6通りありますが, 今回のルールでは1と3しか許さないという
ことでいいのでしょうか。
ところで, APIの実装を見ると別なコマンドが繋げられるように*わざわざ*
判定する処理があり, 当初の計画では特別コマンドをほかのコマンドと混ぜ
て使うことを意図していたようです。今回のように制限を厳しくするのは,
バグのために仕様を変えているようで腑に落ちません。デバッグして混ぜら
れるようにするという選択肢はないのでしょうか?
……デバッグしたくなりました。デバッグしないと不便ですし。
デバッグは, 「最初のコマンドがなんであろうとスロット0x01f0を使って
ワークエリアのポインタを取得する」ようにすれば終わりだと思います。
今は初期化コマンド (と特別コマンド) が先頭の場合は取得しないようになっ
ていますが, 初期化前にスロットを読んだところで意味のないデータが読ま
れるて時間の無駄であるという以外の害はありませんよね。その後の呼び出し
では判定がなくなる分速くなるわけですし, タスクの生涯で一回だけなら無駄
も許されるかな, と。初期化していないスロットを読んではいけないという
規定だとどうしようもありませんが……
I.Tak. <g240845 !Atmark! mail.ecc.u-tokyo.ac.jp>
http://user.ecc.u-tokyo.ac.jp/~g240845/