home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Phoenix Heaven Sunny 2
/
APPARE2.BIN
/
oh_towns
/
his
/
sample
/
vsync.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-06-20
|
2KB
|
68 lines
/***********************************************************************
垂直同期割り込みサンプル
1995.6.12 by ちょもらんま
***********************************************************************/
#include <stdio.h>
#include <egb.h>
#include <his.h>
#define EGB_workSize 1536
#define EGB_paraSize 32
char EGB_work[ EGB_workSize ];
char EGB_para[ EGB_paraSize ];
#define BAR_size 10
#define BAR_num 640/BAR_size
#define VSYNCclear 0x05ca
#define VSYNCintNumber 11
int VSYNCcount;
#define stackSize 1000
char EGB_stack[ stackSize ];
void demonstration( int n )
{
/*------------------ 棒を書く------------------*/
WORD( EGB_para + 0 ) = n * BAR_size;
WORD( EGB_para + 2 ) = 0;
WORD( EGB_para + 4 ) = n * BAR_size + BAR_size - 4;
WORD( EGB_para + 6 ) = 479;
EGB_rectangle( EGB_work , EGB_para );
}
/**************** VSYNC割り込みハンドラ ***************/
void VSYNChandler( void )
{
demonstration( VSYNCcount++ );
/******** VSYNC割り込み原因クリアレジスタへの書き込み ********/
_outb( VSYNCclear, 0 );
}
void main( void )
{
/*------------------- EGB初期化 ----------------------*/
EGB_init( EGB_work , EGB_workSize );
EGB_color( EGB_work , 2 , 9 );
EGB_paintMode( EGB_work , 0x20 ); /* 面塗り */
/******************** 割り込み設定 ***********************/
HIS_stackArea( EGB_stack , stackSize );
HIS_setHandler( VSYNCintNumber , VSYNChandler );
HIS_enableInterrupt( VSYNCintNumber );
/******* 割り込みハンドラを用いて画面を左から埋めてゆく*******/
while( VSYNCcount < BAR_num );
/****************** 割り込み処理終了 *********************/
HIS_detachHandler( VSYNCintNumber );
}