繁体   English   中英

切换到更高的分辨率

[英]Switching to a higher resolution

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

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

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

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

例如,VESA-Xserver几乎可以与任何图形适配器配合使用(但特定型号的显卡更快)

另见: https//en.wikipedia.org/wiki/VESA_BIOS_Extensions

你可以在装配中做高分辨率VESA图形,它应该足够快(在你开始学习的开始阶段,特别是不做非常花哨的3d东西)。

首先,确保使用良好的模拟器/虚拟机进行测试。 我正在使用QEMU,它只能以640x480x24bpp的速度减速。 我切换到VirtualBox,虽然启动速度很慢,但我从未回头。

至于编程部分,我鼓励您查看一个名为Pure64的项目。 你可以在GitHub上找到它。 转到src / init / isa.asm并查看文件的结尾 - 有一些代码可以进行VESA初始化。 我实际上使用Pure64设置一个干净的64位环境,我正在做VESA图形,所以我可以说它工作正常。

VESA init由两部分组成 - 获取模式信息和设置视频模式。 获得模式信息后,您将获得一个连续内存区域的视频基指针,您可以在不切换库和执行复杂操作的情况下编写像素。 至少在64位模式下。

我遇到的唯一问题是我无法使32bpp模式工作。 我可以做24bpp,这是RRGGBB - 每像素3个字节(完全像HTML / CSS颜色代码)。 与在二进制计算机上包含3个字节的所有内容一样,这使得某些事情变得更复杂(至少对于初学者而言)。 每个像素获得4个字节的工作仍然无法实现。 也许这是VirtualBox或其他东西的限制。

这意味着对于基本的高分辨率图形,不需要做很多特定于硬件的事情。 如果你是一个温和的硬件,你应该做得很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM