显存管理
Last updated
Last updated
前文我们提到,在实模式下可以通过BIOS中断在屏幕上显示文字,切换到保护模式后有一个令人震惊的事实:切换到32位保护模式的时候,我们不能再使用 BIOS 了。 😢
切换到32位(开启保护模式之后)碰到的第一个问题是如何在屏幕上打印信息。之前我们请求 BIOS 在屏幕上打印一个 ASCII 字符,但是它是如何做到将合适的像素展示在计算机屏幕恰当的位置上的呢?
目前,只要知道显示设备可以用很多种方式配置成两种模式:文本模式和图像模式。屏幕上展示的内容只是某一特定区域的内存内容的视觉化展示。所以为了操作屏幕的展示,我们必须在当前的模式下管理内存的某特定区域。显示设备就是这样子的一种设备,和内存相互映射的硬件。
当大部分计算机启动时候,虽然它们可能有更先进的图像硬件,但是它们都是先从简单的视频图像数组 (VGA,video graphics array
)颜色文本模式,尺寸80*25,开始的(数电和ICS都接触过)。在文本模式,编码人员不需要为每个字符渲染每一个独立的像素点,因为一个简单的字体已经在 VGA 显示设备内部内存中定义了。每一个屏幕上字符单元,在内存中通过两字节表示,第一个字节展示字符的 ASCII 编码,第二个字节包含字符的一些属性,比如字符的前景色和背景色,字符是否应该闪烁等。
所以,如果我们想在屏幕上展示一个字符,那么我们需要为当前的 VGA 模式,在正确的内存地址处设置 一个 ASCII 码值,通常这个地址是 0xb8000 。