淺談tvga彩色視頻模式_第1頁
淺談tvga彩色視頻模式_第2頁
淺談tvga彩色視頻模式_第3頁
淺談tvga彩色視頻模式_第4頁
淺談tvga彩色視頻模式_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、淺談tvga彩色視頻模式    摘 要 本文首先分析了tvga的結(jié)構(gòu)和其顯示原理,然后進一步闡述了其256彩色模式下的存儲模式,并給出了的實用編程技術(shù),還附了一個在tvga顯示器上顯示256色圖像的源程序。 關(guān)鍵詞 dac彩色表 增強型視頻圖形陣列tvga自從trident公司開發(fā)出來,現(xiàn)在以成為ibm和其他兼容機上普遍適用的圖形顯示器。tvga提供與vga寄存器級兼容能力,并增強了幾種顯示模式,特別是它能很方便的顯示256種顏色,為我們提供了豐富多彩的照片式圖像顯示。為了讓讀者能對tvga的256色模式有一個清楚而全面的認(rèn)識,文章將從結(jié)構(gòu)顯示原理以及存

2、儲模式等方面來介紹,最后并給出tvga256色模式下的編程技術(shù)。 一、tvga視頻模式 tvga提供了與vga寄存器級兼容能力,而且大大增強了圖形、文本模式,支持256k×4 dram、等離子體顯示控制,它可以模擬vga、ega、cga、mda和256色圖形方式,有640×400、640×480、800×600和1024×768四種模式。tvga除擁有vga標(biāo)準(zhǔn)圖形模式外,還有擴展vga模式。在配置512k視頻緩沖區(qū)(dram)的系統(tǒng)中,256色的分辨率可達到800×600;若配置1mb dram,還可以達到1024×768

3、更高的分辨率。表1給出tvga擴展圖形模式的說明。t5s10600.gif;表1由表1可知tvga提供4種256色擴充模式:5ch(640×400)、5dh(640×480)、5eh(800×600)和62h(1024×768)。在此后的文中,所談及的tvga256色的視頻模式就是上述四種模式。 二、tvga結(jié)構(gòu) tvga主要由:定序器、crt控制器、圖形控制器、屬性控制器、dac支持邏輯、主總線接口及顯示寄存器接口等7部分組成,它們之間的邏輯關(guān)系如圖1所示。t5s10601.gif;圖11.定序器定序器為dram接口提供基本的存儲器時序,為crt提供字

4、符時鐘,并執(zhí)行某些存儲器地址解碼。它通過5個可以讀寫的寄存器進行控制。它們有兩個i/o地址(3c4和3c5)。3c4是序號寄存器,用于選擇工作寄存。數(shù)據(jù)輸出到i/o地址為3c5的寄存器。2.crt控制器crt控制器通過產(chǎn)生顯示器光柵的同步信號等來控制顯示器,它也可以定義屏幕上顯示數(shù)據(jù)的格式。3.圖形控制器圖形控制器位于存儲器與系統(tǒng)處理器之間的數(shù)據(jù)通道中。在缺省狀態(tài)下,圖形控制器是透明的:數(shù)據(jù)在處理器之間直接進行邏輯操作,為圖形算法提供硬件支持。同樣,圖形控制器有兩個i/o地址:3ce和3cf,前者是序號寄存器,用于選擇圖形控制器各工作寄存器來驅(qū)動tvga模擬顯示器4.屬性控制寄存器屬性控制寄存

5、器把圖形控制器接收的數(shù)據(jù)格式化后進行視頻顯示。它操作調(diào)色板、屏幕邊界(或過掃描區(qū))和背景色彩。光標(biāo)閃爍、下劃線和顯示邏輯地址也由它控制。在圖形模式下,屬性控制器把內(nèi)存中的數(shù)據(jù)轉(zhuǎn)化成彩色查找表的地址,并由視頻dac轉(zhuǎn)換成模擬電平來驅(qū)動tvga模擬顯示器。5.數(shù)模轉(zhuǎn)換器(dac)數(shù)模轉(zhuǎn)換器,是tvga系統(tǒng)中的可編程控制設(shè)備。它把tvga產(chǎn)生的二進制彩色信息轉(zhuǎn)換成可由監(jiān)視器顯示的信號,dac含有256個顏色數(shù)據(jù)寄存器,每個含有可顯示的每種顏色。每個數(shù)據(jù)寄存器保存18位彩色信息,紅綠藍各占6位。這些基色位控制三色模擬顯示的驅(qū)動。tvga256模式時,顯示緩沖區(qū)的每一項由18位組成,分成三部分,各6位,

