Yoda писал(а):
Не могу сейчас найти в официальном интеловском руководстве (в печатных изданиях того времени поиск не делается, а оно довольно толстое

), но я точно помню этот факт ещё со времён программирования на настоящих XT. Да и в книге Финогенова/Рудакова по программированию на ассемблере
8086 этот факт специально оговорен, что при загрузке SS на следующую инструкцию маскируются все, даже самые немаскируемый прерывания.
Насколько я знаю, это появилось позднее. В PM32 я это использую, т.к. в 32-разрядных процах это точно было с самого начала.
Цитата:
По поводу наездов я говорю про конкретные зацитированные фразы.
Я тоже. Из того, на каких простых ситуациях они "сыпались", я сделал предположение, что они могли вообще не тестироваться или тестироваться кое-как.
Цитата:
Про "ни копейки" я говорил к тому, что не стоит сразу ожидать, что я тут же перепакую всё с описанием настройки стека и пр. Я сильно ограничен по времени и приходится оптимизировать работу по затратам времени.
Не хочу опять говорить грубости, но тебя кто-нибудь торопил выкладывать сырой, плохо документированный продукт? Трудно подготовить весь пакет целиком, давай "вылизывать" его по частям, тестировать здесь и т.п. После первого "облома" я тебе сам предлагал скинуть мне новые версии тех же загрузчиков в личку, чтобы я мог их проверить в тех же условиях, что и прежние, но ты этого не стал делать, значит, подумал я, сделал все сам. Ну в общем ты меня понял...
Цитата:
Ладно, считаем, что замяли этот вопрос.
Как ты понимаешь, я только за. Как сказал выше, его вообще лучше было не поднимать.
Цитата:
Давай лучше обсудим передачу номера раздела в DH.
Я так понимаю, второй груб ожидает следующий формат:
0 - загрузка с диска без разделов.
1-4 - основные разделы в таблице разделов.
5-... - логические диски расширенного раздела, причём, нумерация начинается с 5 независимо от количества реально присутствующих основных разделов.
Верно?
Вообще он ничего не ожидает. И без разницы, второй или первый (в них только на пользовательском уровне нумерация разделов различается). В обычных условиях все это в него уже вшито инсталлятором. Сам формат идентификатора описан в Multiboot Spec. (см. описание boot_device). Если кратко, то там разделы нумеруются с нуля, 0xFF является невалидным значением, т.е. используется для цельных устройств. Сам идентификатор 32-разрядный и поддерживается несколько уровней вложенности одних разделов в другие. Следующий за основным уровень - это уровень BSD-разделов. Дополнительные разделы внутри расширенного раздела DOS не считаются вложенными. Для них используется последовательная нумерация (4-254). То что ты показал, больше похоже на мою "географическую" нумерацию, правда 0 не обязательно обозначает цельное устройство (еще может обозначать активный раздел или просто первый раздел в таблице - у меня все это, включая цельное устройство, называется загрузочным разделом по умолчанию). Я преобразую входной параметр моего ядра в номер раздела GRUB простым циклическим декрементом. Сообщить GRUB'у о более глубоких уровнях вложенности разделов не могу, т.к. у меня такого понятия нет вообще (оно вообще редко где есть).
Цитата:
В принципе, кроме логических дисков, всё остальное вполне логично. А с логическими дисками второй вариант, это когда номер передаётся сквозной, т.е., если в системе один основной раздел, то логические диски будут нумероваться с 2. Самая засада заключается в том, что эти две системы нумерации не конвертируются одна в другую, поэтому нужно сразу определиться с тем, какой вариант будет использован.
И у меня, и в GRUB'е используется первый вариант. Хотя для меня это справедливо только для классической "географической" нумерации, т.к. на самом деле смысл номеров может быть совершенно разным. Главное, чтобы и загрузчики, и драйверы номера понимали одинаково. Само ядро работает только с нулевым значением, выполняя ряд дополнительных действий по поиску загрузочного устройства в такой ситуации.
Цитата:
Вообще удивляюсь, сколько кривизны тянется со старых разработок. Структуры MBR/EBR весьма показательны в этом плане.
В этом был определенный смысл. Это сделано для того, чтобы созданные в других системах первичные разделы не влияли на порядок следования дополнительных разделов после первичных.