c - 切换到更高分辨率

标签 c nasm osdev

最近,我开始用NASM和C开发操作系统。我已经制作了引导加载程序、内核、文件系统等。目前我直接使用VGA文本模式写入地址0x000B8000 。所以,我决定切换到视频模式而不是文本模式。我选择了最大显示分辨率 320x200,但后来我意识到存在三个问题。首先,只有 256 种不同的颜色。其次,分辨率太小。第三,写入地址 0x000A0000 太慢了。我尝试做一些动画,但它非常滞后,有时在下一帧之前等待一秒以上。

我在互联网上搜索了一些关于如何切换到更高分辨率(例如 1920x1080)以及如何使用 256*256*256 颜色而不是仅仅 256 的解释. 我发现的一切都表明很难使用更高的分辨率,因为您必须为所有不同类型的显卡开发驱动程序,并且对于某些显卡没有文档,因此我们必须使用逆向工程。

我真的很想在我的操作系统中引入高分辨率图形。真的很难还是有什么简单的方法?关于如何解决这个问题有什么建议吗?

最佳答案

几乎每个图形适配器都支持 VESA 帧缓冲区语义,您几乎可以配置每个视频模式。缺点是您不能使用供应商特定的功能(加速图形等)

例如,VESA-Xserver 几乎适用于任何图形适配器(但特定型号的适配器要快得多)

另请参阅:https://en.wikipedia.org/wiki/VESA_BIOS_Extensions

关于c - 切换到更高分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34844039/

相关文章:

c - 带有条件的循环中的 scanf() 不起作用

c - 指向结构体中 char 的指针,段错误

c - 在C中查找重复项

assembly - 如果你打电话但从未回电会发生什么?

x86 - 选择合适的方法并学习汇编器以进行编译器编写

assembly - 跳跃障碍汇编代码

windows - 使用什么语言编写操作系统(Windows)?

c - Windows TCP 套接字默认启用 SO_KEEPALIVE 吗?

x86 - pte 修改是否与通常的内存访问一样通过相同的页表?

c - 扩展的 ASCII 字符以黄色而不是白色打印 - OSDev