Memory VGA与集成图形理论

Memory VGA与集成图形理论,memory,graphics,intel,computer-architecture,vga,Memory,Graphics,Intel,Computer Architecture,Vga,英特尔网站称,我并不想知道VGA的细节,而是想知道它的工作原理(以及集成图形)- 因此,这些被盗的内存被用作VGA适配器的帧缓冲区,VGA图形控制器的任何读/写操作都将从那里进行 带有1MB被盗VGA内存的示例系统- 因此,如果上面的系统在VGA模式下运行,并且有东西被写入到传统的VGA地址范围(0xA0000-0xbffff),那么这个过程会是什么 目前我的理解是,内存控制器会将其从CPU转发到VGA适配器,然后使用图形转换表(GTT),它会将其转换为位于DRAM顶部03F0_OOOOh-

英特尔网站称,我并不想知道VGA的细节,而是想知道它的工作原理(以及集成图形)-

因此,这些被盗的内存被用作VGA适配器的帧缓冲区,VGA图形控制器的任何读/写操作都将从那里进行

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

因此,如果上面的系统在VGA模式下运行,并且有东西被写入到传统的VGA地址范围(0xA0000-0xbffff),那么这个过程会是什么

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

这是否意味着传统VGA内存范围0xA0000-0xbffff在DRAM中不可访问,因为VGA适配器正在使用MMIO的地址范围

如果有人能帮助解决这些问题,我们将不胜感激


谢谢。

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

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

  • 图形模式

    A000:0000 - A000:FFFF
    
    B800:0000 - B800:FFFF
    
  • 文本模式

    A000:0000 - A000:FFFF
    
    B800:0000 - B800:FFFF
    
    因此,booth#1#2
    64kbyte
    内存块不能直接访问,而是VGA将自己的内存转发到那里。对于集成卡+共享内存,它们没有自己的内存,因此芯片组从全局内存(通常从顶部地址空间)获取内存。在这种情况下,HW无法访问内存(除非使用芯片组的某些功能)。全局内存中的内存空间通常被重新映射或用于ROM的阴影

  • gfx BIOS

    所有传统gfx卡都有自己的“BIOS闪存/EEPROM/EPROM/PROM”内存。我记不清它到底是如何工作的,但我记得扩展BIOS区域是从什么时候开始的

    C000:0000
    
    其中,所有BIOS能够HW映射其BIOS内存(不仅是gfx卡,而且不仅仅是整个段的大小)

    现在有许多gfx模式需要大于
    64KB的VRAM因此您可以调用gfxBIOS将适当的内存段映射到
    A000:0000
    ,或者通过gfxIO端口上的IO操作通过控制寄存器进行设置。Gfx卡重新映射内存,然后您可以使用它

  • VESA

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


  • 正如我之前写的,我已经处理了好几年了,所以如果我错了,请编辑或添加评论…

    谢谢你的回答。我现在理解VGA,但仍然有点困惑GFX-BIOS和VESA。例如,如果我安装了一个图形卡,当enumerated被分配了传统VGA地址范围和e000000h-effffffh时,当Windows在加载视频驱动程序之前显示其初始屏幕时,该过程将如何工作?CGA/EGA/VGA/VESA不需要任何驱动程序,所有这些都是通过他们的BIOS完成的,BIOS被连接/集成为中断:int 10h。我的意思是Windows在加载GPU的视频驱动程序之前使用VESA显示启动屏幕。同样。。。它们只使用自己的子例程,而不是int 10h(仅使用VESA gfx的IO端口,为了兼容支持,还可以覆盖中断10h)。UNIVBE就是一个很好的例子,它可以使用自定义分辨率和功能,甚至可以将VESA 2.0标准添加到VESA 1.2卡中。太棒了…VBE驱动程序覆盖中断向量来访问自己的处理程序。所以应用程序调用int 10h,但它不会跳转到gfx BIOS,而是跳转到VBE驱动程序的某个TSR例程处理程序。。。