推荐文档列表

VGA显示屏开关技巧

时间:2021-10-01 09:54:32 计算机论文 我要投稿

VGA显示屏开关技巧

摘 要 该本分析了如何通过对端口03c8h、03cqh进行操作来改变VGA显示颜色,进而达到屏幕开关显示的艺术效果。

屏幕开关显示的方法有很多种,如:利用分页功能,前后台处理;还可利用某些端口的位操作关闭电子束。这些方法共同的缺点是:单调,缺乏灵活性。这里向大家介绍一种方法,可弥补以上缺憾。

彩色显示器16种颜色都是红、绿、蓝3基色调和的结果,各颜色的3基色在VGA卡上分别占用一个18位的颜色寄存器,红、绿、蓝各占6位。系统开机时,各颜色3基色的值被设置成缺省值,改变3基色的比例,就可达到改变颜色显示效果的目的。

黑色的3基色均为0,如将所有颜色的基色值都置成0,则可达到关屏的效果,反之,恢复各颜色的基色缺省值,则可达到开屏的目的。由此推广,如将各颜色的基色值逐步减为零,则可使屏幕逐步变暗;如将绿、蓝两基色值先逐步减为零,再将红色减灭,则屏幕颜色先逐步转红,之后变暗……

16种颜色的3基色的缺省值为:

色号:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

R 0 0 0 0 42 42 42 42 21 21 0 0 63 63 63 63

G 0 0 42 42 0 0 21 42 21 21 63 63 21 21 63 63

B 0 42 0 42 0 42 0 42 21 63 0 63 21 63 0 63

3基色的传送方法为:

out 03c8h, ptr

out 03c9h, r

out 03c9h, g

out 03c9h, b

其中:

ptr=n ; n=0,1,2,3,4,5,7

n 14 ; n=6

n 48 ; n=8,9,10,11,12,13,14,15

n为颜色号,ptr为相应的颜色寄存器号。

r, g, b分别为红、绿、蓝3基色值。

上述过程全在COMPAQ DESKPRO 386/33M上调试通过。

以下给出一个关屏实例,由TASM编译,TLINK连接生成.COM文件。本程序稍作修改即可作为过程用于其它应用程序上。

.model small

.code

.386

org 100h

start:

mov bp,cs:red-ptr

mov bl,[bp]

cmp bl,0;基色r为零吗?

je @@1;是,则跳

dec bl;否则,减1

mov [bp],bl

@@1: mov bl,[bp 1]

cmp bl,0;基色g为零吗?

je @@2;是,则跳

dec bl;否则,减1

mov [bp 1],bl

@@2: mov bl,[bp 2]

cmp bl,0 ;基色b为零吗?

je @@3 ;是,则跳

dec b1 ;否则,减1

mov [bp 2],bl

@@3: mov al,cs:c-num ;色号→al

call change ;改变al号颜色

call delay ;延时

cmp cs:c-num,15 ;色号小于15吗?

jl @@4;是,则跳

cmp cs:loop1,0 ;否则,色号,基色值指针复位

je @@5

mov cs:c-num,1

mov cs:red-ptr,offset red

dec cs:loop1 ;

jmp start

@@4: inc cs:c-num ;色号加1

add cs:red-ptr,3 ;基色值指针加3

jmp start

@@5: int 20h

delay:

mov cx,8760

@@6: dec cx

cmp cx,0

jnz @@6

ret

change:

cmp al,6

je @@7

cmp al,7

jle @@8

add al,48

jmp @@8

@@7: add al,14

@@8: mov dx,03c8h

out dx,al

mov dx,03c9h

mov bp,cs:red-ptr

mov al,[bp]

out dx,al

mov al,[bp 1]

out dx,al

mov al,[bp 2]

out dx,al

[1] [2]