Защищенный режим, разработка ОС, Документация, Обучалки...
Содержание
http://welcome.to/pmode - новый проект, в котором я участвую - примеры программирования для защищенного режима. Примеры сделаны с использованием бесплатных компиляторов. Большую часть исходных текстов составляет Си, меньшую ассемблер. Такое соотношение должно упростить понимание основ защищенного режима.
Микро ядро ОС
Мне было нечего делать и я начал потихоньку заниматься созданием ОС. Кажется, я все еще не плюнул на серьезные, сложные и глобальные проекты. ;))
Я пишу ОС с моим другом Геннадием Прощаевым. Мы консультируемся, обмениваемся мнениями и опытом. Вот его координаты:
Домашняя
страница = http://www.chat.ru/~genapro
E-mail = genapro@chat.ru
На всякий случай, хотелось бы чтобы Вы запомнили, что :
Автор не может быть подвержен ответственности за любой вред причиненный его программой Вам, Вашему оборудованию, Вашим данным. Вы используете его программу на свой страх и риск!!!
Эта программа демонстрирует основны системного программирования в защищенном режиме.
Описание
- 32-х битный защищенный
режим для 386+ процессоров
- Обработка исключений
- Обработка прерываний от
клавиатуры и таймера
- Переключение задач (задачи 0-го и 3-го
колец)
Системные требования
- 386-й или лучший компьютер
- EGA/VGA или лучшая видео система
- DOS 5.0 или лучший (без драйверов
памяти таких, как HIMEM.SYS и EMM386.EXE) или
Windows 9x загруженная в режиме Command Prompt
Only mode
oskernel.zip - 28KB (TAsm 3.2+)
Обучалка по
страничной адресации
Две версии программы (PAGING и NOPAGING) различаются только в одной детали. Первая устанавливает бит PG в регистре CR0 в "1", а вторая не делает этого. Результат разный. Программы пытаются рисовать одинаковым образом цветные рлосы на экране, но из-за того, что в программах работают различные режимы адресации, полосы на экране появляются в различном порядке в этих программах.
Програма является примером монитора v86 режима. Она устанавливает V86 режим и запускает коммандный интерпретатор (COMMAND.COM). Сразу скажу, что в программе где-то есть ошибка, и она не работает на всех компьютерах.
Описание:
Проверено на Wolfenstein 3d ;-)
К сожалению, я обнаружил, что эта программа не всегда работает. Там должна быть ошибка, которую я не собираюсь исправлять, т.к. исходный текст большой и старый. Лучше посетите следующий сайт, т.к. представленные на нем примеры работы с v86 проще и действительно работают:
COFF-утилиты
Представляю Вашему вниманию набор утилит, которые позволят Вам очень просто делать 32-х битные программы для защищенного режима (но не для DPMI), используя Си компилятор DJGPP и ассемблер NASM. Эти утилиты просто делают из объектных файлов типа COFF (".o") программы, содержащие уже настроенные указатели. Т.е. они делают простой аналог COM программы. Подобные программы очень просто загружать и запускать.
Краткое описание
Стандартное расширение для выходных файлов - ".com" ;-). Это потому, что эти программы схожи по своей сути с ".com" программами. Они также содержат короткую часть, которая выдает сообщине типа "Not a DOS or Windows program." и возвращается обратно в систему. Эта короткая часть, предшествующая непосредственно основной программе, содержит информацию необходимую для загрузки и запуска программы (ID-сторку, формат и тип файла, файловые смещения до секций .text и .data, размеры секций .text, .data и .bss плюс размер стека). Главная утилита для преобразования COFF-файлов в COM - Coff2Com.exe.
Т.к. программы для работы в защищенном режиме не могут сами запускаться в реальном режиме, требуется утилита, обеспечивающая такой запуск, это - OSLoader.exe. Этот загрузчик загружает COM программу, делает все необходимые настройки (GDT, контроллер прерываний, таблицы страниц), переключается в защищенный режим и запускает загруженную программу.
Архив включает в себя все исходные тексты утилит, написанных с использованием TASM3.2, DJGPP C 2.95.2 и NASM 0.98. Тексты хорошо комментированы, документация прилагается.
Текущие версии:
Coff2Com.exe - v1.4
OSLoader.exe - v2.2
Надеюсь больше ошибок нет.
Два примера (один - программа на ассемблере, другой -на Си) показывают как работают утилиты.
Программа на ассемблере просто пишет до боли известное "hello world!" и завершается.
Программа на Си более продвинутая:
Обрабатывает исключения, завершаясь.
Обрабатывает прерывания (от таймера, клавиатуры, стандартной мыши в последовательном порту).
Внимание: все прерывания обрабатываются в защищенном режиме, ни одно из них не передается на обработку в реальный режим.
Читет сектора HDD.
Может выполнять некоторые обработчики неаппаратных сервисных прерываний в V86 режиме (например, можно сменить режим дисплея запуская Int 10h в V86 режиме).
Простой менеджер памяти также присутствует. Страничная адресация в нем не используется.
Данная программа также имеет набор некоторых функций из стандартных библиотек языка Си.
Версия программы: 1.0 (23-е января 2000 г.).
Скачать:
coffutil.zip
- 180KB
coffutil_asm_demo.zip
- 5KB
coffutil_c_demo.zip
- 40KB
Загрузочные
сектора, запускающие COM/EXE программы
Когда люди начинают писать какие-либо программы, которые должны автоматически загрузиться BIOS'ом с диска, они очень часто пытаются запихнуть кучу кода в маленький загрузочный сектор. Также часто они включают в код загрузочного диска инициализацию защищенного режима и каждая ошибка ведет к полной перезагрузке, т.к. опять же в маленький сектор не помещаются средства обработки исключений. При этом приходится запускать специальные программы для обновления загрузочного сектора после внесения очередных изменений в код. Не редко люди изобретают новые файловые системы или меняют расположение системных областей. Все это только усложняет процесс разработки, и не понятно зачем все таки люди в конечном счете сами себе усложняют жизнь. Ведь можно всего этого избежать.
Почему бы не написать эти сектора так, чтобы поддерживалась обычная FAT? Тогда бы диски оставались "правильными" и "видимыми" для системы, в которой Вы ведете разработку (DOS, Windows, ...). И почему-бы не сделать загрузочный сектор, способный загружать простые стандартные COM/EXE программы? Тогда можно было бы избежать многочисленных и неудобных изменений загрузочного сектора, и делать обычным образом такие же обычные COM/EXE программы и просто обновлять их на диске по мере надобности без использования специальных утилит для работы с самим загрузочным сектором.
Если Вам нравится эта идея, то мои сектора BootProg Вам придутся по вкусу, т.к. они превосходно справляются с задачей.
Текущаяя версия (1.2) поддерживает стандартные дискеты с FAT12 и жесткие диски с разделом FAT16. Обе разновидности (для FAT12 и для FAT16) я успешно протестировал.
Надеюсь, очевиден тот факт, что программы, которые будет загружать и запускать подобный загрузочный сектор не могут пользоваться сервисом MSDOS, т.к. на момент их загрузки MSDOS отсутствует в памяти компьютера. Программы должны пользоваться сервисом BIOS вместо MSDOS.
bootprog.zip - 50KB (NASM 0.98)
Разработка ОС
для чайников - Загрузчик ОС
Несколько программистов, появляющихся в группе новостей alt.os.development, начало абсолютно новый проект - OS Development for Dummies (Разработка ОС для чайников). Загрузчик ОС является частью проекта. Эту часть выполнил я. Вы можете посетить официальный сайт проекта: http://www.mega-tokyo.com/osd. Последние версии загрузчика вы можете скачать отсюда. Если хотите почитать документацию о загрузчике - читайте.
Intel'овские
документы по x86 and x87
Intel 80386
Programmer's Reference Manual +
Detailed Instruction List (232 KB)
Intel 80386 Programmer's Reference Manual (на русском) (216 KB)
Intel 80486 Programmer's Reference Manual (на русском) (523 KB)
Intel 80387 Programmer's Reference Manual (121 KB)