微机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系统中,获取的方式和设置的方式之间的关系为: 设置方式值=获取方式值|modeswitch 二、虚拟终端的使用 虚拟终端(virtual terminal,简称vt)加强了unix系统v/386的接口功能,它不仅允许单个用户开发一个图形应用软件,而且允许多用户、多道程序在同一个物理终端上运行,在开始一个用户的应用程序之前不必停止另一个应用程序,而且各个用户之间可以互相切换。 虚拟终端有两种操作方式[1],一种是自动操作方式(vt-auto),这是默认情况,比较简 [1] [2] 下一页 |
|
|
|
|
|