ついでに当時作った小物プログラム
何かのソフトを動かしてグラフィック表示が残ったままになった場合に消去するやつ。
LSI-C86試食版でコンパイルしたらちゃんと動いた
/*-------------------
gvram クリア
-------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <dos.h>
#ifdef LSI_C
#include <machine.h>
#define outportb( p, v ) outp( p, v )
#endif
/*
GVRAM アドレス
*/
#define PLANE1 ((unsigned char far *)0xa8000000L) /* 青プレーン */
#define PLANE2 ((unsigned char far *)0xb0000000L) /* 赤プレーン */
#define PLANE3 ((unsigned char far *)0xb8000000L) /* 緑プレーン */
#define PLANE4 ((unsigned char far *)0xe0000000L) /* 輝度プレーン */
union REGS regs; /* 8086レジスタ */
/*----------------------------------
グラフィックバンク選択
----------------------------------*/
void bank( int bank )
{
if ( bank == 0 ) {
regs.h.ch = 0xc0;
} else if (bank == 1) {
regs.h.ch = 0xd0;
}
regs.h.ah = 0x42;
int86( 0x18, ®s, ®s );
}
/*----------------------------------
GVRAM クリア
----------------------------------*/
void cls( void )
{
register int i;
for ( i = 0; i < 32000; i++ ) {
*( PLANE1 + i ) = 0x00;
*( PLANE2 + i ) = 0x00;
*( PLANE3 + i ) = 0x00;
*( PLANE4 + i ) = 0x00;
}
}
/*----------------------------------
グラフィック表示 OFF
----------------------------------*/
void groff( void )
{
regs.h.ah = 0x41;
int86( 0x18, ®s, ®s );
}
/*----------------------------------
メイン
----------------------------------*/
void main( void )
{
groff();
bank( 1 );
cls();
bank( 0 );
cls();
}