MBR Trouble

Тема в разделе "WASM.BEGINNERS", создана пользователем sideX, 29 окт 2011.

  1. sideX

    sideX New Member

    Публикаций:
    0
    Регистрация:
    9 июн 2009
    Сообщения:
    57
    Доброго времени суток.

    Столкнулся со следующей проблемой - пытаюсь записать в загрузочный сектор следующий код:
    Код (Text):
    1. use16
    2. org 0x7C00
    3.  
    4. boot:
    5.   jmp near start
    6.  
    7.   bpbOEM          db  'SIMPLE'
    8.   bpbSectSize     dw  512
    9.   bpbClustSize    db  1
    10.   bpbReservedSec  dw  1
    11.   bpbFats         db  2
    12.   bpbRootSize     dw  224
    13.   bpbTotalSect    dw  2880
    14.   bpbMedia        db  0xF0
    15.   bpbFatSize      dw  9
    16.   bpbTrackSect    dw  18
    17.   bpbHeads        dw  2
    18.   bpbHiddenSect   dd  0
    19.   bpbLargeSect    dd  0
    20.  
    21.   bpbDriveNo      db  0
    22.   bpbReserved     db  0
    23.   bpbSignature    db  41
    24.   bpbID           dd  1
    25.   bpbVolumeLabel  db  'BOOT DISK'
    26.   bpbFileSystem   db  'FAT12   '
    27.  
    28. start:
    29.   cli  
    30.   xor ax, ax
    31.   mov ds, ax
    32.   mov es, ax
    33.   mov ss, ax
    34.   mov sp, 0x7C00
    35.   mov [bpbDriveNo], dl
    36.   sti
    37.  
    38.  
    39.   mov ax, 3
    40.   int 0x10
    41.  
    42.   lea bp, message
    43.   mov ax, 0x1301
    44.   mov bx, 7
    45.   mov cx, 7
    46.   mov dx, 0x0102
    47.   int 0x10
    48.    
    49.  
    50.   message  db 'Hello!!'
    51.  
    52.  
    53.   rb  boot + 510 - $
    54.   dw  0xAA55
    После перезагрузки получаю: FATAL: No bootable medium found! System halted.

    Юзаю VirtualBox, компилю в фасме

    Кто сталкивался/занимался подобным - подскажите пожалуйста в чем может быть беда.
    Благодарю за внимание.
     
  2. AndjellaArtavazdovna

    AndjellaArtavazdovna New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2010
    Сообщения:
    615
    sideX
    Вот на VirualBox указанная проблема возникает вообще по непонятным причинам. Я помню как-то в своей проге в \SessionManager\BootExecute\ значение добавил и получал эту ошибку. Т.е. это может и не быть связано с записью в MBR.
     
  3. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Насколько понял, код у вас записан в образ дискеты в качестве бутлоадера? Меня смущает "пытаюсь".
    Проверьте на том же bochs'е работоспособность поделки (кстати, я юзал его, ибо он самый удобный в плане отладки).
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Здесь ошибка
     
  5. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Pavia, тут конечно косяк (сообщение то исполняться будет), но не думаю, что это бы вызвало такую ошибку - просто halt был бы, скорее всего, после исполнения текста.
     
  6. iamlamer

    iamlamer New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2005
    Сообщения:
    273
    Адрес:
    Russia
    Вы ничего не перепутали? Это код не для MBR, а для BootSector, а это 2 большие разницы. При старте с винта BIOS не нашел таблицу разделов и посчитал MBR битым.
     
  7. sideX

    sideX New Member

    Публикаций:
    0
    Регистрация:
    9 июн 2009
    Сообщения:
    57
    хорошо, тогда каким образом мне записаться, чтобы не затронуть таблицу разделов? подтолкните немножко пожалуйста
     
  8. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    У гугла выходной, штоле? Берите ман и вперёд.
    Я бы сказал, в принципе, если бы помнил :)
     
  9. Blackbeam

    Blackbeam New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    960
    dw 0x55AA
     
  10. Blackbeam

    Blackbeam New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    960
    лучшее так: с учетом, что флоппи почти ниукого нет, а нада писать ось, которая будет самая лучшая и т.д.:
    бин, который переименован в img, открываем с помосчью UltraIso и делаем загрузочный диск, указав соответствуюсчий файл в качестве загрузочного. что делает ультра и как она записывает даже не знаю точно. надо бы разобраться, инфы на русском нет по этому вопросу.

    теперь можно кодить сколько влезет, в одном файле - получается, что управление на ядро передавать не надо -биос будет читать подряд. нужно есчо на всякий случай поставить сигнатуру в 1999-2000 байты.

    вроде так, у меня все работало в виртуал боксе

    задавал вопрос - нужно ли выравнивать весь остальной код по 2000 байт, ответа так и не получил :dntknw:

    в качестве экперимента поместил код во второй сектор ( на си-ди сектора по 2000 байт )
     
  11. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Нет 0xAA55.
    В байтовом представлении должно быть 55 AA.
    55 по младшим адресам (у тебя в коде кстати правильно написано).
    Для начала код переписать надо.
    В MBR нету BPB к примеру.
     
  12. PSR1257II

    PSR1257II New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2011
    Сообщения:
    228
    510

    I think it is a root of the problem, mate.
     
  13. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Нормально с 510 всё.
    Потом ещё 2 байта сигнатуры идёт, и будут нужные 512 байт.
     
  14. PSR1257II

    PSR1257II New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2011
    Сообщения:
    228
    cppasm

    По идее если вы запишите 510 ноликов и потом сигнатуру то BIOS'у этого должно быть достаточно. PartitionTable он не проверяет, он ничего не проверяет а делает это сам загрузчик. Если это MBR. Если это BOOT, там еще что-то (не помню).

    Залейте ваши 512 байт и посмотрим что там. По идее file <test.mbr> должен сказать что там.
     
  15. sideX

    sideX New Member

    Публикаций:
    0
    Регистрация:
    9 июн 2009
    Сообщения:
    57
    Спасибо всем кто откликнулся, за ответы. Удалось продвинуться дальше. Теперь новая беда - при замене первого сектора на Win7 после возврата управления система падает в бсод. сразу же после показа логотипа. по всей вероятности порчу таблицу разделов. как такое победить? буду рад любым советам/предложениям
    еще при отрисовке меню не могу корректно подгрузить символы для знакогенератора (ну это второстепенная проблема)
    буду весьма признателен за подмогу
     
  16. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Это по идее, и нормальные BIOSы так и делают.
    Но есть BIOSы которые проверяют таблицу разделов, и если у одного из разделов тип отличается от 0x00 или 0x80 считают MBR не валидным и управление на него не передают.

    После возврата управления куда? И какой BSOD при работе MBR?

    Здесь данные как код выполняются - про это писали уже выше.
     
  17. sideX

    sideX New Member

    Публикаций:
    0
    Регистрация:
    9 июн 2009
    Сообщения:
    57
    собственно, сохраняю оригинал в другой сектор, переписываю 1й своим кодом. при загрузке показываю меню. один из пунктов - вернуть оригинальный загрузчик. переписываю 1й сектор оригиналом и джамп на 0000:7C00. в ХР работает, в 7 падает после показа логотипа. после перезагрузки винда предлагает выяснить проблему. жму туда, винда чтото сканирует и выдает что таблица разделов негодная.

    какой бсод - не знаю где посмотреть, т.к. после показа сразу в ребут и все по кругу
     
  18. sideX

    sideX New Member

    Публикаций:
    0
    Регистрация:
    9 июн 2009
    Сообщения:
    57
    после показа заставки на вин7 такой бсод
    http://imageshack.us/photo/my-images/402/12345jm.jpg/
     
  19. sideX

    sideX New Member

    Публикаций:
    0
    Регистрация:
    9 июн 2009
    Сообщения:
    57
    вопрос с бсодом решен. как оказалось - причина была в кривизне рук) помогите теперь настроить знакогенератор?
     
  20. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    что именно? через порты или биос?