如何编程低级图形界面?

时间:2016-02-14 23:53:31

标签: c linux graphics low-level grub

最近,我一直在试验像Linux这样的东西,这引发了一些问题。我经常看到在操作系统的非常低级别的部分中使用图形(诸如GRUB或几乎所有启动菜单之类的东西)。其中一些甚至是特征图像。我还可以在“pacman”命令之类的东西中看到图形操作,其中加载条将改变而不会干扰其上方的文本。另一个例子是像cfdisk这样的程序。我想知道这些类型的功能是如何编程的?

编辑:我的意思是用什么系统调用来实现这个目标?

Boot menu

2 个答案:

答案 0 :(得分:4)

当我学习编码时,这种事在MSDOS中很常见。有一组基本的硬件屏幕模式可以通过简单的汇编指令访问。

对于那些支持ASCII字符集的人,可以修改内存中字符的实际字形图像。每个可用字符都是一个简单的位图,可以在内存中修改,以便随意查看。

例如,在彩色屏幕模式(例如CGA,EGA)中,文本可以通过特定的存储区域呈现,其中一个字节指定字符,另一个字节指定颜色(前景和背景各为4位) EGA)。你只需在那里写入值,它们就会显示在屏幕上。如果您修改了字符表,则会显示修改后的字符。

我简直不敢相信我记得这一点,但记忆地址A000显然已经烧毁了我的大脑。您可以在https://en.wikipedia.org/wiki/Enhanced_Graphics_Adapter

了解更多信息

当然,有更高的屏幕模式支持编写实际像素,这就是我们用来编写游戏的方式。众所周知,320x200 VGA模式非常容易和快速地获得“逼真”和流畅的动画图形,令人印象深刻的256色,而不用担心位平面或任何东西。

这基本上是在低级别发生的事情。这些被遗忘的图形模式的BIOS支持已经存在了很长时间,但现代硬件已经让我们远离这些模式,现在我们倾向于通过驱动程序或操作系统抽象直接与图形卡进行通信。

答案 1 :(得分:0)

我学到了很多关于如何从古老的Fractint(原始在DOS上运行)初始化和操作低级直接内存访问图形模式的知识。所有的好东西都在一个名为video.asm的文件中。除了EGA / VESA等。此外,它还处理了一些当时可用的显卡,如Hercules。

他们选择X服务器将其作为XFractint移植到Linux。应用程序的大部分原始外观和精神保持不变。这可能是一种很好的安全方式。

对于较低级别可能会尝试SVGAlib(我还没试过这个)。 来自内核的大多数Linux低级图形似乎都在使用VESA BIOS Extensions