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

成宇佳發表於2023-03-15

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


一、螢幕顯示原理

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

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

相關文章