Performance 现代PC视频硬件支持硬件中的VGA文本模式,还是BIOS模拟它(使用系统管理模式)?

Performance 现代PC视频硬件支持硬件中的VGA文本模式,还是BIOS模拟它(使用系统管理模式)?,performance,assembly,x86-16,bios,vga,Performance,Assembly,X86 16,Bios,Vga,在16位传统BIOS MBR模式下启动的现代PC硬件上,当您将诸如'1'(0x31)之类的字节存储到物理线性地址B8000处的帧缓冲区时,会发生什么情况将该区域的存储设置为UC时,mov[es:di]eax存储的速度有多慢?(表示WC上的clflushopt与VGA内存上的UC的速度大致相同。但如果没有clflushopt,mov存储到WC内存,则永远不会离开CPU,也不会更新屏幕,运行速度极快。) 如果不是每个存储都使用SMI,那么有没有办法在用户空间中的一块WB内存上估算此成本,以便在不实际

在16位传统BIOS MBR模式下启动的现代PC硬件上,当您将诸如
'1'
(0x31)之类的字节存储到物理线性地址
B8000
处的帧缓冲区时,会发生什么情况将该区域的存储设置为UC时,
mov[es:di]eax
存储的速度有多慢?
(表示WC上的clflushopt与VGA内存上的UC的速度大致相同。但如果没有clflushopt,
mov
存储到WC内存,则永远不会离开CPU,也不会更新屏幕,运行速度极快。)

如果不是每个存储都使用SMI,那么有没有办法在用户空间中的一块WB内存上估算此成本,以便在不实际重新启动到实际模式的情况下进行性能实验?(例如,将BSS页面用作实际上不在任何地方显示的假装帧缓冲区)

在下一次刷新时,屏幕上会出现相应的字体图示符,但硬件扫描是否真的从VRAM(或iGPU的DRAM)读取ASCII字符并动态映射到位图字体图示符?或者在每个存储或每个vblank上都有一些软件拦截,所以真正的硬件只需要处理位图帧缓冲区


传统BIOS引导是将USB kbd/鼠标模拟为PS/2设备。我想知道它是否也用于VGA文本模式帧缓冲区。我假设它用于VGA I/O端口进行模式设置,但硬件可能支持文本帧缓冲区。然而,大多数计算机将所有的时间都花在图形模式上,所以忽略对文本模式的硬件支持似乎是厂商想要做的事情。(奥托建议自制的verilog VGA控制器可以相当简单地实现文本模式。)

我特别感兴趣的是使用英特尔Skylake中的iGPU的系统,但我会对英特尔和AMD的早期/后期iGPU以及新的或旧的离散GPU感兴趣

(包括AMD和NVidia以外的供应商;有些Skylake主板带有PCI插槽,而不是PCIe。如果现代GPU固件驱动程序确实模拟文本模式,那么可能有一些旧的PCI视频卡带有硬件VGA文本模式。也许这样的卡可以使存储成为PCI事务,而不是SMI。)

我自己的桌面是一个i7-6700k,在华硕Z170专业游戏mobo中,没有附加卡,只有在DVI-D输出上带有1920x1200显示器的iGPU。我不知道Eldan测试的Kaby Lake i5-7300HQ系统的细节,只知道CPU型号


我找到了2011年的菲尼克斯BIOS, 使用uefi模拟传统视频。他们没有要求视频硬件供应商同时提供UEFI和本机16位实模式选项ROM驱动程序,而是提出了一种实模式VGA驱动程序(
int 10h
函数等),通过SMM挂钩调用供应商提供的UEFI视频驱动程序

摘要
[…]通用视频选项ROM通知通用视频SMM驱动程序视频服务请求。这种通知可以使用软件系统管理中断(SMI)来执行。一经通知,通用视频SMM驱动程序将视频服务请求通知第三方UEFI视频驱动程序。第三方视频驱动程序向操作系统提供请求的视频服务。通过这种方式,第三方UEFI图形驱动程序可以支持多种操作系统,甚至那些本机不支持UEFI显示协议的操作系统

大部分描述都涉及处理
int10h
调用和类似的东西,这些调用显然已经通过IVT捕获,因此可以轻松地运行定制代码,从而有目的地触发SMI。相关部分是他们描述的直接存储到文本模式帧缓冲区的部分,即使对于不触发任何软件或硬件中断的代码也需要工作。(除了HW触发此类存储上的SMI之外,他们说如果支持,可以使用这些存储。)

文本缓冲区支持

[0066]在某些实施例中,应用程序可以操纵VGA的 直接使用文本缓冲区。在这样的实施例中,通用视频SMM驱动器 130通过两种方式之一支持此功能,取决于硬件 对740 KB-768 KB内存进行读/写访问时提供SMI陷阱 区域(文本缓冲区所在的位置)

[0067]当SMI捕获可用时,硬件生成SMI 在每次读或写访问时。使用SMI陷阱的陷阱地址, 可以计算精确的文本列和行,并计算相应的 访问虚拟文本屏幕中的行和列

或者, 此区域启用正常内存,并使用定期SMI, 通用视频SMM驱动器130扫描模拟视频中的更改 硬件文本缓冲区并更新相应的虚拟文本屏幕 由视频驱动程序维护。在这两种情况下,当需要更改时 如果检测到,将在虚拟文本屏幕上重新绘制角色

这只是一个BIOS厂商的专利,并没有告诉我们大多数硬件的实际工作方式,或者其他厂商是否做了不同的事情。不过,它确实从本质上确认了某些硬件的存在,这些硬件可能会捕获该范围内的存储。(除非这只是他们决定在专利中涵盖的一种假设可能性。)

对于我心目中的用例,只捕获屏幕刷新要比捕获每个商店快得多,所以我很好奇哪种硬件/固件以哪种方式工作


这个问题的动机 -将ASCII文本计数器的新数字重复存储到相同的几个字节的视频RAM中

我在Linux下的32位用户空间中,在WB内存上测试了一个版本的代码,希望通过
movinti
和不同的方法使CPU在e