美章網 資料文庫 微機UNI視頻圖形程序設計范文

微機UNI視頻圖形程序設計范文

本站小編為你精心準備了微機UNI視頻圖形程序設計參考范文,愿這些范文能點燃您思維的火花,激發您的寫作靈感。歡迎深入閱讀并收藏。

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寄存器的讀寫,否則,必須編寫下列低級匯編語言例程:

/*向一端口輸出一字節*/

/*從一端口輸入一字節*/

voidoutb(intport,ucharvalue)

{

-asmpushedx

-asmmovedx,port

-asmmoval,value

-asmoutdx,al

-asmpopedx

}

ucharinb(intport)

{

-asmpushedx

-asmmovedx,port

-asminal,dx

-asmpopedx

}

基本圖素一般包括:設置顏色,對調色板的操作,畫點、線、弧、矩形、圓、橢圓、多邊形、畫扇形、餅圖,任意圖形填充,多邊形填充,保存屏幕,恢復屏幕等,這些操作均可用c語言實現,細節問題可參閱[2]。

4.關閉圖形系統

退出圖形系統之前必須恢復ega/vga各i/o寄存器的值,并將顯示模式恢復到進入圖形模式之前的模式。采用下列ioctl調用實現:

ioctl(0,modeswitch|oldmode,null)

oldmode是進入圖形方式之前獲取的方式,unix系統中,獲取的方式和設置的方式之間的關系為:

設置方式值=獲取方式值|modeswitch

二、虛擬終端的使用

虛擬終端(virtualterminal,簡稱vt)加強了unix系統v/386的接口功能,它不僅允許單個用戶開發一個圖形應用軟件,而且允許多用戶、多道程序在同一個物理終端上運行,在開始一個用戶的應用程序之前不必停止另一個應用程序,而且各個用戶之間可以互相切換。

虛擬終端有兩種操作方式[1],一種是自動操作方式(vt-auto),這是默認情況,比較簡單,應用程序并不了解終端用戶接受或放棄當前vt的請求,這意味著被切換掉的進程的任何輸入輸出都可能丟失。另一種方式是進程控制方式(vt-process),該方式支持應用程序與其它正在使用vt的進程之間同步,應用程序可以負責接受或放棄使用vt。

[1]中介紹了以進程方式控制vt的過程,并以設備驅動程序方式介紹了接受和放棄對vt控制的信號處理例程。本文給出針對ibm標準終端編制vt的程序和相應的信號處理例程。

/*設置虛擬終端*/

voidsetvirtualterm(void)

{

structvt-modevtmode;

signal(sigusr1,release-disp);//release-disp為放棄vt的信號處理例程

signal(sigusr2,acquire-disp);//acquire-disp為接受vt的信號處理例程

vtmode.mode

主站蜘蛛池模板: 精品国偷自产在线| 好爽好多水好得真紧| 日本人视频jizz69页码| 无遮挡无删动漫肉在线观看| 日本午夜精品一区二区三区电影| 日韩精品中文字幕在线观看| 最近更新2019中文字幕8| 日本高清乱理伦片中文字幕啊| 日本边添边摸边做边爱的网站| 日韩在线a视频免费播放| 日韩中文字幕在线观看视频| 无码少妇一区二区浪潮AV| 成年美女黄网站色大免费视频| 无码欧精品亚洲日韩一区| 无码天堂va亚洲va在线va| 怡红院亚洲红怡院在线观看| 女邻居掀开短裙让我挺进| 天天爽天天爽夜夜爽毛片| 天天做人人爱夜夜爽2020毛片| 天堂/在线中文在线资源官网| 女人把腿给男人桶视频app| 在线播放中文字幕| 天天做天天爱夜夜想毛片| 国内精品久久久久久无码不卡| 国产精品免费av片在线观看| 国产成人精品午夜二三区 | 四虎永久在线免费观看| 免费人成激情视频在线观看冫| 亚洲精品国产电影| 亚洲av综合色区| 中文字幕理伦午夜福利片| 一区二区视频在线免费观看| 56prom在线精品国产| 亚洲欧美另类中文字幕| 麻豆三级在线播放| 粉色视频免费试看| 欧美大杂交18p| 日本xxxx按摩强| 天天做天天躁天天躁 | 精品国产三上悠亚在线观看| 毛片永久新网址首页|