OSDev

для всех
Текущее время: 09 май 2024, 13:47

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




Начать новую тему Ответить на тему  [ Сообщений: 129 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9, 10 ... 13  След.
Автор Сообщение
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 25 ноя 2011, 06:45 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
master boot record
MBR содержит небольшой фрагмент исполняемого кода, таблицу разделов (partition table) и специальную сигнатуру.
Задача загрузчика — проанализировать таблицу разделов жёсткого диска, затем либо передать управление загрузочному коду активного раздела, либо загрузить в RAM ядро операционной системы и передать ему управление.

Загрузчик загружает загрузчик, бред какойто
Тогда я писал вторичный загрузчик чтоли.
Я лучше буду писать первичный.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 25 ноя 2011, 11:03 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Станислав писал(а):
Что делает МБР загрузчик, кто его грузит, где он находится(логическом, физическом) я не знаю!!!
Я это понял, поэтому и прошу дать дамп первого физического сектора флешки (т.е. НЕ первого сектора логического тома) и назвать общий размер флешки в секторах. Хотя раз ты уже обнулил первый сектор, то можно просто назвать размер в секторах. Тогда я тебе расскажу, как разметить флешку для твоей работы и еще чтобы ее можно было использовать для хранения файлов. Кстати также скажи, сколько места на флешке тебе нужно для твоих собственных нужд.

Цитата:
Асмом пользуюсь только месяц, я же говорил. Мне нужно только загрузиться в верхнюю память, посадить резидентов, которые обрабатывают клаву и мыш, и передают другим функциям, и графический интерфеёс хотябы 640*480*32 и все.
Пока просто гружусь и в зашишеном режиме работаю с видео памятью 640*480*32 на прямую, осталось подгрузить несколько мегабайтов в верхнюю память. Тогда уже займусь своим делом. Рисованием объектов, виджитов, кнопок, менюшек, мне это больше нравится, они у меня будут росписные;)))).
Понимаешь, только для того чтобы развернуть в защищенном режиме нормальную обработку прерываний, тебе нужно сделать очень много, поэтому я не знаю, как ты с этим справишься.

