教育资源为主的文档平台

当前位置: 查字典文档网> 所有文档分类> 论文> 其他论文> 微机UNIX直接视频图形程序设计

微机UNIX直接视频图形程序设计

上传者:网友
|
翻新时间:2023-06-23

微机UNIX直接视频图形程序设计

微机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系统中,获取的方式和设置的方式之间的关系为:

设置方式值=获取方式值|MODESWITCH

二、虚拟终端的使用

虚拟终端(Virtual Terminal,简称VT)加强了UNIX系统V/386的接口功能,它不仅允许单个用户开发一个图形应用软件,而且允许多用户、多道程序在同一个物理终端上运行,在开始一个用户的应用程序之前不必停止另一个应用程序,而且各个用户之间可以互相切换。

虚拟终端有两种操作方式[1],一种是自动操作方式(VT-AUTO),这是默认情况,比较简单,应用程序并不了解终端用户接受或放弃当前VT的请求,这意味着被切换掉的进程的任何输入输出都可能丢失。另一种方式是进程控制方式(VT-PROCESS),该方式支持应用程序与其它正在使用VT的进程之间同步,应用程序可以负责接受或放弃使用VT。

[1]中介绍了以进程方式控制VT的过程,并以设备驱动程序方式介绍了接受和放弃对VT控制的信号处理例程。本文给出针对IBM标准终端编制VT的程序和相应的信号处理例程。

/* 设置虚拟终端 */

void setvirtualterm(void)

{

struct vt-mode vtmode;

signal(SIGUSR1,release-disp); //release-disp为放弃VT的信号处理例程

signal(SIGUSR2,acquire-disp); //acquire-disp为接受VT的信号处理例程

vtmode.mode=VT_PROCESS; //设置进程控制方式

vtmode.relsig=SIGUSR1;

vtmode.acqsig=SIGUSR2;

if (ioctl(0,VT-SETMODE,&vtmode)==-

1) exit

(1);//出错即终止此进程

}

/* 放弃VT的信号处理例程 */

void release-disp(void)

{

signal(SIGUSR1,release-disp);

保存整个图形屏幕于内部缓冲区videobuf中;

ioctl(0),MODESWITCH | oldmode,NULL);

//oldmode为进入图形模式之前的显示方式

ioctl(0,VT-RELDISP,VT-TRUE);

//VT-TRUE表明同意放弃VT,如果此项为0,则表示拒绝放弃VT.

}

/* 接受VT的信号处理例程 */

void acquire-disp(void)

{

signal(SIGUSR2,acquire-disp);

ioctl(0,newmode,NULL);//newmode为应用程序所处的图形模式

scrnmem=(char *)ioctl(0,MAPCONS,NULL);

//重新获取图形缓冲区的物理地址

从videobuf中恢复整个图形屏幕,并释放videobuf;

ioctl(0,VT-RELDISP,VT-ACKACQ); //VT-ACKACQ表明接受VT

}

在微机UNIX操作系统下,针对EGA/VGA进行直接视频程序设计,独立开发一个图形程序包,不仅小巧方便,而且可以重用以前在DOS下开发的图形应用程序。笔者在SCO UNIX系统下开发了一个小的低层图形软件包,许多以前的DOS图形应用程序都可以移植到UNIX系统下来。

另外,本文介绍的程序在使用前还应包含下列文件,即:

#include<stdio.h>

#include<sys/types.h>

#include<sys/console.h>

#include<sys/vtkd.h>

#include<termio.h>

#include<sys/signal.h>

分配空间时还应加上#include<malloc.h>

参考文献2 张福炎等.微型计算机IBM PC的原理与应用(续二)-图形显示器及其程序设计.南京:南京大学出版社,1990.7.

下载文档

版权声明:此文档由查字典文档网用户提供,如用于商业用途请与作者联系,查字典文档网保持最终解释权!

网友最新关注

父爱无边
芦花鸡
有趣的实验—纸杯烧水
门长
难忘的运动会
一双高跟鞋
来福
知错就改
流浪猫
贺年片
谁和谁好
第一次一个人睡觉
我为您骄傲,我为您自豪
我们的校园
拍手歌
粮食储备库安全生产应急方案
“XX杯”旅游商品开发大赛实施方案
*区花卉产业化示范基地建设实施方案
**中级人民法院关于开展创建“平安**”活动的工作方案
2005年区组织工作例会工作方案
区农林农机水利局关于“放心肉”工程的实施方案
庆典仪式流程
班子先进性教育专题民主生活会方案
名店开业系列推广方案
质量技术监督局开展“三个面向”活动的实施方案
房产系统房屋修缮工程招标工作方案
“爱卫、创卫”工作方案
关于加强民主评议党员工作的实施方案
物业管理条例法制宣传系列活动工作方案
胥城大厦文化营销方案
新会计准则对上市公司信息质量的贡献分析(1)
金融资产转移会计与税务处理的差异(1)
浅析会计诚信缺失原因及解决对策(1)
石油天然气开采会计准则的探讨(1)
浅析资产评估增减值的会计处理(1)
浅议存货周转率计算公式的改进(1)
新旧合并财务报表准则规定比较(1)
浅谈新准则中合并财务报表的影响与范围(1)
职工股票期权的确认与计量(1)
新会计准则下应收款项核算探讨(1)
论会计的精神(1)
非同一控制下企业合并长期股权投资的会计核算(1)
浅析环境会计(1)
浅谈资产减值会计准则的操作(1)
长期股权投资成本法与权益法转换会计核算浅析(1)
《兰兰过桥》教学设计之三
《兰兰过桥》教学设计之二
《我是什么》教学设计之二
《兰兰过桥》教学设计之一
《坐井观天》说课设计
《难忘的一天》教学设计之一
《难忘的一天》教学设计之二
《打电话》教学建议
《坐井观天》综合资料
《坐井观天》教学设计之三
《我是什么》教学设计之一
《我是什么》综合资料
《坐井观天》教学实录与评析片
《坐井观天》教学设计之二
《坐井观天》教学设计之一