OSDev

для всех
Текущее время: 27 апр 2024, 09:09

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




Начать новую тему Ответить на тему  [ Сообщений: 129 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 13  След.
Автор Сообщение
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 28 окт 2011, 17:37 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
В принципе, код валиден, хотя и кривой. По крайней мере, Бокс его загружает и исполняет, как задумано.
Могу предположить следующее:
- БИОС не предпринимает попытки загрузиться с флешки. Другую ОС пробовали загрузить?
- Слишком умный БИОС не хочет грузиться с флешки, на которой нет ни одного раздела или признаваемой файловой системы.
- Попробуйте всё же инициализировать стек.

Да, сигнатура 0xAA55 в конце обязательно, всё верно.

phantom-84,
Код Станислава вполне валиден с точки зрения требований к MBR. Просто таблица разделов пустая.
Нет необходимости запрещать прерывания перед установкой стека. Любая загрузка сегмента стека автоматически запрещает прерывания на следующую инструкцию.

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

<<< OS Boot Tools. >>>


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

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Станислав писал(а):
но если в конце сектора, после 510 байт не будет 0x55, 0xAA то биус не будет считать его загрузчиком??
А переписывать только первые 440 байт религия не позволяет? Сигнатура и таблица разделов пусть существуют в неизменном виде.

Yoda писал(а):
Код Станислава вполне валиден с точки зрения требований к MBR. Просто таблица разделов пустая.
Просто ее сделали пустой :) А ведь можно было проводить подобные эксперименты и не нарушая логической структуры флешки.

Цитата:
Нет необходимости запрещать прерывания перед установкой стека. Любая загрузка сегмента стека автоматически запрещает прерывания на следующую инструкцию.
Я это знаю. Это тоже дань традиции, ведь так было не всегда.


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

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


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

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
У меня загружается с флешки код :)
use16
org 07C00h

mov ah,14
mov bx,H
mov al,[bx]
int 10h
inc bx
mov al,[bx]
int 10h
inc bx
mov al,[bx]
int 10h
inc bx
mov al,[bx]
int 10h

mov bx,00600h
mov ah,02h ;читать
mov al,01h ;кол-во читаемых секторов -1
mov ch,0 ;номер цилиндра - 0
mov cl,02h ;начальный сектор - 1
mov dh,0 ;номер головки - 0
mov dl,80h ;жесткий диск - 80h
int 13h ;прерывание
jmp 0000:0600h ;переход на 0000:0600h, куда загружен второй сектор

ret ;Завершим программу

H db 'Helo'

rb 510-($-7c00h)
db 0x55, 0xAA


Алилуя
Но не загружается второй код
Может диск не тот указываю?

Вот второй
org 00600h ;этот сектор будет загружаться по адресу 0000:0600h

mov ah,14
mov bx,H
mov al,[bx]
int 10h
inc bx
mov al,[bx]
int 10h
inc bx
mov al,[bx]
int 10h
inc bx
mov al,[bx]
int 10h

ret ;завершим программу
H db 'Hiii'
db 483 dup(0)


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

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Прочитал распределение памяти биосом
; 00000-005FF используется BIOS ( 1536 )
; 00600-07BFF свободно ( 30208 )
; 07C00-07DFF программа начальной загрузки ( 512 )
; 07E00-9FFFF свободно ( 623104 )
; A0000-FFFFF используется BIOS ( 393216 )

значит можно грузиться в 00600-07BFF свободно ( 30208 )
и 07E00-9FFFF свободно ( 623104 )

Кто знает?


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

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
На осдевовской вике я в своё время достаточно подробно расписывал и распределение памяти, и методы определения адресов и объёмов свободного ОЗУ. В частности, старшая часть нижних 640 Кбайт занята данными BIOS; она была свободна лишь в очень древних машинах. Поэтому абсолютно необходимо запрашивать у BIOS объём "нижней" памяти, а не считать, что он равен 640 Кбайтам. На практике может быть и 639, и меньше (правда, меньше 633 вроде не встречалось).


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

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Мне нужен кусок свободной памяти чтоб там загрузить код для функций с работой весой перебора и установки видео режима
и получении адреса видео памяти и свободной видео памяти перевод в 32 или 64 битный режим адресации памяти
и загрузить дальше в верхнюю память. Или сразу с загрузчика переходить в верхнюю память и выполнять там всё?

А если сразу после загрузчика в 07E00-9FFFF?????
int 12h для доступной памяти в первом мегабайте она даёт размер свободной в ax, a c чего начинать???


