01.12.2021

PC-MOS/386

Привет! Это черновик заметки, которая должна была быть опубликована в моём блоге. Но так как блог сейчас сломан, я решил опубликовать её здесь. Кто-то недавно жаловался, что на ЛОРе недостаточно ХАБРа? Ну вот вам пост в стиле хабра. Поехали.

PC-MOS/386 — это многопользовательская и многозадачная операционная система, совместимая с MS-DOS 5. Разрабатывалась компанией The Software Link до 1987-го года.

Операционная система использует защищенный режим 386 для изоляции виртуальных машин с приложениями MS-DOS. Поэтому большинство программ, использующих только документированные API MS-DOS, должны работать без проблем.

В 2017-м году исходный код был перелицензирован под GPL3 и выложен на гитхаб. Кроме исходников, репозиторий содержит образы официальных установочных дисков и сканы оригинальной документации в PDF. Также там была исправлена проблема в обработке даты модификации файлов, которая не давала открыть файлы, созданные после 2012-09-01.

Так что теперь можно вполне законно и не нарушив ни одной EULA запустить эту самобытную ОС в виртуалке или даже на реальном железе.

Я немного погонял её в qemu, и пока вопросов у меня больше, чем ответов. Почитать официальный мануал (довольно длинный и в плохом качестве скана) пока времени не было, так всё методом тыка.

Многозадачность

Многозадачность реализована в виде отдельных контейнеров с приложениями. При запуске системы пользователь попадает в первый контейнер, в котором запущена оболочка COMMAND.COM. Далее командой ADDTASK можно добавить другие задачи, в которых по умолчанию также запускается оболочка COMMAND.COM. Для каждой задачи обязательно указывать количество памяти, которое будет выделено под задачу.

Командой SWITCH можно переключаться между задачами. В справке также были упомянуты хоткеи Alt + цифра для этой же цели, но у меня они не заработали.

Можно активировать TSR-программу MONITOR, после чего через Ctrl + Space можно вызывать интерактивное меню для переключения задач и создания новых.

Правда в каждой новой задаче эту команду нужно повторять заново, чтобы в этой задаче работал хоткей Ctrl + Space. Думаю, нужно команду MONITOR прописать в AUTOEXEC.BAT, чтобы она применялась автоматически.

Команды ОС

В этой ОС команды не отвечают на ключ /? и любые другие варианты справочных ключей, которые я пробовал. Вместо этого есть интерактивная справка по команде HELP. По виду и принципу работы напоминает справку из сред разработки QBasic и Turbo C. По команде HELP .КОМАНДА (с точкой перед командой) можно попасть сразу в нужный раздел справки. (А при чём тут точка, вы можете узнать, набрав HELP .DOT.)

Справочная информация довольно куцая, в основном перечисляет ключи команд. Например для команды ADDTASK не написано, что объем выделяемой памяти нужно вводить в килобайтах. Возможно, для пользователей системы тех лет это было очевидно, но всё же. Описания каких-то общих принципов, важных для понимания работы конкретно этого клона DOS, отсутствуют. Возможно, они есть в бумажном руководстве, которое я не читал.

В командной оболочке работают стрелки влево-вправо, Backspace и Delete. Клавишей Insert можно переключать режим ВСТАВКА/ЗАМЕНА, при этом меняется форма курсора. Режим ввода по умолчанию — ЗАМЕНА, что неудобно. Чтобы ВСТАВКА была по умолчанию, нужно в AUTOEXEC.BAT вписать команду INSERT.

Я также проверил все сочетания Ctrl + буква. Ожидаемо работают Ctrl + H как аналог Backspace и Ctrl + M как аналог Enter. Ctrl + C прерывает ввод текущей команды без выполнения. Остальные сочетания просто выводят на экран символы псевдографики.

Последовательное нажатие Esc + буква в командной оболочке выполняет ту же роль, что и Ctrl + буква, только еще и наводит беспорядок на экране при этом. Сочетания Alt + что угодно или Esc + что угодно, привычные миру Unix, тут , похоже, невозможны. (В других приложениях Esc работает как самостоятельный хоткей. Например в интерактивной справке закрывает текущий раздел справки.)

История команд доступна через стрелку вверх и вниз. Между сеансами история не сохраняется.

ED — простой редактор с двумя режимами: визуальным и командным. В визуальном режиме мало отличается от любого редактора любой ОС: стандартные клавиши навигации, режим вставки и замены, хоткеи на Ctrl + буква.

Переход в командный режим по Esc. Командный режим своей лаконичностью напомнил даже не редактор vi, а редактор в составе Basic из ZX Spectrum.

В справке отсутствует клавиша для перехода обратно из командного в визуальный. Разумное предположение, что это должна быть кнопка V — оправдалось. :)

Команда ACU открывает интерактивное меню с настройками системы и встроенной справкой по каждому пункту через F1. Справка пытается быть информативной, но без мануала я всё равно не разобрался во всех настройках полностью. Выбранные настройки записываются в CONFIG.SYS.

Команды MOS и MOSADM позволяют просматривать и изменять различные параметры системы. Синтаксис команд использует подкоманды аналогично как в современных программах git, docker и т.п. Помню, что MS использовала такой же подход уже в NT-based системах для команд настройки сети, а вот были ли подобные команды с подкомандами в MS-DOS, не припомню.

Проблемы

Почему-то не работают стрелки на основном блоке клавиатуры. Стрелки на блоке NumLock работают, но пользоваться ими неудобно, так как в свою очередь на этом блоке не работает Enter. Возможно, это какая-то проблема совместимости с QEMU. Нужно будет попробовать в другой виртуалке.

Позже заметил, что кроме стрелок, такая же проблема с клавишами Insert и Delete. Они работают с Num-блока и неработают с основной части клавиатуры.

При переключении между задачами содержимое экрана не восстанавливается, остаётся от старой задачи. Может быть нужно что-то где-то довключить в настройках, я пока не разобрался.

Упомянутые ALT + цифра для переключения между задачами не работают. Или я делаю что-то не так, или опять проблема с обработкой ввода, и система не распознаёт ALT.

Впрочем, все перечисленные проблемы и сложности могут быть связаны с тем, что я использовал версию, скачанную с какого-то сайта с коллекцией старых программ, а не чистую установку из официального образа.

Еще одна проблема — не столько даже проблема системы, сколько особенность эпохи. Ни одно из приложений системы не уводит процессор в сон между прерываниями даже когда ничего делать не нужно. (Уж хотя бы COMMAND.COM мог бы это делать по умолчанию.) Из-за этого одно ядро постоянно нагружено на 100%, и мой ноутбук показывает температуру 82 градуса. И поэтому все эксперименты с PC-MOS сопровождаются отчётливым звуком П-Ш-Ш-Ш-Ш из вентиляционной решетки.

Что дальше

Было бы интересно поэкспериментировать с этой системой, разобраться в документации и в её устройстве и, возможно, найти все куски тулчейна для сборки и покопаться в исходниках.

Учитывая, что GEM 3.13 теперь тоже опенсорсный, можно попробовать запустить на ней GUI.

Где-то мне попадалась подборка утилит наподобие grep для MS-DOS, которую было бы неплохо добавить.

Еще один интересный вопрос — установка на один раздел с FreeDOS в разные каталоги с возможностью выбора операционной системы при старте. (FreeDOS с большим уровнем совместимости с софтом или PS-MOS с меньшим уровнем совместимости, зато многозадачная.)

>>> Просмотр (724×453, 15 Kb)

Источник.