Цитата:
Загрузчик загружает загрузчик, бред какойто
Тогда я писал вторичный загрузчик чтоли.
Я лучше буду писать первичный.
Все правильно: "загрузчик загружает загрузчик". Вторичный загрузчик - это другое. В моей терминологии MBR-загрузчик - это загрузчик нулевого уровня, а первичный загрузчик раздела - первого. MBR-загрузчики более-менее универсальные, т.е. можно использовать MBR-загрузчик от какой-либо существующей ОС, если ты уверен, что он делает то, что должен. Короче я тебе сделаю разметку флешки, дам свой MBR-загрузчик и расскажу, как всем этим пользоваться - программно ты будешь считывать данные только со спец. раздела, который будет в полном твоем распоряжении.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 25 ноя 2011, 12:15 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Так мне надо пока разобраться со структурой МБР, биус может проверять правильность разметки диска, без неё может мбр не загрузить вообше.
Есть флешка на 1гб на 2гб, сколько надо для моих данных пока не знаю.
Ковыряться в разделах пока не буду, нечайно раздел винта удалил, там вся инфа у меня, сижу востанавливаю, почти получилось.:(
Хочется разобраться с прерываниями апаратными, без них не обойдешся,
думаю поставить на место функции вызываемую от прерывания IRQ1 свою функцию
читать из порта номер кнопки не трудно

труднее будет читать из порта положение мышки на экране и её кнопки с колесиком

| 09h | IRQ1 | Клавиатура |
Встречал такой пример

off_09h equ 9h*4

mov ax, keyboard ;адрес обработчика
mov [off_09h], ax

mov [off_09h+2], ax

keyboard:

ret


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 25 ноя 2011, 13:02 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
Станислав писал(а):
Так мне надо пока разобраться со структурой МБР, биус может проверять правильность разметки диска, без неё может мбр не загрузить вообше.

BIOS ничего не проверяет, только сигнатуру 0AA55h в конце сектора. BIOS грузит самый первый физический сектор выбранного диска, проверяет сигнатуру и (если она есть) передаёт на загруженный сектор управление.
Дальше сам MBR находит первый (загрузочный) сектор логического диска, грузит его на своё место, проверяет сигнатуру 0AA55h и передаёт ему управление.

Станислав писал(а):
нечайно раздел винта удалил, там вся инфа у меня, сижу востанавливаю

Ещё одна причина, по которой первоначальные этапы написания ОС лучше делать в эмуляторе.

Станислав писал(а):
почти получилось.:(

Если не получится, в Москве есть пара неплохих контор, которые восстанавливают данные. Неумелыми действиями можно добить инфу вместо её восстановления.

Станислав писал(а):
Хочется разобраться с прерываниями апаратными

В соседней ветке я дал ссылку на простые тьюториалы. Поработай пока с ними.

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

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 25 ноя 2011, 16:59 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Станислав писал(а):
Есть флешка на 1гб на 2гб, сколько надо для моих данных пока не знаю.
Ковыряться в разделах пока не буду, нечайно раздел винта удалил, там вся инфа у меня, сижу востанавливаю, почти получилось.:(
Мне нужен размер флешки в секторах! Скажи хотя бы примерно, сколько надо: типа 1 мб или полфлешки. По поводу раздела конечно сочувствую и при необходимости могу помочь. DMDE и флешки, и харды называет физикл драйвами, поэтому при выборе диска нужно смотреть на другие признаки (информационный объем и т.п.), а кроме того флешки в списке перечисляются после хардов. Кстати можешь скачать hex-редактор HxD - он дает флешкам и хардам совершенно разные названия.
Изображение

Цитата:
Хочется разобраться с прерываниями апаратными, без них не обойдешся,
думаю поставить на место функции вызываемую от прерывания IRQ1 свою функцию
читать из порта номер кнопки не трудно

труднее будет читать из порта положение мышки на экране и её кнопки с колесиком

| 09h | IRQ1 | Клавиатура |
Встречал такой пример

off_09h equ 9h*4

mov ax, keyboard ;адрес обработчика
mov [off_09h], ax

mov [off_09h+2], ax

keyboard:

ret
Это реальный режим.

Edited. Обновлена ссылка на картинку.


Последний раз редактировалось phantom-84 20 апр 2014, 11:46, всего редактировалось 3 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 25 ноя 2011, 18:32 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Разделы востановил, повезло, кстати у парагона спасаюшая флешка грузится очень не плохо и интерфейс хороший
(линукс движок помоему), востановил удаленые диски. Посекторно искал чтото 4 часа, не дошел даже до одного процента, я его остановил но диски уже найдены были. До порагона пробовал нортон партишен, какойто сдиск, такая лажа.

Секторов на флешке 2012160 нужно примерно 10мб


пример был в зашишеном помоему режим. Мне нужно в зашишеном. Я сейчас там и рисуются пиксели там не плохо. А в длинном у меня почемуто LFB сместился кудато.

Еше такой пример встречал. Сейчас буду на этих примерах тестировать все прерывания
xor ax, ax
mov fs, ax
mov ebx, [fs:0x20] ; взять живой вектор IRQ0 из памяти
mov [SaveIRQ0], ebx ; сохраним для восстановления по окончании работы
cld
cli ; выключим прерывания
dec al ; mov al, 0xFF ; маска запрета всех IRQ8..IRQ15
out 0xA1, al
dec al ; AL = 0xFE --> разрешен только IRQ0 (маска запрета IRQ1..IRQ7)
out 0x21, al
mov ax, EmptyIRQ0 ; это смещение на процедуру замера по IRQ0
mov [fs:0x20], ax ; меняем вектор
mov [fs:0x22], cs ; меняем сегмент на фактический для нашего кода



EmptyIRQ0:
mov al, 0x20
out 0x20, al
IRET


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 25 ноя 2011, 22:31 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Станислав писал(а):
Секторов на флешке 2012160 нужно примерно 10мб

Формат флешки:
1) MBR
2) здесь оставим резерв в 31 сектор
3) твой раздел
4) раздел FAT16 или FAT32
Пункты 3 и 4 можно поменять местами, но при просмотре всего диска будет проще найти твой раздел вручную, когда он находится близко к началу диска.

Формат MBR:
440 байт - код MBR-загрузчика - можно взять любой, но лучше один из моих (почему, см. далее).
4 байта - сигнатура диска - ноль (винда сама изменит это поле, если надо).
2 байта - ноль
16 байт - описатель твоего раздела (hex) - 80 01 01 00 . 1E 00 20 05 . 20 00 00 00 . 00 50 00 00
16 байт - описатель раздела FAT16/32 (hex) - 00 01 01 05 . ?? 1F 60 EB . 20 50 00 00 . E0 63 1E 00
32 байта - нули
2 байта - загрузочная сигнатура 0AA55h

Порядок записи:
1) прописываешь MBR, обнулив описатель твоего раздела
2) извлекаешь/вставляешь флешку
3) форматируешь флешку (винда сама должна прописать байт ??, изначально можешь записать туда 0Ch или 0Eh)
4) прописываешь описатель твоего раздела
5) извлекаешь/вставляешь флешку
В общем все. 10 мег, начиная с 32 сектора, твои. В сектор 0 (первый по счету) раздела (физический сектор 32) записываешь свой загрузчик и загрузочную сигнатуру, в следующие секторы - код/данные для загрузки. Если будешь использовать мой MBR-загрузчик (Alter 2 доступен для скачивания), то он будет гарантированно передавать твоему первичному загрузчику номер диска в регистре dl и описатель твоего раздела в памяти по указателю в ds:si, из которого можно получить положение твоего раздела на диске для динамического вычисления номеров секторов внутри твоего раздела. Например:
Код:
  mov ax,[si+8]
  mov bx,[si+10]
  add ax,1
  adc bx,0
