【发布时间】:2022-08-12 04:29:31
【问题描述】:
最近在学习写操作系统,知道可以用in/out指令来操作显存输出屏幕上的内容,但是电脑上有集成和分立的显卡,我要知道0xb8000正在读写哪个显卡的内存
-
无论哪张卡作为系统的主显卡(检查您的 BIOS 选项)都是在物理地址映射 VGA 文本帧缓冲区的那张卡,如果它完全处于文本模式。现代 PCI 设备可以配置它们“侦听”/响应的地址。另请注意,
0xb8000是设备记忆,而不是 IO 地址。您使用普通商店来访问它,而不是in/out。您只能在不同 IO 地址的 VGA 控制寄存器上使用in或out,因此不同地址空间中的数字不同。 (wiki.osdev.org/VGA_Hardware) -
谢谢,彼得!最后一个问题,显卡内存到0xb8000的映射是BIOS完成的吗?
-
是的,通过在引导 UEFI 应用程序或为旧版 MBR 设置旧版 BIOS 16 位环境之前运行的固件。 (我认为即使在 UEFI 启动中,它通常也会使视频硬件处于文本模式。)无论如何,如果您问是否有
int xxBIOS 调用来更改它,不,不是 IBM-PC - 兼容的 BIOS 调用或任何 VESA 调用。我认为这些都是围绕带有一张 VGA 卡的系统设计的。
标签: x86 operating-system osdev vga