在自己動手寫作業系統時,遇到了關於顯示幾個問題,經幾方搜尋和思索,將理解作大致記錄。
最初的疑問是,在bochs上直接執行程式時為什麼會有游標,而且還會閃爍?
了解之後才知道vga顯示有字元模式和圖形模式之分,我原以為vga就是簡單地讀寫每乙個畫素。
於是通過bios中斷切換到了圖形模式,此時對寫入視訊記憶體的資料與最終顯示結果的關係有了疑問。
另外對視訊記憶體的位址也有了疑問,主要是大視訊記憶體。之前對記憶體管理有一定的理解。
然後想不用bios,直接操作vga控制器。
顯示器是乙個裝置,顯示卡是乙個裝置,顯示卡控制顯示器進行顯示。
cpu是乙個裝置,cpu可以對顯示卡進行讀寫和配置。
cpu對顯示卡的配置與顯示器無關。
x86彙編能呼叫中斷進行顯示是因為bios裡有中斷處理程式,如果這個程式只是按vga介面編的,那這台電腦就不能使用其它顯示介面(如果自己寫,能夠被執行嗎?)。
cpu可以通過埠與顯**信,從而與顯示卡協調工作。
可以設定vga工作在字元模式還是圖形模式,這是cpu對顯示卡的設定。
vga程式設計
講了如何進行設定。
有一段固定實體地址分配給了視訊記憶體,顯示卡(任何裝置)設計需要符合一定的規範,才能與其它裝置協同工作。
舊的程式在較新的裝置上能夠執行,這是相容。
各種介面裝置保證實體地址能夠訪問到不同的裝置,如記憶體,視訊記憶體,等等。
層次抽象利於運用卻不利於理解。
bios就是一套程式。
對視訊記憶體的直接操作
講了顯示卡的埠。
12h模式,02寫模式下,一次會寫8個畫素,可以通過位遮蔽暫存器來遮蔽不想寫的畫素,每個畫素都寫入一樣的值,寫入的位元組只有低4位會生效,分別寫到4個顏色位平面上。
如果不用bios設定vga到12h模式,可以手動設定vga控制器中暫存器的值,只是需要設定的暫存器相當多,訪問各類暫存器的方法也不相同。
如需要設定為12h模式:
unsigned char g_640x480x16 =;
沒有試過。
暫時還是只會用到字元模式,圖形模式只是作為了解。
參考資料:
手動設定暫存器需要的暫存器預設值
vga中的暫存器資訊以及訪問方式
自己動手寫作業系統
virtual pc 5.2 下 dos7.1 中 執行.com檔案相關問題 2009 09 09 12 55 剛才在進入dos後,編譯.asm檔案獲得.com檔案,但系統會出現 emm386 unrecoverable privileged operation error n9.press ent...
自己動手寫作業系統
今天看了前兩章,現將重點記錄如下 作業系統的啟動,關鍵點時同bios的介面 這裡有兩個位址很重要,a,0x7c00 510 0x7dfe登記標誌位 兩個byte 0xaa55 b,0x7c00,作業系統載入的目標位址 系統啟動過程 1 bios清零cpu現場 傳送reset訊號 2 cpu從0xf ...
自己動手寫作業系統
2 自己動手寫作業系統 3自己動手寫作業系統 如何呼叫bios中斷 在一般的程式語言中,函式的呼叫是一件非常容易的事情。比如在c語言中,如果有乙個名為display的程式,它帶有兩個引數,其中引數 noofchar表示顯示的字元數,引數attr表示顯示字元的屬性。那麼要呼叫它,只需給出程式的名稱即可...