Станислав писал(а):
Секторов на флешке 2012160 нужно примерно 10мб
Формат флешки:
1) MBR
2) здесь оставим резерв в 31 сектор
3) твой раздел
4) раздел FAT16 или FAT32
Пункты 3 и 4 можно поменять местами, но при просмотре всего диска будет проще найти твой раздел вручную, когда он находится близко к началу диска.
Формат MBR:
440 байт - код MBR-загрузчика - можно взять любой, но лучше один из моих (почему, см. далее).
4 байта - сигнатура диска - ноль (винда сама изменит это поле, если надо).
2 байта - ноль
16 байт - описатель твоего раздела (hex) - 80 01 01 00 . 1E 00 20 05 . 20 00 00 00 . 00 50 00 00
16 байт - описатель раздела FAT16/32 (hex) - 00 01 01 05 . ?? 1F 60 EB . 20 50 00 00 . E0 63 1E 00
32 байта - нули
2 байта - загрузочная сигнатура 0AA55h
Порядок записи:
1) прописываешь MBR, обнулив описатель твоего раздела
2) извлекаешь/вставляешь флешку
3) форматируешь флешку (винда сама должна прописать байт ??, изначально можешь записать туда 0Ch или 0Eh)
4) прописываешь описатель твоего раздела
5) извлекаешь/вставляешь флешку
В общем все. 10 мег, начиная с 32 сектора, твои. В сектор 0 (первый по счету) раздела (физический сектор 32) записываешь свой загрузчик и загрузочную сигнатуру, в следующие секторы - код/данные для загрузки. Если будешь использовать мой MBR-загрузчик (
Alter 2 доступен для скачивания), то он будет гарантированно передавать твоему первичному загрузчику номер диска в регистре dl и описатель твоего раздела в памяти по указателю в ds:si, из которого можно получить положение твоего раздела на диске для динамического вычисления номеров секторов внутри твоего раздела. Например:
Код:
mov ax,[si+8]
mov bx,[si+10]
add ax,1
adc bx,0
; теперь в ax:bx содержится физический номер сектора 1 (второй по счету) твоего раздела
Программно определить присутствие моего MBR-загрузчика можно, проверив байт по физическому адресу 7DFFh. Если он равен 88h, то мой MBR-загрузчик присутствует.
Если не хочешь заморачиваться со специальным разделом, то не вноси его описатель в MBR. В этом случае ты должен прописать свой загрузчик в первых 440 байтах MBR (не повредив описатель раздела FAT), при этом тебе будут доступны для работы 31 сектор после MBR плюс 10 мег за ними.