ПОРТЫ КОМПЬЮТЕРОВ "КВОРУМ". КОМПЬЮТЕРЫ, КОТОРЫЕ МЫ ВЫБИРАЕМ
Бабарин Юрий, п. Б-Исток, 1996
Хочу сказать пару слов для раздела "КОМПЬЮТЕРЫ, КОТОРЫЕ МЫ ВЫБИРАЕМ" и по поводу дисководов.
У нас в г. Екатеринбурге на ПО "Вектор", выпускают три модели ПК "Кворум".
1. Кворум 64
Это "SPECTRUM"-совместимый компьютер имеющий, помимо ОЗУ 48кб, теневое ОЗУ 16кб; клавиатура расширенная - 88 клавиш, имеется, также, встроенный загрузчик CP/M-80.
2. Кворум 128
Имеет все возможности Кворума-64 + расширенная память до 128кб, встроенные тесты, монитор, копировщик, загрузчик CP/M, а также, TR-DOS, в который можно выйти только при подключенном блоке дисковода.
3. Кворум 128+
Отличается от модели Кворум-128 тем, что имеет музыкальный сопроцессор и встроенный 3,5" дисковод, находящийся на правой боковой стенке компьютера.
Все три типа машин имеют встроенный драйвер для подключения EPSON-совместимых принтеров.
На данный момент я имею Кворум-128, и передо мной встал вопрос: какой мне приобретать блок дисковода: с 3.5" или с 5,25" дисководом? Такие блоки собирают на АО "Кворум". Неужели 5,25" диски отходят в прошлое, и их в недалеком будущем не будет?
Какова же перспектива 3,5" дисководов?
ИФК: автор письма затронул довольно существенную проблему, о которой настала пора поговорить всерьез. Действительно, все мы вроде бы привыкли к дисководам 5,25" двойной плотности (2S/2D) и не замечаем, что давно уже в мире об этой экзотике забыли.
Чем же нам так дорог этот дисковод при всех его очевидных технических недостатках? Здесь, видимо, основную роль играют 2 фактора: стоимость и традиция. Под стоимостью понимается не только цена самого дисковода, но и стоимость дискет. Разумеется, стоимость дисковода 3,5" высокой плотности (1,44 МБ) существенно выше, но более высокие технические параметры с лихвой окупают дополнительные расходы, да и более надежное хранение программ на высококачественных дискетах, не променять ни на какую экономию.
Более серьезным является вопрос традиции, т.к., в основном, все компьютеры оснащены именно дисководами 5,25". Соответственно, все программы, их коллекции, архивы записаны на этих дискетах. На них же ведется и информационный обмен.
Так вот, существующий парк компьютеров не позволит в ближайшем будущем перейти на новые, более прогрессивные дисководы.
Можно было бы ещё довольно долго мириться с этим положением, но есть одна очень реальная опасность. Она заключается в постепенном прекращении выпуска дисководов 5,25" двойной плотности. Изготовители компьютеров уже зачастую сталкиваются с этой проблемой. Когда с ней начнут сталкиваться пользователи, желающие заменить вышедший из строя дисковод, острота проблемы может значительно усилиться.
Поэтому, как нам кажется, настала пора обсудить на страницах ZX РЕВЮ эту проблему. Здесь могут быть рассмотрены как технические, так и "политические" её аспекты.
Как бы там ни было, дисководы 5,25" еще очень долго будут в эксплуатации, но думать об их замене надо, и начать мы бы рекомендовали с установки себе ВТОРОГО дисковода 3,5" (HD).
Мы специально не затрагиваем вопрос замены на дисководы 3,5" двойной плотности, т. к. это не решает проблемы ввиду их дефицитности и отсутствия соответствующих дискет в нужных количествах.
Будем рады Вашим откликам на эту тему, а первые заметки Вы прочитаете в этом номере в разделе "Читатель - читателю".
ВНИМАНИЕ ВСЕХ, КОГО ИНТЕРЕСУЕТ ПРИОБРЕТЕНИЕ ДИСКОВОДОВ 3,5", ЧИСТЫХ ДИСКЕТ и ДИСКЕТ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ
ПРОСИМ СООБЩИТЬ НАМ ОБ ЭТОМ. НАШ ПОЧТОВЫЙ АДРЕС: 121019, МОСКВА, А/Я 16, ТОО «ФОРМАК»
У меня на окне на память лежит большая стопка пятидюймовых дискет от компьютера, который мне подарили родители в три года, и с которого я смог перелезть на 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 можно скачать здесь.
Страницу
Порты компьютеров Кворум.
Я, конечно, не уверен до конца, так как ни одного Кворума вживую не видел. Но по имеющейся информации разлчия между Кворум 64, 128 и 128+ следующие:
Кворум-64 - это обычный ZX-48, плюс теневые 16К ОЗУ, плюс контроллер дисковода, что все вместе позволяет работать, кроме TR-DOS еще и в CP/M.
Кворум-128 - совместим с ZX-128, но позволяющий включать вместо ПЗУ 0-ую страницу ОЗУ и перемещать в другое место экранную область. Однако не имеет музпроцессора.
Кворум-128+ - тоже, что и Кворум-128, но добавлен музпроцессор и расширенные экранные режимы.
Хотя при адресации портов используется неполная дешифрация адреса, рекомендуется использовать указанные ниже адреса устройств при разработке своих программ.
Порт управления памятью.
Адрес = 00H (A7,A4,A0,/IORQ = 0)
D0 - F_RAM
управление фоновой страницей ОЗУ
0 - включено ПЗУ
1 - включена 0-ая страница ОЗУ
D1 - UP_S (только для Кворум 64 с дисководом)
0 - нижняя страница (4000H.. 5AFFH)
1 - верхняя страница (0C000H..0DAFFH)
D2 - EX_ROM (только для Кворум 128, в "128+" нет)
управление расширенным ПЗУ (до 32 Кбайт)
0 - включено основное ПЗУ
1 - включено дополнительное ПЗУ
D3 - резерв
D4 - резерв
D5 - B_ROM (в Кворум 64 не используется)
разрешение BASIC-страницы ПЗУ
0 - включена дополнительная страница ПЗУ
1 - включена BASIC-страница ПЗУ
D6 - BLK_WR (для Кворум 64 требуется доработка)
блокировка записи в фоновое ОЗУ
0 - запись в адреса с 0000..3FFFH разрешена
1 - запись заблокирована, только чтение
D7 - TR_DOS
разрешение работы TRDOS из ПЗУ
0 - TRDOS работает из фонового ОЗУ
1 - разрешена работа из ПЗУ
Порт Sрectrum 128.
Адрес 7FFDH (A15,A1,/IORQ = 0; A3,A4 = 1)
Назначение разрядов порта (только запись):
D0 - \ NP_RAM
D1 - - номер страницы ОЗУ, отображаемой на адреса
D2 - / с 0C000H до 0FFFFH
D3 - SCR_P (для Кворум 128, 128+ в режиме BASIC)
переключатель страниц видео-ОЗУ
0 - нижняя страница (4000H.. в ОЗУ-5)
1 - верхняя страница (0C000H.. в ОЗУ-7)
D4 - B_PAG
управление страницами BASIC-ПЗУ
0 - BASIC-128
1 - BASIC-48
D5 - BLK_P
блокировка записи в порт SP_128
0 - запись разрешена
1 - запись заблокирована (снятие по сбросу)
D6 - EX_RAM (только для Кворум 256)
0 - основное ОЗУ
1 - дополнительный блок на 128 Кбайт
D7 - E2_RAM (только для Кворум 512)
Порт CP/M.
Адрес 80FDH (A13,A1,/IORQ = 0; A15,A4,A3 = 1)
Этот порт реализован в ULA, используемом в
Кворум 128 и Кворум 128+. Запись в него разрешена
только в случае первого обращения к нему после
начального сброса.
Назначение разрядов порта (только запись):
D0 - \ NP_SCR
D1 - - переключатель адреса начала видео-ОЗУ
D2 - / (только в Кворум 128, 128+ в режиме CP/M)
000 - 4000H
001 - 6000H
010 - 8000H
011 - 0A000H
100 - 0C000H
101 - 0E000H
110 - 0000H
111 - 2000H
D3 - \
D4 - \
D5 - - не используются
D6 - /
D7 - EN_RAM
разрешение работы с фоновым ОЗУ
0 - запрет работы с фоновым ОЗУ
1 - в фоновое ОЗУ разрешена запись
Порты клавиатуры.
Основной порт:
Адрес 0FEH (A0,/IORQ = 0; A7,A4,A3 = 1)
D0 - \
D1 - \
D3 - /
D4 - /
D5 - не используется (всегда 1)
D6 - разряд чтения с магнитофона
D7 - не используется (всегда 1)
Назначение разрядов порта (запись):
D0 - \
D1 - - код цвета бордюра
D2 - /
D3 - разряд записи на магнитофон
D4 - разряд управления звуком
D5 - не используется
D6 - не используется
D7 - не используется
Дополнительный порт:
Адрес 7EH (A7,A0,/IORQ = 0; A4,A3 = 1)
Назначение разрядов порта (чтение):
D0 - \
D1 - \
D2 - - разряды сканирования клавиатуры
D3 - /
D4 - /
D5 - /
D6 - не используется (всегда 1)
D7 - не используется (всегда 1)
Порты контроллера дисковода.
Порт состояния/команд ВГ93:
Адрес 80H (A4,A3,A2,A1,A0,/IORQ = 0; A7 = 1)
Порт номера текущей дорожки ВГ93:
Адрес 81H (A4,A3,A2,A1,/IORQ = 0; A7,A0 = 1)
Порт номера сектора ВГ93:
Адрес 82H (A4,A3,A2,A0,/IORQ = 0; A7,A1 = 1)
Порт данных ВГ93:
Адрес 83H (A4,A3,A2,/IORQ = 0; A7,A1,A0 = 1)
Порт управления дисководом:
Адрес 85H (A4,A3,/IORQ = 0; A7,A2 = 1)
Назначение разрядов порта:
D0 - SEL_0
1 - выборка устройства A:
D1 - SEL_1
1 - выборка устройства B:
D2 - резерв SEL_2
1 - выборка устройства C:
D3 - резерв SEL_3
1 - выборка устройства D:
D4 - SIDE
0 - верхняя головка дисковода
1 - нижняя головка дисковода
D5 - MOTOR
1 - включить привод дисковода
D6 - резерв
D7 - резерв
Порт Кэмпстон-джойстика.
Адрес 1FH (A7,/IORQ = 0; A4,A3,A0 = 1)
Назначение разрядов порта (только чтение):
D0..D4 - разряды джойстика
(при не подключенном джойстике всегда = 0)
D5 - не используется (всегда 0)
D6 - не используется (всегда 0)
D7 - разряд готовности принтера
(при не подключенном принтере всегда = 0)
Порты принтера.
Порт данных:
Адрес 0FBH (A2,/IORQ = 0; A7,A4,A3,A0 = 1)
Запись в этот порт устанавливает линию "Строб" в 1.
Назначение разрядов (только на запись):
D0..D7 - байт данных, пересылаемый в принтер
Порт формирователя строба:
Адрес 7BH (A7,A2,/IORQ = 0; A4,A3,A0 = 1)
Запись в этот порт устанавливает линию "Строб" в 0.
Порт готовности принтера:
Адрес 1BH (A7,/IORQ = 0; A4,A3,A0 = 1)
Назначение разрядов (только чтение):
D0..D6 - не используются (всегда 0)
D7 - линия готовности принтера
0 - принтер готов
1 - принтер занят
Порты музыкального сопроцессора.
Порт адресации регистров AY-3-8910/12:
Адрес 0FFFDH (A1,/IORQ =0; A15,A14,A13,A4,/M1 =1)
Порт данных:
Адрес 0BFFDH (A14,A1,/IORQ =0; A15,A13,A4,/M1 =1)