发信人: wenbobo(灌了拂衣去)
整理人: wenbobo(2003-08-29 00:58:01), 站内信件
|
显存是在显卡上的,读写大块的显存,都要先通过操作显卡的窗口寄存器,把其中一块(一个窗口)映射到内存。也就是说,显存类似于“分页”内存,一次只能访问一个页,要访问特定的显存,必须先定位显存的“页”,也就是设置CRT窗口寄存器。
VBE利用保护模式,提供了线性访问显存的显示模式。在这种模式下,程序需运行在保护模式,当访问特定地址段的虚拟内存时,将引发页故障,VBE在故障处理时再设置显卡的窗口寄存器,把窗口内的显存映射到物理内存,从而应用程序可以访问。这些操作是vbe在后台完成的,对于应用程序来说是透明的,从使用上讲,程序员会觉得显存就和内存一样是“连续”的一块。
一般编写这种使用vbe的程序,需要使用dos extender,可以使用watcom c++,high c++,或者bc4 + power pack。
建议使用watcom c++,用dos4gw扩展器,这样兼容性比较好。事实上,以前的所有使用vesa的游戏都是用dos4gw的,例如古墓丽影,RA等
【 在 xmxh77 的大作中提到:】
:操作系统:DOS6.22;
:开发工具:BC3.0;
:问题:将显示模式设置为800*600*256(VESA 0x105),如何从当前屏幕COPY一块数据(即图象),类似Borland公司提供的getimage和putimage。注意:内存开辟一块只有64K的显存映射,在VESA(0x105)下要显示满屏,需要通过调用中断(0x10)来切换显示页,当你显示完满屏时,内存中显存映射的数据只是最后显示页的数据。可不可以直接从显存中取得数据,如是的话,又如何取法?
:
:多谢!!!!!!!!
:......
---- 掬水月在手
弄花香满身
|
|