![]() | 第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 |