最近,我一直在尝试使用像Arch Linux这样的东西,并引发了一些问题。我经常看到图形在操作系统的非常低级部分中使用(例如GRUB或几乎所有启动菜单)。其中一些甚至具有图像。我还可以在诸如“pacman”命令之类的东西中看到图形操作,其中加载栏将更改而不干扰其上方的文本。另一个例子是像cfdisk这样的程序。我只想知道这些类型的功能是如何编程的?
编辑:我的意思是使用哪些系统调用使其成为可能?
引用:启动菜单
编辑:我的意思是使用哪些系统调用使其成为可能?
引用:启动菜单
当我学习编程时,这种事在MSDOS中非常普遍。 通过简单的汇编指令可以访问一组基本的硬件屏幕模式。
对于支持ASCII字符集的人,可以修改内存中字符的实际字形图像。 每个可用字符都是一个简单的位图,可以在内存中修改为任何外观。
例如,在彩色屏幕模式(例如CGA,EGA)中,文本可以通过特定的内存区域呈现,其中一个字节指定字符,另一个字节指定颜色(对于EGA,前景和背景各为4位)。 只需将值写入其中即可在屏幕上显示。 如果您已修改了字符表,则会显示修改后的字符。
我简直不敢相信我现在才想起来,但内存地址A000
显然深深地印在我的脑海中。 您可以在https://en.wikipedia.org/wiki/Enhanced_Graphics_Adapter上阅读更多信息。
我从备受推崇的Fractint(原始版本运行在DOS上)中学到了如何初始化和操作低级直接内存访问图形模式。所有好东西都在一个名为video.asm的文件中。除了EGA/VESA等,它还处理了当时可用的一些图形卡,比如Hercules。
他们选择了X服务器将其移植到Linux作为XFractint。应用程序的大部分原始外观、感觉和精神仍然保持不变。这可能是一个很好且安全的开始方式。
对于更低级别的尝试,可以尝试SVGAlib(我没有尝试过)。 大多数Linux低级图形内核似乎都使用VESA BIOS扩展。