我正在嘗試創建自己的操作系統,我只是想知道是否有辦法告訴BIOS在我的屏幕上用C++設置VGA像素。如何在C++中設置像素?
回答
您可以打開給定的像素,但這需要特定於平臺的代碼,並且在操作系統或平臺更改時可能無法移植。
我的理解是您希望直接訪問屏幕緩衝區,而無需停止任何操作。這是要走的路。
共同研究
在你的平臺上,找出圖形控制器,品牌名稱和型號名稱,如果您使用的一個。在網絡上搜索圖形控制器芯片上的數據表。屏幕內存很可能位於芯片內部,並且不能由CPU直接訪問。
接下來,瞭解如何訪問圖形控制器所在的電路板。您可以通過I/O端口或內存地址直接訪問圖形控制器芯片;或者你可能不得不使用中斷系統。研究硬件。
Linux
下載Linux內核的源代碼發行版。找到圖形驅動程序。在圖形驅動程序中搜索代碼以查看圖形控制器如何被操縱。
對於Linux,您將不得不編寫自己的圖形驅動程序並重建內核。接下來,您需要編寫一個訪問您的驅動程序並打開像素的程序。研究「Linux驅動程序API」。有些書可用於編寫Linux驅動程序和他們使用的標準API。
Windows
Windows使用相同的驅動程序概念。您將不得不編寫自己的Windows驅動程序,並讓操作系統知道您想要使用它。您的驅動程序將與圖形控制器通信。有關於編寫Windows驅動程序的書籍。編寫驅動程序後,您需要編寫一個使用驅動程序的演示程序。
嵌入式系統
嵌入式系統的範圍從簡單到複雜,只要顯示器走。這個最簡單的嵌入式系統使用顯示器查看的內存。對該內存的任何寫入都立即反映在顯示屏上。
更復雜的嵌入式系統使用圖形控制器來控制顯示。您需要在圖形控制器上獲取數據表,瞭解如何設置,然後如何打開像素。
驅動程序作家
驅動程序並不是一件容易的事。大多數司機都是由專家組撰寫的,需要數月的時間才能製作出來隨着新功能的添加,圖形控制器芯片變得越來越複雜。驅動程序必須能夠支持新功能和較舊的型號。不是一個簡單的問題。
摘要
如果您確實想直接訪問像素,請繼續。它可能需要更多的研究和努力,使用一個現成的(OTS)庫。業內大多數人使用OTS庫或框架(如QT,wxWidgets和XWindows)。驅動程序僅出於性能考慮而被重寫或修改,或支持新的圖形硬件。駕駛員寫作不是一項簡單的任務,需要一個高質量的開發過程以及一個驗證策略。
祝你好運寫你的像素。我希望你的圖書館有比現有的許多圖形庫更好的東西。
C作爲一種語言不提供任何內置的圖形功能。如果你想要圖形,你必須使用一些操作系統特定的庫。
除此之外,現代操作系統通常不允許任何舊程序在內存中徘徊,但它想要的。相反,他們使用稱爲驅動程序的中間體,以及圖形庫和API(如OpenGL)。
如果你真的想自己做一個MS-DOS的副本,並挖掘一些舊的VGA規格,並從那裏開始。
我想只設置一個像素 – bashcommando
我可以使用內聯彙編設置像素嗎? ? – bashcommando
@ user3140258:不,圖形卡控制屏幕,操作系統控制圖形卡。您唯一的選擇是通過庫調用與操作系統/圖形卡通話。比如... OpenGL。這是我們可以訪問的最低層。 –
- 1. Android:如何在設備像素中設置WebView尺寸?
- 2. 如何設置JTextField的像素大小
- 3. 如何設置像素座標?
- 4. 如何在目標c中設置圖像位置programaticall?
- 5. HLSL在像素着色器中設置像素位置以控制像素在紋理中的最終位置
- 6. 在Android Rect中設置像素顏色
- 7. 如何設置QImage的像素顏色爲RGB888圖像Qt中
- 8. 如何在具有特定RGB的形狀中設置像素?
- 9. 如何在libavcodec中設置解碼像素格式?
- 10. 如何在XNA中獲取和設置像素數據?
- 11. 如何根據黑莓手機中的設備設置像素?
- 12. 如何設置像素高度然後自動設置
- 13. 如何在C++ win32 API中設置對話框中的圖像?
- 14. Xamarin在c中設置元素重量#
- 15. C++在Struct中設置元素Array = NULL
- 16. 如何訪問在C++中設置的對的元素
- 17. 如何設置特定值到Java中的任何像素?
- 18. 如何在c#中動態設置按鈕圖像的大小?
- 19. 如何在矩形中設置圖像?
- 20. 如何在asp.net中設置bg圖像
- 21. 如何在CheckBoxPreference中設置圖像
- 22. 如何在wxStatusBar中設置圖像?
- 23. 如何在LibSlideMenu中設置圖像?
- 24. 如何在ImageView中設置圖像?
- 25. 如何在Android ImageView中設置圖像
- 26. 如何在Android中設置圖像
- 27. 如何設置在C + +
- 28. 在openCV中設置某個圖像中的像素的RGB值
- 29. EMGUCV最快設置像素
- 30. UIImage像素設置RGB值
您無法像在20年前的MSDOS下那樣直接在Linux下訪問屏幕內存。 –
設置像素...在哪裏?如果不使用「任何一個」,這個問題甚至都沒有意義。 –
我可以在內聯程序集中做到這一點嗎? – bashcommando