Операционная система CP/M-80
Эдуард Пройдаков
В Москву CP/M-80, написанная Gary Kildall (главой небольшой компании Digital Research Incorporated, DRI, основанной им и его женой Дороти в 1976 году), попала через МНИИПУ (Международный НИИ проблем управления) скорее всего в 1981-м году. Точно эту историю знал Валерий Чуклов, работавший тогда в МНИИПУ с.н.с. в лаборатории Евгения Евгеньевича Дудникова, но, увы, теперь не спросишь.
Известно, что CP/M-80 (Control Program for Microcomputers) в 1976-м году написал Гэри Килдалл, преподаватель программирования из высшей военно-морской школы в Монтерее (шт. Калифорния). Он читал там достаточно серьёзный курс по разработке компиляторов.
Килдалл был также знаком с процессором 4004, написал в 1974 г. его эмулятор на большой ЭВМ, затем стал консультантом корпорации Intel по микропроцессорам. Он же создал язык программирования PL/M-80 [5] и написал для него первый компилятор (1972 г.).
Эта однозадачная простейшая ОС состоит из трёх модулей:
-
BIOS – аппаратно-зависимой подсистемы ввода вывода, поставляющейся в исходных текстах на Ассемблере 8080, что позволяет настраивать CP/M под любую конфигурацию компьютера. BIOS – был впервые придуман создателем этой ОС Гари Килдоном. Как мы видим, данная сравнительно простая идея стала стандартным подходом в микропроцессорной технике. В этом блоке в качестве обязательных находились драйверы накопителя на гибком диске и драйверы монитора и клавиатуры. Остальное можно было добавлять по необходимости. В минимальной конфигурации BIOS CP/M-80 занимает около килобайта. Типичный размер – от 2 до 4 Кбайт. Это связано с объёмом имевшихся в то время ППЗУ (широко использовались микросхемы EPROM с ультрафиолетовым стиранием ёмкостью 2, 4 и 8 Кбайт, например Intel 2704, 2708, 2716).
-
логическая система ввода-вывода. Размер этого блока 2 Кбайт. В CP/M-80 входило десятка полтора системных вызовов, которые позже стали называть API (Application Programming Interface – интерфейс прикладного программирования) – это набор стандартных программных прерываний, вызовов ОС, которые прикладные программы должны использовать для запроса и получения соответствующих услуг от операционной системы.
-
CLI – интерпретатор командной строки (использовался только текстовый интерфейс). Тоже объёмом 2 Кбайт. Команды СLI хорошо знакомы всем, кто сталкивался с MS-DOS.
Известны следующие версии CP/M: 1.1, 1.4 (1978 г.) 2.0 (1979 г.), 2,2 и 3.
Базовый набор утилит, поставлявшихся с CP/M-80 был до смешного мал и состоял из отладчика, простого построчного текстового редактора, ассемблера, утилит для преобразования объектного формата в шестнадцатеричный и наоборот. Они нужны были для подготовки файлов для записи в ППЗУ и ручной компоновки программы.
Понятно, что дизассемблировать 4 Кбайта машинного кода никаких трудов не составляло, и это многократно сделали разные люди. Поэтому CP/M-80 стояла практически на всех выпускавшихся в СССР 8-разрядных микрокомпьютерах, а также на поставлявшейся из ГДР К-1715.
CP/M-80 была стандартом для 8-разрядным микромашин, и более четырёхсот различных производителей поставляли с ней свои машины [4].
Стояла CP/M-80 и на выпускавшейся Минприбором СМ-1800, там она называлась МИКРОС-80. Работа на ней велась в ИНЭУМе в лаборатории Леонида Иткина (к сожалению, рано умершего от рака), входившей в отделение Игоря Яковлевича Ландау, а затем, после перехода этого отделения в ИПИАН, в этом институте.
Более того, как только появился процессор Intel 8086, CP/M-80 была немедленно портирована на него с помощью утилиты называвшейся CONV86 (были и другие утилиты того типа). Она преобразовывала программы на ассемблере микропроцессора 8080 в программы на ассемблере 8086.
CP/M-80, кроме блока BIOS, была написана на языке PL/M-80 [1]. По дизассемблированному тексту это очень трудно подтвердить, так как этот язык очень близок в Ассемблеру: его средний коэффициент расширения равен 6 (т. е. каждый оператор языка PL/M-80 превращался в среднем в шесть машинных команд), а коэффициент объёмного расширения кода равен 1,2 (т. е. программа на PL/M-80 занимает в среднем в 1,2 раза больше памяти, чем эквивалентная ей программа на ассемблере). Отмечу, что в PL/M-80 [5] есть возможность получить листинг трансляции, в котором после каждого оператора в ассемблерной записи показывается набор команд, в который данный оператор превратился. По этому листингу можно было вручную оптимизировать программу. Тем не менее, это, наверное, одна из первых ОС, написанных на языке высокого уровня.
В лаборатории Отделения 01 Института проблем управления (ИПУ АН), где я работал с 1980 по 1984 г., усилиями Стаса Головатого была приобретена одна из первых в СССР система разработки Intellec 800. Об этой системе можно рассказывать довольно долго. Образец более поздней модификации подобной системы, Intellec Series II, находится в зале ВТ Политехнического музея.
В Москве имелось около дюжины подобных систем. На базе МНИИПУ существовал неформальный клуб разработчиков, у которых они имелись. Большая заслуга в создании и поддержании этого клуба принадлежит Валерию Чуклову.
В 1986 году в ИНЭУМе появилась одна из мощнейших систем разработки корпорации Intel – локальная сеть из рабочих станций Intellec Series IV, позволявшая разрабатывать машины на базе процессоров 8086/80386. Понятно, что такие системы были под эмбарго, но хитрые американцы, думаю, намеренно допускали продажу отдельных систем в СССР, чтобы, не дай бог, здесь не начали разрабатывать несовместимые компьютеры.
Корпорация Intel выпустила от 70 до 100 тысяч систем разработки семейства Intellec и тем самым обеспечила могучую поддержку продвижению своих микропроцессоров.
Оказывается у корпорации Intel был даже прототип этой системы – Intellec 8, созданный для разработки систем на базе микропроцессора 8008.
В году 1984 ВНИЭМ выпустил комплекс КРАМ (Комплекс разработки аппаратных модулей) являвшийся аналогом системы Intellec-80. Один КРАМов мы использовали при разработке машины “Истра-4816”. Он стоял в Новом Иерусалиме в служебном коттедже академика А.Г. Иосифьяна, который отдал его сборной команде разработчиков. Естественно, мы тут же поставили на КРАМ и CP/M-80. [3]
В ИНЭУМе система CP/M-86 проходила под названием “Микрос-86” и разрабатывалась в моей лаборатории (входившей в отдел Николая Дмитриевича Кабанова, в составе Отделения 13, которым заведовал Александр Николаевич Шкамарда) и отделением Ленэлектронмаша, возглавляемым Николаем Николаевичем Васильевым. Не думаю, что сотрудничество с ИНЭУМом доставило ленинградцам большое удовольствие, но тема была успешно выполнена и совместно сдана междуведомственной комиссии (прошла МВК). Уникальность этой работы в том, что ядро системы было расширено поддержкой вызовов универсального программного интерфейса (UPI), разработанного корпорацией Интел и под “Микрос-86” пошли все UPI-компиляторы этой корпорации. Одна из причин данного решения – возможность “повторно использовать” документацию на эти компиляторы, ранее “с кровью” прошедшую через институтский нормоконтроль при выполнении отделом Н.Д. Кабанова темы по операционной системе БОС-86 (это адаптированная интеловская ISIS-86), для которой на русский язык моей лабораторией была переведена и адаптирована, т. е. приведена в соответствие с ГОСТами документация по компиляторам Макроассемблер-86, Паскаль-86, PL/M-86, Фортран-86, Си-86 и по компоновщику Link86. Общий объём этой документации составил около 3000 страниц. Адаптацию родных для CP/M-86 компиляторов (BASIC, FORTRAN, PASCAL, PL/M-86 и ASM-86) выполнил ленинградский Ленэлектронмаш.
СP/M-80 дала начало целому семейству совместимых ОС.
В 1984 г. в Международном научно-исследовательском институте проблем управления (МНИИПУ) для широкого класса 8-разрядных микроЭВМ была начата разработка мобильной операционной системы, получившей название ОС МикроДОС [2]
Когда-то память в 64 Кбайт казалась громадной. СP/M-80 неплохо работала и на машинах с 16 Кбайт ОЗУ. Но со временем стали доступны микросхемы ОЗУ Intel 2108 и 2116, ёмкостью соответственно 8 и 16 Кбайт, и ОЗУ 64 Кбайт на микромашинах стало нормой. Более того, появились системы с переключаемой памятью, где ставилось от двух и более блоков по 32 или 64 Кбайт.
Поскольку из-за дешевизны разработчик мог легко ставить в разрабатываемую систему дополнительные микропроцессоры, а такое искушение было, так как им все ещё недоставало производительности, то следующим шагом было создание версии СP/M-86, поддерживающей многопроцессорность.
В 1980 году компания DRI занялась разработкой СP/M-86 для16-разрядных процессоров, и до выхода персонального компьютера IBM портировала CP/M-86 на машины на базе Intel 8086/8088, а затем продала лицензии на CP/M-86 компаниям AST и Altos. За ними последовали продажи лицензий фирмам Piiceon, Artelonics и Sirius Systems.[4]
Многопользовательская многозадачная версия CP/M-86 называлась MP/M-86. Была разработана Digital Research в 1979. Разработчик Том Роландер (Tom Rolander). Позже она была переименована в Concurent CP/M-86.
И наконец, машины начали объединять в локальные сети – тогда-то появилась сетевая версия – СP/M-Net. Под СP/M, как пишет [1] на момент появления IBM PC было более 5000 приложений. Многие из них были очень быстро портированы на новую архитектуру Отмечу, что системные как вызовы MS-DOS 1.0, кроме номера прерывания, были полностью идентичны вызовам CP/M-86, плюс простота конвертирования ASM80 в ASM86. Это сходство поясняют тем, что в1980 году Тим Патерсон (Tim Paterson) из фирмы Seattle Computer Products использовал руководство по интерфейсу CP/M 1976 года, разработанное DRI, и другие материалы для разработки QDOS – новой операционной системы, внешне и функционально схожей с CP/M, но с иной внутренней настройкой. Он писал её для 16-разрядного микропроцессора Intel 8086. Позже Microsoft приобрела QDOS и лицензировала её корпорации IBM под названием PC DOS, а другим производителям ПК-совместимых компьютеров – под названием MS-DOS [1].
Осенью 1986 г. после сдачи “Микрос-86” в Отделении 13 ИНЭУМа активно обсуждалось открытие темы по Concurrent CP/M-86 для машины СМ-1810. Недели за две был обговорён объём и распределение работ, к которым предполагалось подключить ещё лабораторию Г. Каневского (им предлагалось реализовать библиотеку графики типа популярного тогда стандарта GKS), но что-то, к счастью, на небесах не сложилось. Я вообще неоднократно замечал, что если до начала осуществления какого-то плана есть красивый расклад по его выполнению, то ничего не получается с самого начала.
Литература.
1. David Laws. Early digital research CP/M source code. https://computerhistory.org/blog/early-digital-research-cpm-source-code/
2. В. Н. Глухов, Л. А. Долбилов, Е. Е. Дудников, Й. Лоозе. МикроДОС-адаптивная система программного обеспечения для 8-разрядных микроЭВМ. https://www.computer-museum.ru/histsoft/mikrodos.htm.
3. Э.М. Пройдаков. Неформальная история разработки ПК “Истра-4816”. https://www.computer-museum.ru/histussr/istr4816.htm
4. A Short History of CP/M-86. https://www.abortretry.fail/p/a-short-history-of-cpm-86
5. Э.М. Пройдаков. Язык программирования PL/M. https://www.computer-museum.ru/histsoft/plm.htm
Об авторе: Директор Виртуального Компьютерного Музея
Помещена в музей с разрешения автора
27 ноября 2025