こんにちは、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/