Informationen zum CGA Bildschirm (关于 CGA 显示器的资料)
Video-RAM显存
每个计算机显卡都有一个自己的存储空间-Video-RAM,可以用来编程。在图像模式编程过程
中,每个像素的可能的颜色都必须在Video-RAM中被设置。但是在文本模式编程中就相对简
单,只需要向Video-RAM中传送所设置的字符相应的ASCII码以及其属性就可以了。ASCII码
向一个像素矩阵的转换,会在显卡中独立的被执行。
操作系统1的实习课要求是完成CGA文本模式编程下的所有输出。这个模式基本上所有的显卡
都支持,而且比较容易编程,很适合练习操作系统的编程。
在CGA的文本模式编程中,每一个屏幕位置需要占用2个字节的Video-RAM。第一个字节(偶数
的偏移地址)为字符所对应的ASCII码,第二个字节(奇数的偏移地址)为定义前景色、后景
色以及闪烁。在Video-RAM中规定,屏幕位置图像按照行列来排序的。按照每行80个字符,一
屏25行的分辨率为例,左上角的位置是第0和1字节,向右是第2和3字节,第一行的最后是第
158和159字节。然后顺着第一行最后的字节数,从第二行开始继续加。
由于Video-RAM是叠加出现在计算机主存中的,所以可以通过一般的对存储器的存储操作来执
行对显存操作。显存Video-RAM 0的偏移地址存放在0xb8000地址中。
显示属性
对于每个字,都有前景色、背景色和闪烁的属性。这是通过字节来设置的。
如下表:
Darstellungsattribute | |
---|---|
Bits 0-3 | 前景色 |
Bits 4-6 | 背景色 |
Bit 7 | 闪烁 |
CGA文本模式中,有以下16种颜色可以显示:
Farbpalette | |||
---|---|---|---|
0 | 黑 | 8 | 深灰 |
1 | 蓝 | 9 | 浅蓝 |
2 | 绿 | 10 | 浅绿 |
3 | 青 | 11 | 浅青 |
4 | 红 | 12 | 浅红 |
5 | 红紫 | 13 | 浅红紫 |
6 | 棕褐 | 14 | 黄 |
7 | 淡灰 | 15 | 白 |
因为设置背景色的位置只有3Bit,所以只有前8个颜色可以被设置。
光标的控制
为了能够控制当前光标的位置,需要对显卡的显示控制器进行编码。此时,需要使用数据寄
存器、索引寄存器以及18个控制寄存器。在本次实验中,需要用到的是数据寄存器、索引寄
存器以及第14和15控制寄存器。
编号 | 寄存器 | 含义 |
---|---|---|
14 | Cursor (high) | 显存中光标位置偏移量 |
15 | Cursor (low) |
Daten- und Indexregister können direkt mit Hilfe der in
und out
Befehle angesprochen werden, da ihnen eigenständige Portadressen zugeordnet sind:
端口 | 寄存器 | 存取方式 |
---|---|---|
3d4 | 索引寄存器 | 只写 |
3d5 | 数据寄存器 | 读写 |
控制寄存器的读写操作的成本很高。为了访问和设置图像控制器,必须先用索引寄存器,然
后再用数据寄存器通过控制寄存器进行读写操作。