Всем доброго дня! Меня зовут Сергей. Связаться со мной можно по следующим контактам: ICQ: 597-023-587 Skype: s3dworld E-mail: s3dworld@yandex.ru Я решил создать эту тему по двум причинам: 1. Чтобы помочь разобраться другим 2. Чтобы самому лучше разобраться в материале Как мне уже заметили, нельзя всё сразу охватить. Поэтому я решил двигаться последовательно вникая максимально глубоко во все темы (не перепрыгивая ничего на своём пути). Тут я буду описывать то что я знаю, то, о чём я думаю. Буду спрашивать у Вас как правильно поступить. Планирую что данная тема будет очень большой и на основании её я потом создам FAQ. Лишний раз пересказывая то, что ты думаешь уже знаешь, поможет лучше освоить материал и взглянуть на многие вещи под другим углом. Включение компьютера При включении компьютера процессор выполняет команды BIOS. Происходит тестирование оборудования, определяются объёмы оперативной и видеопамяти. Суть того что в этот момент происходит мне не ясна. Наверное чёткой картины нет, так как все компьютеры разные и BIOS'ы тоже бывают разные. Да и думаю что нет надобности понимать того, что происходит в этот момент. После всех диагностик BIOS пытается найти загрузчик операционной системы. Он опрашивает первые сектора всех носителей из списка загрузки. Сектор - это 512 байт информации. Если представить эти 512 байт в смещении в виде 16-ричных чисел, то сектор можно представить как диапазон от 0x0000 до 0x01FF. Так вот, если у сектора байт по смещению 0x01FE равен значению 0x55, а байт по смещению 0x01FF равен значению 0xAA, то такой сектор считается загрузочным и он копируется в память по адресу 0x0000:0x7C00, и управление передаётся на этот адрес. Ко всем 512 байтам можно будет обратиться по смещению от 0x0000:0x7C00 до 0x0000:0x7DFF (если перевести в 32-битный адрес, то получим от 0x00007C00 до 0x00007DFF). В этот момент процессор работает в режиме реальных адресов (R-Mode). В режиме реальных адресов для адресации используются сегментные регистры CS, DS, ES и SS (такие регистры как FS и GS были добавлены позже и могут быть не доступны на ранних моделях процессоров), и смещение. Все сегментные регистры имеют 16-битный размер (слово). Сегментный регистр CS используется совместно с регистром IP для указания на адрес следующей инструкции процессора. Сегментный регистр DS неявным образом используются для работы с данными. Сегментный регистр ES тоже неявным образом может использоваться для работы с данными, а явным образом можно использовать для своих дел. Если есть сегментные регистры FS и GS, то их можно использовать на своё усмотрение. Сегментный регистр SS используется совместно с регистром SP для указания вершины стека. Физический адрес, получаемый от взаимодействия сегментного регистра и смещения, рассчитывается по следующей формуле: Когда процессор начинает выполнять команды по адресу 0x0000:0x7C00 (если перевести в физический адрес, то получим 0x00007C00), в его сегментном регистре CS содержится значение 0x0000. Первым делом, что требуется программе, это настроить остальные сегментные регистры и указать вершину стека. Можно это сделать таким способом (синтаксис FASM): Код (Text): use16 org 0x7C00 mov AX,CS mov DS,AX mov ES,AX mov FS,AX mov GS,AX mov SS,AX mov AX,0x7C00-4 mov SP,AX Стоит ещё заметить, что в реальном режиме работы процессора можно использовать 32-битные инструкции, если же их сам процессор поддерживает. В общем в этот момент наша программа является полным владельцем компьютера. Перед нами открываются огромные возможности для фантазий. Но если разрабатывать операционную систему, то она должна содержаться в виде файлов, то есть должна иметься файловая система. Поэтому нам нужно проверить наш сектор на информацию о файловой системе. Обычно первые три байта загрузочного сектора содержат код прыжка. А за ними следуют данные описания файловой системы. Если мы определили файловую систему и умеем с ней работать, то видимо нам нужно считать сектор, где будет представлен каталог файлов. Там попытаться найти файл с названием загрузчика (например Boot.bin). Если файл не найден, то вывести сообщение и что-то сделать (зависнуть, передать управление BIOS или поругаться на того кто вставил дискету/диск/флешку). Если же файл найден, то отыскать где он находится на носителе и загрузить его по нужному нам адресу, например в 0x7E00. И если это чисто бинарные данные, то передать управление на начало этих данных. Если же это файл с описанием, то нужно считать заголовок и определить где точка входа, и туда передать управление. А вот уже этот Boot.bin должен проверить конфигурацию компьютера, подходит ли процессор для данной операционной системы или нет. Далее он должен определить объём и распределение оперативной памяти. Подготовить все необходимые системные структуры, перевести процессор в защищённый режим, загрузить ядро операционной системы в память и передать ей управление. Вот всё это я и буду делать и Вас информировать в данной теме. Надеюсь что кому-то это будет так же полезно, как и мне.
s3dworld Если хотите помочь разобраться другим - пишите статью с картинками и т.д.. А ещё лучше цикл статей.
Z3N Я считаю что статьи нужно писать когда ты 100% знаешь, а я сам учусь. _sheva740 Чтобы кто-то мог обратиться и я ему помог чем могу. barmaley57 Нет, не смотрел. Не очень то я и люблю чужой код.
Не стоит забывать про релоки. Код помещенный по произвольному адресу, без дополнительной настройки работать не будет.
Зря ты так. Иногда лучше и проще посмотреть, как люди делали, чем биться в попытках изобретения велосипеда. Уж хуже от этого точно не будет
barmaley57 Смещение - золотая вещь. Именно поэтому лучше работать со страничной адресацией и многозадачностью. Скачал исходники и посмотрел. Довольно таки заинтересовали меня драйвера)) Надеюсь никто не обидится, если я буду в этой тебе только лишь писать о новостях, которые я сделал на этом сайте: http://dubrovkin.h18.ru/. В общем я решил что на вышеуказанном сайте я буду вести колонку разработки операционной системы шаг за шагом. Сюда писать когда туда что-то новое добавил. И тут же Вы будите оценивать, поправлять, комментировать. Никто так не против и как вам оформление?
Я лично нет =) оформление сойдет +1 читатель и еще сайты на агаве вроде долго не живут лучше бы на narod'e п.с. если можно и дальнейший код приводите на FASM'e
Ппц, бред какую пишет. Файл то свой Boot.bin чем искать то будешь? Дед мороз чтоли тебе поддержку файловой системы сделает?
bendme А к чему такой наезд? Я же писал что загрузочный сектор должен определить файловую систему и если он её знает, то найти файл Boot.bin. Не внимательно ты читаешь!