> man operating_systems
WYOS - Выпуск №14
Баловство с загрузкой
на Среда, 30 Июнь 2004, 23:31
добавил: commrade список авторов печатать элемент контента создать pdf-файл  элемент контента
категория Статьи > Write Your Own OS
комментарии: 0
просмотров: 691

Возвращение к загрузке со свежим примером.

Напиши свою ОС! #14
Здравствуйте, уважаемые подписчики!

Сразу же хотел бы попросить прощение у вас за столь долгий перерыв в выходе нашей рассылки. Это было вызвано болячками одного из редакторов рассылки (моими).
Новости 3OS
После продожительных боев с html и php, а также другими интернет-технологиями наконец-то заработал официальный сайт проекта 3OS www.3os.ru. Ура товарищи, то есть господа!!!!
Вступление
Просмотрев предыдущие выпуски рассылки я подумал, что пока теории хватит (на первое время), пора попробовать перейти от теории к практике. И начать практическое занятие я хотел бы с процесса загрузки ОС. В этом номере рассылки мы с вами попытаемся прописатся в загрузочном секторе дискетки формата 3,5``, затем загрузиться с нее и сделать так, чтобы у нас на эране монитора отобразилась какая-нибудь надпись.
Об инструментах
Для разработки загрузчика нам понадобятся ассемблер и С/С++ компилятор. В принципе подойдут любые программные средства разработки, потому-что переделать программу написанную для MASM не составит труда переписать под TASM или другой ассемблер, главное - это ухватить идею (проще говоря алгоритм работы программы). Я же привожу примеры кода написанные под следующие инструменты: ассемблер - FASM, С/С++ - компилятор C++ Builder 5.0.
Код загрузчика
Итак приступим. Ниже я привел пример кода. Код до безумия прост, когда компьютер начинает загружаться на эране должна появиться надпись ""... Вот собственно и все что она должна сделать. Ассемлерный код имеет комментарии в которых описанно, что они делают комментировать что либо еще по моему излишне. При желании можно модифицировать код так, чтобы он выводил надпись либо "Zdes byl Vasya" либо "Privet percy". А че через транслит спросите вы, че кирилицу уже отменили? Да нет, просто стандартный BIOS не имеет в своей памяти кирилической таблицы. О том как сделать так, чтобы на эране появилась надпись на русском в следующем выпуске рассылки.
org 7C00h

start:
        mov ax,0b800h   ;0xb800 -- это адрес сегмента 
                                 ;видеопамяти в текстовом режиме.
        mov es,ax       ;копируем это значение в сегментный 
                              ;регистр es
        mov ax,41h      ;Первый -- это значение ascii-кода
                               ;символа, который вы хотите вывести на экран
        mov es,ax       ;снова копируем это значение в сегментный 
                              ;регистр es
        mov ax,1fh      ;Второй -- атрибут символа. Атрибут 
                              ;содержит следующую информацию:
        mov es,ax       ;цвет символа, цвет фона, мерцание 
                              ;и потом опять копируемв es
loop1:  jmp loop1       ;команда jmp указывающая на саму себя

После компиляции (именно компиляция, а не что то другое) вы должны получить стандартный файл с расширением .com, обзовите его как-нибудь, например, "boot.com". Не вздумайте его запустить - ваш комп стопроцентно зависнет, тогда придется нажимать нашу любимую клавишу "Reset".
Запись в загрузочный сектор дискетки
Для записи в загрузочный сектор дискетки нам понадобиться приложение под Windows. Создайте новое приложение с помощью Console Wizard. В появившемся окне выберите Source Type=C, поставте галочку против пункта Console Application. Нажмите ОК. Введите код на языке С указанный ниже. Да чуть не забыл, не забудьте подключить директивой #include следующие загаловочные файлы: io.h, fcntl.h, errno.h, stdio.h. Подключили? Ну тогда поехали.
int main()
{
        char bootbuf[512];
        int deskfloppy, deskfile;
        //char err;
        bootbuf[510]=0x55;
        bootbuf[511]=0xaa;
        
        deskfile=open("boot.com", O_RDONLY);
        if(deskfile==-1)
        {
        perror("Error open boot.com");
            return 1;
        };
        read(deskfile, bootbuf, 510);
        close(deskfile);
        deskfloppy=open("A:/", O_RDWR);
        if(deskfloppy==-1)
        {
        perror("Error open disk A:");
            return 1;
        };
        lseek(deskfloppy, 0, SEEK_CUR);
        write(deskfloppy, bootbuf, 512);
        close(deskfloppy);
    return 0;
}

Загрузка с дискетки
Перезагрузите компьютер. В BIOS'е поставьте загружаться с диска А. Сохраните настройки и выйдите из BIOS'а. Вставте дискетку до начала запуска компьютера. Если вы все сделали правильно на экране должна мигать буква "".
Заключение
Вот вроде и все на сегодня. Все бы хорошо, но тут я обнаружил, что мое второе я (этот монстр из фильма "") специально, что бы вам, уважаемые, не было легко и приятно наделал ошибок в коде, найдите их пожалуйста и напишете мне. А вы что думали, что commrade напишет код, а вы придете на все готовенькое, нетушки, давайте и сами думайте, придумывайте и пишите мне - наиболее понравившиеся образцы кода мы опубликуем в рассылке. Под конец я решил дать вам некоторые задания для развития навыков программировани.
Упражнение 1
Найдите и исправьте ошибки в текстах обеих программ.
Упражнение 2
Модифицируйте программу так, чтобы она выводила надписи на русском языке.


Ну вот теперь все, желаю удачи на ниве программировани ОС, ваш commrade.
Список литературы, источников информации и другой интересной информации
1. http://www.linuxgazette.com - море различной информации из мира *nix систем

2. Кришнакумар -- студент последнего курса B.Tech в Govt. Engg. College Thrissur, Kerala, Индия. Его путешествие в земли Операционных Систем началось с программировани модулей для Linux. Он создал операционную систему GROS, основная цель которой -- выполнение функции маршрутизатора. (Детали вы можете найти на его домашней странице: http://www.askus.way.to/ ) Другие его интересы -- это сетевые драйвера, драйвера устройств, портирование компиляторов и встроенные системы (Compiler Porting and Embedded systems).


Комментарии доступны только авторизованным пользователям, авторизуйтесь или зарегистрируйтесь на сайте здесь

© OSRC.info, 2004-2010.
Авторские права на любые материалы, авторы которых явно указаны, принадлежат их авторам. По вопросам публикации таких материалов обращайтесь к авторам.
Авторские права на любые другие материалы принадлежат OSRC.info.
Сайт является помещением библиотеки. Копирование, сохранение на жестком диске или иной способ сохранения произведений осуществляются пользователями на свой риск.
При использовании материалов сайта ссылка на OSRC.info обязательна.