首页 > 其他分享 >自己动手从零写桌面操作系统GrapeOS系列教程——14.屏幕显示原理与文本模式

自己动手从零写桌面操作系统GrapeOS系列教程——14.屏幕显示原理与文本模式

时间:2023-03-15 11:55:06浏览次数:46  
标签:显存 字符 14 模式 GrapeOS 桌面操作系统 显卡 图形 文本

学习操作系统原理最好的方法是自己写一个简单的操作系统。


一、屏幕显示原理

电脑显示器屏幕是由很多很小的像素组成的。每个像素就像是一个小灯泡,在屏幕上一排一排的整齐排列着。只要能控制每个像素的颜色就能显示出各种各样的图形。如果近距离观察过会场或室外的大屏幕会有更直观的感受,这种大屏幕上每个像素就是一个小灯泡。
屏幕显示原理大致可以如下表示:

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

标签:显存,字符,14,模式,GrapeOS,桌面操作系统,显卡,图形,文本
From: https://www.cnblogs.com/chengyujia/p/17217961.html

相关文章

  • 【2023-03-14】破茧成蝶
    20:00后悔过去,不如奋斗将来。                                           ......
  • Day 14 英语单词复习
    computer-intergratedmanufacturing计算机集成制造link环节dissemination散播、传播、普及shopfloor车间现场state-of-the-art达到最新技术发展水平threefold三倍、......
  • Vjudge 3.14 训练解题报告
    比赛传送门\(\color{white}{password:3.1415926}\)A.Fibonacci-ish题意:定义一个序列为“Fibonacci-ish”的,当且仅当对任意\(2<i\len,a_i=a_{i-1}+a_{i-2}\)。给定......
  • 3.14cp 总结
    编写前端代码<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%Stringpath=request.getContextPath();StringbasePath......
  • 2023.03.14 - pnpm的基本使用
    安装npminstall-gpnpm基本操作新增包pnpmaddxxx删除包pnpmremovexxx运行项目pnpmxxx筛检硬连接库pnpmstoreprune切换源......
  • day14(2023.3.14)
    飞机大战小游戏:1.MyGameFrame类(程序的入口) 2.GameObject(游戏物体的根类) 3.GameUtil(工具类) 4.Plane(飞机类)  5.Shell(炮弹类) 6.Explode(爆炸......
  • 3.14学习总结
    今天我和赵金荣将起点与终点查询的算法写出来了,而且将最优路线的想法也想好了。首先我们将起点与终点查询分成两种,即是否需要转线。如果不需要转线,直接将站点号提......
  • 每日总结2023/3/14
    今天完成了作业的前两个查询,完成了线路查询,站点查询下面是演示    代码如下 <%@pagelanguage="java"contentType="text/html;charset=UTF-8"p......
  • 每日总结--2023/3/14
    今日课程:英语数据库 python学习内容:复习了android的基础知识完善了登录和注册页面学习了更多的sql语句学习了python循环组队任务完......
  • 2023.3.14软件工程日报
    时间:3小时代码量:150行今日总结来说,进行了地铁系统的思路研讨,沿着建民老师的思路进行了开发,分了三种情况,但是第三种情况还在进行思考,此外把自己的Androidstudio中的app进......