OSDev

для всех
Текущее время: 05 июл 2025, 09:54

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 353 ]  На страницу Пред.  1 ... 14, 15, 16, 17, 18, 19, 20 ... 36  След.
Автор Сообщение
 Заголовок сообщения: Re: OS Boot Tools
СообщениеДобавлено: 04 ноя 2012, 18:54 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Я с другой стороны смотрю.
У меня есть мой вторичный загрузчик "KLOADER.EXE". Формат файла MZ-EXE. В качестве входных параметров ему нужен номер диска в DL.
А так как файл имеет формат MZ-EXE то его может грузить DOS. Особенность у меня такая - если загружен при помощи DOS, то для доступу к диску используются интерфейсы DOS. DOS не имеет признака :-(. Поэтому пришлось добавить признак первичного загрузчика проверяю магическое слово по адресу 07C05h-07C09h.

Хочу приобщится к народу смотрю в какую сторону двигаться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OS Boot Tools
СообщениеДобавлено: 04 ноя 2012, 20:55 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 976
Откуда: Дагоба
pavia писал(а):
640 КБ базовая память
- 64 КБ куча
- 16 КБ стек
- 4-32 КБ переменные БИОСа и первичного загрузчика.

итого я бы больше 428 КБ не грузил

Не, неправильная арифметика :).
620к грузим, а оставшихся 8к как раз должно хватить для перевода процессора в защищённый режим, чтобы можно было использовать остальную память для распаковки модулей, зашитых в образ и освобождения базовой памяти.

phantom-84 писал(а):
Там могут быть другие заморочки типа требования кратности базы размеру сектора, чтобы при последовательной загрузке секторов напрямую в конечный буфер не пересекать 64-килобайтные границы - невыполнение этого требования может быть критично для флоппиков

Да в общем-то это не должно быть проблемой. Я же читаю через БИОС, а он сам должен обходить такие моменты.

phantom-84 писал(а):
у меня кстати опять не пошел твой загрузчик для FAT12 на образе флоппика в боксе

Чёрт, действительно. Именно FAT12 и именно на флопике. HDD с FAT12 грузится нормально. Уже начал разбираться.
Я же говорю, отладить начальную загрузку, так чтобы всё везде работало - весьма непростая задача :).

phantom-84 писал(а):
Если он изменится в меньшую сторону, то для меня это может быть критично. Для запуска оси я набиваю образ под завязку.

Если не возникнет обстоятельств непреодолимой силы, то я не буду уменьшать размер. В конце концов, любое нововведение должно быть либо вынужденым, либо положительным :).

phantom-84 писал(а):
Можешь этого не делать: ... (новый формат, основа та же).

Пасиб!

phantom-84 писал(а):
Цитата:
Кстати, по поводу гибридной разметки я пришёл к выводу, что единственно правильным будет сохранение гибридности. Поэтому поддержал её, благо это несложно.

Как реализовано?

Да просто. Джамп через BPB/BS data, как в обычном VBR, а там код грузит первый сектор первого раздела, без проверки флага активности.

SII писал(а):
А вот контролировать, ИМХО, надо всегда: мало ли что. И, естественно, не полагаться на наличие определённого объёма памяти, а спрашивать у БИОСа.

Уже обсуждали этот момент. Моё IMHO, что это мало что даст. Только вербальное уведомление пользователя о невозможности загрузки из-за нехватки памяти, но это потребует ОЧЕНЬ много места, а оно на вес золота.

pavia писал(а):
2) И как можно отличить что загружено вашем загрузчиком а не к примеру досом или другим загрузчиком?

Никак. А и не надо. Альтернативы всё-равно нет.

pavia писал(а):
А так как файл имеет формат MZ-EXE то его может грузить DOS.

