#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 (闘病中)