Мое почтение всем. Наткнулся на интересную ситуацию на свежеприобретенной флешке: Флешка, 2GB. Читаю с нее данные с помощью CHS адресации. Код моего загрузчика, успешно работающий на других компьютерах, не отрабатывает. После поиска ошибки выяснилось, что проблема в CHS чтении. В BPB файловой системы (FAT16) кол-во головок -- 64. Однако, BIOS, что Bochs'вский, что реальный, а также WinHex, думают по-другому -- 255 головок. Вопрос: кто прав? Насколько я помню, BIOS должен выбрать наименьший подходящий множитель, т.е. число 64, но этого не происходит. Заранее благодарен. P.S. Я знаю, что есть LBA. Вопрос больше теоритического характера .
BIOS глубоко плевать что вы позаписывали на диск, включая и BPB, который строится из BootRecord. А вот что включено в BIOS (а судя по всему там LBA - СHS никто уже не пользуется) имеет значение.
Ultrin Faern CHS никто не пользуется, но BIOS'ы ее поддерживают -- обратная совместимость -- без специального включения. cppasm Хм, т.е. получается согласовать данные в BPB с тем, что подумает BIOS невозможно? Насколько я помню, в статье, которую я читал говорилось о выборе наименьшего подходящего множителя. Ведь какую-то геометрию флешка должна отрапортовать?
Флэшка не рапортует геометрию, она сообщает только максимальный номер блока (сектора) и размер блока. Единственный вариант где может понадобиться CHS - это при загрузке с неё. Тогда геометрия выбирается BIOS'ом, и по-моему берутся как раз максимальніе значения для количества головок и секторов на трек. Но закономерность должна быть, ведь с одной и той же флешки на разных машинах грузиться можно... Хотя может загрузчик геометрию не из BPB читает, а у BIOS по int13h спрашивает, но это врядли.
cppasm Ситуация именно такова: происходит загрузка с флешки. Загрузчик читает геометрию из BPB и она расходится с геометрией, которую предполагает BIOS. Изменил значение в BPB с 0х40 на 0xFF -- все заработало. И это различие меня как раз удивило.
Неа, не влезает Так в том и вопрос что эмуляцию осуществляет BIOS, и вопрос в том - какую геометрию он выберет. В случае с HDD он сам сообщает по IDENTIFY DEVICE свою CHS геометрию, хоть в принципе тоже виртуальную. А флешка этого не делает, геометрию сочиняет сам BIOS. И эти параметры записываются в BPB при форматировании. И проблема в том, что если ты потом эту же флешку вставиш в другой комп и BIOS сочинит другую геометрию - загрузчик просто не сможет загрузить систему, у него будут неправильные параметры в BPB. Но вроди все BIOS'ы сочиняют одинаково, видно всё-таки есть какие-то рекомендации... А с 0xFF везде работает?