проверил. fdisk не дает создать активный раздел на диске отличном от первого(80h). хотя уже отмеченные определяет. вывод: раз нельзя сделать активным диск отличный от 80. то и значение будет только 80. если конечно не пользоваться другими утилитами. хотя я всегда и на всех компах которые у меня были видел только 80 и все.
В ХП первый круг проверки что-то типа cmp @РегУказателя, Регистр_в_котором_ноль jL (Есть знак) на второй цикл jNE (Не равно) на ошибку. Циклим Возвращаем управление в BIOS. Во втором цикле, сравнивают только на ноль, и при отличии сваливают на ошибку. То есть значения: 0x01..0x7F - ошибочны. 0x80..0xFF - верны, и указывают на загрузочный раздел. Я думаю, более правильно отдать управление в BIOS, и уж он пусть решает, что делать, если вы пишите код собственного обработчика MBR.
да для совместимости последую вашим путем. но только как писал: 0-7fh-не активный 80h-ffh-активный. по честному и без ошибок)
Верное замечание. Но неактивный раздел идентифицируется нулевым значением данного поля. Так уж сложилось )))
это с целью упростить условие проверки в mbr) они иногда после rep пишут cmp [si],ch (где вместо 0 написано ch) экономят место) было бы написано 80h было бы наоборот 0-7fh не активный 80h-активный ,а 81-ffh ошибка)))
И что? Моя ось тоже понимает. Менеджер томов выцепил первый активный раздел, а все остальные посчитал автоматически неактивными. А для детекта разделов, как уже говорил, я не использую данное поле, хотя может и зря.
лучше считать что несколько активных. тогда бут менеджер будет и без файла boot.txt(например) знать где есть системы. хоть он и не знает какие, но сможет предложить загрузку по выбору) а в системе детект я делаю по значению переданному в ds:si. и номеру диска dl. тогда можно пройти по цепочке(заглянув и в расширенные) разделы и найти соответствующий раздел(хотя при загрузке ты и так будешь знать начало и конец раздела(только его номер узнать надо)) просто искать первый активный не правильно. вдруг тебя загрузили через менеджер а не через alter? и ты подумаешь что ты в другом разделе? так) плюс должна быть возможность делать активным расширенный раздел, а в нем в smbr еще один который загрузится по цепочке. вот это я считаю идеально правильным. а не кривые условия противоречащие сами себе)
Это в терминах BIOS обычно называется USB-ZIP. Я так понимаю, тебе это нужно из внешней программы, а не в коде загрузчика на этой флешке. И если правильно поставить вопрос, тебя интересует, присутствует ли на этой флешке таблица разделов, то есть она HDD, или нет (FDD). Я правильно понял? Если я прав, и вопрос звучит именно так, то вопрос сводится, есть ли на флешке ТР, или ее нет, а точнее корректна она или нет. Смотришь, есть ли 55AA в нулевом секторе. Если нет, то мусор там. И на твой флешке нет ни MBR ни BR, говоря твоими терминами. Больше никаких гарантированных способов нет. Можно только по косвенным признакам. 1) Проверяешь флаг активности (+00). Не более одного 0x80, остальные нули. 2) Проверяешь трансляцию CHS в LBA для каждого раздела, должна совпадать. Но не факт, что ты вычислишь геометрию флешки, виста и семерка может подложить сюрприз. 3) Проверяешь, что живет в первом секторе каждого раздела. А именно наличие 55AA в конце. Для FAT/FAT32/NTFS это сработает. Для EXT2 пробуй, у меня живет в одном. 4) Можно попробовать отлавливать дополнительно характерные для FS признаки. Но ты так и не ответил зачем тебе это. Просто знание о наличии ПТ на фиг не нужно.
Ты не спорь, а слушай, что тебе более умные товарищи говорят, тем более, что они правы. Это вопрос вообще, или в частности? В частности, значения 0x01-0x7F ошибочны, и существовать не могут. Не сможет. LOL А что ты в DS:SI передаешь? Вот тут http://www.wasm.ru/forum/viewtopic.php?id=40548&p=2 Пост № 37, предпоследний абзац.
здесь ты прав во всем. только в некоторых биосах до сих пор fdd а не zip) но не об этом. если я гружусь с флешки то я конечно знаю в каком она формате. ведь я приму параметры и знаю что записано на диске. а вот когда система работает и вставили флеху. вот здесь и появляется вопрос как ее смотреть. но спасибо, благодаря тебе я вспомнил, что дискеты обычно все(других не видел даже в линуксе), отформатированы в fat(пусть и не 12). тогда вот: проверяем на 55aa. если есть то это или mbr или br. следовательно если это дискета то она в формате fat(другого не дано) . тогда проверяем на присутствие fat.(можно по разному, но легко). и если это fat то диск fdd. а если нет то это hdd с таблицей PT))) ВОТ ОНО....УРА. если что поправьте.. хотя я слышал что бывают dual дискеты, но предполагаю что там разделы совпадают и для fdd и для hdd. насчет корректных значений chs в соответствии с lba. я обычно в chs пишу ffffffh(как в uefi спецификации), а если надо, то получаю chs из lba в соответствии с (текущей) геометрией (int 13h функция 8) да и винда не понимает когда на флешке несколько разделов, она видит только первый((
посмотрел и не понял к чему) и не надо судить о всех мол если спросил то глуп. это в целях совместимоти. и чтоб придти к единому мнению. тита конференция) если работают в MS это не значит что умнее всех. у меня много знакомых программистов. которые исправляют баги после гигантов ранка софта. я не спорю я проверил. они могут существовать и прекрасно перевариваются виндой. кcтати dos тоже писали умные люди из MS а там понимают только 0 и 80h. если как фантом говорит несколько активных можно. то может быть загружен любой из них а не только первый в списке(не зря же он активный). а система тогда не должна полагаться на первый активный флаг(если сама допускает несколько активных разделов) это типа дал дорогу в mbr поддержи и дальше. в ds:si передается указатель на описание активного раздела(как в PT). без этого кстати твоя Умная MS windows не запустится(проверено не один раз и не только мной).
Вот тут то и добрались до истины Тут же все на порядок проще. Достаточно только вспомнить про многоуровневую модель взаимодействия. И твои волосы тут же становятся гладкими и шелковистыми.
Ага, а еще благодаря своему ИИ сам определить нужный активный раздел при автозагрузке ))) Ага, а если ты загружаешься с цельного устройства, то BIOS уж не знаю благодаря чему определит необходимость передачи твоему коду этого указателя ))) У меня ядро (и первичный загрузчик при использовании Alter'а) получает номер загрузочного раздела в регистре DH. Если его значение равно нулю, то считается, что загрузка выполнялась либо с цельного устройства, либо с активного раздела. Для загрузки с вложенного в расширенный раздел раздела можно использовать Jumbo (он автоматически исправляет начальный адрес раздела в дескрипторе внутри расширенном разделе типа 5 и в поле HiddenSectors FAT/NTFS-томов) или в перспективе вторичный загрузчик. "Меня" могут грузить только сторонние загрузчики, которые знают о моем загрузочном интерфейсе. Если "меня" загружают через мой первичный загрузчик, не зная, что он также способен воспринимать номер загрузочного раздела, то должны это делать только с цельного устройства/активного раздела, иначе ядро не сможет нормально выполнить загрузку системы, если ему не подложить какой-нибудь продвинутый драйвер. Не нужно делать расширенный раздел активным ))) Я спокойно идентифицирую загрузочный раздел внутри расширенного по его номеру > 4. Каждый вправе самовыражаться, как хочет )))
а BIG FDD без PT? если их всего fat ntfs и ext2/3 то это без проблем. я их умею детектить. да еще exfat появился. но если бывают и фругие форматы на флешке, то я не знаю. хотя мне раньше утверждали что если размер флешки меньше скольки-то, то это fdd иначе hdd. так ли это?
Ага, а если ты загружаешься с цельного устройства, то BIOS уж не знаю благодаря чему определит необходимость передачи твоему коду этого указателя ))) -ds:si передает только mbr а не bios. это описано в uefi и boot bios спецификации. когда ты записываешь систему она знает на каком она диске. у нее спецефичный BR. Не нужно делать расширенный раздел активным ))) Я спокойно идентифицирую загрузочный раздел внутри расширенного по его номеру > 4. -а в mbr ты тупо сканируешь все разделы включая расширенные? или откуда ты взял 4. проще наверно отметить расширеный как активный и тем дать понять что там есть загрузочный раздел) иначе зачем ты допускаешь несколько (больше одного) активного раздела? если потом сам не можешь с ними работать(они вводят тебя в заблуждение). можешь не соглашаться но я по своему прав. я понимаю что ты придержался подобию загрузки linux. но у них место загрузки прописывается в файле конфигурации grub.