Трансляция адреа [HDD]

Тема в разделе "WASM.ASSEMBLER", создана пользователем Mika0x65, 18 ноя 2007.

  1. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Мое почтение всем.

    Наткнулся на интересную ситуацию на свежеприобретенной флешке:

    Флешка, 2GB. Читаю с нее данные с помощью CHS адресации. Код моего загрузчика, успешно работающий на других компьютерах, не отрабатывает. После поиска ошибки выяснилось, что проблема в CHS чтении. В BPB файловой системы (FAT16) кол-во головок -- 64. Однако, BIOS, что Bochs'вский, что реальный, а также WinHex, думают по-другому -- 255 головок.

    Вопрос: кто прав? Насколько я помню, BIOS должен выбрать наименьший подходящий множитель, т.е. число 64, но этого не происходит.

    Заранее благодарен.

    P.S. Я знаю, что есть LBA. Вопрос больше теоритического характера :).
     
  2. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    BIOS глубоко плевать что вы позаписывали на диск, включая и BPB, который строится из BootRecord. А вот что включено в BIOS (а судя по всему там LBA - СHS никто уже не пользуется) имеет значение.
     
  3. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    У флэшки CHS нету в принципе, поэтому геометрию BIOS может выбрать какую ему вздумается.
     
  4. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Ultrin Faern
    CHS никто не пользуется, но BIOS'ы ее поддерживают -- обратная совместимость -- без специального включения.

    cppasm
    Хм, т.е. получается согласовать данные в BPB с тем, что подумает BIOS невозможно? Насколько я помню, в статье, которую я читал говорилось о выборе наименьшего подходящего множителя. Ведь какую-то геометрию флешка должна отрапортовать?
     
  5. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Флэшка не рапортует геометрию, она сообщает только максимальный номер блока (сектора) и размер блока.
    Единственный вариант где может понадобиться CHS - это при загрузке с неё.
    Тогда геометрия выбирается BIOS'ом, и по-моему берутся как раз максимальніе значения для количества головок и секторов на трек.
    Но закономерность должна быть, ведь с одной и той же флешки на разных машинах грузиться можно...
    Хотя может загрузчик геометрию не из BPB читает, а у BIOS по int13h спрашивает, но это врядли.
     
  6. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    cppasm
    Ситуация именно такова: происходит загрузка с флешки. Загрузчик читает геометрию из BPB и она расходится с геометрией, которую предполагает BIOS. Изменил значение в BPB с 0х40 на 0xFF -- все заработало. И это различие меня как раз удивило.
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    а как грузится с флешки без эмуляции флоппи или жесткого?
    чтение с USB-флешки влезает в 512 байт?
     
  8. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Неа, не влезает :)
    Так в том и вопрос что эмуляцию осуществляет BIOS, и вопрос в том - какую геометрию он выберет.
    В случае с HDD он сам сообщает по IDENTIFY DEVICE свою CHS геометрию, хоть в принципе тоже виртуальную.
    А флешка этого не делает, геометрию сочиняет сам BIOS.
    И эти параметры записываются в BPB при форматировании.
    И проблема в том, что если ты потом эту же флешку вставиш в другой комп и BIOS сочинит другую геометрию - загрузчик просто не сможет загрузить систему, у него будут неправильные параметры в BPB.
    Но вроди все BIOS'ы сочиняют одинаково, видно всё-таки есть какие-то рекомендации...
    А с 0xFF везде работает?
     
  9. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Не знаю, проверял всего на двух компьютерах + Bochs.
     
  10. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    А почему бы просто не запрашивать геометрию у BIOS (ah=8/int 13h)?
     
  11. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    diamond
    Я так и сделал теперь. Просто сам факт удивил.