А о MP/M могу сказать следующее. Она, как и CP/M 3 использует концепцию bank switched memory. Так вот, эти банки памяти переключаются от адреса 0 до некой верхней точки, можно условно считать что это адрес С000, хотя этот адрес может быть любым. Мы получаем как бы несколько разных зон TPA (Transient Programm Area) куда с адреса 100h можно загрузить обычный com-файл от системы CP/M. Т.к. поведение COM-программы неизвестно, то если мы ее запускаем в банке первой, то считаем что она использует всю область TPA. Есть формат программ PRL которые система при загрузке может релоцировать. В одной области ТПА может лежать несколько PRK'ок и возможно подгрузить ком-файл (т.е. PRLки прогрузятся в верхние адреса, верх ТПА опустится и запущенный ком файл их не испортит).
Зачем была придумана MP/M? Вообще, изначально, для реализации многотерминальной работы. Одна машинка и до 16-и терминалов к ней. Каждый из них многозадачный. Супервизор работает от прерываний по таймеру. Использовалось 50 или 100Гц. программе запрещается переключать режим прерываний, и вообще-то даже обращаться к портам ввода-вывода (это сама ЦПМ как-бы накладывает ограничения, хотя реально мого программ лезли напрямую к портам конкретного компа и тем самым привязывались жестко к нему и переставали быть легко портируемыми). Нужно ли оно вам? У меня вот в планах есть такое что бы адаптировать MP/M, MP/M II, CP/M 2.2, ZSDOS и подобное на Профи или на другой клон. Что бы оно было. Что бы можно было запустить и посмотреть. Но в том виде как оно есть представляет только исторический интерес. Для реализации многозадачной ОС можно изучить MP/M посмотреть как там реализованы механизмы и делать свое. Я читал и изучал ак описания MP/M так и исходники ещё в 2002г, когда мне это удалось найти в инете. Про саму MP/M я писал ещё в 1998г в Вояджере. Но все промолчали. А сейчас столько обсуждений. Проснулись что ли? Или как? Так вот. MP/M отличается от CP/M только тем, что реализует переключение задач с сохранением контента. Реализованы семафоры и блокировки файлов, передача данных из программы в программу. Но весь обмен с диском остался в том же самом виде, т.е. по 128 байт за вызов. Если реализовать ее в чистом виде на любом из компов, то будут тормоза. Если запускается какая-либо программа юзающая железо напрямую то вся "многозадачность" замрет. Ведь многий софт который написан в расширенных режимах на Профи и АТМ после запуска или фактически выгружает систему из памяти (вернее сохраняет сегменты памяти где лежит система в других сегментах памяти) и юзает железо компа напрямую, а при выходе из программы восстанавливает систему в ОЗУ. Либо система не трогается, но переключаются прерывания на обработчик программы, переключатбся видеорежимы в обход системы и т.д. и т.п. Т.е. MP/M будет работать и мы будем наблюдать многозадачность только с классическим консольным софтом. Или с программами не лезущими к железу, а работающими только через системные вызовы. Оно вам надо?
А если есть желание сделать нечто подобное на спектруме - когда мы на ПЦ запускаем 3-5 эмулей и в каждом свою программу для спектрума и переключаемся между ними. То надо делать всё совсем не так. MP/M тут не поможет. Нужен аппаратный task switching по NMI (если мы делаем на классическом Z80), защита памяти. Возможно сегментация аналогичная 8086. И много, много чего. Читать теорию по реализации многозадачным ОС. Какие механизмы используются, как это реализуется. И делать. Уверен, что на форуме людей которые всё это осилят нет.






