[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[WitchTech 00244] Re: LSI-CforWitch の関数ポインタ



なるなると申します。

 > <20000807144001mnagaku@smtp.bekkoame.ne.jp>
 > From: mnagaku@cap.bekkoame.ne.jp
 > Date: Mon,  7 August 2000 14:40:01 +0900

 > 関数自身はCSに置かれるとの解釈から
 > 関数ポインタをfar宣言すると、暴走します。
 > far宣言をしないと、短いコード(CS == DS == SS ?)は動作しますが、
 > 長いコード(CS != DS != SS ?)になると暴走します。

どういう状況で関数ポインタを far ポインタ (or far 変数) にしたいのかわかり
ませんが、動かないほうのコードがないと follow がつけられないのではないでしょ
うか ?

# コードがないと far ポインタで near 関数を呼び出しているのではないかとか
いう話に ...

--
char (* far tmp_func)(int no); /* near ポインタ (far 変数) */
char (far * tmp_func2)(int no); /* far ポインタ (near 変数) */

char t1(int no);
char far t2(int no);

void foo(void)
{
    tmp_func = t1;
    tmp_func2 = t2;
    tmp_func(1);
    tmp_func2(1);
#if 0
    tmp_func2 = t1;	/* known problem (*) */
    tmp_func2(2);	/* near 関数を far call */
#endif
}
--

(*) for WonderWitch はわかりませんが、試食版の「4.3  バグ」

  +  関数へのnearポインタをfarポインタにキャストすると、CSレジスタのかわ
    りにDSレジスタを使ってしまう場合があります。

# 製品版にも残っていたような ...



ML Archives