ba_wang_mao 发表于 2006-12-30 15:43

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

<P>吴进的TC256源程序256basic.h阅读笔记,不知我的注释加的正确与否?<BR><BR>/***********************************************************************************************<BR>//    刷新页面(将EMS存储的信息写到VRAM屏幕上)<BR>//    对于640X480X256色需要5页VRAM;对于800X600X256色需要8页VRAM<BR>***********************************************************************************************/<BR>void vpost(void)    <BR>{<BR>    register unsigned int i,j;<BR> <BR>    if (!SurfaceMode)                    // 如果缓冲形式为:单缓冲页<BR>    {<BR>        for (j = 0 ; j &lt; 5 ; j++)        // 640X480X256共计5页BIOS Video<BR>        {<BR>            for (i = 0 ; i &lt; 4 ; i++)    // 1页EMS为16K,1页BIOS Video为64K<BR>                emap(j*4+i,i);            // EMS逻辑页j*4+i和物理页i建立内存映射关系<BR>            selectpage(j);                // BIOS Video 换页<BR>            memcpy(VPoint,EmsPoint,32768);// 拷贝EMS物理页0,1中存储的32K像素到VRAM前32K中<BR>            memcpy(VPoint+32768,EmsPoint+32768,32768);// 拷贝EMS物理页2,3中存储的32k像素到VRAM后32K中<BR>        }<BR>    }<BR>}</P>
<P>/***********************************************************************************************<BR>//  单字节的图像数据字节传输函数,desc(目标)和src(源)均为传输的EMS相对偏移<BR>//    功能:将EMS空间中的单字节传输到VRAM(BIOS Video)。<BR>//    dest: 目标EMS相对偏移<BR>//    src : 源EMS相对偏移<BR>//  mode&gt;=0          :使用mode颜色掩码(过滤掉mode颜色)<BR>//  mode=COPY_PUT :直接传输(也可以换OR_PUT等)<BR>***********************************************************************************************/<BR>void byte_emstov(unsigned long desc,unsigned long src,char mode)<BR>{<BR>    register unsigned int vpage=desc&gt;&gt;16,        // 目标转换成BIOS Video页号<BR>                          voffset=desc&amp;0xffff,    // 目标相对VRAM页的偏移<BR>                             emsmap=src&gt;&gt;14,        // 源转换成EMS逻辑页号<BR>                          emsoffset=src&amp;0x3fff;    // 源相对逻辑页的偏移<BR>    register unsigned char c1,c2;</P>
<P>    if(lastEmap[0]!=emsmap)<BR>        emap(emsmap,0);                    // EMS逻辑页emsmap和物理页号0建立内存映射关系<BR>    if(lastVpage!=vpage)<BR>        selectpage(vpage);                // BIOS Video 换页<BR>    c1=*(VPoint+voffset);                // 取目标位置像素点颜色<BR>    c2=*(EmsPoint+emsoffset);            // 取源位置像素点颜色<BR>    if (mode&gt;=0)<BR>    {<BR>        if (c2!=mode)<BR>            *(VPoint+voffset)=c2;        // (源)直接传输模式<BR>    }<BR>    else<BR>    {<BR>        switch(mode)<BR>        {<BR>            case COPY_PUT    :*(VPoint+voffset)=c2;break;// (源)直接传输模式<BR>            case INVERT_PUT  :*(VPoint+voffset)=~c2;break;// (源)取反模式<BR>            case OR_PUT      :*(VPoint+voffset)=c1|c2;break;// (源和目标)或模式<BR>            case AND_PUT     :*(VPoint+voffset)=c1&amp;c2;break;// (源和目标)与模式<BR>            case XOR_PUT     :*(VPoint+voffset)=c1^c2;break;// (源和目标)异或模式<BR>            default             :*(VPoint+voffset)=c2;break;// (源)直接传输模式<BR>        }<BR>    }<BR>}</P>
<P>/***********************************************************************************************<BR>//    BIOS Video 换页或者 EMS换页函数<BR>***********************************************************************************************/<BR>void MySelectpage1(unsigned int page,char mode)<BR>{<BR>    if (mode)                            // BIOS Video换页<BR>    {<BR>        if (lastVpage!=page)<BR>            selectpage(page);            // 调用BIOS Video 换页函数<BR>    }<BR>    else                                // EMS换页<BR>    {<BR>        char n;<BR>        for (n = 0 ; n &lt; 4 ; n++)<BR>        {<BR>            if (page*4+n!=lastEmap[n])<BR>                emap(page*4+n,n);        // EMS逻辑页page*4+n与物理页n(n=0-4)建立映射<BR>        }<BR>    }<BR>}</P>


页: [1]

编程论坛