Я не смогу загрузить этот формат. Только raw binary.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OS Boot Tools
СообщениеДобавлено: 05 ноя 2012, 01:40 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 976
Откуда: Дагоба
phantom-84 писал(а):
Там могут быть другие заморочки типа требования кратности базы размеру сектора, чтобы при последовательной загрузке секторов напрямую в конечный буфер не пересекать 64-килобайтные границы - невыполнение этого требования может быть критично для флоппиков (у меня кстати опять не пошел твой загрузчик для FAT12 на образе флоппика в боксе; зависания на этот раз нет, а выводится сообщение об ошибке...

Ё-моё! Так и есть. С самим загрузчиком всё в порядке. Проблема возникает именно на границе сегментов. Пока база была 600h, граница приходилась ровно между двумя секторами. А сейчас сбой происходит при чтении сектора по адресу FF00h. Гнилое наследие отжившего своё старья! Блин, что делать, что делать!?...

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OS Boot Tools
СообщениеДобавлено: 05 ноя 2012, 09:11 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1209
Все-таки бокс - хороший эмулятор :lol:

Я вижу три выхода из этой ситуации:
  • использовать предбуфер (геморно; не эффективно, даже если кэшировать только сектора, пересекающие границы; я использую похожий прием в CDFS-загрузчике при загрузке последнего сектора, когда остается 1 Кб доступной памяти);
  • забить на флоппик (желание может быть велико, но лично я не стал бы этого делать - люблю флоппики :D);
  • сделать базу 800h (чтобы не повторяться :D), тогда я смогу сделать начальный стек за пределами файла (надеюсь, 768 байт должно хватить, т.к. на участке использования этого стека я обращаюсь только к int 12h + возможны аппаратные прерывания), а ты к примеру сможешь кэшировать бутсектор в начале памяти.

Цитата:
Да в общем-то это не должно быть проблемой. Я же читаю через БИОС, а он сам должен обходить такие моменты.
Может, современные и обходят, но раньше этого не было (об этом написано в различных источниках).

Цитата:
Пасиб!
Чувствую, что мне скоро предстоит собирать версию 3.1 :mrgreen:


Цитата:
Да просто. Джамп через BPB/BS data, как в обычном VBR, а там код грузит первый сектор первого раздела, без проверки флага активности.
Физически первого раздела или первого раздела в таблице? На флешках иногда встречается неестественный порядок следования разделов в таблице (обычно как результат операции swap partitions/hide current partition). На хардах такое тоже возможно. В любом случае, нужно ориентироваться на физическое местоположение раздела. Кстати теоретически возможно расширить до MBR раздел, не являющийся первым физически, главное, чтобы разрядность поля ReservedSectors позволяла до него "дотянуться".

Цитата:
Я не смогу загрузить этот формат. Только raw binary.
Я уже знаю, что нужно делать, чтобы запустить файл любого формата :) Кстати оборачивание в твой формат - не первый мой опыт в этом направлении. Я давным давно научился запускать fs-файлы, как com-. Простейший вариант:
Код:
; *.OS stub
; Runs *.FS stub as a COM file

        org 8000h

        mov ax,830h
        xor bx,bx
        cli
        mov ss,ax
        mov sp,bx
        sti
        push bx
        mov ds,ax
        mov es,ax
        jmp 830h:100h

        rb 8300h-$
        xor ax,ax
        mov ds,ax
        mov word [472h],1234h
        jmp 0FFFFh:0

        rb 83FEh-$
        dw 0AA55h
Поэтому у меня много демок в com-формате. На этом форуме вроде проскакивала vesainfo - написал на коленке меньше чем за час (если нужно, могу выложить). Там и pavia поучаствовал.

А вообще я не уверен, что pavia именно это имел в виду. Честно говоря, я вообще не понял концовку его поста (касающуюся вопроса по существу, а не про "приобщится").


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OS Boot Tools
СообщениеДобавлено: 05 ноя 2012, 13:49 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 976
Откуда: Дагоба
phantom-84 писал(а):
Все-таки бокс - хороший эмулятор :lol:

Я всегда об этом говорил.

phantom-84 писал(а):
использовать предбуфер (геморно; не эффективно, даже если кэшировать только сектора, пересекающие границы; я использую похожий прием в CDFS-загрузчике при загрузке последнего сектора, когда остается 1 Кб доступной памяти);

Это потребует столько кода, что места уже нет.

phantom-84 писал(а):
забить на флоппик (желание может быть велико, но лично я не стал бы этого делать - люблю флоппики :D);

Не, забивать не надо.

phantom-84 писал(а):
сделать базу 800h (чтобы не повторяться :D), тогда я смогу сделать начальный стек за пределами файла (надеюсь, 768 байт должно хватить, т.к. на участке использования этого стека я обращаюсь только к int 12h + возможны аппаратные прерывания), а ты к примеру сможешь кэшировать бутсектор в начале памяти.

