Рассказ про процесс оживления и запуска в эмуляторе еще одной легендарной системы, существовавшей еще до моего рождения и никогда официально не поставлявшейся в СССР. В качестве бонуса будет компилятор Pascal из далеких 70х.
![Знакомьтесь: PERQ, первая коммерческая рабочая станция с графическим интерфейсом. Была создана, продавалась и работала когда меня еще на свете не было. Знакомьтесь: PERQ, первая коммерческая рабочая станция с графическим интерфейсом. Была создана, продавалась и работала когда меня еще на свете не было.](https://habrastorage.org/getpro/habr/upload_files/97d/c68/98e/97dc6898e29db821031150b086f118eb.jpeg)
История
Начнем с небольшого экскурса в историю:
PERQ (также известный как Three Rivers PERQ или ICL PERQ) — компьютерная рабочая станция, выпускавшаяся в начале 1980-х годов.
Рабочая станция была задумана пятью выпускниками и работниками Университета Карнеги-Мэлона, организовавшими в 1974 году компанию Three Rivers Computer Corporation (3RCC). Один из основателей, Брайан Розен, также работал в Xerox PARC над рабочей станцией Dolphin. Проект PERQ был вдохновлен оригинальной рабочей станцией Xerox Alto, и был первой коммерчески выпускаемой персональной рабочей станцией. Прототип был показан на конференции SIGGRAPH в 1979 году. Название «PERQ» происходит от слова «perquisite» (рус. приработок, дополнительный доход).[1]
Разумеется большой интерес вызывает прежде всего аппаратная часть:
Центральный процессор PERQ был реализован в виде микропрограммируемой дискретной логики, а не микропроцессора. В его основе были раздельные АЛУ 74181 и контроллер адреса Am2910. Процессор PERQ был необычен тем, что имел 20-битные регистры и перезаписываемое хранилище управляющей программы (WCS), что позволяло изменять микропрограмму.[3] Центральный процессор имел цикл выполнения микрокоманд в 170 нс (5,88 МГц).[4]
В СССР такие системы не поставлялись, поэтому увидеть вживую всю эту красоту ни вы ни ваши родители скорее всего не имели возможности.
Небольшое видео тех лет с демонстрацией рабочей станции и ее интерфейса:
А вот так выглядит эмулятор Perq в современном окружении:
![Да это снова FreeBSD и C#. Да это снова FreeBSD и C#.](https://habrastorage.org/getpro/habr/upload_files/2ac/bdd/4e5/2acbdd4e5b82beb5e396107cfbf1f8dd.png)
Для сравнения редкое цветное фото этой рабочей станции в жизни:
![](https://habrastorage.org/getpro/habr/upload_files/48e/ef3/754/48eef3754978bd09149179eaf121a400.jpeg)
И в рекламе тех лет:
![](https://habrastorage.org/getpro/habr/upload_files/68e/1b5/fcc/68e1b5fcce8f20fed67f507244d1c688.jpeg)
Эмулятор
Все началось с того, что я случайно наткнулся на статью об этой удивительной системе, в которой обнаружилось совсем уж невероятное:
Just when I was thinking there was no hope of me ever seeing the Perq software in action, Josh Dersch has created a Perq emulator! Give this guy a medal!
Один из бывших пользователей смог реализовать полноценный эмулятор для столь уникальной системы из 70х!
Правда с битой ссылкой на скачивание и уже немного заброшенный, но это было хоть что-то, от чего можно отталкиваться. Дальнейший поиск вывел на github автора, откуда и был выгружен оригинальный исходный код.
Эмулятор написан на C# под старую 3.5 версию .NET Framework, но еще собирается под современными версиями Windows.
В случае с Linux все не так просто:
хоть у эмулятора и была поддержка сборки с помощью Mono, но активная разработка самого Mono прекращена а его сборки постепенно пропадают из дистрибутивов.
Вместо Mono ныне продвигается .NET Core, разрабатываемый уже самой Microsoft с официальной поддержкой ключевых дистрибутивов Linux и MacOS (помимо Windows).
К большому сожалению .NET Core сильно отличается от предыдущих верcий и имеет проблемы с совместимостью — говоря официально словами самой Microsoft:
ваш проект необходимо портировать с «.NET Framework» на «.NET Core» для нормальной работы и дальнейшего развития.
Так что я взял на себя смелость портировать проект эмулятора на «.NET Core 7», который ныне вполне неплохо собирается и работает даже под FreeBSD — вот до чего прогресс дошел!
Процесс портирования был не особо сложным, но поскольку проект очень специфический — описание процесса портирования вряд ли вызовут интерес у широкой публики, поэтому эту часть я описывать не стал.
Все шаги хоть и производились на FreeBSD, но повторимы под любым линуксом, MacOS и даже Windows.
Сборка
Забираем исходный код из репозитория на Github:
git clone https://github.com/alex0x08/PERQemu.git
Затем устанавливаем пакеты с помощью nuget:
cd /opt/src/PERQemu
/opt/app/dotnet/dotnet restore
.NET Core развернут в каталоге /opt/app/dotnet, второй dotnet в пути — непосредственно исполняемый файл, которым запускается как сам эмулятор так и его сборка.
Если все прошло успешно, в самом конце появится сообщение «All projects are up-to-date for restore»:
![](https://habrastorage.org/getpro/habr/upload_files/36c/4d3/629/36c4d3629c5c8305ff6d57c72a46c845.png)
Теперь запускаем сборку эмулятора:
/opt/app/dotnet/dotnet build
Если сборка прошла удачно, в конце должно быть сообщение «0 Error (s)»:
![](https://habrastorage.org/getpro/habr/upload_files/352/fa0/be1/352fa0be1ffbc7dd69143fba66eb4c3e.png)
В каталоге «bin/Debug/net7.0/PERQemu» будет собранный и готовый к использованию эмулятор.
Запуск
Запуск осуществляется следующим образом:
alex@albuquerque:/opt/src/PERQemu/PERQemu % /opt/app/dotnet/dotnet run bin/Debug/net7.0/PERQemu
Запускать необходимо из каталога с проектом эмулятора, указав относительный путь до собранного выше бинарника.
Результат запуска вас немного удивит:
![](https://habrastorage.org/getpro/habr/upload_files/8ea/326/b10/8ea326b108437ab62d4b9b055c0cc546.png)
Эмулятор выдает такие эффекты и в оригинальной версии, так что я оставил их как есть — для истории. Помимо окна со спецэффектами, появится интерактивный шелл, в котором надо вводить команды управления эмулятором.
Первым делом необходимо загрузить образ диска, вводим:
load harddisk Disks/f1.phd
Затем необходимо запустить эмуляцию:
go
Начнется загрузка и вместо спецэффектов появится первый в мире коммерческий графический интерфейс.
С мышкой.
Вот так выглядит весь процесс запуска эмулятора PERQ записанный на видео:
Разумеется не мог не поделиться с читателями как выглядит самый стильный процесс компиляции из всех что я видел:
![](https://habrastorage.org/getpro/habr/upload_files/36d/6b9/5fc/36d6b95fc8dfdcb4ba43ea522708ce7e.png)
Вот весь процесс, записанный на видео и сохраненный для потомков:
Причем в качестве основного языка разработки в Perq выступает Pascal:
Изначальная система команд PERQ похожая на p-Code (называемая Q-Code) была оптимизирована под Паскаль (особенно, расширенный PERQ Pascal). Команды Q-Code могли выполняться со скоростью до 1 млн команд в секунду.[12] Это породило альтернативную расшифровку названия PERQ: Pascal Evaluation Real Quick (по-настоящему быстрое выполнение Паскаля).
Мне удалось найти руководство по разработке от 1984го года для этой редкой системы, в которой в том числе были примеры исходного кода, удивительно похожие на мой школьный Turbo Pascal начала 90х:
![](https://habrastorage.org/getpro/habr/upload_files/bc3/2cf/3fb/bc32cf3fbe66ae1e9dc241de7ce641be.png)
А как вам например такое:
![](https://habrastorage.org/getpro/habr/upload_files/cff/55e/e1b/cff55ee1be068289624d2d33b659b06f.png)
RS232 (тот самый «COM‑порт» для пользователей) оказывается имеет очень долгую историю применения — документ выше был напечатан за 20 лет до моих школьных лет, когда мы использовали RS232 и соединение по «нуль модему» для игры в Doom на школьных компьютерах.
Словом, в очередной раз убеждаюсь что у всех известных, очевидных и популярных вещей в ИТ есть долгая и непростая история, про которую мало кто из простых пользователей догадывается.
Если вдруг кто‑то из читателей сталкивался с такими машинами — отзовитесь, очень интересует ваш опыт, без которого с эмулируемой системой можно сделать не очень много.
Это немного отцезурированная и доработанная версия статьи, оригинал которой публиковался на ЛОРе и доступен в нашем блоге.
0x08 Software
Мы небольшая команда ветеранов ИТ‑индустрии, создаем и дорабатываем самое разнообразное программное обеспечение, наш софт автоматизирует бизнес‑процессы на трех континентах, в самых разных отраслях и условиях.
Оживляем давно умершее, чиним никогда не работавшее и создаем невозможное — затем рассказываем об этом в своих статьях.