А никто и не говорит что их надо игнорировать.Сообщение от Paul_ls
Ну, допустим, я ее готов сделать, если вопрос стоит именно так. При условии некоторой оправданности затраченного времени (допустим, ПЗУ с прошивкой продается по 100 руб/экземпляр)Прошивка в ПЗУ надежнее, но кто ее будет делать?
Так, так, так, СТОП!!!Посмотрите опрос по ПЗУ! ДОС должна иметь возможность грузиться с HDD, виртуальную память, многозадачность, эмуляцию устроуств и т.д. Если делать для среднестатстической ZX128, то получится IS-DOS.
Это уже все реализовано и не раз, насколько я понял. Развития не получает по простой причине - отъедает всю память.
Итак, раз уж мы снова говорим о новой ОС, то вот ИМХО первые критерии, которым она должна удовлетворять (и именно от этого надо плясать, а ни от чего другого, иначе мы попросту остаемся без софта):
1. Поддержка ПЗУшного BASIC-48. Простыми средствами, наподобие TR-DOSного RANDOMIZE USR 15619:REM:... Без отбирания верхней памяти под резиденты.
2. Предоставление в пользование программ НЕ МЕНЬШЕ памяти, чем это делает TR-DOS.
3. Работоспособность при области нижней памяти в 48 кб, полностью занятой программой пользователя.
Все полностью ОЗУ-резидентные системы не проходят по этим показателям.
Из этого можно нарисовать например следующую модель распределения памяти (адреса не помню за давностью лет):
1. ПЗУ - 16 кб. В нулевой странице (вместо бейсика-128) - базовая часть ОС (эквивалент KickStart на Амиге). Обеспечивает загрузку с носителя (FDD или HDD) и машинно-зависимый менеджмент страниц.
2. экран - 6912 байтов;
3. буфер принтера - 256 байтов - требуется для функционирования бейсика. ZX-LPRINT 3 им пользуется для своих целей, при его отсутствии первая команда работы с принтером его засрет, посему там разместить ничего не получится.
4. системные переменные Бейсика - требуются для функционирования бейсика как такового
5. на месте системных переменных TR-DOS располагаем BASIC HELPER - резидент, вызываемый вместо 15619, отрабатывающий обращения из бейсика. Ну или альтернативно - патч RST 8, отрабатывающий расширения бейсика (совместимые с Microdrive или свои собственные - отдельный вопрос), хотя это сложнее и наверное требует больше памяти.
6. ВСЕ. Дальше - программа пользователя.
Загружаемая часть ОС хранится в верхней памяти. Задача BASIC HELPER'а при обращении к нему - зная номер страницы и стартовый адрес модуля поддержки BASIC, вызвать модуль, по возврату включить обратно 0 страницу, вернуться. ВСЕ.
Средствами ПЗУ все страницы виртуализируются (жестко спроецированные с #4000 и #8000 выбрасываются), каждой странице присваиваем виртуальный номер от 0 до 255 (достаточно?). Страницы имеют динамический менеджмент памяти. Инсталляция модуля (например загружаемого драйвера) происходит следующим образом: размер мы знаем, ищем самую верхнюю страницу с достаточным местом, грузим модуль, линкуем адреса (модуль релоцируемый), получаем номер страницы и стартовый адрес модуля. Информация о занятых/свободных областях хранится внутри самой страницы. Ограничение - размер модуля не больше 16 КБ, имхо не сильная проблема.
ОС не имеет жестко заданной области системных переменных, параметры передаются через структуры (как в IS-DOS, AmigaOS, и т. д.). Все данные для работы модулей хранятся там же, где и сами модули - в страницах. Какой механизм использовать для обеспечения возможности их модификации из программы пользователя - дело автора модуля.
Загружаемая часть ядра ОС - тоже модуль, загружается первым и хранится в самой верхней странице ОЗУ, ПЗУ вызывает его, зная этот номер страницы, переходом на адрес #FFFD (этим он отличается от остальных модулей). Этот модуль содержит все, что не уместилось в ПЗУ (в том числе и механизм взаимодействия с остальными модулями, таблицу их размещения, основные рабочие переменные ОС, и т. д.)
Описанная карта нижней памяти действительна только при загруженной поддержке бейсика. Изначально при загрузке бейсика в карте памяти нет. Буфера принтера, системных переменных BASIC и BASIC HELPER'а нет. Ограничений на использование HL' и IY тоже нет. Программа пользователя вызывается с включенной 0 страницей ПЗУ и вызвает точки входа ОС прямо оттуда. Переключаться в ПЗУ 48 кб можно, но осторожно (а зачем? ;-)) Единственное, что необходим знать ПЗУшным подпрограммам - номер самой верхней страницы памяти; его можно сделать обязательным аргументом для вызовов ПЗУ и сообщать программе пользователя при старте. Загружаемые модули можно в принципе вызывать и напрямую, зная номер страницы и стартовый адрес модуля, для этого в ПЗУ должны быть функции типа FindModule (этакий аналог OpenLibrary() на Амиге) и SetPage() - включение страницы с заданным номером.
О многозадачности. Увы, это факт, но полноценную вытесняющую многозадачность на ZX реализовать можно только при условии, что мы ограничим пространство программ пользователя в 16 кб. Тогда получаем одну страницу на задачу. Тут были ссылки на UZIX - он сделан именно так. Только на MSX можно переключать страницы в любом окне, а не только в верхних 16 кб. Конкретно в UZIX используются верхние 32 кб. Так что возможна реализация ограниченной многозадачности поверх описанной ОС, но при этом использование уже существующих программ невозможно принципиально, а это есть большущий минус, из-за которого имеющиеся проекты ОС потерпели крах.
Единственная проблема - конфигурация со 128 кб. Придется ухищряться с игрушками, занимающими всю память без остатка и желающими при этом работать с дисками. Увы, совсем без системных переменных, на голом ПЗУ, никакая DOS работать не может. Посему минимальное требование для вызова ОС - нетронутое содержимое как минимум одной страницы (при желании модуль SYSTEM можно легко переместить из самой верхней страницы в любую другую, при этом работоспособность менеджера подгружаемых модулей скорее всего потеряется, но файл прочитать/записать на нативной файловой системе можно - требуемая поддержка есть в ПЗУ). Если игрушка подгрузки/записи не требует - вуаля, делаем что хотим, выходим по кнопке Reset.
Для совсем уж тяжелых случаев - TR-DOS у нас никуда не девается, но ИМХО этих случаев мало. С загрузкой с флопа под музыку придется проститься, однако, хотя через это пожалуй все платформы проходили, никто не умер.![]()
Вот концепция. И никакая другая ИМХО работать не будет.





Ответить с цитированием