目录 上一页 下一页 下一章

第9章 图形显示 -267-



pixel
code

pop
ret
endp
ends
end
ax



main

;返回主过程



9.3 端口编程
  说一句很令大家失望的话,试图通过端口编程控制CGA卡的图形显示并没有什么实际意义,相反,这样做反而会带来麻烦。原因很简单,现在常用的显示卡一般都是VGA、Super VGA或者是一些带有视频加速器的显示卡,绝大多数显示卡只做到了在显示缓冲区一级兼容CGA,在寄存器一级与标准的CGA卡并不兼容。这种现象早在EGA的时代就已经出现,其后设计的显示卡为了全面兼容EGA,也就不得不把这个毛病继承了下来。因此在这样的情况下讨论CGA卡的端口编程也就没什么必要性了。
  当然,问题远不是如此的简单。IBM所推出的显示卡历来是工业界遵循的标准,然而就在IBM搞出的8514卡之后情况就发生了变化。一些曾经按照IBM的标准生产兼容显示卡的厂家相继脱离了IBM,设计出了自己的Super VGA卡,其中比较有名的象Trident VGA,ET3000(EVGA)等。这些显示卡都没有遵循IBM8514的标准,而是各有各的特色。在这些显示卡中,有些设计时考虑了与CGA卡的兼容性,做到了寄存器级兼容IBM CGA,比如EVGA卡。至于现在常用的各种加速卡是否做到了与CGA的完全兼容恐怕就更难说了。
  出于这样一些原因,本书将仅对CGA卡上几个关键的寄存器做些简单说明,不再给出程序例,大家可以自己进行实验。如果读者发现自己所用的显示卡确实与CGA卡完全兼容,那么可以利用本书给出的这一点点资料自行编制程序例,以求彻底掌握CGA卡的程序设计。不过最关键的一点还是要提醒大家:通过端口控制CGA卡将使程序丧失可移植性。
  有关CGA卡上CRTC寄存器组已经在本书的第六章做了讨论,这一节将讨论CGA卡上另外三个寄存器--方式选择寄存器、颜色选择寄存器与状态寄存器。
  (1)方式选择寄存器
  这个寄存器可以通过端口3D8H进行存取,它主要用于设定CGA卡的工作模式,各个位的作用都列在表9-2中。
表9-2 方式选择寄存器的位定义
功    能    描    述
0分辨率转换位。此位为0时设置40x25分辨率,为1时设置80x25分辨率。
1字符/图形模式转换位。此位为0时设置字符模式,为1时设置320x200图形模式。
2彩色/黑白模式转换位。此位为0时为彩色模式,为1时为黑白模式。
3显示允许/禁止位。此位为0时禁止显示,为1时允许显示。
4此位为1时选择640x200高分辨率模式。
5闪烁允许/禁止位。此位为0时禁止闪烁,此时背景颜色可以有16种。为1时允许闪烁。
6未使用。
7未使用。

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章