| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1334 人关注过本帖
标题:求助:直接写显存方式中的换页是怎么回事?
只看楼主 加入收藏
hotover
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-5-16
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:4 
求助:直接写显存方式中的换页是怎么回事?
看了《编写自己的图形开发包》里面的代码,在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
forever74
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:CC
等 级:版主
威 望:58
帖 子:1697
专家分:4305
注 册:2007-12-27
收藏
得分:20 
因为实模式显存地址段只有64K大小,放不下一屏幕640*480*1=307200这么多字节,所以要表示这么多字节就得换页。
从屏幕左上角开始横向每行640点,那么64K=65536字节就能表示65536点,也就是102个整行再加上第103行的前256点,这些点属于第0页。
于是接下来的65536点属于1页,再接下来的65536点属于2页,依此类推。
整个屏幕的640*480的256色的图像总共307200字节,要占4个整个64K的页,外加第5页的前45056字节。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-05-17 17:45
hotover
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-5-16
收藏
得分:0 
回复 2楼 forever74
那换页这个过程作了什么呢?
SelectPage(PageIndex);
VideoBuffer[PageAll2] = color;
第二句代码还是VideoBuffer[PageAll2],难道换页那个过程改变了VideoBuffer的值?
2010-05-17 20:39
forever74
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:CC
等 级:版主
威 望:58
帖 子:1697
专家分:4305
注 册:2007-12-27
收藏
得分:0 
显存指针作为一个16位的段内偏移量,它应该符合unsigned short int类型的运算法则,也就是说按照整数溢出规则,65535+1=0
VideoBuffer[PageAll2]也就是*(VideoBuffer+PageAll2)在实际寻址的时候因为实模式的限制从而会把计算结果溢出的部分丢掉,相当于对64K取模

[ 本帖最后由 forever74 于 2010-5-18 15:58 编辑 ]

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-05-18 15:49
hotover
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-5-16
收藏
得分:0 
回复 4楼 forever74
好的 ,其实昨晚问完后实验了一下,搞得差不多了。谢谢啊~
结贴!
2010-05-18 18:25
快速回复:求助:直接写显存方式中的换页是怎么回事?
数据加载中...
 
   



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

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