Последний раз редактировалось Станислав 13 ноя 2011, 09:48, всего редактировалось 1 раз.

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

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Первый вариант значительно лучше. Не следует делать в первичном загрузчике то, для чего он не предназначен. Я при необходимости заполняю всю базовую память под завязку, т.е. загружаю один или два файла в память в диапазоне от 8000h (32 кб) и вплоть до области EBDA - получается около 600 кб (640-32 и -8 на EBDA).


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

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Вот смотри тебе, доступно гарантированно 32 кбайта памяти за исключением таблицы прерываний и переменных биоса. И сам загрузчик 0.5 кбайта
т.е 32 кбайта - 1.5 кбайта - 0.5 кбайта=30 кбайт. Это достаточно чтобы загрузить любую программу.

Первое что должна сделать эта программа определить доступную ей память. int 12h для доступной памяти в первом мегабайте и int 15h для памяти которая выше первого мегабайта.

Второе не обязательное это установить нужный видео режим.
Третье загрузить первичный драйвер цифрового носителя информации(жесткого и/или флешки и/или драйвер ОЗУ диска) и определить первичный диск.
Четвёртое загрузить ядро.

Дальше уже можешь делать что хочешь.

Тут не все просто. Надо сказать про память int 12h возвращает непрерывный кусок. А int 15h возвращает куски памяти.
Чтобы двигаться дальше нужен маломальская программа для управления памятью.

Самая примитивный руководитель памятью это стек. Он даже реализован аппаратно.
Что он даёт. А даёт он экономию памяти. К примеру на стеке мы можем выделить 512 байт чтобы получить информацию о видео режиме. Установить нужный потом освободить память. Выделить память для буфера считать в этот буфер каталог раздела. Найти запись. Освободить буфер. Выделить новый буфер считать в него первичный драйвер.
Но стек обладает рядом недостатков. Он позволяет освободить только память сверху и нельзя освободить в центре.
Да и работает только с непрерывным участком памяти.
640 кбайт хватит на всё если разумно управлять ей.

Сразу не советую делать. Лучше делать циклически. Это как эволюция. Миллионы лет прошло пока от элементарного микроорганизма получился человек. Но в утробе он проходит все стадии развития. Также и с ОС чтобы сконструировать надо против се стадии. А потом при загрузке оно будет проходить эти стадии развития.
Далее по "*" будет обозначен процесс эволюционирования в своих терминах, а под "**" процесс загрузки.
*** Задачи или то что тут должно работать.

0. Вначале элементарную ОС.
* Цель этой ОС определить непрерывный кусок памяти и загрузить элементарную программу в память. И передать её управления.
** Первичный загрузчик он грузит вторичный из файловой системы.
*** В отдельном файле должна быть элементарная программа "Здравствуй мир!"
1. Стадия ДОСа. Или ОС используемой в микро контролёре. Или UNIX.
* Цель этой ОС создать среду для более развитой программы. Вывод строки на экран(без vesa), вывод чисел. Элементарный менеджер процессов. Элементарный драйвер цифрового носителя информации(через int 13h). Элементарный менеджер памяти (стек или куча).
Разумеется оно должно загружать некоторую программу.
** Вторичный загрузчик. Такой как LILU или GRUB или NTDetect. Который грузит третий загрузчик.
***Для тренировки и показать что ОС действует написать две программы, получения списка файлов передать данные во вторую программа которая это безобразие от сортирует. И третья программа обработка клавиатуры сделать меню NC, FAR командора. Можно сделать программу которая переходит в защищённый режим.
2. ОС абстрактным уровнем.
* Цель этой ОС создать среду для более развитой программы. Скрыть детали общения. Произвести определения железа. Загрузить нужные драйвера. Вот тут уже можно вводить vesa, появляется виртуальная функция setPixel и GetPixel. Менеджер памяти развивается нужна сделать виртуальную память. Это такая память которая делает из доступных кусочков памяти один непрерывный участок. Делается это аппаратно либо программно. Аппаратно через страницы программно через виртуальную машину.(Можно запрограммировать интерпретатор языка бэсик)
Загружаются драйвера. Общение к драйверам должны идти через единый сервис. Что-то типо read, write, comand
Организовать виртуальную файловую систему.
** Загрузчик 3 уровня. Обычно находится в ядре где и инициализирует его. Хотя на самом деле немного размазан на вторичный загрузчик. Так называемый HAL. В виндоусе можно наблюдать бегущую линию в линуксе вывод лога загрузки.
*** Сделать командную строку. Запуск программ из командой строки. К примеру файлового командира такого, как far или totalcomader. При этом копирование файлов должно идти в отдельном процессе.

3. ОС виндоус или линукс или java машина.
* Организовать защищенную файловую систему. Сделать менеджер задач, организовать псевдо многозадачность при помощи таймера. Оконный менеджер. Менеджер памяти развить на задачи, сделать свопирование. Тут ещё много дел.
** Полноценное ядро.
*** Браузер инернета.


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

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Цитата:
Но не загружается второй код
Может диск не тот указываю?
Попробуй использовать значение dl, полученное от BIOS. Кроме того, флешки обычно читаются функцией 42h.


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

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


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

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


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

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