fat32-bootsector
bootsector ที่เรียบง่ายและกะทัดรัดมากซึ่งช่วยให้คุณโหลด bootloader หรือเคอร์เนลของคุณจากไฟล์
สร้างโดยใช้สคริปต์ที่แนบมา
ข้อสังเกต: อย่าอ่านสิ่งนี้อ่านซอร์สโค้ด มีความคิดเห็นดังนั้นข้อมูลทั้งหมดอยู่ที่นั่น
bootsector นี้ทำอะไรจริง?
นี่คือทีละขั้นตอน:
- ตรวจสอบว่า BIOS รองรับการทำงานของดิสก์เพิ่มเติม
- มองหาพาร์ติชัน FAT32 ที่ใช้งานอยู่ครั้งแรก
- ค้นหาไฟล์ของคุณในพาร์ติชันนั้น (ในไดเรกทอรีรูท)
- โหลดลงในหน่วยความจำ
- ดำเนินการ
สถานะของหน่วยความจำหลังจาก bootsector ของฉัน
รหัสของคุณ:
รหัสของคุณโหลดที่ 0x1000: 0x0000 (เซ็กเมนต์: ออฟเซ็ต) หรือ 0x10000 (เชิงเส้น)
ลงทะเบียน
การลงทะเบียนส่วนใหญ่ ไม่ได้ "เป็นศูนย์" และขยะได้รับมอบหมายให้พวกเขา
เฉพาะที่มีค่าที่ถูกต้อง:
- CS: IP - 0x1000: 0x0000 (กำหนดให้กับไฟล์ที่โหลด)
- DS - 0x1000 (ยังกำหนดให้กับไฟล์ที่โหลด)
- SS: SP - 0x0000: 0xffff (สแต็คในส่วนแรก)
- DL - หมายเลขไดรฟ์ (สำหรับการขัดจังหวะ BIOS)
ข้อมูลที่เป็นประโยชน์เหลืออยู่ในหน่วยความจำ
หลังจากกระโดดไปยังไฟล์ที่โหลดแล้วยังมีข้อมูลที่เป็นประโยชน์อยู่ในหน่วยความจำ:
(มีการระบุออฟเซ็ตทั้งหมดในซอร์สโค้ด)
- 0x7c00 - ดิสก์ปัจจุบัน (หมายเลขอุปกรณ์) ที่อยู่ไขมันที่อยู่ภาคส่วนข้อมูลแรกและข้อมูลที่คล้ายกัน
- 0x7e00 - ภาค BPB ของพาร์ติชันนั้น
ข้อ จำกัด
- ทั้งหมดอยู่ในโหมดจริงขนาดสูงสุดของไฟล์ไม่ควรใหญ่กว่าสองสามร้อยกิโล
- ไฟล์จะต้องอยู่ในไดเรกทอรีรากของพาร์ติชันที่เลือก
- ชื่อไฟล์ - bootsector ค้นหาไฟล์ที่มี 8.3 ชื่อไฟล์
ติดตั้งวิธีการ
ในการติดตั้งการใช้งาน:
- บนระบบที่เข้ากันได้กับ Ubuntu ใช้สคริปต์ STALD.SH
- บน windows ใช้ fat32-bootsector.exe
สังเกตว่า เวอร์ชัน Windows ไม่ได้ใช้ตัวอักษรสำหรับพาร์ติชัน แต่พาร์ติชัน Phisycal (ไม่ใช่ตรรกะ) ดังนั้น: อาจเป็นเรื่องยากที่จะจับคู่พาร์ติชันตัวอักษร แต่ในทางกลับกันมันรองรับ ไดรฟ์ USB หลายพาร์ติชัน
ข้อผิดพลาด?
เมื่อเกิดข้อผิดพลาด Bootsector จะดึงรหัสข้อผิดพลาดบนหน้าจอ
นี่คือรหัสและคำอธิบายของข้อผิดพลาด:
0 - ฟังก์ชั่น BIOS แบบขยายไม่พร้อมใช้งาน
1 - ไม่พบพาร์ติชันที่สามารถบูตได้
2 - พาร์ติชันที่สามารถบูตได้ไม่ใช่ FAT32
3 - ไม่พบไฟล์
4 - ไม่สามารถโหลดภาค (ข้อผิดพลาดอินเตอร์รัปต์ BIOS)