显存地址

ted*_*ted 4 cpu operating-system kernel processor video-memory

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

Cal*_*lum 5

当您写地址时会发生什么:

地址空间的该区域未映射到RAM,而是通过系统总线发送到VGA卡。BIOS在引导时使用VGA卡进行设置(很多地址范围都映射到各种设备的内存中)。当您写入地址空间的该区域时,CPU上没有执行任何代码来绘制像素。VGA卡接收此信息而不是您的RAM,并自行执行此操作。

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

有关BIOS的更多信息:

BIOS是主板随附的程序,您的CPU在首次启动时便会执行该程序。它设置所有硬件,映射所有内存映射的设备,创建各种有用的表,分配IO端口,将中断挂钩,直到它留在内存中的一堆例程。然后,它将从设备加载启动扇区,并跳转到您的OS代码。

左侧的例程和数据结构使您可以启动操作系统。您可以从磁盘上加载扇区,在屏幕上写入文本,获取有关系统的信息(内存映射,ACPI表,MP表等)。如果没有这些例程和数据结构,要使引导程序合格并拥有有关系统的所有信息以构建功能内核,即使不是不可能,也将更加困难。

但是,例程过时,缓慢并且具有非常严格的限制。内存中的例程之一是16位实模式代码,因此,一旦切换到32位保护模式,就必须不断切换回去或使用VM86模式来访问它们(在64位模式下完全无法访问,显然使用修改后的指令来模拟linux x86emu库是一个选项)。因此,例程通常非常慢。因此,如果您脱离实模式编程,则需要从头开始编写自己的驱动程序。