Next Previous Contents

4. TCP/IP Bootprom 相關工具程式

這一段將把我們為 TCP/IP BootPROM 所寫的程式作一些說明.

4.1 MENUEDIT

這是在 DOS 下執行的程式, 用來編輯給 TCP/IP Bootprom 的開機選單敘述檔. 它很簡單, 不過比原廠 所提供的開機選單敘述檔來的方便. 您可以按 F1 看到一些線上說明. 如果您想要加強他的功能 ( 比 如加入剪貼功能), 我會很樂意發表您的新版本.

原始程式為 Pascal 語法可在 取得.

4.2 BPHDBOOT

此 boot image 將載入硬碟的 master boot record 並執行它.

這個 boot image 對於那些需要重新開機才能完成所有設定的作業系統是相當方便的. 它也可以用在 當您要強迫清理硬碟的時候.

原始程式為 Assembler 語法可在 取得.

4.3 BPCLEAN

此 boot image 將重新寫入硬碟的 master boot record, 包含硬碟的分割表. 此外, 它可以快速格式化 DOS (FAT16) 資料分割區 (但無法使它可開機). 因為版權的關係, 我們必須重新規劃我們的 master boot record 與 FAT16 開機磁區, 除了一些遠端開機的訊息外, 它們與標準的分割區大致上是一樣的. 為了 使這個程式能工作, 您或許需要關掉 BIOS 對 master boot record 的保護 (因為每次開機都更新一遍).

這個程式下載與這個程式同樣主檔名的分割表敘述檔其副檔名為 .tab. 這個檔案可以包含空行, 註解 由記號開始但不得超過 512 個字元.

前四個不含空白及註解的幾行應該包含四個硬碟分割區的敘述. 第五個不含空白及註解的那一行應 包含下一個要載入的開機影像檔名稱.

分割區的敘述行由由空格或 tab 鍵來分割, 必須如下這三種格式:


type  boot?  1st-cyl  1st-head  1st-sect  last-cyl  last-head  last-sect
type  boot?  1st-cyl  1st-head  1st-sect  relative-size
type  boot?  relative-size

所有的數字都假設十進制, 除非字首有出現錢字號, 這樣才會被設定為十六進制.

當一個標籤附加在一個分割區敘述句之後, 相對應的分割區會被格式化成 DOS FAT16 的分割區,無 論原本是哪種格式. 分割區形式 4 跟 6 是相容的, 而且它在清理學生所使用的電腦時相當有用的. 這 種快速格式化只要花幾十秒.

預設值, bpclean 是編譯成支援 LBA (不超過 1024 個磁柱, 但可達 256 個磁頭). 某些奇怪的 BIOS 及某 些奇怪的作業系統較喜歡另一種 NORMAL 模式 (可達 4096 個磁柱, 但不能超過 64 個磁頭); 如果您 需要這種模式, 那麼把 LBA 的定義從原始程式裡改成註解然後重新編譯一遍.

Assembler 語法的原始程式碼在 .

4.4 MRZIP, MRUNZIP and BPUNZIP

MrZip 是一個在 DOS 下執行的程式, 用來建立壓縮的 DOS FAT 16分割區. 第一步, 先分析磁碟機的使 用狀況, 它然後只對有使用到的資料做壓縮, 接著用相當快的 (並不是最有效率的) 統計的壓縮演算 法則來壓縮資料. 已經支援 Windows 95 的長檔名, 但是副檔名為 .SWP 的檔案並不會儲存. 在各式不 同的檔案類型中,已經包含許多 magic numbers, 且已跟原始資料做過檢查的 處理. 當檔案容量的高位 序號數字增大時, 這個檢查碼儲存在檔案的容量的低位序號數字中 . 如果您在建立壓縮影像檔前把 您硬碟的序號歸零, 則您可以使用這個數字來 追蹤您影像檔的更新次數.

因為 MrZip 會使用直接磁碟存取, 建議您在執行前先把磁碟機快取區的資料回存. Windows 95 似乎是 對做一制性的管理直接磁碟存取�.

MrUnzip 是一個在 DOS 下執行的程式,用來解壓縮磁碟影像檔到硬碟機中, 使用直接磁碟存取. 不要 跟任何具有快取功能的程式一起使用, 因為光是這個程式就已經快把 DOS 給折磨死了... 不管怎樣, 如果您要恢復一個無法開機的機器那麼它會是將很有用的.

BpUnzip 是一個開機影像用來管理壓縮硬碟的影像檔. 粗略的來說, 它將由硬碟機的影像來開機並用 同樣的名稱, 副檔名為 .imz.

首先, 它會先讀取分割區表並檢查

接著它會讀取第一個未用到的磁柱的第一個磁區並檢查是否已經有一個影像表. 如果不是這樣, 或 者影像表內容有點矛盾, 或者兩個 shift 鍵都被按下時 (一種特別的 general-cleaning 信號), 這個影像表 將會被清除.

