QB编程的相关知识-显示

来自: 作者:
 
下面介绍显卡显存的主要结构
显卡的显示模式大的方面分为两种,一种是文本方式,一种是图形方式。我们现在在Windows中的640×480、800×600和1024×768等都是在图形模式下,而过去的DOS是在文本模式下在QBASIC中如果不用SCREEN语句设置的话,默认是文本模式。
图形模式下的显存地址是从A000:0000开始的,文本模式下的显存地址是从B800:0000开始的。我在这里主要讲讲文本模式。
比如
COLOR 10,3
PRINT "TEST"
这个语句就会调用一些过程比如调用INT21号相关的中断调用,这个相关的调用又调用了BIOS INT10中断......最终的表现形式是反映到显存里,当显存里的数据发生变化的时候,显示器显示的内容也跟着发生变化,所以我们可以绕过这个语句,直接写这个显存,也可以同样达到这个效果,但要注意显存的组织方式,
显示属性定义
B800:0000——长度2000H字 彩色显示器文本模式的显示缓冲区。每个字中的低字节是字符的ASCII码,高字节是其属性( 背景属性 前景属性 )
其组织方式
如下(80×25的16色文本模式):
B800:0000 ;第一行第一列的字符的ASCII码
B800:0001 ;第一行第一列的字符的属性字节
B800:0002 ;第一行第二列的字符的ASCII码
B800:0003 ;第一行第二列的字符的属性字节
... ...
B800:07CE ;第25行第80列的字符的ASCII码
B800:07CF ;第25行第80列的字符的属性字节

属性字节的定义如下:
低四位是表示前景色,也就是字符颜色
位3 位2 位1 位0
0 0 0 0 黑色
0 0 0 1 蓝色
0 0 1 0 绿色
0 0 1 1 青色
0 1 0 0 红色
0 1 0 1 洋红
0 1 1 0 棕色
0 1 1 1 白色
1 0 0 0 灰色
1 0 0 1 亮蓝色
1 0 1 0 亮绿色
1 0 1 1 亮青色
1 1 0 0 亮红色
1 1 0 1 亮洋红
1 1 1 0 黄色
1 1 1 1 亮白色

高四位中位7(最高位)为1表示闪烁,为0表示不闪烁,其它三位表示背景色。
位6 位5 位4
0 0 0 黑色
0 0 1 蓝色
0 1 0 绿色
0 1 1 青色
1 0 0 红色
1 0 1 洋红
1 1 0 棕色
1 1 1 白色

实践:
有了这些资料,我们就来用QBASCI来写显存,来加深对计算机显示原理的理解
目的:往显示缓冲区写东西,看看屏幕上的结果
思路:先定义段到B800,然后写内存
如果我们要显示背景为兰色,前景为灰色的*,如下:
用QB提供的语句:
COLOR 7,1
PRINT “*”

下面我们自己调用写内存的语句来直接写显存:
DEF SEG=&HB800 ''定义段址
POKE 0,42 ''(42是字符*的ASC码)
POKE 1,&H17 ''写字符的属性
DEF SEG ''恢复段