- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
微机UNIX直接视频图形程序设计_计算机论文.doc
微机UNIX直接视频图形程序设计_计算机论文
微机UNIX直接视频图形程序设计_计算机论文
微机UNIX直接视频图形程序设计
吴建林
UNIX操作系统提供了X-Window图形窗口系统和OPENLOOK图形用户界面,这些系统不仅昂贵、庞大,而且不便于移植以前开发的DOS图形应用程序。本文介绍利用微机内部硬件控制,针对EGA/VGA图形适配器,进行直接视频图形程序设计。对于比较熟悉PC-AT体系结构和视频程序设计知识的程序员来说,更喜欢后者,因为能有效地利用硬件特性,加快图形处理速度。
进行图形程序设计时,还须考虑视频接口的一个重要特性——虚拟终端功能,因为它允许控制几个独立的图形应用窗口,允许多个应用程序在同一个终端上进行切换。本文提供针对IBM标准终端对虚拟终端进行有效管理的手段。
微机UNIX直接视频图形程序设计有两种方法,一种是利用设备驱动程序(见参考文献1),另一种是针对IBM标准终端进行编程,本文介绍后者。
一、图形程序设计
1.检测视频适配器
视频显示器是由视频适配器硬件控制的,视频适配器决定了图形方式下显示图形的分辨率及可能的颜色[2]。利用系统调用ioctl中的CONS-CURRENT命令可以检测到当前的视频适配器,即:
ioctl(0,CONS-CURRENT,NULL)
返回-1时表示出错,即没有相应的视频适配器硬件,如果检测到VGA卡则返回值为VGA,如果检测到EGA卡则返回值为EGA,……。
2.初始化图形系统
初始化图形必须完成下列任务。
(1) 获取当前的视频显示方式
ioctl的CONS-GET命令用来判断当前适配器的显示方式,即:
ioctl(0,CONS-GET,NULL)
它返回显示方式的值,这些值在包含文件vtkd.h中均有定义,如:SW-VAG640x480C为VGA适配器设置成640x480分辨率彩色图形模式。
(2) 设置图形模式
直接将图形模式值放入ioctl中的命令项即可设置相应的图形模式,如ioctl(0,SW-VGA640x480C,NULL)
将VGA适配器设置成640x480分辨率的彩色图形模式。
(3) 获取图形模式下视频缓冲区物理地址
利用ioctl的MAPCONS命令可以实现此功能,即:
char *scrnmem
scrnmem=(char *)ioctl(0,MAPCONS,NULL)
所有实现基本图素的操作都将针对scrnmem进行,scrnmem就是EGA/VGA相应的四个位平面的重叠地址,有关EGA/VGA的结构可参阅[2]。
3.实现基本图素
DOS操作系统下,对EGA/VGA的各种视频I/O寄存器进行操作是很方便的,可以直接使用汇编语言in和out指令进行读写。然而,UNIX操作系统下,对物理硬件的访问都是由UNIX系统核心和设备驱动程序管理的,要访问EGA/VGA的各种I/O寄存器,必须获得对其访问的特权,为了实现这种功能要求,可以使用下列ioctl系统调用方式:
ioctl(0,VGA-IOPRIVL,1) 获取VGA的各种I/O寄存器的访问特权
ioctl(0,EGA-IOPRIVL,1) 获取EGA的各种I/O寄存器的访问特权
UNIX操作系统基本上是采用C语言编写的,只是在低层的系统内核方面才使用低级的汇编语言,遵循这一原则,对EGA/VGA的I/O寄存器的访问可以采用汇编语言,而实现图形系统的基本图素则采用C语言。
如果用户的UNIX系统中已有inb()和outb()函数(嵌入在/usr/include/sys/inline.h中),则可以直接使用它们完成对各种I/O寄存器的读写,否则,必须编写下列低级汇编语言例程:
/*向一端口输出一字节*/
/*从一端口输入一字节 */
void outb(int port,uchar value)
{
-asm push edx
-asm mov edx,port
-asm mov al,value
-asm out dx,al
-asm pop edx
}
uchar inb(int port)
{
-asm push edx
-asm mov edx,port
-asm in al,dx
-asm pop edx
}
基本图素一般包括:设置颜色,对调色板的操作,画点、线、弧、矩形、圆、椭圆、多边形、画扇形、饼图,任意图形填充,多边形填充,保存屏幕,恢复屏幕等,这些操作均可用C语言实现,细节问题可参阅[2]。
4.关闭图形系统
退出图形系统之前必须恢复EGA/VGA各I/O寄存器的值,并将显示模式恢复到进入图形模式之前的模式。采用下列ioctl调用实现:
ioctl(0,MODESWITCH | oldmode,NULL)
oldmode是进入图形方式之前获取的方式,UNIX系统中,获取的方式和
您可能关注的文档
最近下载
- 补签借款合同范本8篇.docx VIP
- 部队车辆保养注意事项 .pdf VIP
- 2024-2025学年台州市临海市八年级下期末数学模拟试卷附答案解析.pdf
- 《百年追梦,复兴中华》大单元教学思路与设计.docx
- 2024年水利工程高级工程师专业知识考试题库(含AB卷).pdf VIP
- 译林版八年级上册英语词汇表.pdf VIP
- AI驱动的知识图谱:混合式教学模式创新研究.docx VIP
- 初中语文必背古诗文:部编版7-9年级语文必背古诗文132篇(电子打印版).pdf VIP
- KEYENCE基恩士SZ-V 系列 用户手册.pdf
- Unit 1 Helping at Home单元基础巩固练习题2025人教版英语四年级上册.pdf VIP
文档评论(0)