EGA/VGA显示卡编程

一、VGA卡显示模式

模式类型分辨率颜色数可用显示卡显示地址
00H字符40×2516CGA  EGA  MCGA   VGAB800
01H字符40×2516CGA  EGA  MCGA   VGA B800
02H字符80×2516CGA  EGA  MCGA   VGAB800
03H字符80×2516CGA  EGA  MCGA   VGAB800
04H图形320×2004CGA  EGA  MCGA   VGAB800
05H图形320×2004CGA  EGA  MCGA   VGAB800
06H图形640×2002CGA  EGA  MCGA   VGAB800
07H字符80×252EGA          VGAB800
0DH图形320×20016EGA          VGAA000
0EH图形640×20016EGA          VGAA000
0FH图形640×3502EGA          VGAA000
10H图形640×35016EGA          VGAA000
11H图形640×4802MCGA         VGAA000
12H图形640×48016VGAA000
13H图形320×200256MCGA         VGAA000

设置显示模式  BIOS中断调用(INT  10H)入口:AH=00H     AL=模式号    出口:无

二、VGA卡的结构(12H 模式)

    显示存储器(VRAM)用来存放要在屏幕上显示的数据,共256KB分为4个颜色平面,各面64KB在内存中占用相同的地址空间,起始地址为A000:0000
    在显示时,屏幕上一个象素由4位组成,每个颜色平面一位,每个象素可以是16种颜色中的一种,VRAM中的每个字节存放相邻的8个水平象素。具体说,显示屏幕上的象素位置(x,y)到VRAM的地址之间换算方式为:
 
字节地址=y*80+x/80
  位地址=7-(x mod 8)


三、模式12H的颜色缺省值

颜色号颜色名称调色板寄存器的值绿
0black(黑)0000
1blue(兰)  10042
2green(绿)20420
3cyan(青)304242
4red(红)44200
5magenta(洋红)542042
6brown(棕)642420
7lightgray(浅灰)20424242
8darkgray(深灰)560021
9lightblue(亮兰)570063
10lightgreen(亮绿)5804221
11lightcyan(亮青)5904263
12lightred(亮红)6042021
13lightmagenta(亮洋红)6142063
14yellow(黄)62424221
15white(白)63424263

 

16个调色板寄存器,256个颜色寄存器

四、改变屏幕显示颜色
有两个步骤    一、根据颜色号选择调色板寄存器
             二、修改调色板寄存器
这两步都可通过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.

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值