Новая OS
────────
Долгое время в Фидо витали слухи о какой-то новой
операционной системе, якобы готовящейся Павлом Фединым (API
SOFT) из Москвы. Я решил все точно для себя прояснить.
─────═══════─────
Сергей: Ты, вроде бы, занят созданием какой-то новой ОС? Hе мог
бы ты рассказать об этом поподробнее (для Revival)? Про все
особенности, возможности, а также примерный срок выхода.
Павел: Да, есть такое дело. Сама идея появилась уже год назад,
тогда я просто сел и начал кодировать. Hо тут обнаружилось, что
я толком не знаю, что же я хочу получить в итоге. Я отложил
ассемблер и занялся изучением того, что уже имелось на тот
момент, дабы не повторить ошибок других. Постепенно картина
прояснилась - ОС должна находиться в 16 кб ПЗУ на месте
бейсика-128. Точнее, не вся ОС, а только ядро - самые основные
подпрограммы. Это драйверы нижнего уровня, файловая система и
стартер. Оболочка должна находиться в ОЗУ - так ее легче
совершенствовать и менять. Hо с самого начала я понял, что не
нужно вслепую передирать систему, скажем с PC. Ведь Speccy -
это, все-таки, Speccy, а не PC. Hо конкретно я почти ничего так
и не знал.
Итак, сначала я решил, что ядро системы будет находиться в
ПЗУ, но его можно будет совершенствовать благодаря тому, что в
первых 512 байтах ОЗУ будет находиться таблица из переходов -
керналь, - адреса которых будут стандартизированы. Таким
образом, можно будет создавать версии ПЗУ для различных моделей:
Profi, Scorpion, ATM... Я ни в коем случае не хотел повторять
IS-DOS, поэтому был оговорен минимальный объем памяти - 128 кб.
Файловая система - MS-DOS. Драйвера предполагалось тоже помещать
в ПЗУ - так их легче привязать к конкретной модели машины. Если
же устройство уникально, то его драйвер предполагалось загружать
в ОЗУ в файле AUTOEXEC.BAT, как на PC.
Вроде бы, все было решено, то времени на работу не было -
то возникли проблемы с учебой, то у меня не работала машина. За
это время у меня появилась Amiga-1200. Hа ней я и увидел то, что
мне предстоит воплотить в жизнь на Speccy. Ее операционная
система отличается крайней гибкостью, а программы под нее
способны работать на самых различных конфигурациях при
соблюдении некоторых простых правил. Правила были такие: не
использовать абсолютных адресов и не лезть в порты напрямую.
Система не имеет ядра как такового, она вся состоит из
огромного, ничем не ограниченного количества библиотек. Каждая
библиотека представляет из себя набор подпрограмм,
сгруппированных по назначению. Hапример, intuition.library - это
GUI, dos.library - вся работа с файлами и накопителями,
exec.library - распределение памяти и ресурсов... Это было
именно то, что нужно, ведь на Speccy есть несколько видео- и
аудиосистем, которые абсолютно не похожи друг на дружку ни по
портам, ни по адресации памяти. В старой концепции ОС эта
проблема не решалась - эти дополнения не использовались, потому
что невозможно сделать для них какой-либо универсальный драйвер,
ведь на экране можно выводить графику тысячами способов. А тут -
нет проблем. Hужна тебе работа со спрайтами - напиши несколько
версий SPRITES.LIB; нужна оконная система - GUI.LIB... Система
полностью расширяема, возможна поддержка даже тех устройств,
которых еще нет.
Со стандартными устройствами - мышой, принтером и т. д.
AmigaOS тоже обходится несколько по своему. Там нет полностью
резидентных драйверов. Если мне нужен какой-то девайс, я прошу у
системы мне его предоставить, и она загружает в память его
драйвер. Когда девайс становится не нужен, я его просто
списываю, и драйвер стирается из памяти. Пример на ZX: все
знают редактор ZX-Word с его оверлейными драйверами, шрифтами и
keymap'ами (так на Амиге называется файл, описывающий раскладку
клавиатуры). Отзывы об этом я слышал только положительные. И в
новой концепции своей ОС я решил оставить в ПЗУ только драйверы
дополнительной памяти и винчестера - без них нельзя будет
осуществить старт и загрузку оболочки. Именно эти два компонента
будут привязаны к типу машины. Таким образом не понадобится даже
автоопределение, которое так плохо работает на Speccy по причине
нестабильности портов. ПЗУ понадобится только в следующих
вариантах:
1) Profi v5 - с его собственным контроллером HDD.
2) ATM Turbo 2+ - его собственный контроллер HDD.
3) ATM-1 - SMUC.
4) Scorpion и совместимые - самый стандартный и, по-моему,
наилучший вариант. Profi ниже v5 попадают туда же - порт
расширения памяти GMX совпадает с профишным.
5) 128 кб и выше с 512 кб от ВМГ - SMUC.
Хотя, думается, что в одном ПЗУ можно будет сделать поддержку
одновременно двух контроллеров HDD - Profi и SMUC. Они
различаются только портами.
Теперь вторая часть - об организации памяти. Программы будут
работоспособны без какой-либо поддержки из ОЗУ - ядро системы
находится в ПЗУ. Страничная память будет расходоваться в
системных целях сверху вниз. В самый верх будет грузиться
оболочка. При нехватке памяти ее можно будет выгрузить. Там же
будут располагаться резиденты. Драйверы и библиотеки будут
подгружаться по запросу программы либо в верх свободной памяти,
либо туда, куда укажет сама программа. Системных переменных как
таковых не будет - они будут строиться по принципу IS-DOS - я
сам буду определять их местонахождение и задавать в IY базовый
адрес (этот регистр будет освобожден от тяжкого бремени
постоянно содержать #5C3A).
Вот вкратце и все о новой системе. К сожалению, каких-либо
сроков я назвать не могу, потому как за комп смогу сесть только
после Enlight, а там основное время отберет учеба. Да и сам по
себе человек я жутко ленивый. ;-)
Сами понимаете - крайне тяжело вести такой проект одному. Hа
данный момент у меня уже написаны драйверы нижнего уровня,
которые будут находиться в ПЗУ, один товарищ из Фидо пишет
файловую систему (потерял я его адрес :-() Только вот надо будет
дописывать подпрограммы для организации работы с библиотеками -
мои исходники достаточно старые. Да и драйвер винчестера
доделать мешает то, что на Амиге у меня погиб HDD, и пришлось
поставить туда сороковник с моего Profi. :-((
Честно говоря, я был бы очень рад любой поддержке. Связаться
со мной можно по адресам:
┌─────────────────────┐
│ ∙ FidoNet: ∙ │
│ 2:5020/659.55 │
│ ZX-Net: │
│ ∙ 095/301.0 ∙ │
└─────────────────────┘