四、改变屏幕显示颜色 有两个步骤 一、根据颜色号选择调色板寄存器 二、修改调色板寄存器 这两步都可通过BION的INT 10H中断调用完成 第一步 入口:AH=10H AL=07H BL=颜色号(0-15) 出口:BH=调色板寄存器号(0-255) 第二步 入口:AH=10H AH=10H BX=调色板寄存器号 DH=颜色中红分量(0-63) CH=颜色中绿分量(0-63) CL=颜色中兰分量(0-63) 出口:无 注1:改变颜色指改变各种颜色的亮度 注2:12H模式初始化时,屏幕边缘与背景都使用0号寄存器(黑色)。使用ROM-BIOS中断调用(10H)可使边缘颜色寄存器使用别的调色板寄存器。 入口:AH=10H AL=01H BH=调色板寄存器号(0-255) 出口:无 可以让BH指向一个不常用的调色板寄存器(例0FFH)然后修改0FFH的颜色组成,可达到同屏显示17种颜色。即:边缘颜色寄存器不使用16种调色板寄存器之一。 五、改变缺省的16种颜色设置 ROM-BIOS (INT 10H) 入口:AH=10H AL=00H BL=颜色号(0-15) BH=调色板寄存器号(0-255) 出口:无 注:修改颜色指使某颜色号使用指定的颜色而不使用缺省的颜色;改变颜色号(0)的颜色可改变背景颜色 六、取当前屏幕各颜色的组成 BIOS显示中断(10H)调用 入口:AH=10H AL=15H BX=调色板寄存器号(0-255) 出口:DH=颜色中的红分量(0-63) CH=颜色中的绿分量(0-63) CL=颜色中的兰分量(0-63) 注:若不知道某颜色号对应的调色板寄存器可用10H号功能调用07号子功能调用找到。 *打开和关闭屏幕显示 入口:AH=12H AL=开关屏幕显示(0=开,1=关) BL=36H 出口:无 注:如果不想让人看到画图过程,可先关闭显示,画完后再打开显示,这样还有弹出效果。 七、VGA卡的常用寄存器 1.时序发生器 控制所有VGA功能的总定时信号,并完成某些存储地址译码工作.有5个寄存器,复用两个I/O地址(3C4H和3C5H),其中3C4H为索引寄存器地址.用来选择当前寄存器. (1)时钟方式寄存器(索引号01H) 配置时序发生器的定时线路,一般应用情况不必修改.该寄存器的第4位确定EGA/VGA用字节还是用字方式编址,在实现屏幕的平滑滚动时要用到这个参数. (2)颜色平面允许写寄存器(02H) 控制是否允许处理器写颜色平面.通过有选择地允许写某些颜色平面,可以将特定的图形显示在屏幕上,缺省值为0FH(所有平面允许写) 位定义:第7-4位 保留 第 3 位 允许写平面3(=1,允许) 第 2 位 允许写平面2(=1,允许) 第 1 位 允许写平面1(=1,允许) 第 0 位 允许写平面0(=1,允许) (3)复位寄存器(00H) (4)字符发生器选择寄存器(03H) (5)存储方式寄存器(04H) 2.图形控制器 对要写入VRAM的数据进行逻辑运算(与、或、异或等),包括9个内部寄存器,复用两个I/O地址(3CEH和3CFH),3CEH为索引寄存器地址,在执行任何绘图操作之前还应通过设置时序发生器的颜色平面允许写寄存器选择颜色平面(当然可以什么都不做只用缺省值) (1)置位/复位寄存器(索引号00H) 用来存放写向VRAM的填充数据.该寄存器应和允许置位/复位寄存器联合使用. 位定义:第7-4位 保留 第 3 位 平面3的填充数据 第 2 位 平面3的填充数据 第 1 位 平面1的填充数据 第 0 位 平面0的填充数据 缺省值:所有位都为0 (2)允许置位/复位寄存器(索引号01H) 决定哪些平面接收来自置位/复位寄存器的填充数据.任何被禁止置位/复位的平面将用通常的处理器(CPU)的处理输出数据填写. 位定义:(缺省值为0) 第7-4位 保留 第 3 位 允许对平面3置位/复位(=1 允许) 第 2 位 允许对平面2置位/复位(=1 允许) 第 1 位 允许对平面1置位/复位(=1 允许) 第 0 位 允许对平面0置位/复位(=1 允许) (3)颜色比较寄存器(索引号02H) 用来在VRAM中快速查找指定的象素.颜色比较寄存器可以在单个读存储周期内将所有4个显示平面数据与参考颜色比较.并报告每个象素位置的颜色是否匹配.该寄存器在图形区域填充算法中用于边界查找特别有效.该寄存器,必需和方式寄存器联合使用(所有显示模式缺省值为0) 位定义: 第7-4位 保留 第 3 位 平面3的颜色比较值 第 2 位 平面2的颜色比较值 第 1 位 平面1的颜色比较值 第 0 位 平面0的颜色比较值 (4)数据移位和函数选择寄存器(索引号03H) 控制两个独立的功能:写数据移位和对写数据的逻辑操作.在写周期中数据可被移位0-7位.必须选择写方式0(见方式寄存器)以允许移位.函数选择位为在VRAM上的读写操作提供了基本的硬件支持. 位定义:(缺省为0) 第7-5位 保留 第4-3位 函数选择位:=0 不修改写数据 =1 写数据 AND 锁存器 =2 写数据 OR 锁存器 =3 写数据 XOR 锁存器 第2-0 数据移位位数 注:如果移位和逻辑操作都允许,则先移位后逻辑操作.每个颜色平面都有一个对应的一字节的锁存器,因此在一次VRAM读周期中32位数据可同时装入锁存器. (5)读平面选择寄存器(索引号04H) 决定处理器可以读哪个颜色平面(除颜色比较方式以外)即颜色比较方式不受其控制. 位定义:(缺省时为0) 第7-2位 保留 第1-0位 定义可读的颜色平面(0-3) (6)方式寄存器(索引号05H) 其中大多数位不应修改,但有两位是有用的,即写方式位和颜色比较方式允许位.写方式控制处理器数据如何写进VRAM 注意:如应用程序要修改方式寄存器,则必须保护第7-4位状态 位定义:第 7 位 保留(0) 第 6 位 256种颜色(仅对VGA) 第 5 位 移位寄存器方式 第 4 位 奇/偶方式 第 3 位 颜色比较方式可工作(=1:可工作) 第 2 位 保留 第1-0位 写方式:=0处理器直接写 =1锁存器内容作为写数据 =2用处理器数据第n(0-3)位值填写第n个颜色平面. =3没有使用 注:写方式0:通常使用,也是缺省状态,允许处理器数据直接写入VRAM,同时允许置位/复位,移位,屏蔽,与,或,异或等功能(别的写方式则不允许) 写方式1:可以用来快速地把数据从VRAM的一个位置复制到另一个位置.处理器对VRAM的一次写操作,将从4个颜色平面中的每一个读一个字节的数据,将这32位数据锁存到处理器的锁存器中,处理器向VRAM的一次写操作将把4个字节的数据同时写回显示存储器的另一地址(只要所有的4个颜色平面都允许写)该方式可以用来构造屏幕块快速复制或移动函数. 写方式2:与位屏蔽寄存器一起使用时,将把压缩的象素转换成平面象素并写进颜色平面. (7)混合寄存器(索引号06H) 由BIOS方式选择操作初始化后,不应修改. (8)颜色忽略寄存器(索引号07H) 与颜色比较方式配合使用.该寄存器在颜色比较周期中屏蔽特定的平面不被测试. 位定义:第7-4位 保留 第 I 位 忽略平面I (i=0,1,2,3) (9)位屏蔽寄存器(索引号08H) 用来屏蔽某些位,使其在读写周期中不被修改.位屏蔽寄存器的某位为0表示显示器的一次处理写期间,该位将来自锁存器数据,不是来自处理器的输出数据.起到了屏蔽功能,在进行写操作前必须经过一次读操作使锁存器中装入正确的数据. 注:对这些寄存器的操作,完成任务后,都应使它们成为初始缺省值! 3.CRT控制器(不宜修改,易损坏CRT) 索引地址3D4H,数据口地址为3D5H. |