PC-9801エミュレータ(T98-Next)でMS-DOSプログラミング #17

17名無しさん@Next2ch:2021/08/07(土) 02:15:08.88 ID:7aG66mNX

ついでに当時作った小物プログラム
何かのソフトを動かしてグラフィック表示が残ったままになった場合に消去するやつ。
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, &regs, &regs );
}

/*----------------------------------
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, &regs, &regs );
}

/*----------------------------------
メイン
----------------------------------*/
void main( void )
{
groff();
bank( 1 );
cls();
bank( 0 );
cls();
}


スパムを通報

このレスがスパム・荒らしである場合は以下のボタンをクリックして通報してください。
(同意できない意見などに反対票を投じる機能ではありません)
通報

このスレッドを全て表示


レスを書き込む