天天看點

Foxdisk12 – 圖形顯示1

(請保留 -> 作者:羅冰 )

最近在寫UEFI部落格的時候,遇到些阻礙。我想移植一款開源的GUI到UEFI下,目前還沒有找到。不過,部落格開天窗這麼久,總是不像話,是以回來繼續寫Foxdisk的部落格了。

Foxdisk的部落格更新較慢,主要是覺得這些都是Legacy BIOS下的東西,可能想了解的人不多,我也是随性而寫,并不制定計劃。

使用Foxdisk3的代碼,很難示範如何進行圖形程式設計。是以,我還是使用平常調試用的程式架構來說明。所有的代碼,都是在DOS下實驗通過,然後再移植到Foxdisk3的代碼中去的。

特别說明,Foxdisk3隻針對Legacy BIOS,所有通路硬碟、圖形顯示、鍵盤通路以及時鐘中斷的建構,都是在Legacy BIOS的架構下進行的。如想了解UEFI BIOS下如何編寫類似代碼,請移步我的另一部落格-《UFEI開發探索系列》

1 編譯和運作環境

我以前都是在虛拟機下調試,使用的是VirtualPC2.5以及Bochs,偶爾也用過Virtual BOX和Vmware建構。每種環境都各有優缺點,比如Bochs的調試環境非常完備,不過顯示的時候顔色有時候會很奇怪。

如果隻是示範圖形程式設計的話,我覺得DosBox比較好:啟動快、DOS環境模拟得很好。我使用的是DosBox v0.74-2,到網上去找即可,免費的。

Foxdisk12 – 圖形顯示1

圖1 DosBOX

為了通路硬碟上的檔案,需要在DosBox下挂載一個分區。打開配置檔案dosbox-0.74-2 Options,在最後一行添加:mount C D:\_develop\ASM_DOS,也即将硬碟上的檔案夾ASM_DOS挂載為DosBox下的C槽。

2 編譯軟體

我使用的是Borland C++3.1。它可以編譯C++和C程式,以及彙程式設計式,非常友善。

Foxdisk12 – 圖形顯示1

圖2 Borland C++3.1

這是一款很古老而經典的編譯器,當年打得微軟潰不成軍。Borland公司已經不存在了,這款編譯器在網上也能找到。為了友善後續的說明,我把軟體放到百度雲上了,位址在文末。這是款商用軟體,雖然應該不會有人找我麻煩,還是特别說明一下:僅用來研究學習使用。

我們不需要安裝編譯器,直接在/ASM_DOS下将BORLANDC.rar解壓即可。編譯的時候,使用批處理指定編譯目錄,後面會有相應的說明。

3 實驗

Foxdisk運作的時候,隻能調用BIOS中斷。為了友善調試,我大部分的代碼都是用彙編寫的。

拷貝一個之前編寫的圖形顯示程式pixel.asm,到ASM_DOS下的指定目錄下,如圖3。

Foxdisk12 – 圖形顯示1

圖3 測試程式pixel.asm

打開DosBox,進入C槽,打開目錄LUOTEST。首先運作批處理setpath.bat:

PATH=C:\BORLANDC\BIN;

它将編譯軟體的目錄添加到PATH中了(因為不用考慮其他的軟體使用,直接就指派了)。

然後依次運作指令Tasm.exe PIXEL.asm和Tlink PIXEL.obj,編譯成功。

輸入PIXEL.exe,檢視運作效果:

Foxdisk12 – 圖形顯示1

圖4 pixel.exe運作效果

Pixel.asm中沒有使用任何技巧,隻是按照圖像程式設計的要求,調用了BIOS中斷(int 10h)。代碼邏輯比較簡單,将螢幕初始化101h模式(640×480)。然後調用畫點函數,将螢幕填滿藍色,再用黃色畫一個矩形,用白色畫一段線段。

這個過程很有意思。實際上,市面上有不少書籍都介紹了如何從頭到尾寫作業系統,圖形部分的編寫和這個大同小異。當然,如果要實作完整的圖形庫和架構,還是有大量的工作需要完成(看微軟GDI驅動的大小就知道了)。

不過,這是一個很好的開端。

百度雲連結:https://pan.baidu.com/s/1XR8-wJw1PBrlnvXbWijIiA

提取碼:zngr

Borland編譯器在/Tools下

本節例子在/Foxdisk12下

繼續閱讀