求助:直接写显存方式中的换页是怎么回事?
看了《编写自己的图形开发包》里面的代码,在640*480,256的模式下,直接写内存需要换页,例如下面的画点函数:/* 画点函数 */
void Dot(INT16 x, INT16 y, UINT8 color)
{
UINT32 PageAll1, PageAll2;
UINT8 PageIndex;
if (x > -1 && x < COLS && y > -1 && y < ROWS)
{
PageAll1 = PageAll2 = (UINT32)y*(UINT32)COLS+(UINT32)x;//这是将屏幕看做一个坐标系算出的偏移,在//320*200模式里面就是这样算的。
PageIndex = PageAll1 >> 16;//这里是将整个空间按照64K一小块这样分割的index。
SelectPage(PageIndex);//但是为什么要换页,然后下面那句代码还是VideoBuffer[PageAll2] = color;
//我试过不换页,然后输出的图形是不对的
VideoBuffer[PageAll2] = color;
}
}
/* 换页函数 */
void SelectPage(register UINT8 page)
{
_BX = 0;
_DX = page;
_AX = 0x4f05;
__int__(0x10);
}
谁能给解释一下上面那段红色的代码么?
还有,在640*480模式下,屏幕应该是分割成几块小区域的对吧?这些小区域是怎么在屏幕上分布的?
谢谢!