Объективный анализ "ЧТО ЕСТЬ, ЧТО МОЖНО И ЧТО ВОЗМОЖНО"
Автор: =A=L=X=
Тяжкие мысли о грядущем перевороте на рынке ОС и крахе Microsoft Windows...
Итак, начало уже положено (или покладено), загрузчик есть.
Теперь настало время объективно оценить возможности и силы, чтобы понять что реально сделать...
Написав загрузчик что мы поимели? Мы поимели вход в наиболее простую часть платформы Intel IBM PC - реальный режим.
Что у нас есть на руках?
1. BIOS.
Какая никакая, а власть над:
а) посекторным чтением/записью дисков, т.е. дискетой, которая у нас в 100%-ой власти и где уже лежит бут-сектор...
б) переключением видеорежимов
в) доступ к клавиатуре
г) периферия COM/LPT
Мы уже имеем.
Отмечу, что VESA, Sound, USB - всё это остается за бортом. Ну и хрен с ним.
2. Платформа
x8086 в полном распоряжении. 16-битный реальный режим (32-битный отметается сразу же, ввиду многих причин технического характера сложности), 1 Мегабайт оперативной памяти, состоящий из 16 сегментов по 65536 байтов каждый.
ЭТО УЖЕ КОЕ ЧТО!
Хочется пойти сразу двумя путями - по пути упрощения и по пути унификации одновременно.
Но стоит ли гнаться за двумя зайцами одновременно?
Думаю что нет.
Ведь в принципе, у нас уже есть всё, чтобы разработать ОС, по тех. характеристикам, сравнимую с Palm OS!
Мои предложения:
а) определится с форматом файловой системы. сделать очень примитивную, например такую:
- 1024 файлов на дискете как максимум
- файл имеет имя состоящее из любых печатных символов до 16 символов
- файл записан на дорожках монолитно, т.е. имеет начало и конец в линейном представлении head/cylinder/sector
б) определится с форматом ОС и её API.
например.
Второй сегмент памяти - это и есть резиденция ОС. (почему не первый? потому что в первом вектора прерываний и явственно чувствуется мне, что там есть какой-то код от BIOS ввиду этого, поддерживающий ту же клавиатуру).
Загрузчик находит на дискете файл "system", грузит его в сегмент памяти и передает управление на 0100:0000
system должен предоставить прикладным программам некий API, так, чтобы они не вызывали никаких функций других API явно (например к BIOS-у они обращаться уже не должны).
Функции API инициируются прикладными программами вызовом int 21h (как в дос), с номером функции в ax и всеми остальными регистрами заполненными параметрами.
Первые претенденты на реализацию - это чтение/запись файлов, ввод с клавиатуры, вывод на экран и ф-я завершения приложения.
в) определяемся с форматом запускного файла.
тут думаю тоже всё просто - файл тупо грузится в некий свободный сегмент по 0000 (от 3 и выше), все сегментные регистры настраиваются на этот сегмент, sp=FFFF, и совершается переход на сегмент:0000.
г) определяемся с архитектурой среды
думаю что переключение видеорежимов будет излишне, выберем один видеорежим как базовый, и стандартные приложения будут рассчитаны на него.
из претендентов наиболее подходящих считаю VGA 320x200x256цветов.
во первых - яркая и красочная палитра из 256 цветов (128 первых думаю сделать системными, неизменяемыми, а 128 верхних - отдать под власть программы).
во вторых - наиболее прост в манипуляции записи/чтения в видеопамять.
д) пишем основу ОС - файловый менеджер или что-то в этом духе, первопричинный способ запускать и контролировать другие программы.
тут думаю пойти альтернативным путем, нежели консольная строка.
действительно, нахрена нам эта доисторическая консоль и консольный способ взаимодействия с программами вообще???
менеджер ОС будет изначально ГУЕ-вым. не окошки конечно, но типо выводится список файлов, определенными клавишами мы можем запустить файл, а если он предполагает какие-то параметры - ввести их в удобном диалоге ввода (возврат к формату исполняемого файла и зачатки для program interoperability здесь же надо обдумать).
всё выше писалось предположительно на асме типа turbo assembler (по крайней мере я не сомневаюсь что там возможно всё это сделать, а вот как с binary c/c++, не знаю).
поэтому следующий архиважные шаги, это:
а) написание первой программы-текстового редактора
б) написание первого ассемблера под эту архитектуру
И ВСЁ! с этой точки следования мы ОС становится полностью самодостаточной - в ней уже можно писать самою себя!!! =)
8 января 2008