显存地址(0xB8000),谁将显存映射到此地址?
从地址复制数据并放到屏幕上的例程,它是处理器内置的函数(这个驱动程序是处理器附带的吗)?
发布于 2013-07-14 10:50:15
写地址:时会发生什么
该地址空间区域并不映射到RAM,而是通过系统总线发送到您的VGA卡。BIOS在启动时使用VGA卡进行设置(许多地址范围都是内存映射到各种设备)。当您写入地址空间的这个区域时,CPU上不会执行任何代码来绘制像素。VGA卡接收此信息,而不是您的RAM,并自行执行此操作。
如果您愿意,您可以查看BIOS函数调用,并让它重新配置硬件,这样您就可以绘制像素,而不是将字符放在视频地址。你甚至可以探测它,看看它是否支持VESA并切换到1280*768 32bpp的分辨率。然后,BIOS会将您选择的地址空间的一个区域映射到VGA卡。
有关的更多信息:
BIOS是主板附带的程序,CPU在首次通电时会执行该程序。它设置所有硬件,映射所有内存映射设备,创建各种有用的表,分配IO端口,将中断挂接到它留在内存中的一堆例程中。然后,它从设备加载引导扇区,并跳转到您的操作系统代码。
遗留下来的例程和数据结构使您能够启动您的操作系统。您可以从磁盘加载扇区,将文本写入屏幕,获取有关系统的信息(内存映射、ACPI表、MP表.etc)。如果没有这些例程和数据结构,创建一个可接受的引导扇区并拥有构建功能内核所需的所有系统信息将会困难得多。
然而,这些例程是过时的,速度很慢,并且有非常严格的限制。首先,内存中剩下的例程是16位实模式代码,所以一旦你切换到32位保护模式,你就必须不断地切换回来或者使用VM86模式来访问它们(在64位模式下完全无法访问,显然可以选择用修改过的linux x86emu库来模拟指令)。因此,这些例程通常都非常慢。因此,如果您不再使用实模式编程,则需要从头开始编写自己的驱动程序。
发布于 2017-09-27 22:06:55
在大多数情况下,PC监视器是VGA-compatible device,通过standard,它包括从0xB8000地址开始通过MMIO设置text buffer (32 KB大小)的模式。

上图总结了MMIO的工作原理。
https://stackoverflow.com/questions/17367618
复制相似问题