自己動手從零寫桌面操作系統GrapeOS系列教程——14.屏幕顯示原理與文本模式

學習操作系統原理最好的方法是自己寫一個簡單的操作系統。


一、屏幕顯示原理

電腦顯示器屏幕是由很多很小的像素組成的。每個像素就像是一個小燈泡,在屏幕上一排一排的整齊排列着。只要能控制每個像素的顏色就能顯示出各種各樣的圖形。如果近距離觀察過會場或室外的大屏幕會有更直觀的感受,這種大屏幕上每個像素就是一個小燈泡。
屏幕顯示原理大致可以如下表示:

CPU(程序)->顯卡(顯存)->顯示器(屏幕)

在程序的控制下,CPU將要顯示的數據發送到顯卡上的顯存(顯卡上的內存),顯存中的數據和屏幕上的像素是有對應關係的,顯卡會不斷的從顯存中取出數據發給顯示器,顯示器就會在屏幕上顯示出對應的圖形。發給顯示器前,顯卡可能會對數據做一些處理。顯卡多長時間向顯示器發一次數據與刷新頻率有關。

二、顯卡的文本模式

顯卡有圖形模式和文本模式兩類顯示模式。電腦啓動後,顯卡的默認模式就是文本模式,能顯示25行80列ASCII字符。
對屏幕來說一切皆是圖形,顯卡的文本模式是爲了方便開發人員顯示字符用的。如果沒有文本模式,顯示任何字符都需要開發人員自己精確控制每個像素,後面我們在圖形模式中就需要這麼做。文本模式無法展示多彩的世界,但我們在進入圖形模式前需要在文本模式下顯示一些提示信息,所以我們需要學習一下文本模式。
在默認文本模式下,顯存與屏幕的對應關係爲每2個字節對應一個字符,其中低字節存放ASCII碼,高字節存放字符顏色屬性。詳情如下表所示:

bit內容說明1說明2
15K是否閃爍背景色
14R
13G
12B
11I是否高亮前景色
10R
9G
8B
7字符ASCII碼
6
5
4
3
2
1
0
字符顏色表如下:
RGB顏色
I=0I=1
000
001淺藍
010淺綠
011淺青
100淺紅
101品紅淺品紅
110
111亮白
在計算機裏每個像素的顏色都是RGB三原色按照不同的配比來表示的。這裏RGB三原色各用一個bit位來表示,所以只能顯示2^3=8種顏色,前景色多了一個高亮位,也只能顯示2^4=16種顏色。如果要顯示更多的顏色就需要更多的bit位來表示,這個我們後面講圖形模式時再介紹。我們在文本模式下能顯示黑底白字就足夠了。對於黑底白字,字符顏色屬性值對照上面兩個表可以得出應該是0x07。

三、顯存地址分佈

之前在實模式的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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章