; теперь в ax:bx содержится физический номер сектора 1 (второй по счету) твоего раздела

Программно определить присутствие моего MBR-загрузчика можно, проверив байт по физическому адресу 7DFFh. Если он равен 88h, то мой MBR-загрузчик присутствует.

Если не хочешь заморачиваться со специальным разделом, то не вноси его описатель в MBR. В этом случае ты должен прописать свой загрузчик в первых 440 байтах MBR (не повредив описатель раздела FAT), при этом тебе будут доступны для работы 31 сектор после MBR плюс 10 мег за ними.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 26 ноя 2011, 06:41 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Т.е. после МБР мы описываем раздел который начнется после 31 сектор+10мб, и файловую систему в которой

Тогда я хочю, чтобы мбр сам загружал эти 10мб в верхнюю память, грузил следуюший код (пару секторов)в адрес 0:600 и прыгал на него. А не грузил еше такой же бр на своеже место.
Кстати винда будет форматировать раздел наш правильно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 26 ноя 2011, 11:30 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Станислав писал(а):
Т.е. после МБР мы описываем раздел который начнется после 31 сектор+10мб, и файловую систему в которой
...в которой будешь сохранять файлы обычным образом, а 10 мб - это область для хранения твоего кода/данных (которые ты будешь загружать).

Цитата:
Тогда я хочю, чтобы мбр сам загружал эти 10мб в верхнюю память, грузил следуюший код (пару секторов)в адрес 0:600 и прыгал на него. А не грузил еше такой же бр на своеже место.
Много хочешь. Стандартный MBR-загрузчик будет загружать только первый сектор твоего раздела. Если ты сделаешь свой MBR-загрузчик, то можешь нагрузить его такими функциями, однако 440 байт - это достаточно мало, поэтому лучше сделать двухэтапную загрузку: твой MBR-загрузчик или первичный загрузчик раздела загружает несколько следующих за ним секторов, а код, находящийся в этих секторах, уже загружает все остальное в дополнительную память через буфер в базовой памяти.

Цитата:
Кстати винда будет форматировать раздел наш правильно?
Винда будет форматировать раздел FAT и оставит без изменений область, зарезервированную под твой раздел (ты сначала форматируешь раздел FAT, а потом прописываешь описатель твоего раздела). Только сделай поправку на корявость винды (по крайней мере Win7 - решил сам проверить, что тебе рассказал, и обнаружил это):
Я писал(а):
Формат MBR:
...

Поменяй описатели твоего раздела и раздела FAT местами; винда, видимо, хочет чтобы описатель "ее" раздела был первым в списке.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 26 ноя 2011, 15:15 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Я зделал следующюю вешь.
Очистил сектора на флешке(все). Винда не поняла диже что это диск, попросила вставить диск.
Загрузил загрузчик в рервые два сектора, первый у меня читает второй сектор(уже не 63) и прыгает на этот адресу.
А там я устанавливаю видео 640*480 перехожу в зашишенный режим и работаю с адресом LFB кидаю туда пиксели, вернее сначало по адресу 1048577(т.е. после первого метра)Заполняю память 640*480*4 байта картинкой, а потом d edi заношу адрес LFB, в esi заношу адрес 1048577 и выполняю команду movsd 640*480 раз (так эфективнее). У меня по нажатию кнопок, заполняется экран цветом определенным или делю каждый цвет на 2(эфект затемнения, как раз этот эфект при такой буферезации работает так же быстро как просто заливка экрана цветом).
Но биус не понял такой диск и загрузчик не загрузил, хотя я в пакете указал, что сектор не 64, а 1.
Тогда я в программе dmde-free-2.2.2-win32-gui создал раздел и у меня добавилась информация о разделе в первом секторе.
Тогда биус загрузил все как надо.А раздел могу создавать не с 63 а с какого захочю сектора.
Тогда у меня будут эти сектора для моих ресурсов, а раздел будет чист. и читать я теперь сектора буду уже наконец таки с первого, и загрузчик будет один.
А при доработки кода менять буду второй сектор, первый дорабатывать уже не надо он только читает 10 секторов(с запасом) и прыгает на прочитаное, поэтому не затру разметку.
хочю перевести пока функцию отрисовки шрифтов из файла векторного формата на асм. Для этого 1метра хватит.

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

mov ax, key ; это смещение на процедуру
mov [0x24], ax
mov [0x26], cs

key:

in al, 60h ;скан-код нажатия получаем из порта 60
вызов функции если кнопка подойдет
iret


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 129 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9, 10 ... 13  След.

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


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

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


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

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