| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 778 人关注过本帖
标题:关于一个图形64k中断的负作用???
只看楼主 加入收藏
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
结帖率:74.19%
收藏
 问题点数:0 回复次数:3 
关于一个图形64k中断的负作用???

unsigned int get64kdot(int x,int y)
{
long addr;
int page;

page = (int)((addr = (long)y *GRPAH_MAXX +(long)x) >> 15);

_BX = 0;
_DX =page;
_AX = 0x4f05;
__int__(0x10);

return *(videoptr + (unsigned)(addr & 0xffff));

}

这段代码大家应该都能知道是干什么用的!(获取64k颜色图形模式下的某点值)

请问这个代码中的中断的那部分是干什么用(望能得到祥解)
有没有什么副作用啊?
怎么我获取完的值再重显到屏幕上就错位了呢?

搜索更多相关主题的帖子: 负作用 图形 
2006-09-07 12:29
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
收藏
得分:0 
中断部分是显存映射换页。详细的说就是显存一般为64K,这在高分辨率下是肯定不够的,比如640X480X64K模式下,需要300KB的显存才够,这样一来,VESA组织就在VBE标准中引用了映射机制,就是将显存分为64KB的若干个段,使用的时候与0xa000:0000段映射起来。你不是要读写300KB的内容吗?第一个64K好办,是默认映射了的,过了64K了,就用换页中断(0x4f05)将下一个64K的显存块映射到0xa000:0000段,这样你实际上操作的就是第二个页了;过了128K再用换页中断将第三显存页映射到0xa000:0000段上,这样直到300K/64K=4.7个显存页全部被访问。

你读取颜色值然后显示错位的原因应该也是出在页映射上了,你只列出了小部分代码,我估计你在重显的时候没使用页映射机制或用错了,比方说你将第1显存页(64K~128K)中的内容重显到了第0页(0~64K)上,所以出现了错位问题,你查查看。
2006-09-07 18:05
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
还是BZ牛
我先去研究一下
2006-09-07 19:20
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
2006-09-09 22:24
快速回复:关于一个图形64k中断的负作用???
数据加载中...
 
   



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

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