自己动手从零写桌面操作系统GrapeOS系列教程——14.屏幕显示原理与文本模式
学习操作系统原理最好的方法是自己写一个简单的操作系统。
一、屏幕显示原理
电脑显示器屏幕是由很多很小的像素组成的。每个像素就像是一个小灯泡,在屏幕上一排一排的整齐排列着。只要能控制每个像素的颜色就能显示出各种各样的图形。如果近距离观察过会场或室外的大屏幕会有更直观的感受,这种大屏幕上每个像素就是一个小灯泡。
屏幕显示原理大致可以如下表示:
CPU(程序)->显卡(显存)->显示器(屏幕)
在程序的控制下,CPU将要显示的数据发送到显卡上的显存(显卡上的内存),显存中的数据和屏幕上的像素是有对应关系的,显卡会不断的从显存中取出数据发给显示器,显示器就会在屏幕上显示出对应的图形。发给显示器前,显卡可能会对数据做一些处理。显卡多长时间向显示器发一次数据与刷新频率有关。
二、显卡的文本模式
显卡有图形模式和文本模式两类显示模式。电脑启动后,显卡的默认模式就是文本模式,能显示25行80列ASCII字符。
对屏幕来说一切皆是图形,显卡的文本模式是为了方便开发人员显示字符用的。如果没有文本模式,显示任何字符都需要开发人员自己精确控制每个像素,后面我们在图形模式中就需要这么做。文本模式无法展示多彩的世界,但我们在进入图形模式前需要在文本模式下显示一些提示信息,所以我们需要学习一下文本模式。
在默认文本模式下,显存与屏幕的对应关系为每2个字节对应一个字符,其中低字节存放ASCII码,高字节存放字符颜色属性。详情如下表所示:
bit | 内容 | 说明1 | 说明2 |
---|---|---|---|
15 | K | 是否闪烁 | 背景色 |
14 | R | 红 | |
13 | G | 绿 | |
12 | B | 蓝 | |
11 | I | 是否高亮 | 前景色 |
10 | R | 红 | |
9 | G | 绿 | |
8 | B | 蓝 | |
7 | 字符ASCII码 | ||
6 | |||
5 | |||
4 | |||
3 | |||
2 | |||
1 | |||
0 |
R | G | B | 颜色 | |
---|---|---|---|---|
I=0 | I=1 | |||
0 | 0 | 0 | 黑 | 灰 |
0 | 0 | 1 | 蓝 | 浅蓝 |
0 | 1 | 0 | 绿 | 浅绿 |
0 | 1 | 1 | 青 | 浅青 |
1 | 0 | 0 | 红 | 浅红 |
1 | 0 | 1 | 品红 | 浅品红 |
1 | 1 | 0 | 棕 | 黄 |
1 | 1 | 1 | 白 | 亮白 |
三、显存地址分布
之前在实模式的1M内存布局中介绍过显存地址的分布,我们在这里再回顾一下:
起始 | 结束 | 大小 | 用途 |
---|---|---|---|
0xb8000 | 0xbffff | 32KB | 文本模式显存 |
0xb0000 | 0xb7fff | 32KB | 黑白图形显存 |
0xa0000 | 0xaffff | 64KB | 彩色图形显存 |
从上表可以看到,文本模式的显存开始地址为0xb8000。上面我们已经讲过,在该默认模式下,一个字符对应2个字节。所以屏幕第一行第一个字符对应的地址为0xb8000和0xb8001,其中0xb8000为字符颜色属性,0xb8001为字符ASCII码。第二个字符对应的地址为0xb8002和0xb8003,后面的字符以此类推。在默认模式下,每行显示80个字符,第81个字符会显示在第二行第一个字符的位置,第161个字符会显示在第三行第一个字符的位置,后面的字符同样以此类推。
需要了解的是,上表中的图形显存地址段并不是GrapeOS操作系统用的图形地址段,具体情况后面再介绍。
本讲视频版地址:https://www.bilibili.com/video/BV1Nb411d7Ha/
本教程代码和资料:https://gitee.com/jackchengyujia/grapeos-course
GrapeOS操作系统QQ群:643474045