| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1334 人关注过本帖
标题:求助:直接写显存方式中的换页是怎么回事?
取消只看楼主 加入收藏
hotover
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-5-16
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:2 
求助:直接写显存方式中的换页是怎么回事?
看了《编写自己的图形开发包》里面的代码,在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模式下,屏幕应该是分割成几块小区域的对吧?这些小区域是怎么在屏幕上分布的?
谢谢!
搜索更多相关主题的帖子: 显存 
2010-05-17 15:54
hotover
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-5-16
收藏
得分:0 
回复 2楼 forever74
那换页这个过程作了什么呢?
SelectPage(PageIndex);
VideoBuffer[PageAll2] = color;
第二句代码还是VideoBuffer[PageAll2],难道换页那个过程改变了VideoBuffer的值?
2010-05-17 20:39
hotover
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-5-16
收藏
得分:0 
回复 4楼 forever74
好的 ,其实昨晚问完后实验了一下,搞得差不多了。谢谢啊~
结贴!
2010-05-18 18:25
快速回复:求助:直接写显存方式中的换页是怎么回事?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016948 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved