视频内存地址

10

视频内存地址是0xB8000,谁将视频内存映射到这个地址?
将数据从该地址复制并放入屏幕的程序例程,它是处理器内置的功能吗(这个驱动程序是否随处理器一起提供)?

2个回答

14

当你写入以下地址时会发生什么:

该地址空间的区域未映射到RAM,而是通过系统总线发送到您的VGA卡。BIOS在启动时设置了这个与您的VGA卡之间的映射(许多地址范围都映射到各种设备)。当您写入此地址空间的区域时,CPU上不执行任何代码来绘制像素。VGA卡接收此信息以代替RAM,并自行处理。

如果您想要的话,可以查看BIOS函数调用并重新配置硬件,以便在视频地址处绘制像素而不是字符。您甚至可以探测它是否支持VESA,然后切换到漂亮的1280 * 768 32bpp分辨率。 BIOS随后会为您将您选择的地址空间映射到VGA卡。

关于BIOS的更多信息:

BIOS是一款随主板提供的程序,当CPU首次出现电源时,CPU会执行它。它设置所有硬件,映射所有内存映射设备,创建各种有用的表,分配IO端口,将中断连接到一堆例程,留在内存中。然后从设备加载引导扇区并跳转到您的操作系统代码。

留下的例程和数据结构使您能够启动操作系统。你可以从磁盘加载扇区,向屏幕写入文本,获取有关系统的信息(内存映射,ACPI表,MP表等)。如果没有这些例程和数据结构,编写可接受的引导扇区并获得有关系统的所有信息以构建功能内核将变得更加困难,甚至可能不可能。

然而这些例程已经过时,速度缓慢,并且具有非常严格的限制。首先,留在内存中的例程是16位实模式代码,因此一旦切换到32位保护模式,您必须不断地切换回来或使用VM86模式来访问它们(在64位模式下完全无法访问,但似乎可以使用修改后的Linux x86emu库来模拟指令)。所以这些例程通常非常缓慢。因此,如果您远离实模式编程,则需要从头编写自己的驱动程序。


3
在大多数情况下,PC显示器是一种兼容VGA的设备,根据标准,它包括通过MMIO从地址0xB8000开始设置文本缓冲区(32 KB大小)的模式。

How MMIO works:

上面的图片总结了MMIO的工作原理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接