2014-03-13 29 views
-7

我正在尝试创建自己的操作系统,我只是想知道是否有办法告诉BIOS在我的屏幕上用C++设置VGA像素。如何在C++中设置像素?

+0

您无法像在20年前的MSDOS下那样直接在Linux下访问屏幕内存。 –

+2

设置像素...在哪里?如果不使用“任何一个”,这个问题甚至都没有意义。 –

+0

我可以在内联程序集中做到这一点吗? – bashcommando

回答

1

您可以打开给定的像素,但这需要特定于平台的代码,并且在操作系统或平台更改时可能无法移植。

我的理解是您希望直接访问屏幕缓冲区,而无需停止任何操作。这是要走的路。

共同研究
在你的平台上,找出图形控制器,品牌名称和型号名称,如果您使用的一个。在网络上搜索图形控制器芯片上的数据表。屏幕内存很可能位于芯片内部,并且不能由CPU直接访问。

接下来,了解如何访问图形控制器所在的电路板。您可以通过I/O端口或内存地址直接访问图形控制器芯片;或者你可能不得不使用中断系统。研究硬件。

Linux
下载Linux内核的源代码发行版。找到图形驱动程序。在图形驱动程序中搜索代码以查看图形控制器如何被操纵。

对于Linux,您将不得不编写自己的图形驱动程序并重建内核。接下来,您需要编写一个访问您的驱动程序并打开像素的程序。研究“Linux驱动程序API”。有些书可用于编写Linux驱动程序和他们使用的标准API。

Windows
Windows使用相同的驱动程序概念。您将不得不编写自己的Windows驱动程序,并让操作系统知道您想要使用它。您的驱动程序将与图形控制器通信。有关于编写Windows驱动程序的书籍。编写驱动程序后,您需要编写一个使用驱动程序的演示程序。

嵌入式系统
嵌入式系统的范围从简单到复杂,只要显示器走。这个最简单的嵌入式系统使用显示器查看的内存。对该内存的任何写入都立即反映在显示屏上。

更复杂的嵌入式系统使用图形控制器来控制显示。您需要在图形控制器上获取数据表,了解如何设置,然后如何打开像素。

驱动程序作家
驱动程序并不是一件容易的事。大多数司机都是由专家组撰写的,需要数月的时间才能制作出来随着新功能的添加,图形控制器芯片变得越来越复杂。驱动程序必须能够支持新功能和较旧的型号。不是一个简单的问题。

摘要
如果您确实想直接访问像素,请继续。它可能需要更多的研究和努力,使用一个现成的(OTS)库。业内大多数人使用OTS库或框架(如QT,wxWidgets和XWindows)。驱动程序仅出于性能考虑而被重写或修改,或支持新的图形硬件。驾驶员写作不是一项简单的任务,需要一个高质量的开发过程以及一个验证策略。

祝你好运写你的像素。我希望你的图书馆有比现有的许多图形库更好的东西。

3

C作为一种语言不提供任何内置的图形功能。如果你想要图形,你必须使用一些操作系统特定的库。

除此之外,现代操作系统通常不允许任何旧程序在内存中徘徊,但它想要的。相反,他们使用称为驱动程序的中间体,以及图形库和API(如OpenGL)。

如果你真的想自己做一个MS-DOS的副本,并挖掘一些旧的VGA规格,并从那里开始。

+0

我想只设置一个像素 – bashcommando

+0

我可以使用内联汇编设置像素吗? ? – bashcommando

+1

@ user3140258:不,图形卡控制屏幕,操作系统控制图形卡。您唯一的选择是通过库调用与操作系统/图形卡通话。比如... OpenGL。这是我们可以访问的最低层。 –