Не, тоже нехорошо. Во-первых, 768 байт - может оказаться мало для стека. Сейчас многие БИОСЫ по каждому удобному случаю делают PUSHAD/POPAD, что быстро его забивает. Стек должен быть вверху и организовать его там - вопрос пары инструкций. Во-вторых, меня будет мучить сознание пропадающих зря 768 байт. В-третьих, как я уже писал, перенести базу выше - хуже, чем ниже. В-четвёртых, при переносе выше 620к будут поджимать загрузчик вверху, придётся сокращать размер файла до 616к, а мне не нравится это число. Поэтому я, пожалуй, выберу четвёртый путь - с позором вернусь к базе 600h. Сейчас пересоберу архив, выложу, будем считать, что этого пункта не было.

phantom-84 писал(а):
Цитата:
Да в общем-то это не должно быть проблемой. Я же читаю через БИОС, а он сам должен обходить такие моменты.
Может, современные и обходят, но раньше этого не было (об этом написано в различных источниках).

Век живи - век учись, дураком помрёшь.

phantom-84 писал(а):
Физически первого раздела или первого раздела в таблице?

Предполагается, что гибридность возможна только при одном разделе. Иначе это будет совершенно битый формат. Поэтому берётся первый и единственный раздел в таблице.

phantom-84 писал(а):
Yoda писал(а):
Я не смогу загрузить этот формат. Только raw binary.
Я уже знаю, что нужно делать, чтобы запустить файл любого формата :)

Ну так я давно уже об этом молчу, а ты читаешь мои мысли :mrgreen:. Я именно и планировал подготовить комплект стабов на все случаи жизни.
В данном случае я хотел сказать, что после добавления стаба он перестанет быть MZ-EXE, т.к. заголовок будет невалидным. А вот COM можно сделать универсальным.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OS Boot Tools
СообщениеДобавлено: 05 ноя 2012, 13:57 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Цитата:
А вообще я не уверен, что pavia именно это имел в виду. Честно говоря, я вообще не понял концовку его поста (касающуюся вопроса по существу, а не про "приобщится").

Я сам пока в раздумьях.
Вот думаю как сделать что-бы пользователям меньше гемора было.
У меня есть первичный загрузчик и вторичный. А процесс загрузки у меня монолитный, что не есть хорошо.
А надо что-бы пользователи спокойно могли поставить свой первичный загрузчик.
Не буду же я изучать их все. Я вот гляжу Вы уже много изучили.

Думаю сделаю stub для загрузки MZ-EXE. Причём бинарник буду получать простой конкатенацией. Этого как я понял достаточно?

И второе всё-таки уйти от своего первичного загрузчика в сторону ваших.

Цитата:
А вот COM можно сделать универсальным.

COM должен иметь размер менее 64КБ (не помню точно цифру), а у MZ-EXE такого ограничения нет. То что у меня сейчас вторичный загрузчик всего 16 КБ это не значит что в будущем он не превысит 64КБ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OS Boot Tools
СообщениеДобавлено: 05 ноя 2012, 14:41 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 976
Откуда: Дагоба
Перезалил!
Скачиваем...

pavia писал(а):
А надо что-бы пользователи спокойно могли поставить свой первичный загрузчик.
Не буду же я изучать их все. Я вот гляжу Вы уже много изучили.

Ситуация такова, что нет никакого стандарта на первичную загрузку. Каждый решает этот вопрос самостоятельно, т.е. пишет загрузочные сектора, естественно, наступая на одни и те же грабли. Этот комплект - как раз и есть попытка навести порядок в королевстве и снять с других разработчиков (и пользователей) геморрой.

pavia писал(а):
Думаю сделаю stub для загрузки MZ-EXE. Причём бинарник буду получать простой конкатенацией. Этого как я понял достаточно?

Да, но как я уже писал, при этом потеряется заголовок EXE. Один и тот же файл нельзя будет использовать и для первичной загрузки и для загрузки ДОСом.

pavia писал(а):
И второе всё-таки уйти от своего первичного загрузчика в сторону ваших.

