我不是真的想知道VGA的来龙去脉,而是它的工作原理(以及集成显卡)的基本原理,英特尔网站说 -
所以这个被盗的内存被用作VGA适配器的帧缓冲区,VGA图形控制器的任何读/写都将来自那里?
1MB盗用VGA内存的示例系统 -
因此,如果上述系统在VGA模式下运行并且某些内容已写入传统VGA地址范围(0xA0000 - 0xbffff),那么该过程将是什么?
目前我的理解是内存控制器会将它从CPU转发到VGA适配器,然后使用图形转换表(GTT)将其转换为DRAM顶部的物理地址,范围为03F0_OOOOh - 03FF_FFFFh?
这是否意味着传统的VGA内存范围0xA0000 - 0xbffff在DRAM中无法访问,因为VGA适配器正在使用MMIO的地址范围?
如果有人可以帮助解决这些问题,我们将不胜感激,
感谢。
答案 0 :(得分:2)
我已经花了几年的时间直接为VGA写了一些东西,所以请记住这一点。
旧的遗留内容( CGA / EGA,VGA )将所有 VRAM 内存访问映射到仅两个段(2 x 64KByte)
图形模式
A000:0000 - A000:FFFF
文字模式
B800:0000 - B800:FFFF
因此无法直接访问booth #1 和#2 64 KByte
内存块,而 VGA 会在那里转发自己的内存。使用集成卡+共享内存,它们没有自己的内存,因此芯片组从全局内存中获取(通常来自顶部地址空间)。在这种情况下,是 HW 无法访问内存(除非使用芯片组的某些功能)。全局内存中的内存空间通常会重新映射或用于 ROM 的阴影
<强> GFX-BIOS 强>
所有传统的gfx卡都有自己的“BIOS FLASH / EEPROM / EPROM / PROM”内存。我不记得究竟是如何工作的,但我记得扩展 BIOS 区域开始
C000:0000
所有 BIOS 能硬件映射 BIOS 内存(不仅仅是gfx卡,而且不仅仅是整个网段的大小)。
现在有很多gfx模式需要超过{{1>} VRAM ,因此您可以调用gfx BIOS 将相应的内存段映射到64KB
或者通过gfx IO 端口上的 IO 操作通过控制寄存器设置它。 Gfx卡重新映射内存然后你可以使用它...
<强> VESA 强>
VESA VRAM 的访问方式与旧版旧gfx相同,但 VESA 添加 LFB (线性帧缓冲)支持可以将整个 VRAM 映射到内存而不仅仅是单个段,也可以使用扩展内存(在基础上它没有多大用处)。
正如我之前写的那样,我已经处理了这些事情,所以如果我错了,请编辑或添加评论......