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

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



void vSyncCount(void)
はfar関数にしなくてはなりません。正確な宣言文は知りませんが、たぶん
void far vSYncCount(void)
でいいと思います。(免責
とゆか、わざわざこんな関数作らなくてもシステムティックで代用できると
思うのですが・・・(^^;


Tooru Watanabe wrote:
> 
> えるぴと申します。
> またしても質問です。
> 
> 下記のようなコードを書いて、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