Мне кажется, это разумный шаг. Хотя бы потому, что использование ДОСа в качестве загрузчика - само по себе достаточно сложное решение. Я не планирую бросать этот проект. Как я уже писал, сейчас очень много планов на развитие, будет поддержано всё, необходимое для комфортной жизни. Благо, переписал структуру "boot.exe", так что развивать и модифицировать его теперь очень просто. Ещё сделал большую ассемблерную библиотеку, на которую опираются все загрузчики, так что поддержание любой новой ФС - это фактически разбор этой ФС, весь каркас и набор функций уже есть.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OS Boot Tools
СообщениеДобавлено: 05 ноя 2012, 16:35 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1209
Yoda писал(а):
Не, тоже нехорошо. Во-первых, 768 байт - может оказаться мало для стека. Сейчас многие БИОСЫ по каждому удобному случаю делают PUSHAD/POPAD, что быстро его забивает. Стек должен быть вверху и организовать его там - вопрос пары инструкций. Во-вторых, меня будет мучить сознание пропадающих зря 768 байт. В-третьих, как я уже писал, перенести базу выше - хуже, чем ниже. В-четвёртых, при переносе выше 620к будут поджимать загрузчик вверху, придётся сокращать размер файла до 616к, а мне не нравится это число. Поэтому я, пожалуй, выберу четвёртый путь - с позором вернусь к базе 600h. Сейчас пересоберу архив, выложу, будем считать, что этого пункта не было.
Зря. Про int 12h+аппаратные прерывания я сказал специально, т.к. это наименее ресурсоемкие в плане использования стека процедуры BIOS. Вместо вызова int 12h можно вообще читать соответствующую ячейку BDA. У меня этот стек действует только при выполнении адаптационного кода "sys". После передачи управления в точку входа PK сразу же устанавливается стек в стиле GRUB'а с вершиной 2000h. Размер файла сокращать не пришлось бы. Кстати я добавил к твоей прежней базе 600h только 200h, поэтому откуда ты взял уменьшение размера файла на 4 Кб (620-4=616), не понятно. Причем я объяснил, что ты можешь компенсировать увеличение базы за счет копирования бутсектора не в конец памяти, а в начало (ну или загружать один доп. сектор в начало, или использовать это место для чего-то еще, чтобы компенсировать возможную нехватку памяти в конце). Я конечно понимаю, что если твой код успел успешно отработать, то это означает, что выше образа файла в памяти наверняка есть какое-то свободное пространство, которое код "ядра" может использовать под стек. Но ты опять разработчиков вгоняешь в большие раздумья: "А сколько там доступного пространства? Лучше сделаю стек поменьше, чтобы случайно не повредить EBDA!" К тому же гипотетически существует возможность, что код твоего загрузчика находится выше первого мега и при загрузке образа заполняет доступную базовую память под завязку. Ты же не задекларировал, что выше загруженного образа должно оставаться N-ое количество не занятой образом памяти. Лично я поэтому и размещаю стек "в файле" (стековый дамп обычно имеет размер 1 Кб), т.к. 256 байт перед образом может быть действительно мало, а после фиг знает сколько доступно - пока не обратишься к BIOS, не узнаешь, для чего нужно использовать текущий стек, а о его характеристиках, а также о состоянии флага IF в спеке ничего не говорится, поэтому и возникает необходимость устанавливать новый стек как можно раньше.

Цитата:
Предполагается, что гибридность возможна только при одном разделе. Иначе это будет совершенно битый формат. Поэтому берётся первый и единственный раздел в таблице.
Ну, если ты это проверяешь, хорошо. Кстати если проверяешь в установщике, а не в самом загрузчике, то ситуация после установки могла и поменяться.

Цитата:
Ну так я давно уже об этом молчу, а ты читаешь мои мысли :mrgreen:. Я именно и планировал подготовить комплект стабов на все случаи жизни.
В данном случае я хотел сказать, что после добавления стаба он перестанет быть MZ-EXE, т.к. заголовок будет невалидным. А вот COM можно сделать универсальным.
Я не мысли читаю, а просто делаю это по необходимости. Мне это вообще понадобилось для запуска облегченного варианта системы с NTFS-разделов, о чем я тебе когда-то на буржуйском форуме с радостью и сообщил. Поддержка EXT позволит делать тоже самое на "линуксовых" компах, хотя я и ближайшее мое окружение - виндузятники - ось на линухе если и стоит, то только как вторая.

