3

英特尔网站说,我并不是真的想知道 VGA 的来龙去脉,而是想知道它如何工作(以及集成显卡)的基本原理——

在此处输入图像描述

所以这个被盗的内存被用作 VGA 适配器的帧缓冲区,VGA 图形控制器的任何读/写操作都将来自那里?

具有 1MB 被盗 VGA 内存的示例系统 -

在此处输入图像描述

因此,如果上述系统在 VGA 模式下运行,并且某些内容被写入旧版 VGA 地址范围(0xA0000 - 0xbffff),那么该过程会是什么?

目前我的理解是内存控制器会将其从 CPU 转发到 VGA 适配器,然后使用图形转换表 (GTT) 将其转换为 DRAM 顶部的物理地址,介于 03F0_OOOOh - 03FF_FFFFh 之间?

这是否意味着由于 VGA 适配器正在使用 MMIO 的地址范围,因此无法在 DRAM 中访问旧版 VGA 内存范围 0xA0000 - 0xbffff?

如果有人可以帮助解决这些问题,将不胜感激,

谢谢。

4

1 回答 1

2

已经好几年了,我直接为 VGA 写了一些东西,所以请记住这一点。

旧的遗留东西(CGA/EGA,VGA )仅将所有VRAM内存访问映射到两个段(2 x 64KByte)

  1. 图形模式

    A000:0000 - A000:FFFF
    
  2. 文本模式

    B800:0000 - B800:FFFF
    

    因此,第 1 号第 2 号 展位64 KByte的内存块不能直接访问,而是VGA将其自己的内存转发到那里。对于集成卡+共享内存,它们没有自己的内存,因此芯片组从全局内存(通常从顶部地址空间)中获取它。在这种情况下,是的,硬件无法访问内存(除非使用了芯片组的某些功能)。全局内存中的内存空间通常被重新映射或用于ROM的影子

  3. gfx-BIOS

    所有传统 gfx 卡都有自己的“BIOS FLASH/EEPROM/EPROM/PROM”内存。我不记得它是如何工作的,但我记得扩展BIOS区域开始于

    C000:0000
    

    所有支持BIOS的硬件都映射其BIOS内存(不仅是 gfx 卡,而且不仅是整个段的大小)。

    现在有许多 gfx 模式需要的不仅仅是64KBVRAM 因此您可以调用 gfx BIOS将适当的内存段映射到或通过 gfx IO端口上的IO操作A000:0000通过控制寄存器设置它。Gfx卡重新映射内存,然后你可以使用它......

  4. VESA

    VESA VRAM可以以与旧的旧 gfx 东西相同的方式访问,但VESA添加了LFB(线性帧缓冲区)支持,它可以将整个VRAM映射到内存,而不仅仅是单个段,还可以使用扩展内存(在基础上它不会多用)。

正如我之前写的那样,我处理这些东西已经有几年了,所以如果我错了,请编辑或添加评论......

于 2014-04-25T13:09:47.177 回答