6、分別代表紅綠藍的值。查找表中每一項是可以設(shè)置的,因此可有256k種顏色可以設(shè)置,由于查找表最多只有256色,所以同時顯示的顏色只有256種。顯示緩沖區(qū)、視頻dac和彩色查找表、顯示屏的關(guān)系可用圖2來表示。t5s10602.gif;圖2用于訪問視頻dac的寄存器有5個,見表2。t5s10603.gif;表2選擇查找表2中256個內(nèi)部色彩寄存器,另有兩個獨立的寄存器,讀序號寄存器僅用于讀dac顏色查找表,寫序號寄存器僅用于寫dac顏色表。彩色寄存器寬18位,把8位序號寫入3c8寫序號寄存器,然后寫6位數(shù)到數(shù)據(jù)寄存器(3c9),那么8位序號彩色寄存器的3個分量就得到修改。每寫3個字節(jié),3c8寫寄存器

7、自動加一,因此不必重復(fù)設(shè)置序號便可給一組寄存器賦值。同樣,向讀寄存器(3c7)寫入8位序號,然后從3c9中讀3個6位值,便可得到該序號彩色寄存器值。每讀3個字節(jié),序號寄存器就自動加一,因此不必設(shè)置序號就可讀出一組彩色寄存器值。讀dac狀態(tài)寄存器(3c7)可以知道彩色查找表當(dāng)前是讀還是寫。d0,d1位上的00值表示處于讀模式,01值表示處于寫模式。 三、tvga 256視頻模式的存儲模式 tvga256圖形模式,包括模式5c、5d、5e和62等。在這幾種模式中,彩色查找表(調(diào)色板)的設(shè)置都是通過對端口3c7、3c8、3c9的讀寫達到重置彩色查找表的目的。這幾種顯示模式緩沖區(qū)的起始地址都是a000

8、0,而所需緩存容量都大于tvga基本的64kb,因此tvga在控制卡上增加了一部緩存,它是通過3c4,3c5來存取。1.tvga存儲映射方式顯示存儲器dram在系統(tǒng)主存儲空間的映射方式有兩種,也就是兩種頁模式(pagemode),第一種允許cpu訪問dram的地址范圍為a0000bffff,即128k模式;另一種地址范圍為a0000affff,即64k模式。前一種模式,在使用位平面存儲方式下,一次可以訪問128k的位平面;而后一種模式則需要另外一個i/o端口位來選擇讀出的是哪一個64k。tvga的視頻bios缺省置為64k模式??筛鶕?jù)需要選擇頁模式,頁模式由圖形控制器中的輔助寄存器控制。圖形控

9、制器有i/o地址3ce和3cf,3ce為索引端口地址,3cf為數(shù)據(jù)端口地址。而輔助寄存器則為3ce的第6號索引寄存器。該寄存器中存放著可修改的單字節(jié)數(shù)據(jù),各位意義如下:4,5,6,7位:保留:2,3位:dram在主存儲區(qū)內(nèi)的地址范圍00a0000bffff (128k)01a0000affff (64k)10b0000b7fff (32k)11b8fffbffff (32k)1位:置為0;0位:若為0,表文本方式;若為1,表圖形方式。在64k頁模式下,由于一幅640×480的256色圖象至少需要240k緩存,這大大的超過了64k頁模式下的緩存,因此tvga在vga 64k基礎(chǔ)上,利用

10、定序器控制器的地址寄存器(索引號為0eh)來分別控制數(shù)據(jù)傳送到不同的幾個64kb緩存中。定序器控制器的索引端口地址為3c4,數(shù)據(jù)端口地址為3c5。而地址寄存器則為0e號索引,存放著單字節(jié)數(shù)據(jù),各位意義如下:4,5,6,7位:保留;2,3位:0到3號存儲塊選擇;1位:頁選擇:讀dram時,若為1,表讀第一頁;若為0,表讀第零頁;特別注意,寫dram時,若為1,表寫第零頁;若為0,表寫第一頁;0位:段選擇。2.tvga像素尋址圖形顯示模式下tvga使用自然坐標(biāo)系對其存儲器進行尋址,各像素根據(jù)坐標(biāo)在屏幕上定位,原點位于屏幕左上角,坐標(biāo)最大點(xmax, ymax)位于右下角。屏幕像素地址為20位(不

11、包括0xa0000基地址),格式為:16,17,18,19位:意義同定序器控制器的地址寄存器的4,5,6,7位;0.15 位:表段內(nèi)偏移地址。四、tvga編程技術(shù)在tvga 256色視頻模式下,主要用于顯示高質(zhì)量照片式點陣式圖像。原圖像可以從彩色圖像掃描儀中或電視攝像機中獲得,只要把原圖像格式轉(zhuǎn)換成tvga的256彩色顯示格式,就可以直接把圖像送tvga顯示存儲器。本節(jié)所有例程都是用turbo c語言寫成,并都在微機上調(diào)試通過。1.模式設(shè)置用bios中的int10h可完成模式設(shè)置,下面只討論256色圖形模式的設(shè)定。在每次模式設(shè)置前,還要設(shè)置緩沖區(qū)的存儲模式。(1) 緩沖區(qū)存儲模式設(shè)置 128k

