| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2037 人关注过本帖, 1 人收藏
标题:非标准VGA模式(VESA)下的图形编程问题
只看楼主 加入收藏
guoshimin
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-1-26
收藏(1)
 问题点数:0 回复次数:2 
非标准VGA模式(VESA)下的图形编程问题

在117H模式(可参看最后边提供的附录)下编写了一个图形初始化并画一条斜线的小程序,如下所示:

#include<dos.h>

unsigned char far *screen=(unsigned char far *)0xA0000000L; /*显存首地址*/

int VesaOn(int mode)/*初始化117H模式*/
{
union REGS r;
r.x.ax=0x4f02;
r.x.bx=mode;
int86(0x10,&r,&r);
return(r.h.ah);
}

void VesaOff(void)/*返回到文本模式*/
{ union REGS r;
r.x.ax=0x0003;
int86(0x10,&r,&r);
}

void Put_Pixel(int x,int y,int color)/*画点*/
{
screen[1024*y+x]=color;
}

main()
{ int i,j,k;
k=VesaOn(0x117);
for(i=0;i<768;i++)/*画一条135度的斜线*/
Put_Pixel(i,i,5);
getch();
VesaOff();
if(k==0)printf("OK");
}

但实际显示出来的是多条平行的斜线,而且都集中在屏幕上部!不知是什么问题呢?

附录:

1。VESA 标准定义的图像显示模式号(非标准VGA模式)
16色 256色 32768色 65536色 16777216色
320×200 10DH 10EH 10FH
640×400 100H
640×800 101H 110H 111H 112H
800×600 102H 103H 113H 114H 115H
1024×768 104H 105H 116H 117H 118H
1280×1024 106H 107H 119H 11AH
1600×1200 120H

2。显示模式类型的识别
彩色数 16 256 32768 65536 16777216
每像素位数 4 8 15 16 24(32)
位平面数 4 1 1 1 1

3。VESA BIOS只是标准VGA BIOS的扩充,也是通过中断INT 10H来实现。其功能号为4FH,VESA标准各功能则是它的子功能。调用方法如下:
AH=4FH AL=VESA的子功能号(0~7)
其它入口参数按需要输入BX、CX、DX、ES、DI等寄存器中。
每一功能的调用返回信息都放在AX中,格式为:
AL=4FH则属支持此功能,否则不支持;
AH=0则功能调用成功,否则失败。
输出参数放在BX、CX、DX寄存器中。

搜索更多相关主题的帖子: VESA VGA 图形 模式 显存 
2007-04-07 18:02
guoshimin
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-1-26
收藏
得分:0 

在网上搜了许久,发现了问题的症结:

DOS的采用16位寻址,即寻址空间为64K。而117H模式需要的存储器大小为1024*768*4>64K。因此超出64K的内容就无法正常显示了,需要换页才行,如下:

[CODE]selectpage(register char page) /*换页函数*/
{union REGS r;
r.x.ax=0x4f05;
r.x.bx=0;
r.x.dx=page; /*选择页面*/
int86(0x10,&r,&r);
}[/CODE]
不过,查不到“r.x.bx=0; ”是什么意思、页号page为什么要存在r.x.dx里。谁能指点一下呢?

2007-04-12 15:50
lyood
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2006-6-15
收藏
得分:0 
二、 子功能1:获取当前窗口
入口参数:
AX=4f05H
BH=01H:获取当前窗口
BL:窗口号
=OOH;窗口A
=01H:窗口B
出口参数:
AX=VBE返回值
Dx=以页粒度为单位的显示内存中的页面号

2007-04-12 22:19
快速回复:非标准VGA模式(VESA)下的图形编程问题
数据加载中...
 
   



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

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