CP/M-80 на клоне Спектрума «Кворум»

    У меня на окне на память лежит большая стопка пятидюймовых дискет от компьютера, который мне подарили родители в три года, и с которого я смог перелезть на PC только в 14. Это «Кворум-128», наш, уральский клон Спектрума. Клон довольно интересный и существенно отличавшийся от, например, уральского же «Магика». С магнитофоном он работал, как любой другой Спектрум, но при подключении Кворумовского же контроллера дисковода — не так-то просто его было достать! — он умел работать в ОС CP/M-80. Вот об этой ОС и ее реализации на «Кворуме» я и хочу сегодня рассказать.





    Немного теории: Спектрум без CP/M


    Начнем с того, что вспомним архитектуру классического Спектрума — чтобы понять, насколько отличается от нее CP/M. Заранее прошу прощения за возможные неточности — все это было очень давно.

    Спектрум-48 собран на процессоре Z-80 с 8-битными регистрами и 16-битной адресацией. В Спектруме было 16 Кбайт ПЗУ, занятого интерпретатором диалекта Бейсика, служившего одновременно и операционной системой для машины; и 48 Кбайт ОЗУ, из которых 6.75 Кбайт было занято видеопамятью с весьма специфической адресацией, в устройство которой мы сейчас не будем вдаваться. Общая карта памяти выглядела примерно так:



    Конечно, Бейсиковые программы на процессоре с частотой 3.5 МГц несусветно тормозили, и все нормальные чуваки тогда писали на ассемблере, а программам на Бейсике обычно отводилась роль загрузчика, который дозагружает с кассеты ассемблерные модули по заданным адресам, и передает им управление. (У реальных пацанов и загрузчики были хитрые ассемблерные, но не суть.)

    Спектрум-128, как несложно догадаться, расширял общий объем ОЗУ машины с 48 до 128 Кбайт (и добавлял музыкальный сопроцессор AY-3-8910/12, который во второй половине 90-х уже был жестким дефицитом, и в моем Кворуме его так и не появилось). Но так как в 16 бит шины адреса 128 Кбайт уже не влезали, использовалась специальная, не особо удобная система: вся память делилась на 8 банков по 16 Кбайт, и в верхние 16 Кбайт адресного пространства (0xC000-0xFFFF) можно было «впечатывать» любой из этих 8 банков, выведя специальное значение в порт 0x7FFD. (Да, области памяти 0x4000-0x7FFF и 0x8000-0xBFFF тоже были обычными банками памяти — не помню сейчас уже номера — и в 0xC000-0xFFFF можно было их отзеркалить.) Кроме того, в Спектруме-128 было два банка ПЗУ — с классическим интерпретатором Бейсика, и с более продвинутым, в котором строчный редактор поменялся на примитивный полноэкранный, а также были разделены функции собственно Бейсика и ОС — добавилась несложная система меню, благодаря которой можно было включить загрузку с ленты, не выходя в Бейсик и не набирая там сакрального LOAD "" :)

    Наконец, для Спектрума существовало некоторое количество различных контроллеров дисковода, из которых наиболее популярным (и единственным, используемым в российских клонах Спектрума) стал Beta Disk Interface. Он добавлял в Спектрум еще один банк ПЗУ, который аппаратным образом включался вместо обычного и перехватывал управление при переходе по адресам 0x3D00-0x3FFF, если не ошибаюсь. В ПЗУ контроллера содержалась очень примитивная дисковая операционная система TR-DOS, работавшая с дискетами объемом 640 Кбайт, и управлявшаяся командами, похожими на команды Бейсика. В контроллере также была специальная кнопка Magic Button, при нажатии на которую на диск записывался полный дамп памяти (48 Кбайт — о Спектруме-128 TR-DOS не знала). Это позволяло вместо того, чтобы делать полноценную адаптацию Спектрумовских программ и игр под дисковод, просто загрузить программу с ленты, нажать кнопку и сбросить на диск. Дальше можно было уже загружать ее с дискеты. Конечно, если в программе была, например, функция сохранения и записи, то они так и продолжали работать с лентой, но в целом это было очень удобно.

    Операционная система CP/M-80


    CP/M-80 была разработана для машин на процессорах Intel i8080 и совместимых с ним Zilog Z-80 компанией Digital Research в 1970-х годах. CP/M означает Control Program for Microcomputers; суффикс -80 официально появился в названии, только когда появилась и CP/M-86 для PC и процессоров 8088/8086. До того, как PC стремительно начал набирать популярность, нишу персональных, относительно маломощных компьютеров занимали именно машины с CP/M-80.

    CP/M-80 была одной из первых операционных систем в современном понимании. Именно в ней появилась такая фича, как абстракция программ от физического оборудования, и именно это стало причиной ее (относительной) популярности. CP/M-80 состояла из трех размещавшихся в памяти модулей: CCP (Console Command Processor — примитивный командный интерпретатор), BDOS (Basic Disk Operating System — реализация системных вызовов) и BIOS (Basic Input/Output System — драйвера стандартных устройств: диска, консоли, принтера и последовательного интерфейса). При портировании CP/M на новую машину нужно было переписать только BIOS; CCP и BDOS были аппаратно-независимы. Прикладные же программы могли пользоваться функциями BDOS, или, при необходимости, напрямую BIOS, но были избавлены от необходимости знать премудрости работы с дисковыми контроллерами разных машин.

    Разумеется, на практике все было не так гладко. Самым большим упущением BDOS/BIOS было отсутствие какой-либо стандартизации функций вывода на экран, кроме самых примитивных, тех, что сгодятся и для терминала-телетайпа. В результате программы, включавшие в себя функции, например, экранного редактора (наподобие WordStar и Turbo Pascal), при установке предлагали выбрать из нескольких десятков известных разработчикам машин, либо же, если машины в списке не было, ввести самостоятельно размеры экрана и различные управляющие коды для перемещения курсора и т. п. Ну, это мелочи.

    Общая карта памяти CP/M-машины выглядела так:



    Отметим еще раз, что эта карта памяти будет справедлива на любой машине с CP/M. Поэтому здесь много неопределенностей. Нет видеопамяти, например (а она и не факт, что будет присутствовать в реальности — может, машина вообще подключена к телетайпу), а единственные адреса, содержимое которых гарантировано — 0x0000-0x0100. Для осуществления системного вызова необходимо положить его номер в регистр C, если не ошибаюсь, а затем выполнить инструкцию CALL 0x0005; инструкция JMP по адресу 0x0005 уже выполнит переход куда надо в BDOS. Также в этой области имеются:
    • точка входа в BIOS (адрес 0x0000). Эта функция выполняет перезагрузку машины, но несложной арифметикой можно получить адрес любой другой функции BIOS;
    • номер текущего диска (A: = 0, B: = 1…);
    • направление текущих потоков ввода-вывода (например, консоль можно направить на печатающее устройство, или в последовательный порт);
    • имена файлов (не более 2), переданных загруженной программе как параметры командной строки, в структурах данных FCB, пригодных в качестве аргументов вызова функций BDOS;
    • полная командная строка текущей программы (адреса 0x0080-0x00FF — не более 127 символов).

    Объем TPA (области для загружаемых программ) тоже не гарантировался и в принципе мог, в зависимости от реализации, составлять где-то от 10 до 52 Кбайт.

    Файловая система CP/M-80 существенно проще, чем FAT, хотя со своими задачами справляется вполне удовлетворительно. Файлы хранятся с именами 8.3; даты создания/изменения не хранятся (наличие RTC-часов в машинах с CP/M не гарантировалось); размер файла хранится с точностью до 128 байт с округлением в большую сторону (объем занимаемого им на диске пространства — до 4 Кбайт). Также отсутствуют директории, вообще — на работу с жесткими дисками CP/M не была рассчитана, а с дискетками можно и так жить. Был, впрочем, некий суррогат под названием «области пользователя». Эти области нумеровались от 0 до 15, и в каждой из них могли храниться отдельные файлы. Переключались они командой USER n.

    Раз уж речь зашла о командах, то их было немного: DIR, SAVE, ERA (удаление файлов), REN (переименование файлов), USER, может еще одну-две забыл. (SAVE выполняла довольно специфическую функцию — сохранение содержимого TPA на диск — если, например, вы запустили отладчик, загрузили в нем программу, похимичили над ней, вышли и хотите сохранить еще оставшуюся в памяти версию.) Популярным расширением для CP/M был альтернативный командный интерпретатор ZCPR3, куда более навороченный. Впрочем, сам я не пробовал.

    В целом, CP/M очень напоминала раннюю версию DOS, да, в общем-то, и немудрено — DOS разрабатывалась как клон CP/M. Для CP/M-80 существовало немало прикладного софта — офисные программы, средства разработки, утилиты. Но с появлением и бурным развитием PC все это быстро стало неактуальным — как и версия CP/M-86, не сумевшая составить сколько-нибудь значительную конкуренцию DOS.

    Исходные тексты CP/M различных версий и ее системных утилит (на ассемблере) несложно найти в Интернете.

    Как скрестить CP/M и Спектрум


    У CP/M и Спектрума общее только то, что они работают на процессоре Z-80. Если сравнить их карты памяти, мы не увидим практически ничего общего, да и периферия, ожидаемая на CP/M- и на Спектрум-машине, существенно отличается. Тем не менее, создатели «Кворума» смогли сделать машину, которая может одновременно работать и с CP/M, и как довольно обычный Спектрум. Что же пришлось изменить?



    Прежде всего, в Кворуме нам мешается ПЗУ. В CP/M никакого ПЗУ нет (хотя BIOS вполне может располагаться и в ПЗУ, все равно BIOS находится не в самом начале, а в самом конце адресуемого пространства, и его объем значительно меньше 16 Кбайт). Поэтому в Кворуме добавили порт управления памятью 0x00, который позволяет переключать спектрумовско-кворумовское ПЗУ на дополнительные 16 Кбайт памяти в адресах 0x0000-0x3FFF. Поэтому, кстати, младшая модель Кворума называется не «Кворум-48», а «Кворум-64» — там действительно есть лишние 16 Кбайт ОЗУ, оставленные специально для режима CP/M.

    (На самом деле «Кворум-64» еще не самая младшая модель — до нее еще был то ли «Кворум БК-02», то ли «Кворум БК-04», который представляет собой простой клон Спектрума и CP/M запускать не умеет.)

    Помимо ПЗУ, нам мешается видеопамять, которая будет у нас торчать прямо посредине драгоценного пространства TPA. Так что вторая фунция порта 0x00 — переключение адресов видеопамяти — с дефолтного 0x4000-0x5AFF на 0xC000-0xDAFF. Во втором режиме видеопамять будет втиснута посреди BDOS и BIOS, но они, адаптированные для Кворума, об этом знают, а программам будет знать не обязательно.

    Кстати о видеопамяти — на Спектруме существует всего один видеорежим, 256x192 с 16 цветов. (Точнее, 256x192 — это разрешение монохромной картинки, на которую затем накладываются атрибуты цвета в разрешении всего 32x24 — таким образом, в каждом участке 8x8 пикселов может быть не более 2 разных цветов. Но это детали.) Текст выводится шрифтом 8x8 пикселов, что дает 24 строки по 32 символа — что удобно накладывается на структуру видеопамяти, но откровенно мало для большинства практических целей. Большинство неадаптированных программ CP/M вообще ожидают, что в строке не менее 80 символов!

    Поэтому для вывода текста в CP/M Кворума есть четыре режима — 42 символа в строке (шрифт 6x8), 51 символ в строке (шрифт 5x8), 64 символа в строке (шрифт 4x8) и 83 символа в строке (шрифт 3x8). По умолчанию после загрузки используется 42 символа в строке:



    Выглядит довольно прилично, на мой взгляд. Шрифт 4x8 хранится в памяти одновременно с 6x8, и, например, в показанном вьюере текстовых файлов на него можно переключиться одной кнопкой F5:



    Весьма неудобно, но приспособиться можно — если у вас к компьютеру был подключен не самый плохой телевизор (Кворум же, как и все Спектрумы, обычно работал с телевизором вместо монитора). Этот режим неплохо подходит для редактирования текста для последующей распечатки — напечатанный на матричном принтере текст с 64 символами в строке выглядит довольно неплохо.

    Командами TTY51.COM и TTY80.COM можно переключиться на шрифты 5x8 и 3x8. 3x8 — это, конечно, адский ад — посмотрите на скриншот с 4x8 и представьте, что все эти крошечные буковки еще и слиплись в одну строчку без промежутков между ними. Такой режим приходилось иногда использовать, чтобы запустить неадаптированные для Кворума программы (Кворумовцы продавали несколько дискет с утилитами и средствами разработки для CP/M, просто скачанными из Интернета и записанными as-is).

    Ну и немного о дисковой части. Блок дисковода «Кворум», размером несколько меньше нынешнего Micro-ATX-системника, был сделан из солидной толщины стали, покрашен в серый цвет, и имел два пятидюймовых отсека. К нему прилагалась системная дискета с базовым набором утилит и несколькими играми — собственно, образ более новой версии этой дискеты и есть единственный, который я нашел для эмулятора. После покупки — году этак в 1998 — он у меня работать отказался, что стоило десятилетнему мне немалых расстройств; в конце концов нам починили его по гарантии. Блок мне попался в вертикальном исполнении с черным пятидюймовым дисководом «Электроника МС-6313» или что-то в этом роде. Дисковод был очень низкого качества, дискеты запарывал влегкую. На фирме «Кворум» мне его поменяли на более адекватный пятидюймовый же Panasonic, потом поставили второй Mitsumi, а потом поменяли второй на трехдюймовый Samsung. Впрочем, все равно дискеты все они жрали только в путь, и CP/M в один прекрасный день начинала выдавать страшные сообщения «BDOS ERR ON A: BAD SECTOR».

    К сожалению, у меня давно не осталось ни блока дисковода, ни самого Кворума, так что вот пишу по памяти и делаю скриншоты из эмулятора :)

    Внутри, помимо отсеков для дисководов, была плата контроллера с традиционной для клонов Спектрума микросхемой КР1818ВГ93, и блок питания. Уязвимым местом блока дисковода был интерфейс с компьютером — от блока тянулся короткий широкий шлейф, на конце которого болталась тяжелая металлическая коробочка где-то 8x8x1 см с платой интерфейса внутри, которую нужно было насадить на краевой разъем сзади компьютера; Кворум, как и большинство Спектрумов, был объединен в одном корпусе с клавиатурой. Надежность такого соединения была невысокой.

    Дискеты — и пятидюймовые, и трехдюймовые — дисковод понимал исключительно в формате Double Sided/Double Density, 800 Кбайт. Под DOS’ом это были бы дискеты на 720 Кбайт, но CP/M использовала свое форматирование: 2 стороны, 80 дорожек, 5 секторов, объем сектора 1024 байт. На загрузочных дискетах 20 Кб занимала ОС; из файловой системы это не было видно, она просто занимала две первых дорожки. Чтобы работать с трехдюймовыми дискетами из магазина, нужно было заклеить на них отверстие (напротив того, что с ползунком для защиты от записи) непрозрачной клейкой лентой.

    Возможно, именно из-за такого форматирования доступ к диску в CP/M был крайне медленным. Это (наряду с недостаточным разрешением экрана для работы в полноценных текстовых режимах) и было, на мой взгляд, основным недостатком системы. Конечно, дискеты — штука сама по себе небыстрая, но уж пару десятков килобайт в секунду спокойно должна вытягивать; в CP/M на Кворуме реальная скорость чтения не превышала 2-5 Кбайт/с. Это не проблема оборудования — так же медленно все работает даже в эмуляторе, да и TR-DOS заметно пошустрее будет. Особенно печально было копировать что-либо между дискетами при наличии всего одного дисковода.

    С программной стороны CP/M Кворума дисководов тоже фактически поддерживала всего два. На Кворуме-128 64 Кбайт расширенной памяти также использовались в качестве RAM-диска C:, что могло быть весьма удобно, особенно с такой-то скоростью работы с диском.

    BDOS в CP/M Кворума немного допилили, чтобы сделать области пользователя несколько более практичными и похожими внешне и по принципу работы на каталоги. Количество областей увеличили с 16 до 32, области с номерами >10 позволили называть буквами (10 = A, 11 = B…), добавили в приглашение командной строки текущую область пользователя (было A>, стало A:\0>), и добавили в интерпретатор командной строки возможность запускать программы и указывать файлы из других областей пользователя (\A\FILE.TXT).



    В целом, не могу сказать чтоб это было так уж сильно удобно. Суррогат остался суррогатом. Ну, полагаю, лучше, чем ничего.

    Отдельно стоит сказать о совместимости CP/M Кворума и Спектрумовских игр. Это очень важный аспект — ведь все-таки где бы сейчас была, например, Microsoft без своей священной обратной совместимости? :) Для этой задачи — казалось бы, неразрешимой — тоже было найдено несколько решений, о которых мы поговорим ниже.

    Кворумовцы — как я понимаю, по сути это один человек по фамилии Каримов — проделали огромную работу, написав с нуля под CP/M Кворума немало утилит (например, NC.COM, простой двухпанельный файл-менеджер), и адаптировав еще больше стороннего софта, начиная с самой CP/M и заканчивая Turbo Pascal. Хорошо помню, как я ходил к ним в детстве записывать дискеты и задавать скопившиеся вопросы. Компания «Кворум» находилась на пятом, последнем этаже торгового комплекса «Универбыт», тогда еще не бывшего гламурным торговым центром. За тяжелой железной дверью все было завалено компьютерами, чертежами, деталями и разными странными агрегатами. Прям прикосновение к чуду. Жалко, что сейчас таких мест нет, а если и есть, так не будут восприниматься.

    Софт для CP/M


    Практически на каждой кворумовской дискете, прежде всего, присуствовала их классическая парочка — оболочка NC.COM:



    И текстовый редактор ED.COM:



    NC.COM была, как несложно догадаться по названию, вариацией на тему двухпанельного файл-менеджера. Среди ее полезных функций — работа с пользовательскими областями как с подкаталогами, копирование файлов («голая» CP/M этого не умела, хотя в ней была для этого какая-то простенькая внешняя утилита), просмотр текстовых файлов в кодировках КОИ-8, КОИ-7, «ГОСТ-основная» и досовская CP866 (кстати, основной кодировкой для CP/M Кворума выбрали КОИ-8 — видимо, потому, что она при обрезании 7-го бита, чем могут грешить старые неадаптированные программы, превращается более или менее в транслит), и копирование файлов на дискеты DOS и обратно — последнего, кроме NC.COM, по-моему, больше никто не умел.

    ED.COM, несмотря на название, был более подобен юниксовому vi, чем ed (а строго говоря, если верить инструкции, был версией некоего WordMaster). Он, так же как vi, имел два основных режима — ввода текста и командный. Конечно, набор команд был гораздо скромнее, чем у vi, но возможность создавать макросы из команд и записывать их в файлах .MED уже была. Вот одна из страниц справки, например:



    ED.COM был пригоден для набора программ (хотя с такой тормозной дисковой подсистемой, как на Кворуме, последовательность «запустил ED.COM — отредактировал — вышел — скомпилировал — слинковал — запустил все получилось — go to step 1» требовала терпения ледника) и простых текстовых файлов. В принципе, я в нем писал и всякие рефераты с форматированием (без картинок, конечно). Делается это просто: берешь инструкцию от принтера — о, мой СМ-6337 вообще достоин отдельного поста!.. — открываешь справочник управляющих кодов и вставляешь их вручную в нужных местах. Благо что матричные принтеры, даже СМ-6337, обычно используют более или менее совместимые Epson-образные управляющие коды.

    Из другого софта на системной дискете можно упомянуть FORMAT.COM, SGEN.COM (записывающую ОС на системные дорожки, и позволяющую при этом настроить некоторые косметические параметры), SUBM.COM (выполнявшую .SUB-файлы — некоторое подобие .BAT, только без переменных и каких бы то ни было средств управления вроде if, циклов и прочего) и POWER.COM, позволяющая баловаться с дисками на низком уровне.

    На дискетах у кворумовцев можно было записать (по 10 рублей за штуку) много чего интересного, включая:
    • Текстовый процессор WordStar, когда-то адски популярная программа, чуть ли не killer app для CP/M. WordStar позволял форматировать текст более адекватным способом, чем ручной ввод управляющих кодов принтера, но на текстовом экране, конечно, ни о каком WYSIWIG речь не шла, да и вообще влезал на Кворумовский экран WordStar так себе. Его большая панель режимов и подсказок наверху экрана с высоты лет подозрительно напоминает… ленту Office 2007/2010 :)
    • SuperCalc, электронная таблица. Пользователи Linux могут поставить себе пакет sc, имеющийся или по крайней мере имевшийся в большинстве дистрибутивов, и получить довольно близкое представление о SuperCalc. На самом деле выглядело неплохо, но я так и не сумел придумать, зачем мне могут понадобиться электронные таблицы.
    • Microsoft BASIC-80. Да-да, тот самый, с которого Билл Гейтс пошел к успеху. Вполне адекватный диалект Бейсика, по функциональности — нечто среднее между спектрумовским Бейсиком и QBASIC, который мы проходили в школе. BASIC-80 имел встроенный строчный редактор, что было не бог весть как удобно, но куда лучше цикла редактор-компилятор-запуск. Программу, отлаженную в интерпретаторе, можно было скомпилировать компилятором BASCOM.COM, а затем слинковать с рантаймом и, при желании, с ассемблерными процедурами.
    • Microsoft M80. Более или менее стандартный ассемблер i8080/Z-80 под CP/M-80. Ассемблер он и есть ассемблер, что с него взять. В комплект входят собственно ассемблер M80.COM, линковщик L80.COM и библиотекарь LIB80.COM. IDE или редактора нет. На дискете также поставлялся отладчик ZSID.COM и на удивление годный дизассемблер DASM.COM.
    • Borland Turbo Pascal. Версия 3.02А. Без преувеличения, лучшее средство разработки под CP/M. В нем была IDE с экранным редактором — простенькая, но достаточно адекватная, и на голову лучше всего остального что было. Скорость компиляции тоже впечатляла. На этом Паскале я в юные годы много тренировался, даже фрактал Мандельброта рисовал с ну очень смешной скоростью. Минусы — здоровый 10-Кбайтный рантайм и небольшое количество памяти, остающееся на исходный текст и исполняемый код программы при загруженной IDE.
    • BDS C. С этим я почти не знаком. Вроде как обычный старый Си, без IDE и с не очень стандартной стандартной библиотекой.
    • Архиваторы. Это добро было только на дисках с неадаптированным софтом. Архиваторы были интересные — они работали как юниксовые: отдельно сжатие и отдельно упаковка в один файл. Только в CP/M наоборот. Сначала упаковывались отдельные файлы, в ходе чего в их расширении менялась средняя буква (архиватор SQUEEZE.COM менял ее на Q, более быстрый и куда лучше сжимающий CRUNCH.COM — на Z, а самый крутой CRLZH.COM, которому на Кворуме памяти хватало только на распаковку — на Y), а потом сжатые файлы объединялись в .LBR-архив утилитой LU.COM или NULU.COM. Были разархиваторы для ARC, ARJ и ZIP. Теоретически должен был быть как минимум архиватор ARC, но я такого не встречал.

    Совместимость с играми для Спектрума


    Для совместимости со спектрумовским софтом в CP/M Кворума есть две очень интересные программы — BETA.COM и GAMMA.COM.

    BETA.COM — это, собственно, эмулятор TR-DOS’а. От слова Beta Disk Interface. На Кворуме-128 TR-DOS есть в ПЗУ и такой эмулятор в общем-то не нужен, но на Кворуме-64 без него TR-DOS’а не будет. Эмулятор загружается в нулевую страницу ОЗУ — та самая, которая может впечатываться вместо спектрумовского ПЗУ — и работает, как самый обыкновенный TR-DOS. Возможно, местами кривоватый. Хотя и встроенный в Кворум-128 TR-DOS на самом деле несколько кривоватый, и многие программы, требующие низкоуровневого доступа к диску в нет работать отказываются. Это печально.



    GAMMA.COM — гораздо более интересное изобретение. По сути, это специальная версия CP/M Кворума для запуска спектрумовских игр, под названием Gamma-DOS.



    Gamma-DOS, как и BETA.COM, использует трюк с нижними 16 Кбайт ОЗУ, но вместо TR-DOS в них загружается кастрированная по самое не хочу CP/M. Шрифт в ней стандартный спектрумовский, треть экрана вообще не используется (для экономии памяти — надо же сохранять остальные две трети где-то на время выхода в Gamma-DOS), областей пользователя нет, область TPA урезана до нескольких килобайт — хотя простые утилиты CP/M все же запускаются нормально.

    После запуска Gamma-DOS (что можно сделать как из CP/M, командой GAMMA.COM, так и загрузившись с дискеты, где в системные дорожки вместо CP/M записана Gamma-DOS) в спектрумовский Бейсик можно выйти командой SOS. После этого можно загружать с магнитофона любую игру. После загрузки по нажатию клавиши NMI (Non-Masked Interrupt — немаскируемое прерывание — в Z-80 принудительно выполняет переход по адресу 0x0066 и не может быть игнорировано) управление будет передано в Gamma-DOS, после чего игру можно сохранить командой SAVE, а затем вернуться в нее командой RET. Игры сохраняются в формате .SPC — по сути, это такой же дамп памяти, как и в TR-DOS с «волшебной кнопкой», только сжатый.

    Трюк с NMI возможен благодаря предусмотренной в спектрумовском ПЗУ Кворума проверке — оно переключается на нулевую страницу ОЗУ в случае, если в нем по адресу 0x0066 находится инструкция процессора JMP — т. е. по сути ПЗУ проверяет, если ли в ОЗУ подпрограмма обработчика для NMI.

    Игры в формате .SPC можно запускать из командной строки, как и обычные команды .COM, но обычно для этого используется оболочка наподобие RUN.COM:



    И вперед! :)



    Стоит отметить, что на моей памяти Gamma-DOS работала не очень стабильно и частенько при попытке сохранить игру выдавала «BDOS ERR ON A: BAD SECTOR» на вроде бы совершенно нормальных дискетах. Так что я чаще пользовался не Gamma-DOS, а SCREEN — оболочкой с псевдографическим интерфейсом (и ограниченными средствами редактирования изображений — отсюда и название), работающей значительно быстрее и стабильнее Gamma-DOS, и более удобной в использовании. У SCREEN даже был свой API — для нее существовал отдельный формат исполняемых файлов, .EXE — но его описания я нигде не находил, равно как и описания того, как SCREEN устроена. Подозреваю, где-то там в недрах все равно была Gamma-DOS.

    Самым большим минусом как Gamma-DOS, так и SCREEN было то, что они поддерживали только программы для Спектрума-48. Игрушки для Спектрума-128, а это, естественно, зачастую были самые клевые игрушки, можно было запустить только из TR-DOS Кворума-128. Увы и ах.

    Настоящее


    Кворум, к сожалению, не обрел такой известности, как эпичные Пентагон, Скорпион или Профи, и остался местечковым екатеринбургским компьютером, большинство пользователей которого, вероятно, и не подозревали, что для него есть дисковод и какая-то там CP/M. Теоретически существовали модели Кворум-256, Кворум-512 и даже Кворум-1024, но купить их было весьма нетривиально, если вообще возможно. Сейчас никакого «Quorum Ltd.», насколько мне известно, уже давно не существует.

    Адаптированный под Кворум эмулятор UnrealSpeccy можно скачать здесь: http://atmturbo.nedopc.com/emulator/kv_emul/unrl020q.zip, а образ системной дискеты здесь: http://atmturbo.nedopc.com/others/kvorum/kv_cpm/kv_cpm.zip. Кое-какой софт есть также в этом архиве: http://atmturbo.nedopc.com/others/kvorum/kv_soft2/kv_soft2.zip (не образ, отдельные файлы), включая ассемблер M80 и руководство программиста CP/M-80 на русском. Спасибо тому человеку, который все это выложил; насколько мне известно, других образов дискет Кворума в Сети нет. Удачных экспериментов :)
    Поделиться публикацией

    Комментарии 31

      +2
      Слушайте, а под CP/M вроде и нативных игрушек было много. Я точно помню Xonix и Ladder :-)
        0
        Может быть, но на кворумовских дискетах я таковых не припомню. Только тетрис был на системной дискете и все. Полагаю, игрушки просто тоже надо было адаптировать, а зачем, если есть столько спектрумовских.
          0
          Отлично помню Klad1 Klad2. Я знаю только одного человека, который прошел их полностью. Когда он играл — пол кабинета информатики стояло у него за спиной!
          0
          Спасибо, прочувствовал снова ностальгию по Z80, 48 KB и реализации цвета.
            0
            Я и по сей день бывает под него пишу (правда к сожалению только в эмуляторе, и только для баловства)

            Z80 жил, жив и будет жить, это легенда.
            +2
            Эх, CP/M и CD 05 00 :)
              0
              Elite…
              Эх, были же времена.
                +1
                > SUBM.COM (выполнявшую .SUB-файлы — некоторое подобие .BAT

                Если память мне не изменяет, файл все таки назывался submit.com ;)

                Спасибо за пост — хотя я впервые слышу о кворуме, но на CP/M (на Robotrone) просадил первые годы увлечения компьютерами. Приятно было почитать, вспомнить те времена. Вы правы, сейчас ни один гаджет не произведет того впечатления истинной магии, как контора с компами, где делают ПО! :)
                  0
                  В кворумовской версии был именно SUBM.COM, так же как SGEN.COM вместо SYSGEN.COM :)

                  Да, многий софт под CP/M Кворума был портирован именно с Роботрона-1715 или Корвета. Но насколько я понимаю, это все-таки были машины с нативным CP/M, а не такие гибриды, как Кворум.
                    +1
                    На работроне тоже была не чистая CP/M, а нечто под названием SCP. Правда в чем отличие без понятия, возможно немцы просто переименовали
                      0
                      Переименовали. Программное перацтво началось уже тогда.
                      0
                      Я в те годы пробовал прочитать кворумскую дискету на «Корвете», ничего не вышло. То ли формат дискет, то ли файловая система, а может и то, и другое различалось.
                      А еще я писал когда-то эмулятор CP/M-80, и выяснил, что кворумские .COM-файлы несовместимы с оригинальными CP/M-скими. Списанный со своей дискеты masm.com я не смог запустить, а вот первый попавшийся из интернета влет заработал. Так и не дошли руки копнуть поглубже в суть различий.

                      Спасибо за статью! Сам в детстве тоже ходил на Радищева, 55 и задавал там дурацкие вопросы о том, как этим masm.com хоть что-нибудь заассемблировать :) В итоге разобрался и даже написал «бут-менеджер», грузивший по выбору NC, GAMMA-DOS или SCREEN. Очень гордился :)
                    0
                    А у меня в компьютерном классе вместо NC.com оболочкой Power польpовались: о)
                    А из игр были Cirkus — аналог арканоида и какой-то клон Pac-Man.
                      +1
                      еще был белларуский «Байт» тоже с cp/m, на котором при включении можно было с дискеты загрузить tr-dos
                        +3
                        Хм помню был такой клон как Профи512К отличавшийся тем, что влезал только в стандартную башню (плат там было в три этажа) имел интерфейс для PS/2 клавиатуры и пол мега памяти, расширявшуюся бутербродами в два счета до мегабайта. И турбо режим на 12МГц. Там было сразу TRDOS и CP/M в одном флаконе. ЕМНИП переключалось тумблером. В комплекте с General Sound (адовая звуковуха для спектрума, со своим процом и памятью) получалась зверь машина :)
                          0
                          Угу, слышал про такой. Но своими глазами видел только Кворум :)
                          0
                          Прекрасное погружение в ностальгию, отличный подбор скриншотов.
                            0
                            А у меня был ATM-Turbo 512! Тоже с CP-M, правда, игрушек не досталось. Компьютер был дипломом одного старшего товарища, и он его отдал на растерзание. Зато в CP-M был Pascal. Это было чем-то сверх естественным, из взрослой жизни.
                              0
                              О! Elite! :)
                                0
                                Немедленно уберите дискеты с подоконника! Там они подвержены большим колебаниям температур, а иногда и воздействию прямого солнечного света и быстро испортятся.
                                  0
                                  Я думаю, они испортились много лет назад. Я их храню на память — не думаю, что когда-нибудь у меня снова появится подходящее железо, чтобы их прочитать.
                                  0
                                  image
                                  Минусуйте, но я не мог молчать.
                                    0
                                    Эпоха теплых ламповых компьютеров :)
                                      0
                                      хорошая статья, спасибо. так на «Кворуме» CP/M работала не в EGA-режиме, как на «Профи» или АТМ-турбо? каюсь, грешен, я живьем его так и не пощупал, последним компом на ZX перед переходом на 286 у меня был «Профи». кстати да, CP/M помогла мне спокойно перейти на DOS, практически не почувствовал дискомфорта
                                        0
                                        Неа. Обычный спектрумовский видеорежим, другого в Кворуме не было.
                                          0
                                          интересно. наверное глаза в кучу вылезали. я-то на Профи с EGA мажорился…
                                            0
                                            Вылезали, а то как же. У меня еще первые лет восемь был старый телевизор «Электроника Ц-401М», вот такой вот:



                                            Я, честно говоря, до сих пор не представляю, как я умудрился зрение не посадить :)))
                                              0
                                              ооо. а у меня с 93 по 96 был Электроника МС6105. Монохромный. Это адЪ и израел, кто видел его — не даст соврать, что это. Зрение таки посадил, но тут виной не только монитор, я читаю очень много. Хотя, что зрение стало садиться — заметил после того монитора. Сейчас — 1,5 и — 2,25…
                                        0

                                        "Под DOS’ом это были бы дискеты на 720 Кбайт"
                                        Вот тут позвольте не согласиться. Драйвер 800 для таких дискет потому и назывался драйвер 800, что можно было отформатировать дискету и на 720 кб, и на 800 кб — надо было просто один из параметров исправить с 9 на 10.
                                        По поводу низкой скорости работы дискет — трёхдюймовые на ПК работали существенно медленнее пятидюймовых, а те были тормознутее жесткого диска.
                                        И второй вопрос — эта копия нортон коммандера реально в 1997 была написана? И охота же была кому-то...

                                          0
                                          Я насколько помню, и 3.5" и 5.25" на «Кворуме» работали более-менее одинаково быстро. Я, впрочем, и каких-то особенных тормозов по сравнению с TR-DOS не припомню. 40 килобайт (обычная игра) что там, что там читалось секунд 6-7. На PC может и 20 Кб/с, но там и частота выше, и DMA есть.

                                          nc.com написан, думаю, где-то в 94-м. Я не уверен, что всю эту кипу CP/M софта кто-нибудь бы покупал, если бы там не было такой удобной оболочки, так что тут помимо охоты ещё и коммерческий смысл был.
                                          0

                                          В те времена на 8080/Z80 с дисководом и без CP/M только совсем уже что-нибудь экзотическое было :) Только через мои руки прошли «CP/M-ные» Орион-128, Профи и АТМ-Турбо :) Последние два как раз ZX-совместимые.

                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                          Самое читаемое