簡體   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