VESA标准显卡如何分页
编号:QA003132
建立日期: 2000年7月10日 最后修改日期:2002年1月20日
所属类别:
zz_cc_2000:
操作系统:DOS
编程工具:TC
问题:我是一名福州大学的学生,我写信是想请您们帮忙的。我正在DOS操作系统下用Turbo C语言编一个图形程序,我的计算机的显卡附合VESA标准,具有800*600,64K色的显示能力。我用以下语句成功的将显卡设置成了800*600,64K色的显示模式。
...
union REGS regs;
regs.x.ax=0x4f02;
regs.x.bx=0x114;
int86(0x10,@regs,@regs);
...
可在画点时发现一个大问题。画点时不是要每隔64K个字节都要进行一下分页,我用VGA模式的分页方式进行了分页,语句如下:
...
outportb(0x03c4,0x0e);
outportb(0x0xc5,a^0x02);/*a 就是第几页*/
...
可并不成功。在万般无奈下,我向您们写信求助。求求您们了!这对我真的很重要,如果问题得不到解答,一功都无法进行。所以还请您们勿必帮忙!如果得到您们的帮助,我将感激不尽!谢谢!谢谢了!
回答:
saga0036_cn的意见:
注意:
分页不一定是64k/页,trident 8900 卡是32k/页,64k color :2 bytes/pixel。不同的显卡,控制分页的端口不一样,但付合vesa的显卡可以通过获取分页中段函数地址直接对它调用或用分页中断,前者稍快。祥情请查vesa标准。
If you have any questions,please contact me.=) my email saga0036_cn@sina.com
s_w_y的意见:
800*600分辨率并不支持分页,用tc只有300*200还有其它几个分辨率提供分页支持.
另外屏幕只显示800*600象素,超出的部分也不必用分页,要显示的话把显示地址移到要显示的地方就行了。不知道对你有没有帮助,欢迎给我发邮件s_w_y@sina.com。
L.Y.M的意见:
对于你的问题其实可以利用Turbo C 的SVGA-BGI驱动(包括了vesa标准的各种显卡),然后就可以使用turbo C的initgraph及各种标准画点(pixel)画线(line)函数。如果一定要自己写底层函数,可参考VESA使用说明。现成的底层函数源程序及SVGA-BGI请imlym@email.com.cn。
VRCAT的意见:
使用vesa bios调用代替直接端口输出。直接端口输出兼容性不好,每种显卡都不一样。具体调用号请参阅vesa的rfc文档。
王有翦的意见:
你去找针对tc/bc的图形驱动程序(.BGI)开发包,开发出对应你的显卡的驱动程序后,再编程就非常简单了。你也可以到显卡的厂商的网站去找。
马领先的意见:
其实在VESA模式下,可以按照颜色模式的不同来进行分页:
1、16色模式下:
在此模式下同640*480*16的标准VGA显示模式,整个显存分为四个位平面,但是你不需要对它进行分页操作。
2、256色模式下:
此模式也与标准VGA卡的256色模式一样,每像素点8位,整个地址空间按行性连续存放,超过一定范围(如64KB)的VRAM地址空间用页面映射机制分块映射到主机提供的地址上,然后就像VGA的256色模式一样进行操作。下面就介绍以下256色模式下的分页操作:
方法1:
首先用VBE(VESA BIOS EXTENSION)功能4F01H返回VBE特定模式信息(IN:AX_4F01H,CX_模式号,ES:DI_指向VBE特定模式信息块的指针;OUT:AX_VBE返回值),返回值中从第13字节开始的指针指向的地址即为换页功能。入口:AX_4F05H,BH=0(SETBANK),BH=1(GETBANK),BL=00H(PAGE_A),BL=01H(PAGE_B),DX=PageNumber,出口:AX=RETURN,在调用时,注意要保存AX和DX。此方法速度要比方法2要快。
方法2:
调用4F05H功能,出入口参数与方法一中的一样。
页面的计算:
点的地址=纵坐标*分辨率(页粒度如640,800,1024等)+横坐标*每点所占的字节数
页 面 号=(INT)(点的地址/65536)
3、更高颜色模式:
基本上与256色模式下一致,只不过像素点所占用的位数不同。
如果你还需要更详细的资料或程序,请与我联系:BLACKH@YEAH.NET
BLACKH@BYAIR.COM
0535-6666744 6643048
13053572449
逍遥的意见:
试试以下的分页方式:
outportb(0x3cd,page);/*EVGA 800X600X256 显示模式AX=0x0030*/
页号=(800*y+x)/65536;
page:b0~b2 要读的页号
b3~b5 要写的页号
b7b6:01 每页64K
我自己也没有用过这种显卡,不知道对你有没有帮助,请与我联系。
E-mail:qtld_cn@sina.com
QQ:3829246
此问题由saga0036_cn等回答。
| |
|
|
| |
|
|