Magic с бутсектором.

Тема в разделе "WASM.OS.DEVEL", создана пользователем SadKo, 14 сен 2008.

  1. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Может, BIOS определяет CHS-геометрию для флешки из ее MBR. Такое практикуется при эмуляции харда при загрузке с CD/DVD. Существует BIOS Boot Spec. Возможно, там есть ответ на этот вопрос.
     
  2. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Как это не 0 и не 0x80? В первом случае - 0, во втором - 0x80, здесь всё в порядке.
    Этот совет, как уже выяснилось, иногда не работает. (Кстати, кажется, всё-таки обычно флешки определяются именно как жёсткие диски, с идентификаторами 0x80+, хотя массового тестирования я не проводил.) Всё проще: спецификации советуют запоминать где-нибудь DL, переданный бутсектору BIOS'ом, и не прописывать в коде фиксированное значение, а использовать сохранённое.
     
  3. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Решил пока написать пробный код MBR, авось BIOS окажется более благосклонным к нему...
     
  4. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Написал MBR, BIOS перестала выпендриваться. Это как называется?
     
  5. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Я же говорю, что CHS-геометрия определяется из MBR. Флешки, которые я использую, имеют предустановленную (присутствующую в MBR при покупке) геометрию H=16 (0-15), S=32 (1-32). Интересно, что будет, если поменять геометрию вручную и переформатировать флешку. Если все будет работать и с новой геометрией, то мое предположение верно. Если нет, значит флешка сама сообщает свою CHS-геометрию и тогда по идее MBR-сектор можно использовать как угодно.
     
  6. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Это, конечно, интересно, но забавно другое: в моём MBR ни о какой геометрии речи не идёт.
     
  7. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Что нет таблицы разделов?
     
  8. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Таблица разделов есть, но в ней нет CHS-параметров. Там может быть только указано, с какого цилиндра и какой головки начинается раздел, а также его LBA.
     
  9. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Так я про это "неофициальное" соглашение и говорю. Разделы должны заканчиваться на границах цилиндров, откуда можно получить S и H. При эмуляции харда при загрузке с CD/DVD для определения CHS-геометрии BIOS пользуется именно этим соглашением. Может, и здесь подобная ситуация.
     
  10. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    ...в описателе раздела в таблице есть поле CHS последнего сектора раздела.
     
  11. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Код (Text):
    1. #pragma pack(push,1)
    2. typedef struct TPartitionInfo
    3. {
    4.     BYTE    Active;
    5.     BYTE    StartHead;
    6.     WORD    StartCylinder;
    7.     BYTE    Code;
    8.     BYTE    EndHead;
    9.     WORD    EndCylinder;
    10.     DWORD   BeginLBA;
    11.     DWORD   Size;
    12. } TPartitionInfo;
    13.  
    14. typedef struct TBootSector
    15. {
    16.     BYTE            BootCode[0x01be];
    17.     TPartitionInfo  Partitions[4];
    18.     WORD            Signature;
    19. } TBootSector;
    20. #pragma pack(pop)
    Здесь только CH-геометрия, про секторы ничего не сказано. Разве что Size в секторах.
     
  12. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Ну так если учесть, что последний сектор раздела является последним в цилиндре, то по S и H этого сектора можно сделать вывод о значениях соотвествующих параметров в CHS-геометрии диска!
     
  13. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Можно, не отрицаю. Но нужно ли? У меня параметры CH вообще нулями забиты.
     
  14. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Параметр С пофиг (он обычно корректен только тогда, когда это возможно). Важны S и H. Забиты нулями кем? Тобой или были такими изначально? Покажи таблицу разделов (желательно оригинал, если ты ее менял). Не встречал флешек, у которых эти параметры были бы забиты нулями.
     
  15. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Таблица разделов очень простая:
    volume1:
    active = 0x80
    start_head = 0, start_cyl = 0
    filesystem = 0x0f
    end head = 0, end cyl = 0
    start lba = 1
    size = 8*1024*1024
    volume2..volume4 = 0
     
  16. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Не встречал такого. Может, это уже твоих рук дело?.. Или флешка раcсчитана исключительно на доступ с помощью линейной адресации (точнее вообще не расcчитана на CHS). А не пробовал вызывать для этой флешки функции BIOS 08h/48h? Интересно узнать, какую геометрию будет сообщать BIOS.
     
  17. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Вызывать не пробовал, такие "кривые партиции" - именно моих рук дело :). Так что у меня серьёзные сомнения, что BIOS берёт геометрию из Volume Descriptors. А вот то, что BIOS берёт геометрию из BPB-параметров FAT-заголовка (если они заданы), это для меня уже почти факт, не требующий подтверждения.
    Так что "память о Microsoft" присутствует в любом современном BIOS ;).
     
  18. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Сомневаюсь, что это так. Чтобы добраться до BPB раздела BIOS как минимум нужно знать, где этот радел начинается. Т.е. она дожна использовать еще хотябы линейный номер первого сектора раздела из таблицы разделов. Кстати, если ты BPB не раскурочил также, как PT, то по идее можно восстановить CHS-параметры PT из BPB. Что у тебя там в BPB?

    Я упоминал еще один возможный вариант определения CHS-параметров в BIOS. Возможно флешка сама сообщает свою "физичекую" CHS-геометрию аналогично тому, как это делают жесткие диски. Вообще это не очень сложно проверить. Нужно "зачистить" флешку (PT, на всякий случай - из твоего предположения - BPB) и вызвать для нее функцию 08h/48h "со стороны" или прямо из кода в MBR при загрузке.
     
  19. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    А какие проблемы, если BPB находится в MBR? Я же говорю - проблема возникает, когда информация о файловой системе FAT присутствует в MBR. По ходу, BIOS детектит это и пытается сменить геометрию.
     
  20. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    BPB в MBR? Тогда конечно будут проблемы при условии, что BIOS все-таки использует данные из PT. Точнее BPB естественно с PT не пересекается, но я боюсь, что раз ты запихнул BPB в MBR, то на необходимость присутствия PT в этом секторе ты махнул рукой! Зачем вообще себе организовывать лишние проблемы. Или ты так пытаешься сэкономить несколько десятков секторов? Делай, как положено: MBR, резерв в пределах "нулевой поверхности нулевого цилиндра" и собственно сам раздел. ...И будет тебе счастье :)