天天看點

Foxdisk01-緣起

“沒有任何一個題目是徹底完成了的。總還會有些是哪個可做;在經過充分的研究和洞察以後,我們可以将任何解題方法加以改進;而且無論如何,我們總可以深化我們對答案的了解。”

                                                                                                                                                   –《怎樣解題:數學思維的新方法》

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

用一段話來總結我自己的這個小項目,我以為上面的這段話很精準。從2006年1.00版開始,到2008年的冬天完成3.01版,直到現在,我也不覺得這個項目完成了。隻是因為各種原因,沒有動力再去更新它了,曾經寫在計劃中的4.0版,列出了許多我很有興趣的功能,不大可能再去實作了。

回到最初想寫這個産品的目的,主要有幾個:

1)   一個硬碟安裝多個作業系統,并且各作業系統看不到其他作業系統的分區;

2)   圖形界面選擇系統進入;

3)   提供磁盤壞道檢測;

4)   提供分區功能;

5)   未來可以配合硬體實作系統間的實體隔離,即軟體層面無法去定位其他作業系統的磁盤扇區;(随着Sata的速度越來越快,這個目标在商業産品上很難實作了)。

其實說來說去,我就是需要這麼一個多作業系統引導的軟體,幫助我管理因需要安裝的各種作業系統,互相之間互不幹擾,相當于一個界面版的spfdisk+grub。

Grub或者spfdisk之類的軟體已經實作了類似的功能,沒有必要再自己造輪子了。隻是這些軟體的界面我實在是看不下去,另外我也需要一個項目把我底層開發的所有知識串起來,實作一個小小作業系統,以備後用。

就這樣,我下定決心來進行這個工作了。

Foxdisk 1.0是完全用彙編來實作的,安裝在MBR之後的62個扇區之内,也就是說編譯後的代碼在在31K以内,實際為25.7K。代碼檔案加起來在174K(包含注釋),不算大。這款軟體隻支援兩個作業系統,而且隻支援Windows,操作極其簡單。也許因為如此,非常穩定,有幾個同僚用了很長時間。

Foxdisk2.0在上一版的基礎上,為了便于閱讀,大量采用了宏彙編的方式,導緻生成檔案很大,不得不裁剪一些想添加的功能。比如漢字顯示、磁盤管理等。這款軟體界面比1.0要漂亮些,我用彙編實作了透視漸變,不過代碼量原因,實用性不大。在實作過程中,開發了幾個工具程式,包括對bmp、pcx的結構分析和資料提取,漢字字模的自動提取,還是很有用的。我現在做一些嵌入式開發時,還會用到這些小工具。

Foxdisk3.0開發前,我分析了需求,終于還是決定跳出31K的限制,把軟體安裝到磁盤末端,這樣代碼量就不是問題了。另外,為了便于未來閱讀開發,決定采用C語言編寫,少數功能子產品用彙編實作。最終實作了目前的版本,代碼結構圖如下:

Foxdisk01-緣起

圖1 程式代碼結構

在後續的部落格中,我将會以上圖為線索,一點點介紹這款占據了我生命中4個月業餘時間的軟體。主要包括:如何安裝、啟動原理、中斷排程、硬碟子產品、分區管理、圖形子產品、漢字和圖檔、小工具、如何編譯和安裝、調試。

這是為Foxdisk3.01.02設計的啟動圖示,我很喜歡。

Foxdisk01-緣起

圖2 ifox.bmp:foxdisk的預設啟動界面

以前的截圖很難找到,是以拍了一張實際的運作圖,效果如下:

Foxdisk01-緣起

圖3 實際運作圖

很有意思吧?

繼續閱讀