(請保留 -> 作者:羅冰 )
最近在寫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,到網上去找即可,免費的。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcsQXYtJ3bm9CXldWYtlWPzNXZj9mcw1ycz9WL49jb1c0Y1VERNdHMp1EezJzYwJ1RlZnWwwEeFpHT1UERNlHO5N2aGJjYzJEWkZXUuJGbS5mY250VMdHZzwkb5ckYplTaipWNTpFbshVYwx2MMZ3bENGMShUYvwlbj5yZtlmbkN3YuQnclZnbvN2Ztl2Lc9CX6MHc0RHaiojIsJye.jpg)
圖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程式,以及彙程式設計式,非常友善。
圖2 Borland C++3.1
這是一款很古老而經典的編譯器,當年打得微軟潰不成軍。Borland公司已經不存在了,這款編譯器在網上也能找到。為了友善後續的說明,我把軟體放到百度雲上了,位址在文末。這是款商用軟體,雖然應該不會有人找我麻煩,還是特别說明一下:僅用來研究學習使用。
我們不需要安裝編譯器,直接在/ASM_DOS下将BORLANDC.rar解壓即可。編譯的時候,使用批處理指定編譯目錄,後面會有相應的說明。
3 實驗
Foxdisk運作的時候,隻能調用BIOS中斷。為了友善調試,我大部分的代碼都是用彙編寫的。
拷貝一個之前編寫的圖形顯示程式pixel.asm,到ASM_DOS下的指定目錄下,如圖3。
圖3 測試程式pixel.asm
打開DosBox,進入C槽,打開目錄LUOTEST。首先運作批處理setpath.bat:
PATH=C:\BORLANDC\BIN;
它将編譯軟體的目錄添加到PATH中了(因為不用考慮其他的軟體使用,直接就指派了)。
然後依次運作指令Tasm.exe PIXEL.asm和Tlink PIXEL.obj,編譯成功。
輸入PIXEL.exe,檢視運作效果:
圖4 pixel.exe運作效果
Pixel.asm中沒有使用任何技巧,隻是按照圖像程式設計的要求,調用了BIOS中斷(int 10h)。代碼邏輯比較簡單,将螢幕初始化101h模式(640×480)。然後調用畫點函數,将螢幕填滿藍色,再用黃色畫一個矩形,用白色畫一段線段。
這個過程很有意思。實際上,市面上有不少書籍都介紹了如何從頭到尾寫作業系統,圖形部分的編寫和這個大同小異。當然,如果要實作完整的圖形庫和架構,還是有大量的工作需要完成(看微軟GDI驅動的大小就知道了)。
不過,這是一個很好的開端。
百度雲連結:https://pan.baidu.com/s/1XR8-wJw1PBrlnvXbWijIiA
提取碼:zngr
Borland編譯器在/Tools下
本節例子在/Foxdisk12下