2012-02-02 64 views
1

我寫了一個我自己的簡單的bootloader。 I,第一,具有初始典型3行代碼BIOS參數塊和磁盤格式化

bits 16 
org 0x7c00 
jmp main 

隨後BIOS參數塊爲FAT 12和用於1.44MB軟盤,至多偏移字節0x003D。比方說,爲了簡單起見,主引導程序正在打印「Hello World」。

當我複製使用

PARTCOPY 0 200 -f0 0 

我的引導程序也讓我的磁盤丟失其格式,引發「磁盤沒有格式化」的消息在Windows上。

在另一方面,如果我複製使用

PARTCOPY 0 3 -f0 0 
PARTCOPY 3E 1C2 -f0 3E  ; Do not copy BIOS Parameter Block 

Windows不抱怨格式化我的引導程序。

有了這些不同的結果,我想知道BPB如何影響格式化和/或分區表。我提到了分區表,因爲我得到了一個建議,我需要在複製引導扇區後使用分區表來解決「磁盤未格式化」問題。

任何幫助或評論將不勝感激。

真誠,

回答

2

Windows對啓動扇區執行了一些檢查,並且在它認爲有效的啓動扇區中有點太挑剔。如果您保留FAT12格式化軟盤的前62(0x3E)字節,並且不損壞FAT,則Windows不會發出抱怨。它不關心在偏移量0x3E到0x1FD處的字節數。您也可以更改OEM namevolume label name條目。剩下的,只是保持原樣。您的代碼可能會使用BPB中的值從FAT讀取文件。

+0

感謝亞歷克斯明確的答案。它只是告訴我,我的代碼沒有「正確的」BPB。你知道我可以查找和學習的任何參考/鏈接嗎?搜索「FAT12 BPB」並沒有給我太多... – ElectroJunkie 2012-02-03 07:12:42

+0

從格式化的軟盤讀取BPB字節。或者在線找到一個可啓動的1.44「DOS/Win9x軟盤鏡像,並從中提取BPB字節。 – 2012-02-03 07:17:58

+0

您可能想試試這個[document](http://msdn.microsoft.com/en-us/windows/hardware/gg463080 )來自微軟,這幾乎就是FAT,我知道它說的是FAT32,但它也包含FAT12和FAT16的細節。 – 2012-02-03 08:17:26

0

這聽起來像你可能會錯過了Master Boot Record,這應該被放置在設備的第一物理扇區和由BIOS將被執行,就應該控制轉移到你的引導裝載程序。儘管如果要將引導加載程序放在FAT分區中,也可以保持公平,但可能只需保留將通過格式化驅動器創建的MBR,並將代碼直接複製到活動FAT分區的位置,而不是直接啓動駕駛。

微軟在FAT設備here上也有很好的啓動過程說明,這可能會有所幫助。

+0

對於硬盤驅動器,BIOS加載主啓動記錄,這是HDD的第一個扇區。然後,MBR根據分區表加載引導扇區。 (感謝您的鏈接)鑑於這些信息,我正在編寫「Boot Loader」還是「Master Boot Record」?我很困惑...... – ElectroJunkie 2012-02-03 05:39:04

+0

軟盤上沒有MBR,只適用於硬盤。 – 2012-02-03 06:33:03

+0

謝謝亞歷克斯。然後,我的主要問題仍然有效,我猜:) – ElectroJunkie 2012-02-03 06:57:01