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

[WitchTech 00317] VBLANK カウント割り込みが上手くいきません



えるぴと申します。
またしても質問です。

下記のようなコードを書いて、VSYNCの回数を変数vSyncでカウントするように
したつもりなのですが、このコードをコンパイルして実行させると、
"TEST2"を表示した直後(多分VSYNCタイマー割り込み発生時)に暴走してしまいます。

しばらくコードを見直してみたのですが、一体どこが間違っているのかわかりません。
どこが間違っているのでしょうか?

なお、コンパイラはLSI-C86を使用しています。

----
#include <sys/system.h>
#include <sys/timer.h>
#include <sys/text.h>
#include <sys/key.h>

#ifdef LSI_C_WW
#define _CS     _asm_inline("mov ax, cs")
#define _DS     _asm_inline("mov ax, ds")
#endif /* LSI_C_WW */

void initInterrupt(void);
void vSyncCount(void);

volatile int	vSync;
intvector_t		intVector;
intvector_t		lastIntVector;

int main(int argc, char *argv)
{
	text_screen_init();
	text_put_string(0, 0, "TEST1");
	initInterrupt();
	vSync = 0;
	text_put_string(0, 1, "TEST2");
	text_put_numeric(8, 1, 8, 0, vSync);
	sys_wait(150);
	text_put_string(0, 2, "TEST3");
	text_put_numeric(8, 2, 8, 0, vSync);
	key_wait();
}

void initInterrupt(void)
{
	intVector.callback = vSyncCount;
	intVector.cs = _CS;
	intVector.ds = _DS;
	intVector.reserve = 0;
	sys_interrupt_set_hook(SYS_INT_TIMER_COUNTUP, &intVector, &lastIntVector);
	timer_enable(TIMER_VBLANK, TIMER_AUTOPRESET, 1);
}

void vSyncCount(void)
{
	vSync++;
}
----

--------
    えるぴ(渡邉 徹)    E-mail address : erupi@fa2.so-net.ne.jp



ML Archives