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

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



えるぴと申します。前回の質問の続きです。
皆様のおかげで、何とかVBLANKの回数はカウント出来るようになりました。
おかげで、当初の目的は果たせるようになりました。
以下、動作を確認したプログラムです。

----
#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 far 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 = (void (near *)())FP_OFF(vSyncCount);
	intVector.cs = _CS;
	intVector.ds = _DS;
	intVector.reserve = 0;
	sys_interrupt_set_hook(SYS_INT_VBLANK, &intVector, &lastIntVector);
}

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

ところが、このプログラムのinitInterrupt()を以下のようにすると
暴走してしまいます。

----
void initInterrupt(void)
{
	intVector.callback = (void (near *)())FP_OFF(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);
}
----

自分としてはこれで、VBLANKカウントタイマーを使ってVBLANK1回毎に
割り込みを掛けるようにしたつもりなのですが、
一体どこが間違っているのでしょうか?
#WonderWitchってムツカシイ(x_x;

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



ML Archives