【问题标题】:How does the BIOS initialize the screen? [closed]BIOS 如何初始化屏幕? [关闭]
【发布时间】:2021-01-12 08:36:09
【问题描述】:

BIOS 如何初始化屏幕?我正在寻找我一直在通过网络搜索的答案,但是找不到任何东西......但是,我找到了一个网站!但是,它说here 已初始化为地址 C000h。显卡真的硬连线到内存地址C000h吗?请提前告知我和TY...:D

【问题讨论】:

  • 它不是“硬连线”的,虽然主显卡在此类系统中映射 - xwindow.angelfire.com/page13_1.html
  • 也相关:wiki.osdev.org/VGA_Hardware。尽管在现代机器中,可能实际上模拟了很多 VGA I/O 端口接口,即使当固件在启动期间将现代视频硬件置于该模式时,文本模式帧缓冲区仍然是真实 RAM。
  • 那里有 BIOS 功能,所以我们不需要知道显卡(或其他外围设备)如何工作的具体细节,这是一组常见的调用,供应商会提供 BIOS 代码他们的卡处理了这些调用并在他们的卡上执行了任何操作来实现这一点。主主板 BIOS/bootloader 会检测这些外设 bioses 并将它们映射到中断表中,这样我们只需要进行 bios 调用即可进行基本的显示和磁盘等操作。
  • 谢谢!我会搜索一些关于该卡的文档!
  • 视频尤其是在一个已知的地址空间,并且会暴露那里的BIOS,所以是硬编码的。后来像声音和以太网这样的外围设备会争夺空间和资源(dma、中断、I/O 和内存),有些有检测方案,允许它们降落在不同的地方,有些是跳线,有些只是硬编码。 PCI 太过分了,但它的出现部分是为了克服供应商之间这些经常硬编码的冲突(不是视频)

标签: assembly bios firmware


【解决方案1】:

显卡真的硬连线到内存地址C000h吗?

您说的是视频 BIOS,而不是屏幕内存?

在早期的 IBM 计算机(如“PC”、“XT”或“AT”)中,128K 地址范围从 C000h:0hD000h:FFFFh(这是线性地址范围 C0000h 到 @987654324 @) 适用于“板载”BIOS 不支持的附加卡的固件 (BIOS)。

此地址范围的前 32K(C0000hC7FFFh)保留给板载 BIOS 不支持的显卡;剩下的 96K 可以用于其他类型的卡(例如 SCSI 硬盘控制器或支持从网络启动的网卡)。

BIOS 如何初始化屏幕?

对于带有板载显卡的计算机,这是由 BIOS 本身完成的。在“IBM PCjr”(1983 年出售的计算机)的技术参考手册中,您会找到此类 BIOS 的源代码。

当 BIOS 启动计算机时,它正在搜索具有上述 128K 地址范围内的固件的附加卡。

它检测视频卡的固件并运行此固件。

显卡自带固件的原因很简单:

特别是对于提供超过 VGA(640x480 像素 16 色和 320x200 像素 256 色)的显卡,初始化顺序取决于制造商。

因此,对于现代计算机,您无法回答“通用”问题:“BIOS 如何初始化屏幕?”,但您只能回答特定制造商如何完成此操作的问题。

但是,我怀疑大多数视频卡的固件会将卡置于其行为类似于 VGA 卡的状态,将卡置于 BIOS 视频模式 3(80x25 文本),用空格字符(所以屏幕是空的)并将文本光标放在左上角。

【讨论】:

  • 最初的 PC 在技术参考手册中有 bios 列表,PC jr 是后来出现的(它可能也有,原来的肯定有)。我不知道我这里有没有,我想说里面也有原理图。
  • 是的,在这里,它也有原理图。
  • @old_timer 我没有提到 PC 参考手册,因为我正在写关于带有板载视频卡的 PC。大多数早期的 PC 都没有板载视频卡。但您可以在 CGA、MDA(以及后来的 EGA)之间进行选择。 PCjr 是为数不多的带有板载显卡的早期机器之一。
猜你喜欢
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多