| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 951 人关注过本帖
标题:吴进的TC256源程序256basic.h阅读笔记,不知我的注释加的正确与否
只看楼主 加入收藏
ba_wang_mao
Rank: 2
来 自:成都理工大学
等 级:论坛游民
帖 子:297
专家分:27
注 册:2006-11-7
收藏
 问题点数:0 回复次数:0 
吴进的TC256源程序256basic.h阅读笔记,不知我的注释加的正确与否

吴进的TC256源程序256basic.h阅读笔记,不知我的注释加的正确与否?

/***********************************************************************************************
// 刷新页面(将EMS存储的信息写到VRAM屏幕上)
// 对于640X480X256色需要5页VRAM;对于800X600X256色需要8页VRAM
***********************************************************************************************/
void vpost(void)
{
register unsigned int i,j;

if (!SurfaceMode) // 如果缓冲形式为:单缓冲页
{
for (j = 0 ; j < 5 ; j++) // 640X480X256共计5页BIOS Video
{
for (i = 0 ; i < 4 ; i++) // 1页EMS为16K,1页BIOS Video为64K
emap(j*4+i,i); // EMS逻辑页j*4+i和物理页i建立内存映射关系
selectpage(j); // BIOS Video 换页
memcpy(VPoint,EmsPoint,32768);// 拷贝EMS物理页0,1中存储的32K像素到VRAM前32K中
memcpy(VPoint+32768,EmsPoint+32768,32768);// 拷贝EMS物理页2,3中存储的32k像素到VRAM后32K中
}
}
}

/***********************************************************************************************
// 单字节的图像数据字节传输函数,desc(目标)和src(源)均为传输的EMS相对偏移
// 功能:将EMS空间中的单字节传输到VRAM(BIOS Video)。
// dest: 目标EMS相对偏移
// src : 源EMS相对偏移
// mode>=0 :使用mode颜色掩码(过滤掉mode颜色)
// mode=COPY_PUT :直接传输(也可以换OR_PUT等)
***********************************************************************************************/
void byte_emstov(unsigned long desc,unsigned long src,char mode)
{
register unsigned int vpage=desc>>16, // 目标转换成BIOS Video页号
voffset=desc&0xffff, // 目标相对VRAM页的偏移
emsmap=src>>14, // 源转换成EMS逻辑页号
emsoffset=src&0x3fff; // 源相对逻辑页的偏移
register unsigned char c1,c2;

if(lastEmap[0]!=emsmap)
emap(emsmap,0); // EMS逻辑页emsmap和物理页号0建立内存映射关系
if(lastVpage!=vpage)
selectpage(vpage); // BIOS Video 换页
c1=*(VPoint+voffset); // 取目标位置像素点颜色
c2=*(EmsPoint+emsoffset); // 取源位置像素点颜色
if (mode>=0)
{
if (c2!=mode)
*(VPoint+voffset)=c2; // (源)直接传输模式
}
else
{
switch(mode)
{
case COPY_PUT :*(VPoint+voffset)=c2;break;// (源)直接传输模式
case INVERT_PUT :*(VPoint+voffset)=~c2;break;// (源)取反模式
case OR_PUT :*(VPoint+voffset)=c1|c2;break;// (源和目标)或模式
case AND_PUT :*(VPoint+voffset)=c1&c2;break;// (源和目标)与模式
case XOR_PUT :*(VPoint+voffset)=c1^c2;break;// (源和目标)异或模式
default :*(VPoint+voffset)=c2;break;// (源)直接传输模式
}
}
}

/***********************************************************************************************
// BIOS Video 换页或者 EMS换页函数
***********************************************************************************************/
void MySelectpage1(unsigned int page,char mode)
{
if (mode) // BIOS Video换页
{
if (lastVpage!=page)
selectpage(page); // 调用BIOS Video 换页函数
}
else // EMS换页
{
char n;
for (n = 0 ; n < 4 ; n++)
{
if (page*4+n!=lastEmap[n])
emap(page*4+n,n); // EMS逻辑页page*4+n与物理页n(n=0-4)建立映射
}
}
}

搜索更多相关主题的帖子: TC256源 吴进 注释 笔记 VRAM 
2006-12-30 15:43
快速回复:吴进的TC256源程序256basic.h阅读笔记,不知我的注释加的正确与否
数据加载中...
 
   



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

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