home *** CD-ROM | disk | FTP | other *** search
/ Phoenix Heaven Sunny 2 / APPARE2.BIN / oh_towns / his / sample / vsync.c < prev    next >
C/C++ Source or Header  |  1995-06-20  |  2KB  |  68 lines

  1. /***********************************************************************
  2.  
  3.                         垂直同期割り込みサンプル
  4.  
  5.           1995.6.12                                by ちょもらんま
  6.  
  7. ***********************************************************************/
  8.  
  9. #include <stdio.h>
  10. #include <egb.h>
  11. #include <his.h>
  12.  
  13. #define EGB_workSize 1536
  14. #define EGB_paraSize 32
  15.  
  16. char EGB_work[ EGB_workSize ];
  17. char EGB_para[ EGB_paraSize ];
  18.  
  19. #define BAR_size 10
  20. #define BAR_num  640/BAR_size
  21.  
  22. #define VSYNCclear 0x05ca
  23. #define VSYNCintNumber 11
  24.  
  25. int VSYNCcount;
  26.  
  27. #define stackSize 1000
  28. char EGB_stack[ stackSize ];
  29.  
  30. void demonstration( int n )
  31. {
  32.     /*------------------ 棒を書く------------------*/
  33.     WORD( EGB_para + 0 ) = n * BAR_size;
  34.     WORD( EGB_para + 2 ) = 0;
  35.     WORD( EGB_para + 4 ) = n * BAR_size + BAR_size - 4;
  36.     WORD( EGB_para + 6 ) = 479;
  37.     EGB_rectangle( EGB_work , EGB_para );
  38. }
  39.  
  40. /**************** VSYNC割り込みハンドラ ***************/
  41.  
  42. void VSYNChandler( void )
  43. {
  44.     demonstration( VSYNCcount++ );
  45.  
  46.     /******** VSYNC割り込み原因クリアレジスタへの書き込み ********/
  47.     _outb( VSYNCclear, 0 );
  48. }
  49.  
  50. void main( void )
  51. {
  52.     /*------------------- EGB初期化 ----------------------*/
  53.     EGB_init( EGB_work , EGB_workSize );
  54.     EGB_color( EGB_work , 2 , 9 );
  55.     EGB_paintMode( EGB_work , 0x20 ); /* 面塗り */
  56.  
  57.     /******************** 割り込み設定 ***********************/
  58.     HIS_stackArea( EGB_stack , stackSize );
  59.     HIS_setHandler( VSYNCintNumber , VSYNChandler );
  60.     HIS_enableInterrupt( VSYNCintNumber );
  61.  
  62.     /******* 割り込みハンドラを用いて画面を左から埋めてゆく*******/
  63.     while( VSYNCcount < BAR_num );
  64.  
  65.     /****************** 割り込み処理終了 *********************/
  66.     HIS_detachHandler( VSYNCintNumber );
  67. }
  68.