Как вариант можешь начинать писать мультиформатный вторичный загрузчик :) Правда, там своя извечная дилемма: поддержать ли определенный формат нативно или при помощи расширения. Лично я предпочитаю обычные exe-шники (elf, mz и т.п.) запускать через расширения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OS Boot Tools
СообщениеДобавлено: 05 ноя 2012, 17:03 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1209
pavia писал(а):
У меня есть первичный загрузчик и вторичный. А процесс загрузки у меня монолитный, что не есть хорошо.
В смысле? Жесткая привязка одного к другому?

Цитата:
А надо что-бы пользователи спокойно могли поставить свой первичный загрузчик.
Не буду же я изучать их все. Я вот гляжу Вы уже много изучили.
Если все-таки конечная цель - загрузить ядро, то лучше сразу в него добавлять различные точки входа (Multiboot, Linux kernel).

Цитата:
Думаю сделаю stub для загрузки MZ-EXE. Причём бинарник буду получать простой конкатенацией. Этого как я понял достаточно?
Для MZ достаточно.

Цитата:
И второе всё-таки уйти от своего первичного загрузчика в сторону ваших.
Мои загрузчики закрыты (использовать их в своих целях нельзя за исключением тех, которые я выкладываю сам, как "побочный продукт производства" или как "безнадежно устаревшие версии"). Кроме того, я стараюсь, чтобы они вообще не всплывали в сети.

Цитата:
COM должен иметь размер менее 64КБ (не помню точно цифру), а у MZ-EXE такого ограничения нет. То что у меня сейчас вторичный загрузчик всего 16 КБ это не значит что в будущем он не превысит 64КБ.
DOS может грузить com-файл любого размера, лишь бы он умещался в отведенной для него памяти. Твоя задача как разработчика лишь сделать так, чтобы под верхней границей сегмента размещался стековый дамп.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OS Boot Tools
СообщениеДобавлено: 05 ноя 2012, 18:16 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 976
Откуда: Дагоба
phantom-84 писал(а):
Кстати я добавил к твоей прежней базе 600h только 200h, поэтому откуда ты взял уменьшение размера файла на 4 Кб (620-4=616), не понятно.

Потому что размер сектора может быть до 4к, а я могу читать образ только кратный размеру сектора.

phantom-84 писал(а):
Я конечно понимаю, что если твой код успел успешно отработать, то это означает, что выше образа файла в памяти наверняка есть какое-то свободное пространство, которое код "ядра" может использовать под стек.

Именно. 8 кБ со 100% гарантией. Ну хорошо, я подготовлю новый демо-образ ядра, в котором будет правильная инициализация стека.

phantom-84 писал(а):
Но ты опять разработчиков вгоняешь в большие раздумья: "А сколько там доступного пространства? Лучше сделаю стек поменьше, чтобы случайно не повредить EBDA!"

Этот вопрос элементарно решается. Будет в демо-образе.

phantom-84 писал(а):
К тому же гипотетически существует возможность, что код твоего загрузчика находится выше первого мега и при загрузке образа заполняет доступную базовую память под завязку.

Это нереально.

phantom-84 писал(а):
Ты же не задекларировал, что выше загруженного образа должно оставаться N-ое количество не занятой образом памяти.

Хорошо, задекларирую. Поверь, это действительно наилучшая организация, когда образ снизу до упора, а стек вверху, чем фрагментировать всю память и говорить - вот здесь клочок вы можете использовать для стека (а можете и не использовать, если ваше ядро/загрузчик стекопрожорливы), причём после полноценной инициализации для стека он больше не сгодится, поэтому забудем о нём.

phantom-84 писал(а):
Yoda писал(а):
Предполагается, что гибридность возможна только при одном разделе. Иначе это будет совершенно битый формат. Поэтому берётся первый и единственный раздел в таблице.
Ну, если ты это проверяешь, хорошо. Кстати если проверяешь в установщике, а не в самом загрузчике, то ситуация после установки могла и поменяться.

Проверяю в установщике. Если ситуация поменялась после установки, то, извините, пользователь "сам дурак". Я же говорю, более-менее корректная гибридизация возможна только если раздел один и это - один из FAT-ов. Всё остальное - грубые нарушения спеков.

phantom-84 писал(а):
Как вариант можешь начинать писать мультиформатный вторичный загрузчик :)

Да не буду я его писать, это мне работы хватит до конца жизни, а у моего ядра нет необходимости в нём.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 353 ]  На страницу Пред.  1 ... 14, 15, 16, 17, 18, 19, 20 ... 36  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB