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

[WitchFan 00227] LSI-CforWitch の関数ポインタ



はじめまして長久@神楽坂酔っ払い研究所です。
x86(16bit)コードについては初心者同然です(^^;

今のトコ、LSI-Cを使ってるのですが、
関数ポインタが正しく動作せず困ってます。

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

----------far宣言せず取り敢えず動くコード
#include <sys/bios.h>
#include <stdio.h>

char (*tmp_func)(int no);

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

void main() {
	char str[32];

	text_screen_init();
	text_put_string(0, 0, "start");

	tmp_func = t1;
	sprintf(str, "%d", (*tmp_func)(1));
	text_put_string(0, 1, str);

	tmp_func = t2;
	sprintf(str, "%d", (*tmp_func)(1));
	text_put_string(0, 2, str);

	while(1)
		if(key_press_check() == KEY_START)
			break;
}

char t1(int no) {
	return no + 1;
}

char t2(int no) {
	return no + 2;
}
----------

心得違いや注意点などありましたらご教授頂けると幸いです。
それとも、LSI-Cで関数ポインタ使うなと言う事なんでしょうか?

神楽坂酔っ払い研究所所長
長久 勝(ながく まさる)
mailto:mnagaku@cap.bekkoame.ne.jp
http://www.bekkoame.ne.jp/~mnagaku/


ML Archives