12、模式void mode128k() unsigned char i;outp(0x3ce,0x06);i=0x01;i=(i & 0x0f);outp(0x3cf,i); 64k模式void mode64k() unsigned char i;outp(0x3ce,0x06);i=0x05;i=(i & 0x0f);outp(0x3cf, i);(2) 圖形顯示模式設(shè)置set-mode( int mode) union regs in, out;in.h.al=(unsigned char) mode;in.h.ah=0;int86(0x10, &in, &ou

13、t);2.畫點程序和讀點程序不妨設(shè)當(dāng)前模式下的橫向和縱向的最大分辨率maxx, maxy已知。putpixel(int x,int y,unsigned char color) long address,offset;unsigned char segnumber;char far *p;address=y* maxx+x;offset=(address & 0x0000ffff);segnumber=(address &0x000f0000;)outp(0x3c4, 0x0e);in.h.al=segnumber;in.h.al=(in.h.al & 0x0f)0x0

14、2;outp(0x3c5,in.h.al);p=(char far *) 0xa0000000;*(offset+p)=color;getpixel(int x,int y,unsigned char color) long address,offset;unsigned char segnumber;char far *p;address=y*maxx+x;offset=(address & 0x0000ffff);segnumber=(address & 0x000f0000);outp(0x3c4,0x0e);outp(0x3c5,segnumber);p=(char f

15、ar *)0xa0000000;color=*(offset+p);3.調(diào)色板的讀寫對于tvga 256色視頻模式,bios中常用的是置調(diào)色板寄存器10h,其中改寫和讀取dac彩色寄存器的功能如下。 設(shè)置單個dac彩色寄存器值輸入?yún)?shù):ah=10h,al=10hbx=dac寄存器號(0255)dh=紅色分量值(6位)ch=綠色分量值(6位)cl=藍色分量值(6位)返回值:無 設(shè)置dac彩色寄存器組輸入?yún)?shù):ah=10h,al=12hbx=寄存器組起始號(0255)cx=寄存器數(shù)目(1256)es:dx=彩色表地址(每個彩色寄存器對應(yīng)3個字節(jié))返回值:無 讀單個dac彩色寄存器值輸入?yún)?shù):ah=

16、10h,al=15hbx=dac寄存器號(0255)返回值:dh=紅色分量值ch=綠色分量值cl=藍色分量值 讀dac彩色寄存器組輸入?yún)?shù):ah=10h,al=17hbx=寄存器組起始號(0255)cx=寄存器組數(shù)目(1256)es:dx=讀取數(shù)據(jù)的存放地址返回值:彩色寄存器的彩色值(每個寄存器3個字節(jié))為了討論方便,先給出以下公共變量:union regs in, out;struct sregs sregs;unigned char color-table2563;于是就可以編寫出相應(yīng)的程序。 單個dac寄存器寫函數(shù)void writedac(int regnumber, unsigned

17、 char r, unsigned char g,unsigned char b) in.x.ax=0x1010;in.x.bx=regnumber;in.h.dh=r;in.h.ch=g;in.h.cl=b;int86(0x10, &in, &out); 單個dac寄存器讀函數(shù)void readdac(int regnumber, unsigned char r, unsigned charg,unsigned char b) in.x.ax=0x1015;in.x.bx=regnumber;int86(0x10, &in, &out);out.h.dh=r;

18、out.h.ch=g;out.h.cl=b; 寫dac寄存器組函數(shù)void writedacs(int regnumber, int regcount, unsigned char*color-tableb) in.x.ax=0x1012;in.x.bx=regnumber;in.x.cx=regcount;sregs.es=fp-seg(color-table);sregs.dx=fp-off(color-table);int86x(0x10, &in, &out, &sregs); 讀dac寄存器組函數(shù)void readdacs(int regnumber, int

19、 regcount, unsigned char*color-table) in.x.ax=0x1017;in.x.bx=regnumber;in.x.cx=regcount;sregs.es=fp-seg(color-table);sregs.dx=fp-off(color-table);int86x(0x10, &in, &out, &sregs);除了bios方式之外,訪問調(diào)色板還可用寄存器訪問方式。這里用到3個寄存器i/o地址 寄存器3c7彩色查找表讀操作索引號3c8彩色查找表寫操作索引號3c9彩色查找表數(shù)據(jù)寄存器 獲取當(dāng)前調(diào)色板數(shù)據(jù)void readcolor