如果影像表還沒有包含所需的影像, 它會透過 TFTP 通訊協定載入並加在影像表內. 如果在前面所載 入的影像之後, 沒有足夠的空間來存放舊的影像資料時, 則舊的影像檔會被砍掉. 如果影像檔已經存 在影像表中, 最新的開機影像磁區 (包含檢查碼) 將會透過 TFTP 通訊協定載入並且與目前得影像檔 做比較. 如果它們不完全一致, 則壓縮影像會再重新載入一次.

這個影像接著會被解壓縮, 所有的 magic numbers 都再確認, 並檢查解壓縮後的資料. 如果解壓縮失 敗, 或者檢查結果與最新的開機磁區不吻合, 則影像檔將會重新載入並修正一次. 否則, 程式會把控 制權交給開機磁區, 作業系統就會啟動.

如果 bpunzip 透過副檔名 .P 載入 (如 win95.P), 則它會假設 TFTP 伺服器在 port 59 有加強型的介面 (在正 規的 port 69 之外所附加的). BpUnzip 將透過它以較大的封包格式載入影像檔, 通常是以 1408 bytes 來 取代每個封包 512 bytes (這種轉換使用大封包的技巧有點像TCP/IP Bootprom所使用的).

同理, 如果 bpunzip 是透過副檔名 .G 載入 (如 win95.GP), 則它將會先下載一個以同樣主檔名的 GIF 圖檔 (如 win95.gif) 並在開機時把它秀在營幕上. 這個程式只能在 800x600, 256 色的模式下工作 (即使 GIF 圖檔 可以更小或者使用更少的顏色). 如果您想要看看開機的流程記錄, 則這個標題可以按 ESC 鍵移除. 如果您的顯示卡不是 VESA 相容型, 則這個功能您不能使用. 另外,還要注意的是這個標記的執行完 成棒是使用調色盤的 最後十六色來顯示. 如果不想使用這個功能, 或者希望修正它. 順便一提, 如果 您不喜歡我們標記的執行完成棒, 您可以自由的改變它 (在 GIFDATA.ASM), 但請保留我們的名字 在可以看得到的地方.

目地分割區不需要完全跟原始的大小相同 ; 它只要有足夠的空間來存放分割區中,所有使用到的磁 柱. 如果目地分割區小於原始的分割區, 則 檔案對硬表 FAT 將會因此而萎縮 (但磁柱大小則不變). 如果目地分割區大小大於原始分割區, 則 檔案對應表 FAT 將會盡可能的擴大. 然而, 如果目地分割 區比原始分割區大更多, 可能 65518 個磁柱就不夠覆蓋所有的空間 (因為磁柱大小是無法改變的). 像 這種狀況, bpunzip 將會產生警告,告訴使用者有一些空間流失掉了.

預設值, bpunzip 是編譯成支援 LBA (不超過 1024 個磁柱, 但可達 256 個磁頭). 某些奇怪的 BIOS 及某 些奇怪的作業系統較喜歡另一種 NORMAL 模式 (可達 4096 個磁柱, 但不能超過 64 個磁頭); 如果您 需要這種模式, 那麼把 LBA 的定義從原始程式裡改成註解然後重新編譯一遍.

Assembler 語法的原始程式碼在 .

如果使用 Solaris 2.5 當 TFTP server. 在處理超過 16 Megabytes 時, 會有問題. 這是因為它無法處理超過 32768 packets per file 這是一個已知的臭蟲, 但直到目前 SUN 仍未提供修正. 我們建議您使用更有效 率的加強型 extended TFTP server (它也支援其他作業系統, 就在 TCP/IP Bootprom 工具磁片中).

4.5 NOBREAK

Nobreak.sys 相當小 (大概只有 350 bytes ) 的驅動程式, 它將加在您 config.sys 中的開始處. 它的目的是保 護開機程序, 直到使用者登入. DOS 為這提供一種設定 (名為 BREAK=OFF), 但它不夠暴力, 並且在 autoexec.bat 沒舍用. 我們的驅動程式工作原理是當中斷要求產生時修改鍵盤的掃描碼, 直接在 BIOS 層工作. 以這方法, 所有的程式在中斷未致能前都收不道中斷訊息.

這個驅動程式必須放在 config.sys 檔中(或者使用 Undocumented DOSdevlod 程式). 接著, 可以透過傳 送 YesNOBRK 這個虛擬裝置, 並且傳送 No 而禁能 (事實上, 只需要第一個字元, YN 才是最重要 的).

因為這個驅動程式依靠 BIOS, 所以它只能在 DOS 跟 Windows 3.1.下工作 Windows 95 則有它自己的 低階鍵盤處理機制.

Assembler 語法的原始程式碼在 .


Next Previous Contents