0

我想开发一个支持基本原语(如 putpixel、drawline、fillrect 和 bitblt)的 VGA 图形驱动程序(适用于 Linux(Ubuntu))。我想在保护模式下进行。我已经用谷歌搜索了一个星期,以下四个链接是我发现的最好的:

http://www.brackeen....vga/basics.html http://www.osdever.n...VGA/vga/vga.htm http://bos.asmhacker...sing%20bios.htm

不幸的是,第一个使用 BIOS 调用,所以我不能使用它。第二个链接有很多关于 VGA 寄存器的信息,但没有显示如何使它们一起工作的示例。第三个示例是在 13 小时模式下切换的示例,但我已经尝试过,但没有任何反应。各位大神能给个提示吗?提前致谢!

——文森佐

4

3 回答 3

1

如果您处于具有完全硬件访问权限的 32 位模式,我在http://bos.asmhackers.net/docs/vga_without_bios/snippet_5/vga.php的代码可以正常工作。不幸的是,我怀疑任何 Linux 变体都会让您直接访问 VGA 端口。我不确定您是如何开发此驱动程序的,但如果您确定您可以完全访问 VGA 端口,它应该可以工作。在我的示例代码中,我只在模式 0x03 和 0x13 之间切换,但在上面的文件夹中,您将能够找到大多数其他常见 VGA 模式的端口值,如果您愿意,还可以找到用于切换的 C 代码。

于 2012-02-05T16:11:49.037 回答
1

Christoffer 代码包含文件可在 BOS 操作系统源代码中找到,例如 text.inc 和 font8x16.inc

http://bos.asmhackers.net/downloads.php

于 2021-01-09T09:10:27.680 回答
0

这在很多年后才会出现,但我认为它仍然非常相关,如果有人在苦苦挣扎,我希望他们能发现它有用。

首先,完全可以只使用没有中断的寄存器来配置 VGA,尽管这可能很困难。可以在此处找到有关寄存器以及如何配置它们的有用资源,但除非您有大量时间来学习如何正确完成所有这些操作,否则请转到下一节。

如果您真的想学习如何做,我建议您阅读之前提供的文档。但是,其中一些已经完成!

Chris Giese 很好地演示了如何为 MS-DOS 系统执行此操作,虽然您可能认为这对您没有帮助,但它确实有帮助。

可以在此处找到 Chris 的代码。如果您想要其他有用的代码,请检查此处

现在,虽然它只适用于 MS-DOS,但实际上很容易转换到其他系统。该代码已经包含在许多不同模式下配置寄存器所需的所有数据。这就是为您节省大量阅读文档时间的部分。

该代码使用函数outportb, inportb,它们是 MS-DOS 函数,向/从端口写入/读取单个字节。因此,您必须重新定义这些函数来为您自己的系统读/写。重新定义的复杂性取决于您操作的系统。

此外,您还需要提供写入物理内存区域的方法,物理内存区域之间0xA0000-0xBFFFF对应于标准 VGA 内存区域。分配好之后,您还需要重新定义pokeb pokew peekb有助于在屏幕上输出内容(文本或像素数据)的功能。

最后一点:代码已经定义为可以使用许多不同的模式,包括文本模式和显示模式。

于 2020-11-11T15:19:23.660 回答