20、s(unsigned char color-table2563) int i, j;for (i=0;i<256;i+) outp(0x3c7,i);for (j=0; j<3; j+)color-tableij=(unsigned char)inp(0x3c9); 重新設(shè)置調(diào)色板void writecolors(unsigned char color-table2563) int i, j;outp(0x3c8,0);for (i=0; i<256;i+)for (j=0; j<3; j+)outp(0x3c9, color-tableij>>2); 讀取

21、單個dac數(shù)據(jù)readcolor(unsigned char colornum, unsigned r, unsigned charg,unsigned char b); outp(0x3c7, colornum);r=inp(0x3c9);g=inp(0x3c9);b=inp(0x3c9); 改寫單個dac數(shù)據(jù)writecolor(unsigned char colornum, unsigned r, unsignedcharg,unsigned char b); outp(0x3c8, colornum);outp(0x3c9, r);outp(0x3c9, g);outp(0x3c9,

22、b);最后需指出,tvga 256色視頻模式是tvga中最引人注目的模式,根據(jù)vga的標(biāo)準(zhǔn),可選擇多達256k種顏色,但一個顯示頁同時可顯示的顏色最多只有256色,對于模式62h,系統(tǒng)需配置1mb dram,而一般個人計算機上的tvga顯示卡只有512kb dram,因而一般不能實現(xiàn)62h模式所提供的1024*768這種高分辨率。所以,用戶在使用tvga 256色視頻模式時,最好使用5dh模式,即分辨率為640*480的256色模式。為了讓讀者能盡快熟悉tvga256色的編程技術(shù),筆者特給出一個在5dh模式下顯示256彩色tiff圖像格式文件的程序,程序用c語言寫成,并在turbo c2.0下

23、編譯,運行通過。程序中的tiff文件的讀取涉及到圖像格式文件的知識,這里不再贅言。附:源程序 showtif.c#include <dos.h>#include <stdio.h>#include <alloc.h>unsigned char buff640,pal-buf3*512, pal-buff2563;struct headunsigned int bo;unsigned int ver;unsigned long next; head; /*定義tiff格式文件頭 */struct dirunsigned int tga;unsigned int

24、 type;unsigned long len;unsigned long val; dir20; /*定義tiff格式文件目錄項 */main(int argc,char *argv)union regs in, out;unsigned char cur-mode,cur-page;in.h.ah=15;int86(0x10,&in, &out);cur-mode=out.h.al;cur-page=out.h.bh; /*存儲當(dāng)前顯示模式 */show(argv1,atoi(argv2,atoi(argv3);in.h.ah=0;in.h.al=cur-mode;in.h

25、.bl=cur-page;int86(0x10,&in,&out); /*恢復(fù)成原顯示模式 */show(char *filename,int x,int y)union regs in,out;file *pcx;unsigned int long cc=0,dd,star,palptr;register int m, j;unsigned int nd,bitcount, with, hight, d;int i,k=-1;unsigned char ch, mode,seg-num=0;char far *pvdieo=(char far *)0xa0000000;if

26、(pcx=fopen(filename, "rb+")=null)printf("open file error !");exit(0);fread(&head,8,1,pcx);fseek(pcx,head,next,seek-set);fread(&nd,2,1,pcx);fread(dir,12*nd,1,pcx);for(i=0; i<nd;i+)switch(diri.tga)case 0x100: with=diri.val;break;case 0x101: hight=diri.val;break;case 0x10

27、2: bitcount=diri.val;break;case 0x111: star=diri.val;break;case 0x140: palptr=diri.val;break;default:continue;/*star=圖像數(shù)據(jù)首地址 with=圖像寬度hight=圖像高度 bitcount=圖像像素位數(shù)palptr=調(diào)色板首地址*/in.h.ah=0;in.h.al=0x5d;int86(0x10,&in,&out);/* 設(shè)置當(dāng)前顯示模式為5dh */fseek(pck, palptr, seek-set);fread(pal-buf,512*3,1,pcx);/* 讀取調(diào)色板數(shù)據(jù) */outp(0x3c8,0);for (j=0;j<256; j+)for (i=0; i<3; i+)outp(0x3c9,pal-buf i*512+2*j+1>>2);/* 設(shè)置當(dāng)前調(diào)色板 */x=x%640;y=y%480;cc=(long)y*(long)640+(long)x;while(cc>=65535) cc=cc-65535; seg-num+;if(seg-num=0)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論