2014-03-13 30 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。這是我們可以訪問的最低層。 –