WYOS - Выпуск №14
Баловство с загрузкой
commrade, Среда, 30 Июнь 2004, 23:31
Напиши свою ОС! #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).
это контент от Центр информации по операционным системам
( http://www.osrc.info/plugins/content/content.php?content.18 )