花了不少時間完成這篇, 最後才發現這是失敗的版本, 心中的氣餒可想而知, 所有的興奮之情一掃而空。緊急關掉這篇, 怕誤人子弟, dosbox 實在太不可靠, 不能拿來測試, 很多錯誤的程式寫法在 dosbox 上還是可以正常執行。這篇僅留做失敗的教訓, 作為一個紀錄。
請注意本篇的內容是錯誤的。
請改為參考成功的版本:
http://descent-incoming.blogspot.tw/2012/06/vga-biso.html
這次的實驗:
在保護模式下, 不使用 vga biso 呼叫, 將顯示卡設定為繪圖模式。不過在切回真實模式後, 還是呼叫 vga bios 函式呼叫切回文字模式。
參考了一些早期的 VGA/SVGA 書籍, 都是使用 vga bios int 0x10 來切換文字/圖形模式, 但在進入保護模式後, int 0x10 是無法使用的, 我也不願意為了這原因, 在切回真實模式只為了使用 vga bios int 0x10, 在
http://bos.asmhackers.net/docs/vga_without_bios/docs/mode%2013h%20without%20using%20bios.htm 找到一段 code, 稍微改寫一下, 在 gcc 環境下可以編譯, 不過由於沒有 spec, 我無法了解這是對 VGA 做了什麼樣的設定。
這次的程式延續上次, 需要使用 C 語言, 不用辛苦和組合語言奮鬥, 程式一開始進入保護模式, 切換程 320X200X256 色 mode, 在將整個螢幕填成白色, 我有另外一個顏色的版本。切回真實模式後, 還是呼叫 vga bios 函式呼叫切回文字模式。我知道這不完美, 應該使用自己的程式切回文字模式, 不過目前來說這樣就可以讓我繼續下去, 靠著自己切回文字模式就晚點吧!
30 天打造 OS, 這本書上是先使用 int 0x10 切到繪圖模式, 在進入保護模式, 有點受制於 vga bios call, 能用自己的 code 來切換, 真是令人開心。這種解析度好像爛了些, 不過沒辦法, VGA 標準就是這樣, 將就著用。
↓ 程式執行前
↓ 320X200X256 色, write_mem8(i, 15); 白色畫面
↓ 320X200X256 色, write_mem8(i, 5); 紫色畫面
↓ 回到文字模式
ref:
沒有留言:
張貼留言
使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。
我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。