#11 Article 4674 Posted at 1990/07/28 01:57:56 by SUKA-GTX (MAP614) []

Subject: Re:*4 サキさまですぅ☆ /4670 ... /4660 /4659

もっともやってる事といへば

# define	ScrXSize	160
# define	ScrYSize	100
# define	VmXSize		(ScrXSize * 2)
# define	VmYSize		(ScrYSize * 2)
# define	Zero		0	/* 冗談。(C)Ah!Ski */

# ifndef _Coord
	# define	_Coord
	typedef	struct	{int	x, y ;}	Coord ;
# endif
# ifndef _ScrData
	# define	_ScrData
	typedef	unsigned short		ScrData ;
# endif

ScrData	ScrBuffer[ScrYSize][ScrXSize] ;
		/* 実画面に相当する仮想VRAM.. */
ScrData	*VmBuffer = (ScrData *)0xc80000 ;
		/* 裏VRAMにマッピングされた仮想画面.. */

int	MemCopy(void *, const void *, int) ;

void VmSync(Coord *Pos)
		/* 実画面を仮想画面上の *Pos の位置に丸ごとコピーするの。 */ 
{
	int	y ;
	ScrData	*Ptr ;
	Ptr = VmBuffer + ((Pos->y * VmXSize) + Pos->x) ;
	for (y=Zero ; y<ScrYSize ; y++, Ptr+=VmXSize)
		MemCopy(Ptr, ScrBuffer[y], ScrXSize) ;
}

void VmFix(Coord *Pos)
		/* 仮想画面上の *Pos の位置から実画面にコピーするの。 */ 
{
	int	y ;
	ScrData	*Ptr ;
	Ptr = VmBuffer + ((Pos->y * VmXSize) + Pos->x) ;
	for (y=Zero ; y<ScrYSize ; y++, Ptr+=VmXSize)
		MemCopy(ScrBuffer[y], Ptr, ScrYSize) ;
}

void VmSwap(Coord *Pos)
{
static	Coord	VmPos = {Zero, Zero} ;
	VmSync(&VmPos) ;
	VmPos = *Pos ;
	VmFix(&VmPos) ;
}

てなもんです。

上のようなモジュールを付加するだけで他の部分は殆どいぢくらなくとも最低限の
処理は出来ます。(あんまかっこ良くはないですが)
このお手軽な手法を私は”すーぱーた×ろーぷれみあむ方式”と呼んでおります。


						GraphicsTurboX (闘病中)