8

我正在尝试编写一个将成为 BIOS 选项的程序(在 POST 之后)。我希望应用程序有一个漂亮的 GUI,而不是基于文本的(这有多种原因,本地化就是其中之一)。

我的问题是,我们受到可以闪存到 BIOS 的应用程序大小的限制。

是否可以使用 MASM32 “链接”到硬盘上的 dll,以便我们可以使用 Windows API 开发 GUI?

或者是否有可供我们使用的 API 来创建可以链接到最终可执行文件的 GUI?(最终程序可执行文件的大小限制为 60K)

您可以提供的任何帮助将不胜感激,在此先感谢。

4

5 回答 5

9

有可能的。你所要做的就是:

  • 将处理器设置为保护模式并按预期映射内存(平面模型)
  • 开发文件系统驱动程序并加载它
  • 支持所有可能的视频卡、鼠标、显示器、键盘等,包括潜在的旧硬件
  • 设置执行环境,以便存在所请求 DLL 的所有外部引用,包括(对于 Windows)KERNEL32、GDI 等。

这有很多,这并不容易。然而,一个接近的例子是MenuetOS,一个令人印象深刻的紧凑环境。但它完全源于对如何实现 GUI 环境的彻底重新思考。


我编写了模拟 GUI 界面的 BIOS 代码。视频卡保持在文本模式,字体看起来更漂亮,文本单元格分隔符被关闭,并且鼠标被识别。通过简单的动画,整个东西确实适合 60 KiB 左右。

于 2010-02-16T09:54:42.260 回答
5

不,这是不可能的。Windows 应用程序需要在 Windows 操作系统之上运行,因此 BIOS 必须已启动操作系统并完成运行,然后才能使用 Windows GUI(或控制台应用程序)。即使要访问磁盘上的 DLL 文件,您也需要一个文件系统,该文件系统在操作系统启动之前将不可用。

但是,在 60K 中,您应该能够适应相当合理的基于字符的 GUI。我会看看一些 linux 引导加载程序是如何做到这一点的。

于 2010-02-16T09:45:15.043 回答
0

没有支持这一点的 BIOS 实现。但理论上这是可能的,但请记住,首先你应该开发整个操作系统 :)

于 2010-02-16T09:48:05.417 回答
0

您可能有兴趣查看XOSL的源代码- 一个具有漂亮窗口 GUI的旧引导管理器。

于 2010-02-16T10:00:51.690 回答
0

我不确定该请求是否真的可行。(记住问题的上下文)

为此,您必须初始化整个 Microsoft Windows 环境才能使用 API 函数来绘制 GUI。

出于好奇,你在这个 BIOS 程序中做什么?

于 2010-02-25T06:02:45.533 回答